@yali-engine/render 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/bvh.d.ts +66 -0
  2. package/dist/bvh.js +493 -0
  3. package/dist/bvh.js.map +1 -0
  4. package/dist/camera.d.ts +34 -0
  5. package/dist/camera.js +66 -0
  6. package/dist/camera.js.map +1 -0
  7. package/dist/cluster-build.d.ts +46 -0
  8. package/dist/cluster-build.js +179 -0
  9. package/dist/cluster-build.js.map +1 -0
  10. package/dist/cluster-pages.d.ts +70 -0
  11. package/dist/cluster-pages.js +203 -0
  12. package/dist/cluster-pages.js.map +1 -0
  13. package/dist/cluster-stream.d.ts +83 -0
  14. package/dist/cluster-stream.js +226 -0
  15. package/dist/cluster-stream.js.map +1 -0
  16. package/dist/culled-draws.d.ts +30 -0
  17. package/dist/culled-draws.js +103 -0
  18. package/dist/culled-draws.js.map +1 -0
  19. package/dist/debug-lines.d.ts +51 -0
  20. package/dist/debug-lines.js +158 -0
  21. package/dist/debug-lines.js.map +1 -0
  22. package/dist/device-profile.d.ts +100 -0
  23. package/dist/device-profile.js +131 -0
  24. package/dist/device-profile.js.map +1 -0
  25. package/dist/device.d.ts +39 -0
  26. package/dist/device.js +79 -0
  27. package/dist/device.js.map +1 -0
  28. package/dist/environment.d.ts +60 -0
  29. package/dist/environment.js +204 -0
  30. package/dist/environment.js.map +1 -0
  31. package/dist/extract.d.ts +74 -0
  32. package/dist/extract.js +194 -0
  33. package/dist/extract.js.map +1 -0
  34. package/dist/frame-graph.d.ts +112 -0
  35. package/dist/frame-graph.js +226 -0
  36. package/dist/frame-graph.js.map +1 -0
  37. package/dist/gpu-health.d.ts +74 -0
  38. package/dist/gpu-health.js +106 -0
  39. package/dist/gpu-health.js.map +1 -0
  40. package/dist/gpu-timer.d.ts +26 -0
  41. package/dist/gpu-timer.js +93 -0
  42. package/dist/gpu-timer.js.map +1 -0
  43. package/dist/headless.d.ts +28 -0
  44. package/dist/headless.js +91 -0
  45. package/dist/headless.js.map +1 -0
  46. package/dist/index.d.ts +34 -0
  47. package/dist/index.js +36 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/lights.d.ts +81 -0
  50. package/dist/lights.js +247 -0
  51. package/dist/lights.js.map +1 -0
  52. package/dist/matrix.d.ts +6 -0
  53. package/dist/matrix.js +59 -0
  54. package/dist/matrix.js.map +1 -0
  55. package/dist/meshes.d.ts +411 -0
  56. package/dist/meshes.js +545 -0
  57. package/dist/meshes.js.map +1 -0
  58. package/dist/meshlets-decoder.d.ts +20 -0
  59. package/dist/meshlets-decoder.js +47 -0
  60. package/dist/meshlets-decoder.js.map +1 -0
  61. package/dist/meshlets.d.ts +186 -0
  62. package/dist/meshlets.js +1040 -0
  63. package/dist/meshlets.js.map +1 -0
  64. package/dist/occlusion.d.ts +51 -0
  65. package/dist/occlusion.js +188 -0
  66. package/dist/occlusion.js.map +1 -0
  67. package/dist/pick-decoder.d.ts +19 -0
  68. package/dist/pick-decoder.js +45 -0
  69. package/dist/pick-decoder.js.map +1 -0
  70. package/dist/pick.d.ts +86 -0
  71. package/dist/pick.js +452 -0
  72. package/dist/pick.js.map +1 -0
  73. package/dist/pipeline-cache.d.ts +53 -0
  74. package/dist/pipeline-cache.js +96 -0
  75. package/dist/pipeline-cache.js.map +1 -0
  76. package/dist/post-options.d.ts +109 -0
  77. package/dist/post-options.js +23 -0
  78. package/dist/post-options.js.map +1 -0
  79. package/dist/post-shaders.gen.d.ts +40 -0
  80. package/dist/post-shaders.gen.js +43 -0
  81. package/dist/post-shaders.gen.js.map +1 -0
  82. package/dist/post.d.ts +101 -0
  83. package/dist/post.js +555 -0
  84. package/dist/post.js.map +1 -0
  85. package/dist/render-plugin.d.ts +239 -0
  86. package/dist/render-plugin.js +633 -0
  87. package/dist/render-plugin.js.map +1 -0
  88. package/dist/scene.d.ts +406 -0
  89. package/dist/scene.js +2005 -0
  90. package/dist/scene.js.map +1 -0
  91. package/dist/shaders.gen.d.ts +40 -0
  92. package/dist/shaders.gen.js +43 -0
  93. package/dist/shaders.gen.js.map +1 -0
  94. package/dist/shadows.d.ts +104 -0
  95. package/dist/shadows.js +227 -0
  96. package/dist/shadows.js.map +1 -0
  97. package/dist/staging-ring.d.ts +41 -0
  98. package/dist/staging-ring.js +125 -0
  99. package/dist/staging-ring.js.map +1 -0
  100. package/dist/textures.d.ts +165 -0
  101. package/dist/textures.js +361 -0
  102. package/dist/textures.js.map +1 -0
  103. package/dist/tonemap.d.ts +45 -0
  104. package/dist/tonemap.js +141 -0
  105. package/dist/tonemap.js.map +1 -0
  106. package/dist/viewport.d.ts +78 -0
  107. package/dist/viewport.js +130 -0
  108. package/dist/viewport.js.map +1 -0
  109. package/dist/webgl2/plugin.d.ts +40 -0
  110. package/dist/webgl2/plugin.js +190 -0
  111. package/dist/webgl2/plugin.js.map +1 -0
  112. package/dist/webgl2/program.d.ts +27 -0
  113. package/dist/webgl2/program.js +74 -0
  114. package/dist/webgl2/program.js.map +1 -0
  115. package/dist/webgl2/renderer.d.ts +128 -0
  116. package/dist/webgl2/renderer.js +976 -0
  117. package/dist/webgl2/renderer.js.map +1 -0
  118. package/dist/webgl2/shaders.glsl.gen.d.ts +27 -0
  119. package/dist/webgl2/shaders.glsl.gen.js +20 -0
  120. package/dist/webgl2/shaders.glsl.gen.js.map +1 -0
  121. package/dist/webgl2/textures.d.ts +11 -0
  122. package/dist/webgl2/textures.js +82 -0
  123. package/dist/webgl2/textures.js.map +1 -0
  124. package/dist/webgl2/webgl2.d.ts +1 -0
  125. package/dist/webgl2/webgl2.js +4 -0
  126. package/dist/webgl2/webgl2.js.map +1 -0
  127. package/dist/worker-mode.d.ts +85 -0
  128. package/dist/worker-mode.js +204 -0
  129. package/dist/worker-mode.js.map +1 -0
  130. package/package.json +47 -3
  131. package/README.md +0 -3
package/dist/bvh.d.ts ADDED
@@ -0,0 +1,66 @@
1
+ /** A mesh's triangle hierarchy: flat typed arrays, children allocated in pairs. */
2
+ export interface MeshBvh {
3
+ /** Per node: min x, y, z, max x, y, z (rounded outwards from the f64 bounds). */
4
+ readonly bounds: Float32Array;
5
+ /**
6
+ * Per node, two words: a leaf's first entry in `order` and its triangle count; an interior node's
7
+ * left child (the right is the next node) and 0.
8
+ */
9
+ readonly links: Uint32Array;
10
+ /** Triangle indices (into the mesh's triangle list) in leaf order. */
11
+ readonly order: Uint32Array;
12
+ /** Nodes in use (node 0 is the root; a child's index is above its parent's). */
13
+ readonly nodes: number;
14
+ }
15
+ /** A ray hit on a mesh's triangles: distance, the triangle's index, its unnormalized normal. */
16
+ export interface TriangleHit {
17
+ t: number;
18
+ triangle: number;
19
+ normal: [number, number, number];
20
+ }
21
+ /**
22
+ * Builds a mesh's hierarchy (binned SAH along the longest centroid axis, 12 bins, leaves of ≤ 4 triangles): `positions` holds x, y, z at
23
+ * each vertex's start, `stride` floats apart (8 for the mesh pool's interleaved vertices, 3 for posed
24
+ * positions).
25
+ */
26
+ export declare function buildBvh(positions: Float32Array, stride: number, indices: Uint32Array): MeshBvh;
27
+ /**
28
+ * A hierarchy over boxes (min x, y, z, max x, y, z each): `order` then lists box indices (ADR-0123,
29
+ * the picker's instances). The same build as `buildBvh`'s (binned SAH, leaves of ≤ 4).
30
+ */
31
+ export declare function buildBoxBvh(tb: Float64Array): MeshBvh;
32
+ /**
33
+ * Refits `bvh` to moved vertices (a skinned mesh's posed positions): the same tree, each node's bounds
34
+ * recomputed from its triangles or its children (children sit above their parent, so one backwards pass).
35
+ */
36
+ export declare function refitBvh(bvh: MeshBvh, positions: Float32Array, stride: number, indices: Uint32Array): void;
37
+ /**
38
+ * Refits a `buildBoxBvh` hierarchy to moved boxes (the same items, in the same places in `tb`): each node's
39
+ * bounds from its boxes or its children, one backwards pass. Any change of the boxes stays correct; only
40
+ * the tree's quality falls as they wander.
41
+ */
42
+ export declare function refitBoxBvh(bvh: MeshBvh, tb: Float64Array): void;
43
+ /** A `buildBoxBvh` tree's way up, for partial refits: each node's parent (the root's is itself) and each box's leaf. */
44
+ export interface BoxBvhParents {
45
+ readonly parent: Uint32Array;
46
+ readonly leafOf: Uint32Array;
47
+ }
48
+ /** `bvh`'s parents and each box's leaf (once per tree). */
49
+ export declare function boxParents(bvh: MeshBvh): BoxBvhParents;
50
+ /**
51
+ * Refits only the leaves holding boxes `items[0 .. n)` and their ancestors (ADR-0123): the same
52
+ * bounds `refitBoxBvh` gives for those, at a cost that follows how many moved, not the tree.
53
+ */
54
+ export declare function refitBoxes(bvh: MeshBvh, tb: Float64Array, up: BoxBvhParents, items: ArrayLike<number>, n: number): void;
55
+ /**
56
+ * Every box of a `buildBoxBvh` hierarchy the ray (`o`, `d`) enters before `max`: `visit(box)` per leaf
57
+ * entry, in no particular order. For a broad phase (ADR-0123).
58
+ */
59
+ export declare function walkBoxes(bvh: MeshBvh, o: readonly number[], d: readonly number[], max: number, visit: (box: number) => void): void;
60
+ /**
61
+ * The nearest triangle the ray (`o`, `d`, mesh space) hits before `max`, walking `bvh` near child first
62
+ * (both faces, Möller–Trumbore). Positions as `buildBvh` takes them.
63
+ */
64
+ export declare function intersectBvh(bvh: MeshBvh, positions: Float32Array, stride: number, indices: Uint32Array, o: readonly number[], d: readonly number[], max: number): TriangleHit | null;
65
+ /** Every triangle, in order (the brute-force walk `intersectBvh` replaces; small meshes keep it). */
66
+ export declare function intersectAll(positions: Float32Array, stride: number, indices: Uint32Array, o: readonly number[], d: readonly number[], max: number): TriangleHit | null;
package/dist/bvh.js ADDED
@@ -0,0 +1,493 @@
1
+ // A bounding volume hierarchy over one mesh's triangles, in mesh space (ADR-0114): picking walks it
2
+ // instead of testing every triangle. Pure (positions in, typed arrays out), so Node tests it and
3
+ // `bench/pick` times it.
4
+ const BINS = 12;
5
+ /** A node with this many triangles or fewer is a leaf. */
6
+ const LEAF = 4;
7
+ /** The traversal stack, grown (rarely) when a deep tree needs more. */
8
+ let stack = new Uint32Array(64);
9
+ function push(top, node) {
10
+ if (top === stack.length) {
11
+ const s = new Uint32Array(stack.length * 2);
12
+ s.set(stack);
13
+ stack = s;
14
+ }
15
+ stack[top] = node;
16
+ return top + 1;
17
+ }
18
+ /** `x` rounded down (`dir` −1) or up (+1) to an f32 that bounds it. */
19
+ function outward(x, dir) {
20
+ const f = Math.fround(x);
21
+ if (dir < 0 ? f <= x : f >= x)
22
+ return f;
23
+ // One f32 step outwards: the relative step of f32 is 2^-23.
24
+ return Math.fround(f + dir * Math.max(Math.abs(f) * 1.2e-7, 1e-30));
25
+ }
26
+ /**
27
+ * Builds a mesh's hierarchy (binned SAH along the longest centroid axis, 12 bins, leaves of ≤ 4 triangles): `positions` holds x, y, z at
28
+ * each vertex's start, `stride` floats apart (8 for the mesh pool's interleaved vertices, 3 for posed
29
+ * positions).
30
+ */
31
+ export function buildBvh(positions, stride, indices) {
32
+ const n = Math.floor(indices.length / 3);
33
+ // Each triangle's bounds, once.
34
+ const tb = new Float64Array(n * 6);
35
+ for (let t = 0; t < n; t++) {
36
+ const a = indices[t * 3] * stride;
37
+ const b = indices[t * 3 + 1] * stride;
38
+ const c = indices[t * 3 + 2] * stride;
39
+ for (let k = 0; k < 3; k++) {
40
+ tb[t * 6 + k] = Math.min(positions[a + k], positions[b + k], positions[c + k]);
41
+ tb[t * 6 + 3 + k] = Math.max(positions[a + k], positions[b + k], positions[c + k]);
42
+ }
43
+ }
44
+ return buildBoxBvh(tb);
45
+ }
46
+ /**
47
+ * A hierarchy over boxes (min x, y, z, max x, y, z each): `order` then lists box indices (ADR-0123,
48
+ * the picker's instances). The same build as `buildBvh`'s (binned SAH, leaves of ≤ 4).
49
+ */
50
+ export function buildBoxBvh(tb) {
51
+ const n = Math.floor(tb.length / 6);
52
+ const cap = Math.max(1, 2 * n - 1);
53
+ const bounds = new Float32Array(cap * 6);
54
+ const links = new Uint32Array(cap * 2);
55
+ const order = new Uint32Array(n);
56
+ const cen = new Float64Array(n * 3);
57
+ for (let t = 0; t < n; t++) {
58
+ order[t] = t;
59
+ for (let k = 0; k < 3; k++)
60
+ cen[t * 3 + k] = (tb[t * 6 + k] + tb[t * 6 + 3 + k]) / 2;
61
+ }
62
+ const binCount = new Uint32Array(BINS);
63
+ const binBox = new Float64Array(BINS * 6);
64
+ const leftArea = new Float64Array(BINS);
65
+ const leftCount = new Uint32Array(BINS);
66
+ const box = new Float64Array(6);
67
+ let nodes = 1;
68
+ // Work list: node index, first, count.
69
+ const work = [0, 0, n];
70
+ while (work.length > 0) {
71
+ const count = work.pop();
72
+ const first = work.pop();
73
+ const node = work.pop();
74
+ // The node's bounds and its centroids' bounds.
75
+ box.fill(Number.POSITIVE_INFINITY, 0, 3).fill(Number.NEGATIVE_INFINITY, 3, 6);
76
+ let cminx = Infinity, cminy = Infinity, cminz = Infinity, cmaxx = -Infinity, cmaxy = -Infinity, cmaxz = -Infinity;
77
+ for (let i = first; i < first + count; i++) {
78
+ const t = order[i];
79
+ for (let k = 0; k < 3; k++) {
80
+ if (tb[t * 6 + k] < box[k])
81
+ box[k] = tb[t * 6 + k];
82
+ if (tb[t * 6 + 3 + k] > box[3 + k])
83
+ box[3 + k] = tb[t * 6 + 3 + k];
84
+ }
85
+ const x = cen[t * 3], y = cen[t * 3 + 1], z = cen[t * 3 + 2];
86
+ if (x < cminx)
87
+ cminx = x;
88
+ if (y < cminy)
89
+ cminy = y;
90
+ if (z < cminz)
91
+ cminz = z;
92
+ if (x > cmaxx)
93
+ cmaxx = x;
94
+ if (y > cmaxy)
95
+ cmaxy = y;
96
+ if (z > cmaxz)
97
+ cmaxz = z;
98
+ }
99
+ for (let k = 0; k < 3; k++) {
100
+ bounds[node * 6 + k] = outward(box[k], -1);
101
+ bounds[node * 6 + 3 + k] = outward(box[3 + k], 1);
102
+ }
103
+ if (count <= LEAF) {
104
+ links[node * 2] = first;
105
+ links[node * 2 + 1] = count;
106
+ continue;
107
+ }
108
+ // The cheapest binned split over the three axes (surface area heuristic).
109
+ const cmin = [cminx, cminy, cminz];
110
+ const extent = [cmaxx - cminx, cmaxy - cminy, cmaxz - cminz];
111
+ let bestCost = Infinity;
112
+ let bestAxis = -1;
113
+ let bestSplit = 0;
114
+ // Binned along the centroids' longest axis only: a third of the work for nearly the same tree.
115
+ const longest = extent[0] >= extent[1] && extent[0] >= extent[2] ? 0 : extent[1] >= extent[2] ? 1 : 2;
116
+ for (let axis = longest; axis === longest; axis++) {
117
+ if (!(extent[axis] > 0))
118
+ continue;
119
+ const scale = BINS / extent[axis];
120
+ binCount.fill(0);
121
+ for (let b = 0; b < BINS; b++)
122
+ binBox.fill(Infinity, b * 6, b * 6 + 3).fill(-Infinity, b * 6 + 3, b * 6 + 6);
123
+ for (let i = first; i < first + count; i++) {
124
+ const t = order[i];
125
+ const b = Math.min(BINS - 1, Math.floor((cen[t * 3 + axis] - cmin[axis]) * scale));
126
+ binCount[b]++;
127
+ for (let k = 0; k < 3; k++) {
128
+ if (tb[t * 6 + k] < binBox[b * 6 + k])
129
+ binBox[b * 6 + k] = tb[t * 6 + k];
130
+ if (tb[t * 6 + 3 + k] > binBox[b * 6 + 3 + k])
131
+ binBox[b * 6 + 3 + k] = tb[t * 6 + 3 + k];
132
+ }
133
+ }
134
+ // Sweep from the left (areas and counts of bins [0, s]), then from the right.
135
+ let lx0 = Infinity, ly0 = Infinity, lz0 = Infinity, lx1 = -Infinity, ly1 = -Infinity, lz1 = -Infinity, lc = 0;
136
+ for (let b = 0; b < BINS - 1; b++) {
137
+ lc += binCount[b];
138
+ if (binCount[b] > 0) {
139
+ lx0 = Math.min(lx0, binBox[b * 6]);
140
+ ly0 = Math.min(ly0, binBox[b * 6 + 1]);
141
+ lz0 = Math.min(lz0, binBox[b * 6 + 2]);
142
+ lx1 = Math.max(lx1, binBox[b * 6 + 3]);
143
+ ly1 = Math.max(ly1, binBox[b * 6 + 4]);
144
+ lz1 = Math.max(lz1, binBox[b * 6 + 5]);
145
+ }
146
+ leftCount[b] = lc;
147
+ leftArea[b] = lc > 0 ? area(lx1 - lx0, ly1 - ly0, lz1 - lz0) : 0;
148
+ }
149
+ let rx0 = Infinity, ry0 = Infinity, rz0 = Infinity, rx1 = -Infinity, ry1 = -Infinity, rz1 = -Infinity, rc = 0;
150
+ for (let b = BINS - 1; b > 0; b--) {
151
+ rc += binCount[b];
152
+ if (binCount[b] > 0) {
153
+ rx0 = Math.min(rx0, binBox[b * 6]);
154
+ ry0 = Math.min(ry0, binBox[b * 6 + 1]);
155
+ rz0 = Math.min(rz0, binBox[b * 6 + 2]);
156
+ rx1 = Math.max(rx1, binBox[b * 6 + 3]);
157
+ ry1 = Math.max(ry1, binBox[b * 6 + 4]);
158
+ rz1 = Math.max(rz1, binBox[b * 6 + 5]);
159
+ }
160
+ const l = leftCount[b - 1];
161
+ if (l === 0 || rc === 0)
162
+ continue;
163
+ const cost = leftArea[b - 1] * l + (rc > 0 ? area(rx1 - rx0, ry1 - ry0, rz1 - rz0) : 0) * rc;
164
+ if (cost < bestCost) {
165
+ bestCost = cost;
166
+ bestAxis = axis;
167
+ bestSplit = b;
168
+ }
169
+ }
170
+ }
171
+ let mid = first;
172
+ if (bestAxis >= 0) {
173
+ const scale = BINS / extent[bestAxis];
174
+ let i = first;
175
+ let j = first + count - 1;
176
+ while (i <= j) {
177
+ const b = Math.min(BINS - 1, Math.floor((cen[order[i] * 3 + bestAxis] - cmin[bestAxis]) * scale));
178
+ if (b < bestSplit)
179
+ i++;
180
+ else {
181
+ const s = order[i];
182
+ order[i] = order[j];
183
+ order[j--] = s;
184
+ }
185
+ }
186
+ mid = i;
187
+ }
188
+ // Every centroid in one place (or a split that moved nothing): halve the range.
189
+ if (mid === first || mid === first + count)
190
+ mid = first + (count >> 1);
191
+ const left = nodes;
192
+ nodes += 2;
193
+ links[node * 2] = left;
194
+ links[node * 2 + 1] = 0;
195
+ work.push(left, first, mid - first, left + 1, mid, first + count - mid);
196
+ }
197
+ return { bounds, links, order, nodes };
198
+ }
199
+ function area(x, y, z) {
200
+ return x * y + y * z + z * x;
201
+ }
202
+ /**
203
+ * Refits `bvh` to moved vertices (a skinned mesh's posed positions): the same tree, each node's bounds
204
+ * recomputed from its triangles or its children (children sit above their parent, so one backwards pass).
205
+ */
206
+ export function refitBvh(bvh, positions, stride, indices) {
207
+ const { bounds, links, order } = bvh;
208
+ for (let node = bvh.nodes - 1; node >= 0; node--) {
209
+ const o = node * 6;
210
+ const count = links[node * 2 + 1];
211
+ if (count === 0) {
212
+ const l = links[node * 2] * 6;
213
+ const r = l + 6;
214
+ for (let k = 0; k < 3; k++) {
215
+ bounds[o + k] = Math.min(bounds[l + k], bounds[r + k]);
216
+ bounds[o + 3 + k] = Math.max(bounds[l + 3 + k], bounds[r + 3 + k]);
217
+ }
218
+ continue;
219
+ }
220
+ let x0 = Infinity, y0 = Infinity, z0 = Infinity, x1 = -Infinity, y1 = -Infinity, z1 = -Infinity;
221
+ const first = links[node * 2];
222
+ for (let i = first; i < first + count; i++) {
223
+ const t = order[i];
224
+ for (let c = 0; c < 3; c++) {
225
+ const v = indices[t * 3 + c] * stride;
226
+ const x = positions[v], y = positions[v + 1], z = positions[v + 2];
227
+ if (x < x0)
228
+ x0 = x;
229
+ if (y < y0)
230
+ y0 = y;
231
+ if (z < z0)
232
+ z0 = z;
233
+ if (x > x1)
234
+ x1 = x;
235
+ if (y > y1)
236
+ y1 = y;
237
+ if (z > z1)
238
+ z1 = z;
239
+ }
240
+ }
241
+ bounds[o] = outward(x0, -1);
242
+ bounds[o + 1] = outward(y0, -1);
243
+ bounds[o + 2] = outward(z0, -1);
244
+ bounds[o + 3] = outward(x1, 1);
245
+ bounds[o + 4] = outward(y1, 1);
246
+ bounds[o + 5] = outward(z1, 1);
247
+ }
248
+ }
249
+ /**
250
+ * Refits a `buildBoxBvh` hierarchy to moved boxes (the same items, in the same places in `tb`): each node's
251
+ * bounds from its boxes or its children, one backwards pass. Any change of the boxes stays correct; only
252
+ * the tree's quality falls as they wander.
253
+ */
254
+ export function refitBoxBvh(bvh, tb) {
255
+ const { bounds, links, order } = bvh;
256
+ for (let node = bvh.nodes - 1; node >= 0; node--) {
257
+ const o = node * 6;
258
+ const count = links[node * 2 + 1];
259
+ if (count === 0) {
260
+ const l = links[node * 2] * 6;
261
+ const r = l + 6;
262
+ for (let k = 0; k < 3; k++) {
263
+ bounds[o + k] = Math.min(bounds[l + k], bounds[r + k]);
264
+ bounds[o + 3 + k] = Math.max(bounds[l + 3 + k], bounds[r + 3 + k]);
265
+ }
266
+ continue;
267
+ }
268
+ const first = links[node * 2];
269
+ for (let k = 0; k < 3; k++) {
270
+ let lo = Infinity;
271
+ let hi = -Infinity;
272
+ for (let i = first; i < first + count; i++) {
273
+ const t = order[i];
274
+ if (tb[t * 6 + k] < lo)
275
+ lo = tb[t * 6 + k];
276
+ if (tb[t * 6 + 3 + k] > hi)
277
+ hi = tb[t * 6 + 3 + k];
278
+ }
279
+ bounds[o + k] = outward(lo, -1);
280
+ bounds[o + 3 + k] = outward(hi, 1);
281
+ }
282
+ }
283
+ }
284
+ /** `bvh`'s parents and each box's leaf (once per tree). */
285
+ export function boxParents(bvh) {
286
+ const { links, order } = bvh;
287
+ const parent = new Uint32Array(bvh.nodes);
288
+ const leafOf = new Uint32Array(order.length);
289
+ for (let node = 0; node < bvh.nodes; node++) {
290
+ const count = links[node * 2 + 1];
291
+ if (count === 0) {
292
+ parent[links[node * 2]] = node;
293
+ parent[links[node * 2] + 1] = node;
294
+ }
295
+ else {
296
+ for (let i = links[node * 2]; i < links[node * 2] + count; i++)
297
+ leafOf[order[i]] = node;
298
+ }
299
+ }
300
+ return { parent, leafOf };
301
+ }
302
+ /**
303
+ * Refits only the leaves holding boxes `items[0 .. n)` and their ancestors (ADR-0123): the same
304
+ * bounds `refitBoxBvh` gives for those, at a cost that follows how many moved, not the tree.
305
+ */
306
+ export function refitBoxes(bvh, tb, up, items, n) {
307
+ const { bounds, links, order } = bvh;
308
+ const touched = new Uint8Array(bvh.nodes);
309
+ const nodes = [];
310
+ for (let k = 0; k < n; k++) {
311
+ let node = up.leafOf[items[k]];
312
+ while (!touched[node]) {
313
+ touched[node] = 1;
314
+ nodes.push(node);
315
+ if (node === 0)
316
+ break;
317
+ node = up.parent[node];
318
+ }
319
+ }
320
+ // Children sit above their parents: deepest first.
321
+ nodes.sort((a, b) => b - a);
322
+ for (const node of nodes) {
323
+ const o = node * 6;
324
+ const count = links[node * 2 + 1];
325
+ if (count === 0) {
326
+ const l = links[node * 2] * 6;
327
+ const r = l + 6;
328
+ for (let k = 0; k < 3; k++) {
329
+ bounds[o + k] = Math.min(bounds[l + k], bounds[r + k]);
330
+ bounds[o + 3 + k] = Math.max(bounds[l + 3 + k], bounds[r + 3 + k]);
331
+ }
332
+ continue;
333
+ }
334
+ const first = links[node * 2];
335
+ for (let k = 0; k < 3; k++) {
336
+ let lo = Infinity;
337
+ let hi = -Infinity;
338
+ for (let i = first; i < first + count; i++) {
339
+ const t = order[i];
340
+ if (tb[t * 6 + k] < lo)
341
+ lo = tb[t * 6 + k];
342
+ if (tb[t * 6 + 3 + k] > hi)
343
+ hi = tb[t * 6 + 3 + k];
344
+ }
345
+ bounds[o + k] = outward(lo, -1);
346
+ bounds[o + 3 + k] = outward(hi, 1);
347
+ }
348
+ }
349
+ }
350
+ /**
351
+ * Every box of a `buildBoxBvh` hierarchy the ray (`o`, `d`) enters before `max`: `visit(box)` per leaf
352
+ * entry, in no particular order. For a broad phase (ADR-0123).
353
+ */
354
+ export function walkBoxes(bvh, o, d, max, visit) {
355
+ if (bvh.nodes === 0 || bvh.order.length === 0)
356
+ return;
357
+ const ix = 1 / (d[0] || 1e-30);
358
+ const iy = 1 / (d[1] || 1e-30);
359
+ const iz = 1 / (d[2] || 1e-30);
360
+ const { bounds, links, order } = bvh;
361
+ if (enter(bounds, 0, o[0], o[1], o[2], ix, iy, iz, max) === Infinity)
362
+ return;
363
+ let top = push(0, 0);
364
+ while (top > 0) {
365
+ const node = stack[--top];
366
+ const count = links[node * 2 + 1];
367
+ if (count > 0) {
368
+ const first = links[node * 2];
369
+ for (let i = first; i < first + count; i++)
370
+ visit(order[i]);
371
+ continue;
372
+ }
373
+ const l = links[node * 2];
374
+ if (enter(bounds, l, o[0], o[1], o[2], ix, iy, iz, max) !== Infinity)
375
+ top = push(top, l);
376
+ if (enter(bounds, l + 1, o[0], o[1], o[2], ix, iy, iz, max) !== Infinity)
377
+ top = push(top, l + 1);
378
+ }
379
+ }
380
+ /** The ray's entry distance into node `n`'s box (slab test), or Infinity when it misses or enters past `max`. */
381
+ function enter(b, n, ox, oy, oz, ix, iy, iz, max) {
382
+ const o = n * 6;
383
+ let t0 = (b[o] - ox) * ix;
384
+ let t1 = (b[o + 3] - ox) * ix;
385
+ let lo = Math.min(t0, t1);
386
+ let hi = Math.max(t0, t1);
387
+ t0 = (b[o + 1] - oy) * iy;
388
+ t1 = (b[o + 4] - oy) * iy;
389
+ lo = Math.max(lo, Math.min(t0, t1));
390
+ hi = Math.min(hi, Math.max(t0, t1));
391
+ t0 = (b[o + 2] - oz) * iz;
392
+ t1 = (b[o + 5] - oz) * iz;
393
+ lo = Math.max(lo, Math.min(t0, t1));
394
+ hi = Math.min(hi, Math.max(t0, t1));
395
+ return hi >= Math.max(lo, 0) && lo < max ? Math.max(lo, 0) : Infinity;
396
+ }
397
+ /**
398
+ * The nearest triangle the ray (`o`, `d`, mesh space) hits before `max`, walking `bvh` near child first
399
+ * (both faces, Möller–Trumbore). Positions as `buildBvh` takes them.
400
+ */
401
+ export function intersectBvh(bvh, positions, stride, indices, o, d, max) {
402
+ // A zero component would make 0 × ∞ (NaN) on a slab's plane: a tiny one gives the same answer.
403
+ const ix = 1 / (d[0] || 1e-30);
404
+ const iy = 1 / (d[1] || 1e-30);
405
+ const iz = 1 / (d[2] || 1e-30);
406
+ const { bounds, links, order } = bvh;
407
+ let best = null;
408
+ let bestT = max;
409
+ if (enter(bounds, 0, o[0], o[1], o[2], ix, iy, iz, bestT) === Infinity)
410
+ return null;
411
+ let top = push(0, 0);
412
+ while (top > 0) {
413
+ const node = stack[--top];
414
+ const count = links[node * 2 + 1];
415
+ if (count > 0) {
416
+ const first = links[node * 2];
417
+ for (let i = first; i < first + count; i++) {
418
+ const hit = triangle(positions, stride, indices, order[i], o, d, bestT);
419
+ if (hit) {
420
+ bestT = hit.t;
421
+ best = hit;
422
+ }
423
+ }
424
+ continue;
425
+ }
426
+ const l = links[node * 2];
427
+ const tl = enter(bounds, l, o[0], o[1], o[2], ix, iy, iz, bestT);
428
+ const tr = enter(bounds, l + 1, o[0], o[1], o[2], ix, iy, iz, bestT);
429
+ // Push the far child first, so the near one is walked first and shrinks bestT for the other.
430
+ if (tl <= tr) {
431
+ if (tr !== Infinity)
432
+ top = push(top, l + 1);
433
+ if (tl !== Infinity)
434
+ top = push(top, l);
435
+ }
436
+ else {
437
+ if (tl !== Infinity)
438
+ top = push(top, l);
439
+ if (tr !== Infinity)
440
+ top = push(top, l + 1);
441
+ }
442
+ }
443
+ return best;
444
+ }
445
+ /** Every triangle, in order (the brute-force walk `intersectBvh` replaces; small meshes keep it). */
446
+ export function intersectAll(positions, stride, indices, o, d, max) {
447
+ let best = null;
448
+ let bestT = max;
449
+ for (let k = 0; 3 * k + 2 < indices.length; k++) {
450
+ const hit = triangle(positions, stride, indices, k, o, d, bestT);
451
+ if (hit) {
452
+ bestT = hit.t;
453
+ best = hit;
454
+ }
455
+ }
456
+ return best;
457
+ }
458
+ /** Triangle `k` against the ray, when hit before `max` (Möller–Trumbore, both faces). */
459
+ function triangle(P, stride, indices, k, o, d, max) {
460
+ const a = indices[k * 3] * stride;
461
+ const b = indices[k * 3 + 1] * stride;
462
+ const c = indices[k * 3 + 2] * stride;
463
+ const e1x = P[b] - P[a];
464
+ const e1y = P[b + 1] - P[a + 1];
465
+ const e1z = P[b + 2] - P[a + 2];
466
+ const e2x = P[c] - P[a];
467
+ const e2y = P[c + 1] - P[a + 1];
468
+ const e2z = P[c + 2] - P[a + 2];
469
+ const px = d[1] * e2z - d[2] * e2y;
470
+ const py = d[2] * e2x - d[0] * e2z;
471
+ const pz = d[0] * e2y - d[1] * e2x;
472
+ const det = e1x * px + e1y * py + e1z * pz;
473
+ if (Math.abs(det) < 1e-12)
474
+ return null;
475
+ const inv = 1 / det;
476
+ const sx = o[0] - P[a];
477
+ const sy = o[1] - P[a + 1];
478
+ const sz = o[2] - P[a + 2];
479
+ const u = (sx * px + sy * py + sz * pz) * inv;
480
+ if (u < 0 || u > 1)
481
+ return null;
482
+ const qx = sy * e1z - sz * e1y;
483
+ const qy = sz * e1x - sx * e1z;
484
+ const qz = sx * e1y - sy * e1x;
485
+ const v = (d[0] * qx + d[1] * qy + d[2] * qz) * inv;
486
+ if (v < 0 || u + v > 1)
487
+ return null;
488
+ const t = (e2x * qx + e2y * qy + e2z * qz) * inv;
489
+ if (t < 0 || t >= max)
490
+ return null;
491
+ return { t, triangle: k, normal: [e1y * e2z - e1z * e2y, e1z * e2x - e1x * e2z, e1x * e2y - e1y * e2x] };
492
+ }
493
+ //# sourceMappingURL=bvh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh.js","sourceRoot":"","sources":["../src/bvh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * An orbit camera for camera-relative rendering (ADR-0008).
3
+ *
4
+ * - The eye position is f64 (`eye`). The renderer subtracts it from every instance before
5
+ * the f32 conversion (the core's extract step), so the GPU only sees numbers near zero.
6
+ * - The view matrix therefore carries rotation only.
7
+ * - The projection is reverse-Z with an infinite far plane: depth is 1 at `near` and goes
8
+ * to 0 at infinity. Clear depth to 0 and compare `greater`.
9
+ *
10
+ * `uniform` is the 176-byte `Camera` struct of `shaders/core/camera.wesl`, rewritten in
11
+ * place by `update()`, which allocates nothing.
12
+ */
13
+ export declare class OrbitCamera {
14
+ #private;
15
+ /** Orbit centre (f64 world space). */
16
+ readonly target: Float64Array<ArrayBuffer>;
17
+ /** Eye position (f64 world space), derived by `update()`. */
18
+ readonly eye: Float64Array<ArrayBuffer>;
19
+ yaw: number;
20
+ pitch: number;
21
+ distance: number;
22
+ fovY: number;
23
+ near: number;
24
+ /** Direction towards the light (camera-relative = world, the view has no translation). */
25
+ readonly lightDir: Float32Array<ArrayBuffer>;
26
+ /** Seconds for node materials' `time` (the render plugin sets the app's virtual time). */
27
+ time: number;
28
+ /** viewProj (16) + 6 frustum planes (24) + lightDir (xyz) and time (w) = 44 floats. */
29
+ readonly uniform: Float32Array<ArrayBuffer>;
30
+ /** The view matrix (rotation only, camera-relative; column-major), as of the last `update`. */
31
+ get view(): Float32Array;
32
+ /** Recomputes the eye, matrices and frustum for `aspect` (width / height). */
33
+ update(aspect: number): void;
34
+ }