@meimu/mutracer 0.1.2 → 0.1.3

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 (68) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +3429 -3390
  3. package/lib/oidn.d.ts +1 -1
  4. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  5. package/lib/renderer/WGPUBloomPass.js +18 -18
  6. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  7. package/lib/renderer/WGPUJNLMDenoiser.js +62 -62
  8. package/lib/renderer/WGPURayTraceOutput.js +14 -12
  9. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  10. package/lib/renderer/WGPURayTracePass.js +1 -1
  11. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  12. package/lib/renderer/WGPURenderingPipeline.js +20 -18
  13. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  14. package/lib/renderer/WebGLJNLMDenoiser.js +61 -61
  15. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  16. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
  17. package/lib/renderer/glsl/chunks/envMap.glsl.js +45 -45
  18. package/lib/renderer/glsl/chunks/intersect.glsl.js +262 -262
  19. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +111 -111
  20. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +436 -436
  21. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  22. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  23. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +32 -32
  24. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +54 -54
  25. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +71 -71
  26. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  27. package/lib/renderer/glsl/chunks/sampling.glsl.js +64 -64
  28. package/lib/renderer/glsl/chunks/sobol.glsl.js +49 -49
  29. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  30. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +5 -5
  31. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  32. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  33. package/lib/renderer/glsl/rayTrace.frag.js +128 -128
  34. package/lib/renderer/glsl/shadowCatcher.frag.js +12 -12
  35. package/lib/renderer/glsl/webglPipeline.frag.js +49 -49
  36. package/lib/renderer/lightsUtil.js +1 -1
  37. package/lib/renderer/lightsUtil.js.map +1 -1
  38. package/lib/renderer/scratchSampling.js +6 -6
  39. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  40. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +29 -29
  41. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +368 -368
  42. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +5 -5
  43. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +51 -51
  44. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +453 -453
  45. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +116 -116
  46. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  47. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +13 -13
  48. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +94 -94
  49. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +119 -119
  50. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +5 -5
  51. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +62 -62
  52. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
  53. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
  54. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  55. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +53 -53
  56. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +5 -5
  57. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
  58. package/lib/renderer/wgsl/compose.frag.wgsl.js +120 -92
  59. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  60. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  61. package/lib/renderer/wgsl/depthQuery.wgsl.js +3 -3
  62. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  63. package/lib/renderer/wgsl/rayTrace.compute.js +220 -211
  64. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  65. package/lib/version.d.ts +1 -1
  66. package/lib/version.js +1 -1
  67. package/lib/version.js.map +1 -1
  68. package/package.json +5 -4
@@ -8,21 +8,21 @@ import { createIntersectionAlphaWgsl } from './intersectionAlpha.wgsl.js';
8
8
  const displacementWgsl = pdm_displacementWgsl;
9
9
  const flatIntersectCode = function () {
10
10
  return /* wgsl */ `
11
- let hit = fI(o, d, tri, ey, gJ, tMax);
11
+ let hit = fI(o, d, tri, ey, gL, tMax);
12
12
  if (hit.t > 0.0) {
13
13
  let e1 = tri.p1 - tri.p0;
14
14
  let e2 = tri.p2 - tri.p0;
15
15
  eC = normalize(cross(e1, e2));
16
- let kb = i32(ae(bitcast<i32>(od.z)).x);
17
- let iH = materialsBuffer[kb].doubleSided > 0.5;
18
- if (!doubleSided && !iH && dot(eC, d) > 0.0) {
16
+ let kd = i32(ae(bitcast<i32>(oh.z)).x);
17
+ let iI = materialsBuffer[kd].doubleSided > 0.5;
18
+ if (!doubleSided && !iI && dot(eC, d) > 0.0) {
19
19
  eC = vec3f(0.0);
20
20
  continue;
21
21
  }
22
22
 
23
23
  tMax = hit.t;
24
- qP = true;
25
- oh = true;
24
+ qT = true;
25
+ ol = true;
26
26
  eU = o + tMax * d;
27
27
  aB = hit.barycentric;
28
28
  }
@@ -30,13 +30,13 @@ aB = hit.barycentric;
30
30
  };
31
31
  function getPDMDisplacmentCode(anyHit) {
32
32
  return /*wgsl */ `
33
- let kL = oP(
33
+ let kO = oT(
34
34
  o, d, tMax,
35
35
  tri.p0, tri.p1, tri.p2,
36
36
  n0, n1, n2,
37
37
  uv0, uv1, uv2,
38
38
  displacementMapIndex,
39
- nX(displacementMapIndex),
39
+ oa(displacementMapIndex),
40
40
  minH, maxH,
41
41
  hScale,
42
42
  matData.displacementBias,
@@ -44,17 +44,17 @@ matData.displacementStepSize,
44
44
  i32(matData.displacementUvProjection),
45
45
  displacementUvProjectionScale,
46
46
  ${anyHit ? 'true' : 'false'},
47
- ln
47
+ lq
48
48
  );
49
49
  `;
50
50
  }
51
51
  const displacementIntersectCode = function (anyHit, hasAnisotropyDirections) {
52
52
  return /* wgsl */ `
53
53
 
54
- let hScale = od.w;
55
- let th = bitcast<i32>(r3.w);
54
+ let hScale = oh.w;
55
+ let tn = bitcast<i32>(r3.w);
56
56
 
57
- let materialIndex = i32(ae(bitcast<i32>(od.z)).x);
57
+ let materialIndex = i32(ae(bitcast<i32>(oh.z)).x);
58
58
  let matData = materialsBuffer[materialIndex];
59
59
  let n0 = normalize(attrBuffers[index.x * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''});
60
60
  let n1 = normalize(attrBuffers[index.y * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''});
@@ -64,9 +64,9 @@ tri.p0 += n0 * matData.displacementBias;
64
64
  tri.p1 += n1 * matData.displacementBias;
65
65
  tri.p2 += n2 * matData.displacementBias;
66
66
  }
67
- if (abs(hScale) > 0.0 && th > 0) {
68
- let minH = f32(th >> 8) / 255.0;
69
- let maxH = f32(th & 0xff) / 255.0;
67
+ if (abs(hScale) > 0.0 && tn > 0) {
68
+ let minH = f32(tn >> 8) / 255.0;
69
+ let maxH = f32(tn & 0xff) / 255.0;
70
70
  let displacementUvProjectionScale = vec2f(matData.displacementUvProjectionScale);
71
71
  let displacementMapIndex = i32(matData.displacementMapIndex);
72
72
 
@@ -77,18 +77,18 @@ var uv2 = attrBuffers[index.z * ATTR_STRIDE + UV_OFF].xy;
77
77
 
78
78
  ${getPDMDisplacmentCode(anyHit)}
79
79
 
80
- if (kL.t < tMax) {
81
- eC = kL.normal;
80
+ if (kO.t < tMax) {
81
+ eC = kO.normal;
82
82
 
83
83
 
84
- tMax = kL.t;
84
+ tMax = kO.t;
85
85
 
86
- aB = kL.barycentric;
86
+ aB = kO.barycentric;
87
87
  eU = o + tMax * d;
88
88
 
89
89
  bU = true;
90
- qP = true;
91
- oh = true;
90
+ qT = true;
91
+ ol = true;
92
92
  }
93
93
  }
94
94
  else {
@@ -112,102 +112,102 @@ f32(value >> 24u)
112
112
 
113
113
 
114
114
 
115
- fn kl(value: u32) -> u32 {
115
+ fn kn(value: u32) -> u32 {
116
116
  return (bitcast<u32>(f32(value)) >> 23u) - 127u;
117
117
  }
118
118
 
119
- fn nL(value: u32) -> u32 {
119
+ fn nO(value: u32) -> u32 {
120
120
  return (bitcast<u32>(f32(value)) >> 23u) - 127u;
121
121
  }
122
122
 
123
- fn oe(
123
+ fn oi(
124
124
  node: i32,
125
- sX: i32,
125
+ tc: i32,
126
126
  n0: vec4f,
127
127
  o: vec3f,
128
- gv: vec3f,
128
+ gx: vec3f,
129
129
  tMax: f32
130
130
  ) -> u32 {
131
- let i = node + sX;
131
+ let i = node + tc;
132
132
  let n2 = bvhBuffer[i + 2];
133
133
  let n3 = bvhBuffer[i + 3];
134
134
  let n4 = bvhBuffer[i + 4];
135
135
  let header = bitcast<u32>(n0.w);
136
- let rq = bitcast<i32>((header & 0xffu) << 24u) >> 24;
137
- let rr = bitcast<i32>(((header >> 8u) & 0xffu) << 24u) >> 24;
138
- let rs = bitcast<i32>(((header >> 16u) & 0xffu) << 24u) >> 24;
139
- let hG = vec3f(
140
- bitcast<f32>(u32(rq + 127) << 23u),
141
- bitcast<f32>(u32(rr + 127) << 23u),
142
- bitcast<f32>(u32(rs + 127) << 23u)
136
+ let rv = bitcast<i32>((header & 0xffu) << 24u) >> 24;
137
+ let rw = bitcast<i32>(((header >> 8u) & 0xffu) << 24u) >> 24;
138
+ let rA = bitcast<i32>(((header >> 16u) & 0xffu) << 24u) >> 24;
139
+ let hF = vec3f(
140
+ bitcast<f32>(u32(rv + 127) << 23u),
141
+ bitcast<f32>(u32(rw + 127) << 23u),
142
+ bitcast<f32>(u32(rA + 127) << 23u)
143
+ );
144
+ let bJ = eV(gx, o);
145
+ let eH = (n0.xyz - o) * gx;
146
+ let da = hF * gx;
147
+ let wr = bp(bitcast<u32>(n2.x));
148
+ let ws = bp(bitcast<u32>(n2.y));
149
+ let wt = bp(bitcast<u32>(n2.z));
150
+ let wu = bp(bitcast<u32>(n2.w));
151
+ let wv = bp(bitcast<u32>(n3.x));
152
+ let ww = bp(bitcast<u32>(n3.y));
153
+ let wl = bp(bitcast<u32>(n3.z));
154
+ let wm = bp(bitcast<u32>(n3.w));
155
+ let wn = bp(bitcast<u32>(n4.x));
156
+ let wo = bp(bitcast<u32>(n4.y));
157
+ let wp = bp(bitcast<u32>(n4.z));
158
+ let wq = bp(bitcast<u32>(n4.w));
159
+
160
+ let vh = wr * da.x + eH.x;
161
+ let vk = wt * da.y + eH.y;
162
+ let vm = wv * da.z + eH.z;
163
+ let va = wl * da.x + eH.x;
164
+ let vc = wn * da.y + eH.y;
165
+ let ve = wp * da.z + eH.z;
166
+ let wx = max(
167
+ max((min(vh, va) - vec4f(bJ.x)), (min(vk, vc) - vec4f(bJ.y))),
168
+ (min(vm, ve) - vec4f(bJ.z))
169
+ );
170
+ let wg = min(
171
+ min((max(vh, va) + vec4f(bJ.x)), (max(vk, vc) + vec4f(bJ.y))),
172
+ (max(vm, ve) + vec4f(bJ.z))
143
173
  );
144
- let bJ = eV(gv, o);
145
- let eH = (n0.xyz - o) * gv;
146
- let da = hG * gv;
147
- let wm = bp(bitcast<u32>(n2.x));
148
- let wn = bp(bitcast<u32>(n2.y));
149
- let wo = bp(bitcast<u32>(n2.z));
150
- let wp = bp(bitcast<u32>(n2.w));
151
- let wq = bp(bitcast<u32>(n3.x));
152
- let wr = bp(bitcast<u32>(n3.y));
153
- let wg = bp(bitcast<u32>(n3.z));
154
- let wh = bp(bitcast<u32>(n3.w));
155
- let wi = bp(bitcast<u32>(n4.x));
156
- let wj = bp(bitcast<u32>(n4.y));
157
- let wk = bp(bitcast<u32>(n4.z));
158
- let wl = bp(bitcast<u32>(n4.w));
159
174
 
175
+ let vj = ws * da.x + eH.x;
176
+ let vl = wu * da.y + eH.y;
177
+ let vn = ww * da.z + eH.z;
160
178
  let vb = wm * da.x + eH.x;
161
179
  let vd = wo * da.y + eH.y;
162
180
  let vg = wq * da.z + eH.z;
163
- let uV = wg * da.x + eH.x;
164
- let uX = wi * da.y + eH.y;
165
- let uZ = wk * da.z + eH.z;
166
- let ws = max(
167
- max((min(vb, uV) - vec4f(bJ.x)), (min(vd, uX) - vec4f(bJ.y))),
168
- (min(vg, uZ) - vec4f(bJ.z))
169
- );
170
- let wa = min(
171
- min((max(vb, uV) + vec4f(bJ.x)), (max(vd, uX) + vec4f(bJ.y))),
172
- (max(vg, uZ) + vec4f(bJ.z))
173
- );
174
-
175
- let vc = wn * da.x + eH.x;
176
- let ve = wp * da.y + eH.y;
177
- let vh = wr * da.z + eH.z;
178
- let uW = wh * da.x + eH.x;
179
- let uY = wj * da.y + eH.y;
180
- let va = wl * da.z + eH.z;
181
- let wt = max(
182
- max((min(vc, uW) - vec4f(bJ.x)), (min(ve, uY) - vec4f(bJ.y))),
183
- (min(vh, va) - vec4f(bJ.z))
181
+ let wy = max(
182
+ max((min(vj, vb) - vec4f(bJ.x)), (min(vl, vd) - vec4f(bJ.y))),
183
+ (min(vn, vg) - vec4f(bJ.z))
184
184
  );
185
- let wb = min(
186
- min((max(vc, uW) + vec4f(bJ.x)), (max(ve, uY) + vec4f(bJ.y))),
187
- (max(vh, va) + vec4f(bJ.z))
185
+ let wh = min(
186
+ min((max(vj, vb) + vec4f(bJ.x)), (max(vl, vd) + vec4f(bJ.y))),
187
+ (max(vn, vg) + vec4f(bJ.z))
188
188
  );
189
189
 
190
- let uy = (ws <= min(wa, vec4f(tMax))) & (wa > vec4f(0.0));
191
- let uz = (wt <= min(wb, vec4f(tMax))) & (wb > vec4f(0.0));
192
- return select(0u, 1u, uy.x)
193
- | select(0u, 2u, uy.y)
194
- | select(0u, 4u, uy.z)
195
- | select(0u, 8u, uy.w)
196
- | select(0u, 16u, uz.x)
197
- | select(0u, 32u, uz.y)
198
- | select(0u, 64u, uz.z)
199
- | select(0u, 128u, uz.w);
190
+ let uD = (wx <= min(wg, vec4f(tMax))) & (wg > vec4f(0.0));
191
+ let uE = (wy <= min(wh, vec4f(tMax))) & (wh > vec4f(0.0));
192
+ return select(0u, 1u, uD.x)
193
+ | select(0u, 2u, uD.y)
194
+ | select(0u, 4u, uD.z)
195
+ | select(0u, 8u, uD.w)
196
+ | select(0u, 16u, uE.x)
197
+ | select(0u, 32u, uE.y)
198
+ | select(0u, 64u, uE.z)
199
+ | select(0u, 128u, uE.w);
200
200
  }
201
201
 
202
202
  `;
203
203
  function getBVHTraverseCode(handleHitCode, hasDisplacement, anyHit, blasLayoutMask, hasAnisotropyDirections, skipTriangleCode = '') {
204
204
  const intersectTriangles = /* wgsl */ `
205
- let od = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
206
- let vertexOffset = vec3i(bitcast<i32>(od.y));
205
+ let oh = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
206
+ let vertexOffset = vec3i(bitcast<i32>(oh.y));
207
207
  for (var k = 0; k < bh; k++) {
208
208
  let triangleIndex = primitiveOffset + k;
209
209
  ${skipTriangleCode}
210
- if (bounces > 0 && triangleIndex == hL) {
210
+ if (bounces > 0 && triangleIndex == hK) {
211
211
  continue;
212
212
  }
213
213
 
@@ -218,12 +218,12 @@ attrBuffers[index.x * ATTR_STRIDE + POSITION_OFF]${hasAnisotropyDirections ? '.x
218
218
  attrBuffers[index.y * ATTR_STRIDE + POSITION_OFF]${hasAnisotropyDirections ? '.xyz' : ''},
219
219
  attrBuffers[index.z * ATTR_STRIDE + POSITION_OFF]${hasAnisotropyDirections ? '.xyz' : ''}
220
220
  );
221
- var oh = false;
221
+ var ol = false;
222
222
 
223
223
  ${hasDisplacement
224
224
  ? displacementIntersectCode(anyHit, hasAnisotropyDirections)
225
225
  : flatIntersectCode()}
226
- if (oh) {
226
+ if (ol) {
227
227
  ${handleHitCode}
228
228
  }
229
229
  }
@@ -231,69 +231,69 @@ ${handleHitCode}
231
231
  return /* wgsl */ `
232
232
  var d = ray.d;
233
233
  var o = ray.o;
234
- var lN: array<i32, TLAS_STACK_SIZE>;
235
- var jb = -1;
236
- var gv = eX(d);
234
+ var lQ: array<i32, TLAS_STACK_SIZE>;
235
+ var jd = -1;
236
+ var gx = eX(d);
237
237
  var bU = false;
238
- var qP = false;
238
+ var qT = false;
239
239
  var eU: vec3f;
240
240
  var eC: vec3f;
241
241
  var aB: vec3f;
242
242
 
243
243
 
244
- if (cM(o, bvhBuffer[0].xyz, bvhBuffer[1].xyz, gv, tMax) > 0.0) {
245
- jb = 0;
246
- lN[0] = 0;
244
+ if (cM(o, bvhBuffer[0].xyz, bvhBuffer[1].xyz, gx, tMax) > 0.0) {
245
+ jd = 0;
246
+ lQ[0] = 0;
247
247
  }
248
- while (jb >= 0) {
249
- let sI = lN[jb];
250
- jb--;
248
+ while (jd >= 0) {
249
+ let sN = lQ[jd];
250
+ jd--;
251
251
  o = ray.o;
252
252
  d = ray.d;
253
- gv = eX(d);
253
+ gx = eX(d);
254
254
 
255
- let vS = bvhBuffer[sI];
256
- let eR = bitcast<i32>(vS.w);
255
+ let vX = bvhBuffer[sN];
256
+ let eR = bitcast<i32>(vX.w);
257
257
  if (eR >= 0) {
258
- let left = sI + 2;
258
+ let left = sN + 2;
259
259
  let right = eR;
260
260
  let d0 = cM(
261
261
  o,
262
262
  bvhBuffer[left].xyz,
263
263
  bvhBuffer[left + 1].xyz,
264
- gv,
264
+ gx,
265
265
  tMax
266
266
  );
267
267
  let d1 = cM(
268
268
  o,
269
269
  bvhBuffer[right].xyz,
270
270
  bvhBuffer[right + 1].xyz,
271
- gv,
271
+ gx,
272
272
  tMax
273
273
  );
274
274
 
275
275
  if (d0 > d1) {
276
- if (d0 > 0.0) { jb++; lN[jb] = left; }
277
- if (d1 > 0.0) { jb++; lN[jb] = right; }
276
+ if (d0 > 0.0) { jd++; lQ[jd] = left; }
277
+ if (d1 > 0.0) { jd++; lQ[jd] = right; }
278
278
  }
279
279
  else {
280
- if (d1 > 0.0) { jb++; lN[jb] = right; }
281
- if (d0 > 0.0) { jb++; lN[jb] = left; }
280
+ if (d1 > 0.0) { jd++; lQ[jd] = right; }
281
+ if (d0 > 0.0) { jd++; lQ[jd] = left; }
282
282
  }
283
283
  }
284
284
  else {
285
- let qx = -eR;
285
+ let qB = -eR;
286
286
 
287
287
 
288
288
  for (
289
- var mi = qx - 1;
290
- mi >= 0;
291
- mi--
289
+ var ml = qB - 1;
290
+ ml >= 0;
291
+ ml--
292
292
  ) {
293
- let pm = bvhBuffer[sI + 2 + mi];
294
- let cf = bitcast<i32>(pm.x);
295
- let uI = bitcast<i32>(pm.y);
296
- let od = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
293
+ let pq = bvhBuffer[sN + 2 + ml];
294
+ let cf = bitcast<i32>(pq.x);
295
+ let uN = bitcast<i32>(pq.y);
296
+ let oh = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
297
297
  let w2l = mat4x4<f32>(
298
298
  instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE} + 1],
299
299
  instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE} + 2],
@@ -302,212 +302,212 @@ instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE} + 4]
302
302
  );
303
303
  o = (w2l * vec4f(ray.o, 1.0)).xyz;
304
304
  d = (w2l * vec4f(ray.d, 0.0)).xyz;
305
- gv = eX(d);
305
+ gx = eX(d);
306
306
  ey = maxDimension(abs(d));
307
- gJ = mg(d, ey);
307
+ gL = mj(d, ey);
308
308
 
309
- let fG = bitcast<u32>(od.x);
310
- let gL = fG >> 30u;
309
+ let fG = bitcast<u32>(oh.x);
310
+ let gN = fG >> 30u;
311
311
  let blasOffset = i32(fG & 0x3fffffffu);
312
312
  let bo = rtUniform.blasOffset;
313
313
 
314
314
  ${(blasLayoutMask & 8) !== 0 ? /* wgsl */ `
315
- if (gL == 3u) {
315
+ if (gN == 3u) {
316
316
 
317
317
 
318
318
 
319
319
 
320
- var rY: array<vec2u, BLAS_STACK_SIZE>;
321
- var pa = -1;
322
- var rK = 0u;
323
- var kN = 0u;
320
+ var sd: array<vec2u, BLAS_STACK_SIZE>;
321
+ var pe = -1;
322
+ var rP = 0u;
323
+ var kQ = 0u;
324
324
 
325
325
  var ep = 0x80000000u;
326
- let ug = select(0u, 4u, d.x < 0.0)
326
+ let ul = select(0u, 4u, d.x < 0.0)
327
327
  | select(0u, 2u, d.y < 0.0)
328
328
  | select(0u, 1u, d.z < 0.0);
329
- let pZ = 7u - ug;
329
+ let qd = 7u - ul;
330
330
 
331
331
 
332
332
 
333
333
 
334
- while (rK < 4096u) {
335
- rK++;
334
+ while (rP < 4096u) {
335
+ rP++;
336
336
 
337
337
  let internalMask = ep & 0xffu;
338
- let pV =
339
- kl(ep >> 24u) + 24u;
340
- ep &= ~(1u << pV);
338
+ let pZ =
339
+ kn(ep >> 24u) + 24u;
340
+ ep &= ~(1u << pZ);
341
341
  if ((ep & 0xff000000u) != 0u) {
342
- pa++;
342
+ pe++;
343
343
 
344
- rY[pa] = vec2u(kN, ep);
344
+ sd[pe] = vec2u(kQ, ep);
345
345
  }
346
346
 
347
- let slot = (pV - 24u) ^ pZ;
348
- let mY = (1u << slot) - 1u;
349
- let relativeIndex = countOneBits(internalMask & mY);
350
- let rW = kN + relativeIndex;
351
- let node = blasOffset + i32(rW * 5u);
352
- let jr = bvhBuffer[node + bo];
353
- let tS = oe(
354
- node, bo, jr, o, gv, tMax
347
+ let slot = (pZ - 24u) ^ qd;
348
+ let ne = (1u << slot) - 1u;
349
+ let relativeIndex = countOneBits(internalMask & ne);
350
+ let sb = kQ + relativeIndex;
351
+ let node = blasOffset + i32(sb * 5u);
352
+ let ju = bvhBuffer[node + bo];
353
+ let tX = oi(
354
+ node, bo, ju, o, gx, tMax
355
355
  );
356
356
 
357
357
 
358
358
  ep = 0u;
359
- if (tS != 0u) {
359
+ if (tX != 0u) {
360
360
  let fC = bvhBuffer[node + bo + 1];
361
- let rB = bitcast<u32>(jr.w) >> 24u;
362
- var tf = 0u;
363
- var jX = tS;
364
- while (jX != 0u) {
365
- let rm = kl(jX);
366
- jX &= ~(1u << rm);
367
- let sn = select(
361
+ let rG = bitcast<u32>(ju.w) >> 24u;
362
+ var tl = 0u;
363
+ var jZ = tX;
364
+ while (jZ != 0u) {
365
+ let rr = kn(jZ);
366
+ jZ &= ~(1u << rr);
367
+ let su = select(
368
368
  bitcast<u32>(fC.z),
369
369
  bitcast<u32>(fC.w),
370
- rm >= 4u
370
+ rr >= 4u
371
371
  );
372
- let sR =
373
- (sn >> ((rm & 3u) * 8u)) & 0xffu;
374
- let ju = sR & 0x1fu;
375
- let uH = select(
376
- ju,
377
- ju ^ pZ,
378
- ju >= 24u
372
+ let sW =
373
+ (su >> ((rr & 3u) * 8u)) & 0xffu;
374
+ let jw = sW & 0x1fu;
375
+ let uM = select(
376
+ jw,
377
+ jw ^ qd,
378
+ jw >= 24u
379
379
  );
380
- let uC = (sR >> 5u) & 0x7u;
381
- tf |= uC << uH;
380
+ let uH = (sW >> 5u) & 0x7u;
381
+ tl |= uH << uM;
382
382
  }
383
383
 
384
- kN = bitcast<u32>(fC.x);
385
- ep = (tf & 0xff000000u) | rB;
386
- let oE = bitcast<u32>(fC.y);
387
- var oF = tf & 0x00ffffffu;
388
- while (oF != 0u) {
389
- let nF = nL(oF);
390
- oF &= ~(1u << nF);
384
+ kQ = bitcast<u32>(fC.x);
385
+ ep = (tl & 0xff000000u) | rG;
386
+ let oH = bitcast<u32>(fC.y);
387
+ var oI = tl & 0x00ffffffu;
388
+ while (oI != 0u) {
389
+ let nI = nO(oI);
390
+ oI &= ~(1u << nI);
391
391
  let bh = 1;
392
392
  let primitiveOffset = bo + blasOffset
393
- + i32(oE + nF);
393
+ + i32(oH + nI);
394
394
  ${intersectTriangles}
395
395
  }
396
396
  }
397
397
 
398
398
  if ((ep & 0xff000000u) != 0u) { continue; }
399
- if (pa >= 0) {
400
- let qa = rY[pa];
401
- kN = qa.x;
402
- ep = qa.y;
403
- pa--;
399
+ if (pe >= 0) {
400
+ let qe = sd[pe];
401
+ kQ = qe.x;
402
+ ep = qe.y;
403
+ pe--;
404
404
  }
405
405
  else { break; }
406
406
  }
407
407
  }
408
408
  ` : ''}
409
409
 
410
- var gn: array<i32, BLAS_STACK_SIZE>;
410
+ var gp: array<i32, BLAS_STACK_SIZE>;
411
411
  var dR = -1;
412
- if (gL != 3u) {
412
+ if (gN != 3u) {
413
413
  dR = 0;
414
414
 
415
- gn[0] = uI;
415
+ gp[0] = uN;
416
416
  }
417
417
 
418
418
  while (dR >= 0) {
419
419
 
420
- let node = gn[dR];
420
+ let node = gp[dR];
421
421
  dR--;
422
422
  var bh = 0;
423
423
  var primitiveOffset = 0;
424
424
 
425
425
  ${(blasLayoutMask & 4) !== 0 ? /* wgsl */ `
426
- if (gL == 2u) {
426
+ if (gN == 2u) {
427
427
  let i = node + bo;
428
- let uM = bvhBuffer[i];
429
- let uN = bvhBuffer[i + 1];
430
- let uO = bvhBuffer[i + 2];
431
- let uP = bvhBuffer[i + 3];
432
- bh = i32(bitcast<u32>(uO.w));
428
+ let uR = bvhBuffer[i];
429
+ let uS = bvhBuffer[i + 1];
430
+ let uT = bvhBuffer[i + 2];
431
+ let uU = bvhBuffer[i + 3];
432
+ bh = i32(bitcast<u32>(uT.w));
433
433
  if (bh > 0) {
434
434
  primitiveOffset = bo + blasOffset
435
- + i32(bitcast<u32>(uP.w));
435
+ + i32(bitcast<u32>(uU.w));
436
436
  }
437
437
  else {
438
- let left = blasOffset + i32(bitcast<u32>(uM.w) * 4u);
439
- let right = blasOffset + i32(bitcast<u32>(uN.w) * 4u);
440
- let oi = cM(
441
- o, uM.xyz, uN.xyz, gv, tMax
438
+ let left = blasOffset + i32(bitcast<u32>(uR.w) * 4u);
439
+ let right = blasOffset + i32(bitcast<u32>(uS.w) * 4u);
440
+ let om = cM(
441
+ o, uR.xyz, uS.xyz, gx, tMax
442
442
  );
443
- let nd = cM(
444
- o, uO.xyz, uP.xyz, gv, tMax
443
+ let ng = cM(
444
+ o, uT.xyz, uU.xyz, gx, tMax
445
445
  );
446
- if (oi > nd) {
447
- if (oi > 0.0) {
448
- dR++; gn[dR] = left;
446
+ if (om > ng) {
447
+ if (om > 0.0) {
448
+ dR++; gp[dR] = left;
449
449
  }
450
- if (nd > 0.0) {
451
- dR++; gn[dR] = right;
450
+ if (ng > 0.0) {
451
+ dR++; gp[dR] = right;
452
452
  }
453
453
  }
454
454
  else {
455
- if (nd > 0.0) {
456
- dR++; gn[dR] = right;
455
+ if (ng > 0.0) {
456
+ dR++; gp[dR] = right;
457
457
  }
458
- if (oi > 0.0) {
459
- dR++; gn[dR] = left;
458
+ if (om > 0.0) {
459
+ dR++; gp[dR] = left;
460
460
  }
461
461
  }
462
462
  }
463
463
  }
464
464
  ` : ''}
465
465
  ${(blasLayoutMask & 2) !== 0 ? /* wgsl */ `
466
- if (gL == 1u) {
467
- let hT = bitcast<u32>(node);
468
- if ((hT & 0x80000000u) != 0u) {
469
- bh = i32((hT >> 23u) & 0xffu);
466
+ if (gN == 1u) {
467
+ let hS = bitcast<u32>(node);
468
+ if ((hS & 0x80000000u) != 0u) {
469
+ bh = i32((hS >> 23u) & 0xffu);
470
470
  primitiveOffset = bo + blasOffset
471
- + i32(hT & 0x007fffffu);
471
+ + i32(hS & 0x007fffffu);
472
472
  }
473
473
  else {
474
474
  let i = node + bo;
475
- let tW = bvhBuffer[i];
476
- let ra = bvhBuffer[i + 1];
477
- let rb = bvhBuffer[i + 2];
478
- let rc = bvhBuffer[i + 3];
479
- let nodeMin = tW.xyz;
480
- let ec = vec3f(tW.w, ra.x, ra.y);
481
- let lS = array<u32, 4>(
482
- bitcast<u32>(ra.z), bitcast<u32>(ra.w),
483
- bitcast<u32>(rb.x), bitcast<u32>(rb.y)
475
+ let ub = bvhBuffer[i];
476
+ let rf = bvhBuffer[i + 1];
477
+ let rh = bvhBuffer[i + 2];
478
+ let ri = bvhBuffer[i + 3];
479
+ let nodeMin = ub.xyz;
480
+ let ec = vec3f(ub.w, rf.x, rf.y);
481
+ let lV = array<u32, 4>(
482
+ bitcast<u32>(rf.z), bitcast<u32>(rf.w),
483
+ bitcast<u32>(rh.x), bitcast<u32>(rh.y)
484
484
  );
485
- let rj = unpack4x8unorm(bitcast<u32>(rb.z));
486
- let rk = unpack4x8unorm(bitcast<u32>(rb.w));
487
- let rl = unpack4x8unorm(bitcast<u32>(rc.x));
488
- let rf = unpack4x8unorm(bitcast<u32>(rc.y));
489
- let rh = unpack4x8unorm(bitcast<u32>(rc.z));
490
- let ri = unpack4x8unorm(bitcast<u32>(rc.w));
491
- let tx0 = (nodeMin.x + rj * ec.x - o.x) * gv.x;
492
- let tx1 = (nodeMin.x + rf * ec.x - o.x) * gv.x;
493
- let ty0 = (nodeMin.y + rk * ec.y - o.y) * gv.y;
494
- let ty1 = (nodeMin.y + rh * ec.y - o.y) * gv.y;
495
- let tz0 = (nodeMin.z + rl * ec.z - o.z) * gv.z;
496
- let tz1 = (nodeMin.z + ri * ec.z - o.z) * gv.z;
497
- let bJ = eV(gv, o);
498
- let my = max(
485
+ let ro = unpack4x8unorm(bitcast<u32>(rh.z));
486
+ let rp = unpack4x8unorm(bitcast<u32>(rh.w));
487
+ let rq = unpack4x8unorm(bitcast<u32>(ri.x));
488
+ let rl = unpack4x8unorm(bitcast<u32>(ri.y));
489
+ let rm = unpack4x8unorm(bitcast<u32>(ri.z));
490
+ let rn = unpack4x8unorm(bitcast<u32>(ri.w));
491
+ let tx0 = (nodeMin.x + ro * ec.x - o.x) * gx.x;
492
+ let tx1 = (nodeMin.x + rl * ec.x - o.x) * gx.x;
493
+ let ty0 = (nodeMin.y + rp * ec.y - o.y) * gx.y;
494
+ let ty1 = (nodeMin.y + rm * ec.y - o.y) * gx.y;
495
+ let tz0 = (nodeMin.z + rq * ec.z - o.z) * gx.z;
496
+ let tz1 = (nodeMin.z + rn * ec.z - o.z) * gx.z;
497
+ let bJ = eV(gx, o);
498
+ let mB = max(
499
499
  max((min(tx0, tx1) - vec4f(bJ.x)), (min(ty0, ty1) - vec4f(bJ.y))),
500
500
  (min(tz0, tz1) - vec4f(bJ.z))
501
501
  );
502
- let rH = min(
502
+ let rM = min(
503
503
  min((max(tx0, tx1) + vec4f(bJ.x)), (max(ty0, ty1) + vec4f(bJ.y))),
504
504
  (max(tz0, tz1) + vec4f(bJ.z))
505
505
  );
506
- var distance = select(rH, my, my > vec4f(0.0));
506
+ var distance = select(rM, mB, mB > vec4f(0.0));
507
507
  distance = select(
508
508
  distance,
509
509
  vec4f(-1.0),
510
- my > min(rH, vec4f(tMax))
510
+ mB > min(rM, vec4f(tMax))
511
511
  );
512
512
  var fa = array<f32, 4>(
513
513
  distance.x,
@@ -522,7 +522,7 @@ var dX = -1.0;
522
522
  var el = -1;
523
523
  for (var child = 0; child < 4; child++) {
524
524
  if (
525
- lS[child] != 0u &&
525
+ lV[child] != 0u &&
526
526
  fa[child] > dX
527
527
  ) {
528
528
  dX = fa[child];
@@ -530,13 +530,13 @@ el = child;
530
530
  }
531
531
  }
532
532
  if (el >= 0 && dX > 0.0) {
533
- let ni = lS[el];
534
- var jB = bitcast<i32>(ni);
535
- if ((ni & 0x80000000u) == 0u) {
536
- jB += blasOffset;
533
+ let nl = lV[el];
534
+ var jD = bitcast<i32>(nl);
535
+ if ((nl & 0x80000000u) == 0u) {
536
+ jD += blasOffset;
537
537
  }
538
538
  dR++;
539
- gn[dR] = jB;
539
+ gp[dR] = jD;
540
540
  fa[el] = -1.0;
541
541
  }
542
542
  }
@@ -544,7 +544,7 @@ fa[el] = -1.0;
544
544
  }
545
545
  ` : ''}
546
546
  ${(blasLayoutMask & 1) !== 0 ? /* wgsl */ `
547
- if (gL == 0u) {
547
+ if (gN == 0u) {
548
548
  let i = node + bo;
549
549
  let r1 = bvhBuffer[i];
550
550
  let bb = bitcast<i32>(r1.w);
@@ -556,34 +556,34 @@ let d0 = cM(
556
556
  o,
557
557
  bvhBuffer[left + bo].xyz,
558
558
  bvhBuffer[left + 1 + bo].xyz,
559
- gv,
559
+ gx,
560
560
  tMax
561
561
  );
562
562
  let d1 = cM(
563
563
  o,
564
564
  bvhBuffer[right + bo].xyz,
565
565
  bvhBuffer[right + 1 + bo].xyz,
566
- gv,
566
+ gx,
567
567
  tMax
568
568
  );
569
569
 
570
570
  if (d0 > d1) {
571
571
  if (d0 > 0.0) {
572
- dR++; gn[dR] = left;
572
+ dR++; gp[dR] = left;
573
573
 
574
574
  }
575
575
  if (d1 > 0.0) {
576
- dR++; gn[dR] = right;
576
+ dR++; gp[dR] = right;
577
577
 
578
578
  }
579
579
  }
580
580
  else {
581
581
  if (d1 > 0.0) {
582
- dR++; gn[dR] = right;
582
+ dR++; gp[dR] = right;
583
583
 
584
584
  }
585
585
  if (d0 > 0.0) {
586
- dR++; gn[dR] = left;
586
+ dR++; gp[dR] = left;
587
587
 
588
588
  }
589
589
  }
@@ -639,7 +639,7 @@ return t2;
639
639
  return INF;
640
640
  }
641
641
 
642
- fn mR(pos: vec3f, u: vec3f, v: vec3f, n: vec3f, r: Ray) -> f32 {
642
+ fn mU(pos: vec3f, u: vec3f, v: vec3f, n: vec3f, r: Ray) -> f32 {
643
643
  let dt: f32 = dot(r.d, n);
644
644
  let t: f32 = (dot(n, pos) - dot(n, r.o)) / dt;
645
645
 
@@ -661,12 +661,12 @@ return INF;
661
661
  fn sphereSolidAnglePdf(origin: vec3f, center: vec3f, radius: f32) -> f32 {
662
662
  let aj = distance(origin, center);
663
663
  if (aj <= radius) { return INV4PI; }
664
- let jn = min(1.0, radius * radius / (aj * aj));
665
- let cosThetaMax = sqrt(max(0.0, 1.0 - jn));
664
+ let jp = min(1.0, radius * radius / (aj * aj));
665
+ let cosThetaMax = sqrt(max(0.0, 1.0 - jp));
666
666
  return 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
667
667
  }
668
668
 
669
- fn mk(r: Ray, light: Light, lightSample: ptr<function, LightSampleRec>) -> f32 {
669
+ fn mo(r: Ray, light: Light, lightSample: ptr<function, LightSampleRec>) -> f32 {
670
670
 
671
671
 
672
672
  var d: f32 = INF;
@@ -688,7 +688,7 @@ if (dot(normal, r.d) > 0.0) {
688
688
  return INF;
689
689
  }
690
690
 
691
- d = mR(pos, u, v, normal, r);
691
+ d = mU(pos, u, v, normal, r);
692
692
  if (d < 0.0) {
693
693
  d = INF;
694
694
  }
@@ -711,9 +711,9 @@ d = INF;
711
711
 
712
712
  else if (dO == SPHERE_LIGHT) {
713
713
  if (light.radiusOrSpread <= 0.0) {
714
- let kf = light.position - r.o;
715
- let projection = dot(kf, r.d);
716
- let ba = kf - projection * r.d;
714
+ let kh = light.position - r.o;
715
+ let projection = dot(kh, r.d);
716
+ let ba = kh - projection * r.d;
717
717
  if (projection <= EPS || dot(ba, ba) > 1e-8) {
718
718
  return INF;
719
719
  }
@@ -756,9 +756,9 @@ light.radiusOrSpread <= 0.0
756
756
 
757
757
  else if (dO == SPOT_LIGHT) {
758
758
  if (light.radiusOrSpread <= 0.0) {
759
- let kf = light.position - r.o;
760
- let projection = dot(kf, r.d);
761
- let ba = kf - projection * r.d;
759
+ let kh = light.position - r.o;
760
+ let projection = dot(kh, r.d);
761
+ let ba = kh - projection * r.d;
762
762
  if (projection <= EPS || dot(ba, ba) > 1e-8) {
763
763
  return INF;
764
764
  }
@@ -774,9 +774,9 @@ d = ht(light.radiusOrSpread, light.position, r);
774
774
  (*lightSample).isDelta = false;
775
775
  }
776
776
  if (d != INF) {
777
- let uS = r.o + d * r.d;
778
- let mo = bL(light, normalize(r.o - uS));
779
- if (mo <= 0.0) { return INF; }
777
+ let uX = r.o + d * r.d;
778
+ let mr = bL(light, normalize(r.o - uX));
779
+ if (mr <= 0.0) { return INF; }
780
780
  if (light.radiusOrSpread > 0.0) {
781
781
  (*lightSample).direction = r.d;
782
782
  (*lightSample).dist = d;
@@ -785,7 +785,7 @@ r.o + r.d * d - light.position
785
785
  );
786
786
  (*lightSample).pdf = sphereSolidAnglePdf(r.o, light.position, light.radiusOrSpread);
787
787
  }
788
- (*lightSample).emission = light.emission * mo * select(
788
+ (*lightSample).emission = light.emission * mr * select(
789
789
  1.0,
790
790
  1.0 / max(d * d, 1e-8),
791
791
  light.radiusOrSpread <= 0.0
@@ -821,44 +821,44 @@ var w20 = m20.y * eZ.z;
821
821
  var w21 = m21.y * eZ.z;
822
822
  var w22 = m22.y * eZ.z;
823
823
 
824
- var he = w00 + w01 + w02 + w10 + w11 + w12 + w20 + w21 + w22;
824
+ var hg = w00 + w01 + w02 + w10 + w11 + w12 + w20 + w21 + w22;
825
825
 
826
- w00 = w00 / he;
827
- w01 = w01 / he + w00;
828
- w02 = w02 / he + w01;
829
- w10 = w10 / he + w02;
830
- w11 = w11 / he + w10;
831
- w12 = w12 / he + w11;
832
- w20 = w20 / he + w12;
833
- w21 = w21 / he + w20;
834
- w22 = w22 / he + w21;
826
+ w00 = w00 / hg;
827
+ w01 = w01 / hg + w00;
828
+ w02 = w02 / hg + w01;
829
+ w10 = w10 / hg + w02;
830
+ w11 = w11 / hg + w10;
831
+ w12 = w12 / hg + w11;
832
+ w20 = w20 / hg + w12;
833
+ w21 = w21 / hg + w20;
834
+ w22 = w22 / hg + w21;
835
835
 
836
836
  let rand = eo(0u);
837
- var mS: f32;
837
+ var mV: f32;
838
838
  if (rand < w00) {
839
- mS = m00.x;
839
+ mV = m00.x;
840
840
  } else if (rand < w01) {
841
- mS = m01.x;
841
+ mV = m01.x;
842
842
  } else if (rand < w02) {
843
- mS = m02.x;
843
+ mV = m02.x;
844
844
  } else if (rand < w10) {
845
- mS = m10.x;
845
+ mV = m10.x;
846
846
  } else if (rand < w11) {
847
- mS = m11.x;
847
+ mV = m11.x;
848
848
  } else if (rand < w12) {
849
- mS = m12.x;
849
+ mV = m12.x;
850
850
  } else if (rand < w20) {
851
- mS = m20.x;
851
+ mV = m20.x;
852
852
  } else if (rand < w21) {
853
- mS = m21.x;
853
+ mV = m21.x;
854
854
  } else {
855
- mS = m22.x;
855
+ mV = m22.x;
856
856
  }
857
- return i32(mS);
857
+ return i32(mV);
858
858
  }
859
859
 
860
- fn lJ(
861
- oN: i32,
860
+ fn lM(
861
+ oR: i32,
862
862
  index: vec3i,
863
863
  eZ: vec3f
864
864
  ) -> i32 {
@@ -868,31 +868,31 @@ let m2 = vec3i(attrBuffers[index.z * ATTR_STRIDE + MATERIALINDEX_OFF]${hasAnisot
868
868
  if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
869
869
  return fj(m0, m1, m2, eZ);
870
870
  }
871
- return oN;
871
+ return oR;
872
872
  }
873
873
 
874
874
 
875
875
 
876
876
  ${hasAnisotropyDirections ? /* wgsl */ `
877
- fn eD(normal: vec3f, dp1: vec3f, dp2: vec3f, nP: vec2f, nQ: vec2f, input: vec4f) -> mat2x3f {
878
- let determinant = nP.x * nQ.y - nP.y * nQ.x;
877
+ fn eD(normal: vec3f, dp1: vec3f, dp2: vec3f, nS: vec2f, nT: vec2f, input: vec4f) -> mat2x3f {
878
+ let determinant = nS.x * nT.y - nS.y * nT.x;
879
879
  var t = input.xyz;
880
880
  var b = vec3f(0.0);
881
881
 
882
882
  var sign = select(input.w, 0.0, abs(input.w) > 1.5);
883
883
  if (abs(determinant) > 1e-12) {
884
- let dt = (dp1 * nQ.y - dp2 * nP.y) / determinant;
885
- let db = (dp2 * nP.x - dp1 * nQ.x) / determinant;
884
+ let dt = (dp1 * nT.y - dp2 * nS.y) / determinant;
885
+ let db = (dp2 * nS.x - dp1 * nT.x) / determinant;
886
886
  if (dot(t, t) < 1e-8) { t = dt; }
887
887
  if (sign == 0.0) { sign = select(1.0, -1.0, dot(cross(normal, dt), db) < 0.0); }
888
888
  }
889
889
  t -= normal * dot(normal, t);
890
890
  if (dot(t, t) < 1e-8) {
891
- let ig = select(-1.0, 1.0, normal.z >= 0.0);
892
- let dW = -1.0 / (ig + normal.z);
891
+ let ie = select(-1.0, 1.0, normal.z >= 0.0);
892
+ let dW = -1.0 / (ie + normal.z);
893
893
  let xy = normal.x * normal.y * dW;
894
- t = vec3f(1.0 + ig * normal.x * normal.x * dW, ig * xy, -ig * normal.x);
895
- b = vec3f(xy, ig + normal.y * normal.y * dW, -normal.y);
894
+ t = vec3f(1.0 + ie * normal.x * normal.x * dW, ie * xy, -ie * normal.x);
895
+ b = vec3f(xy, ie + normal.y * normal.y * dW, -normal.y);
896
896
  }
897
897
  else { t = normalize(t); b = normalize(cross(normal, t)); }
898
898
  return mat2x3f(t, b * select(1.0, -1.0, sign < 0.0));
@@ -915,22 +915,22 @@ let uvProjection = i32(material.uvProjection);
915
915
  let i0 = index.x;
916
916
  let i1 = index.y;
917
917
  let i2 = index.z;
918
- let oL = uvProjection == ${uvProjectionConstants.spherical};
918
+ let oP = uvProjection == ${uvProjectionConstants.spherical};
919
919
 
920
920
  var normal: vec3f = (*si).normal;
921
- var gU: vec3f;
921
+ var gV: vec3f;
922
922
  var n0 = vec3f(0.0);
923
923
  var n1 = vec3f(0.0);
924
924
  var n2 = vec3f(0.0);
925
925
 
926
926
 
927
- if (!bU || oL) {
927
+ if (!bU || oP) {
928
928
  n0 = attrBuffers[i0 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
929
929
  n1 = attrBuffers[i1 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
930
930
  n2 = attrBuffers[i2 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
931
- gU = normalize(eZ.x * n0 + eZ.y * n1 + eZ.z * n2);
931
+ gV = normalize(eZ.x * n0 + eZ.y * n1 + eZ.z * n2);
932
932
  if (!bU) {
933
- normal = gU;
933
+ normal = gV;
934
934
  }
935
935
  }
936
936
 
@@ -965,7 +965,7 @@ if (fq >= 0) {
965
965
  (*si).materialIndex = fq;
966
966
  }
967
967
  else {
968
- (*si).materialIndex = lJ(
968
+ (*si).materialIndex = lM(
969
969
  (*si).materialIndex,
970
970
  index,
971
971
  eZ
@@ -974,7 +974,7 @@ eZ
974
974
 
975
975
  if (uvProjection > 0) {
976
976
 
977
- uv = gz(uvProjection, (*si).position, select(normal, gU, oL));
977
+ uv = gC(uvProjection, (*si).position, select(normal, gV, oP));
978
978
  cX = uv;
979
979
  }
980
980
 
@@ -1012,21 +1012,21 @@ fU = eD(normal, dp1, dp2, a-c, b-c, select(aU, vec4f(0.0), aU.w == 0.0));
1012
1012
  (*si).directionBitangent = fU[1];
1013
1013
  ${hasCoatNormals ? /* wgsl */ `
1014
1014
  if (USE_COAT_NORMAL_MAPS && directionMaterial.coatNormalMapIndex >= 0.0) {
1015
- let kq = i32(directionMaterial.coatNormalMapIndex);
1016
- var lT = eP;
1017
- if (USE_UV1 && mapInfo[kq + NUM_MAPS * 2].x > 0.5) {
1015
+ let ku = i32(directionMaterial.coatNormalMapIndex);
1016
+ var lW = eP;
1017
+ if (USE_UV1 && mapInfo[ku + NUM_MAPS * 2].x > 0.5) {
1018
1018
  let a = attrBuffers[i0 * ATTR_STRIDE + UV1_OFF].xy;
1019
1019
  let b = attrBuffers[i1 * ATTR_STRIDE + UV1_OFF].xy;
1020
1020
  let c = attrBuffers[i2 * ATTR_STRIDE + UV1_OFF].xy;
1021
- lT = eD(normal, dp1, dp2, a-c, b-c,
1021
+ lW = eD(normal, dp1, dp2, a-c, b-c,
1022
1022
  select(aU, vec4f(0.0), aU.w == 0.0));
1023
1023
  }
1024
1024
 
1025
1025
 
1026
- let decoded = sampleMap(kq, getMapUvSet(kq, uv,
1026
+ let decoded = sampleMap(ku, getMapUvSet(ku, uv,
1027
1027
  select(cX, uv, uvProjection > 0))).rgb * 2.0 - 1.0;
1028
- let mapped = lT[0] * decoded.x * directionMaterial.coatNormalScale.x
1029
- + lT[1] * decoded.y * directionMaterial.coatNormalScale.y + normal * decoded.z;
1028
+ let mapped = lW[0] * decoded.x * directionMaterial.coatNormalScale.x
1029
+ + lW[1] * decoded.y * directionMaterial.coatNormalScale.y + normal * decoded.z;
1030
1030
  if (dot(mapped, mapped) > 1e-12) { (*si).coatNormal = normalize(mapped); }
1031
1031
  }
1032
1032
  ` : ''}
@@ -1041,14 +1041,14 @@ if (!bU) {
1041
1041
 
1042
1042
 
1043
1043
  let geometricNormal = normalize(cross(tri.p1 - tri.p0, tri.p2 - tri.p0));
1044
- let kd = eZ.x * n0 + eZ.y * n1 + eZ.z * n2;
1044
+ let kf = eZ.x * n0 + eZ.y * n1 + eZ.z * n2;
1045
1045
  let a = dot(n2 - n0, tri.p0 - tri.p2);
1046
1046
  let b = dot(n2 - n1, tri.p1 - tri.p2);
1047
1047
  let c = dot(n1 - n0, tri.p1 - tri.p0);
1048
1048
  var h = a * eZ.x * (eZ.x - 1.0)
1049
1049
  + (a + b + c) * eZ.x * eZ.y
1050
1050
  + b * eZ.y * (eZ.y - 1.0);
1051
- if (dot(kd, geometricNormal) > 0.0) {
1051
+ if (dot(kf, geometricNormal) > 0.0) {
1052
1052
  var h0 = max(max(dot(tri.p1 - tri.p0, n0), dot(tri.p2 - tri.p0, n0)), 0.0);
1053
1053
  var h1 = max(max(dot(tri.p0 - tri.p1, n1), dot(tri.p2 - tri.p1, n1)), 0.0);
1054
1054
  var h2 = max(max(dot(tri.p0 - tri.p2, n2), dot(tri.p1 - tri.p2, n2)), 0.0);
@@ -1066,17 +1066,17 @@ h1 = max(dot((*si).position - tri.p1, n1) + h1, 0.0);
1066
1066
  h2 = max(dot((*si).position - tri.p2, n2) + h2, 0.0);
1067
1067
  h = min(-min(min(h0, h1), h2), h * 0.5);
1068
1068
  }
1069
- (*si).shadowOffset = kd * h;
1069
+ (*si).shadowOffset = kf * h;
1070
1070
  }
1071
1071
  (*si).uv = uv;
1072
1072
  (*si).uv1 = cX;
1073
1073
  if (USE_NORMAL_MAPS) {
1074
1074
  let dp1 = tri.p0 - tri.p2;
1075
1075
  let dp2 = tri.p1 - tri.p2;
1076
- let nP = uv0 - uv2;
1077
- let nQ = uv1 - uv2;
1078
- (*si).normal = nY(
1079
- (*si).materialIndex, uv, normal, dp1, dp2, nP, nQ
1076
+ let nS = uv0 - uv2;
1077
+ let nT = uv1 - uv2;
1078
+ (*si).normal = ob(
1079
+ (*si).materialIndex, uv, normal, dp1, dp2, nS, nT
1080
1080
  );
1081
1081
  }
1082
1082
  }
@@ -1090,7 +1090,7 @@ barycentric: vec3f,
1090
1090
 
1091
1091
 
1092
1092
 
1093
- fn fI(o: vec3f, d: vec3f, tri: fu, ey: i32, gJ: vec3f, tMax: f32) -> eB {
1093
+ fn fI(o: vec3f, d: vec3f, tri: fu, ey: i32, gL: vec3f, tMax: f32) -> eB {
1094
1094
  var ti: eB;
1095
1095
 
1096
1096
 
@@ -1111,9 +1111,9 @@ p2t = p2t.zxy;
1111
1111
 
1112
1112
 
1113
1113
 
1114
- p0t = vec3f(p0t.xy + gJ.xy * p0t.z, p0t.z);
1115
- p1t = vec3f(p1t.xy + gJ.xy * p1t.z, p1t.z);
1116
- p2t = vec3f(p2t.xy + gJ.xy * p2t.z, p2t.z);
1114
+ p0t = vec3f(p0t.xy + gL.xy * p0t.z, p0t.z);
1115
+ p1t = vec3f(p1t.xy + gL.xy * p1t.z, p1t.z);
1116
+ p2t = vec3f(p2t.xy + gL.xy * p2t.z, p2t.z);
1117
1117
 
1118
1118
 
1119
1119
  var e = vec3f(
@@ -1125,9 +1125,9 @@ p0t.x * p1t.y - p0t.y * p1t.x
1125
1125
  if (DEPTH_QUERY_MODE) {
1126
1126
 
1127
1127
 
1128
- let ro = abs(vec3f(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
1128
+ let rt = abs(vec3f(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
1129
1129
  + abs(vec3f(p1t.y * p2t.x, p2t.y * p0t.x, p0t.y * p1t.x));
1130
- e = select(e, vec3f(0.0), abs(e) <= ro * 1e-6);
1130
+ e = select(e, vec3f(0.0), abs(e) <= rt * 1e-6);
1131
1131
  }
1132
1132
 
1133
1133
 
@@ -1138,19 +1138,19 @@ return ti;
1138
1138
  let det = e.x + e.y + e.z;
1139
1139
  if (DEPTH_QUERY_MODE && det == 0.0) { return ti; }
1140
1140
 
1141
- p0t.z *= gJ.z;
1142
- p1t.z *= gJ.z;
1143
- p2t.z *= gJ.z;
1144
- let qZ = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
1141
+ p0t.z *= gL.z;
1142
+ p1t.z *= gL.z;
1143
+ p2t.z *= gL.z;
1144
+ let rd = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
1145
1145
 
1146
1146
 
1147
- if (abs(qZ) > abs(tMax * det)) {
1147
+ if (abs(rd) > abs(tMax * det)) {
1148
1148
  return ti;
1149
1149
  }
1150
1150
 
1151
- let sg = 1. / det;
1152
- ti.t = qZ * sg;
1153
- ti.barycentric = e * sg;
1151
+ let sm = 1. / det;
1152
+ ti.t = rd * sm;
1153
+ ti.barycentric = e * sm;
1154
1154
 
1155
1155
  return ti;
1156
1156
  }
@@ -1165,21 +1165,21 @@ if (!DEPTH_QUERY_MODE) { return 1.0 / d; }
1165
1165
  return 1.0 / select(d, select(vec3f(1e-20), vec3f(-1e-20), d < vec3f(0.0)), abs(d) < vec3f(1e-20));
1166
1166
  }
1167
1167
 
1168
- fn eV(gv: vec3f, o: vec3f) -> vec3f {
1168
+ fn eV(gx: vec3f, o: vec3f) -> vec3f {
1169
1169
  if (!DEPTH_QUERY_MODE) { return vec3f(0.0); }
1170
- return abs(gv) * max(vec3f(1.0), abs(o)) * 1e-6;
1170
+ return abs(gx) * max(vec3f(1.0), abs(o)) * 1e-6;
1171
1171
  }
1172
1172
 
1173
1173
 
1174
1174
 
1175
- fn cM(o: vec3f, vx: vec3f, vw: vec3f, gv: vec3f, tMax: f32) -> f32 {
1176
- let uF = (vx - o) * gv;
1177
- let uG = (vw - o) * gv;
1178
- let bJ = eV(gv, o);
1179
- let my = min(uF, uG) - bJ;
1180
- let rH = max(uF, uG) + bJ;
1181
- let t0 = max(my.x, max(my.y, my.z));
1182
- let t1 = min(rH.x, min(rH.y, rH.z));
1175
+ fn cM(o: vec3f, vD: vec3f, vC: vec3f, gx: vec3f, tMax: f32) -> f32 {
1176
+ let uK = (vD - o) * gx;
1177
+ let uL = (vC - o) * gx;
1178
+ let bJ = eV(gx, o);
1179
+ let mB = min(uK, uL) - bJ;
1180
+ let rM = max(uK, uL) + bJ;
1181
+ let t0 = max(mB.x, max(mB.y, mB.z));
1182
+ let t1 = min(rM.x, min(rM.y, rM.z));
1183
1183
  return select(select(t1, t0, t0 > 0.0), -1.0, (t0 > t1 || t0 > tMax));
1184
1184
  }
1185
1185
 
@@ -1187,7 +1187,7 @@ fn maxDimension(v: vec3f) -> i32 {
1187
1187
  return select(select(2, 1, v.y > v.z), select(2, 0, v.x > v.z), v.x > v.y);
1188
1188
  }
1189
1189
 
1190
- fn mg(d: vec3f, ey: i32) -> vec3f {
1190
+ fn mj(d: vec3f, ey: i32) -> vec3f {
1191
1191
 
1192
1192
 
1193
1193
  if (ey == 0) {
@@ -1199,9 +1199,9 @@ return vec3f(-d.x, -d.y, 1.0) / d.z;
1199
1199
  }
1200
1200
  }
1201
1201
 
1202
- fn lU(
1202
+ fn lX(
1203
1203
  si: ptr<function, ad>,
1204
- lm: fu,
1204
+ lp: fu,
1205
1205
  aB: vec3f,
1206
1206
  hs: vec3i,
1207
1207
  bU: bool,
@@ -1221,7 +1221,7 @@ bitcast<i32>(instancesBuffer[ao * ${INSTANCE_VEC4_STRIDE}].z)
1221
1221
 
1222
1222
  hp(
1223
1223
  si,
1224
- lm,
1224
+ lp,
1225
1225
  aB,
1226
1226
  hs,
1227
1227
  bU,
@@ -1269,7 +1269,7 @@ ${createIntersectionAlphaWgsl(hasAnisotropyDirections)}
1269
1269
 
1270
1270
 
1271
1271
 
1272
- fn cY(ray: Ray, si: ptr<function, ad>, bounces: i32, doubleSided: bool, ln: bool) {
1272
+ fn cY(ray: Ray, si: ptr<function, ad>, bounces: i32, doubleSided: bool, lq: bool) {
1273
1273
 
1274
1274
  (*si).hit = false;
1275
1275
 
@@ -1279,24 +1279,24 @@ return;
1279
1279
 
1280
1280
  var tMax = RAY_MAX_DISTANCE;
1281
1281
  var ey: i32;
1282
- var gJ: vec3f;
1282
+ var gL: vec3f;
1283
1283
 
1284
1284
  var hs: vec3i;
1285
- var lm: fu;
1285
+ var lp: fu;
1286
1286
  var ao: i32;
1287
- var hL: i32 = (*si).triangleIndex;
1287
+ var hK: i32 = (*si).triangleIndex;
1288
1288
 
1289
1289
  ${getBVHTraverseCode(`
1290
1290
  (*si).triangleIndex = triangleIndex;
1291
- lm = tri;
1291
+ lp = tri;
1292
1292
  hs = index;
1293
1293
  ao = cf;
1294
1294
  `, hasDisplacement, false, blasLayoutMask, hasAnisotropyDirections)}
1295
1295
 
1296
- if (qP) {
1297
- lU(
1296
+ if (qT) {
1297
+ lX(
1298
1298
  si,
1299
- lm,
1299
+ lp,
1300
1300
  aB,
1301
1301
  hs,
1302
1302
  bU,
@@ -1309,7 +1309,7 @@ eU,
1309
1309
  }
1310
1310
 
1311
1311
 
1312
- fn iG(ray: Ray, si: ptr<function, ad>, instanceIndex: i32, maxDistance: f32) {
1312
+ fn iH(ray: Ray, si: ptr<function, ad>, instanceIndex: i32, maxDistance: f32) {
1313
1313
  (*si).hit = false;
1314
1314
 
1315
1315
  if (rtUniform.isEmpty > 0) {
@@ -1318,18 +1318,18 @@ return;
1318
1318
 
1319
1319
  let bounces = 0;
1320
1320
  let doubleSided = true;
1321
- let ln = false;
1321
+ let lq = false;
1322
1322
  var tMax = maxDistance;
1323
1323
  var ey: i32;
1324
- var gJ: vec3f;
1324
+ var gL: vec3f;
1325
1325
  var hs: vec3i;
1326
- var lm: fu;
1326
+ var lp: fu;
1327
1327
  var ao: i32;
1328
- var hL: i32 = -1;
1328
+ var hK: i32 = -1;
1329
1329
 
1330
1330
  ${getBVHTraverseCode(`
1331
1331
  (*si).triangleIndex = triangleIndex;
1332
- lm = tri;
1332
+ lp = tri;
1333
1333
  hs = index;
1334
1334
  ao = cf;
1335
1335
  `, hasDisplacement, false, blasLayoutMask, hasAnisotropyDirections, `
@@ -1338,14 +1338,14 @@ continue;
1338
1338
  }
1339
1339
  `)}
1340
1340
 
1341
- if (qP) {
1341
+ if (qT) {
1342
1342
  (*si).instanceIndex = ao;
1343
1343
  (*si).normal = eC;
1344
1344
  (*si).position = eU;
1345
1345
  (*si).materialIndex = i32(ae(bitcast<i32>(instancesBuffer[ao * ${INSTANCE_VEC4_STRIDE}].z)).x);
1346
1346
  hp(
1347
1347
  si,
1348
- lm,
1348
+ lp,
1349
1349
  aB,
1350
1350
  hs,
1351
1351
  bU,
@@ -1387,32 +1387,32 @@ ${hasAnisotropyDirections ? /* wgsl */ `
1387
1387
  }
1388
1388
  }
1389
1389
 
1390
- fn ex(ray: Ray, lightDistance: f32, jE: i32) -> bool {
1390
+ fn ex(ray: Ray, lightDistance: f32, jG: i32) -> bool {
1391
1391
  if (rtUniform.isEmpty > 0) {
1392
1392
  return false;
1393
1393
  }
1394
1394
 
1395
1395
  let doubleSided = true;
1396
- let qc = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
1397
- var tMax = qc;
1396
+ let qg = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
1397
+ var tMax = qg;
1398
1398
  var ey: i32;
1399
- var gJ: vec3f;
1399
+ var gL: vec3f;
1400
1400
 
1401
1401
  let bounces = 1;
1402
- var ln = false;
1403
- var hL: i32 = jE;
1402
+ var lq = false;
1403
+ var hK: i32 = jG;
1404
1404
 
1405
1405
  ${getBVHTraverseCode(
1406
1406
  /*wgsl */ `
1407
1407
 
1408
1408
 
1409
1409
 
1410
- var jl = true;
1410
+ var jn = true;
1411
1411
 
1412
- if (jl) {
1412
+ if (jn) {
1413
1413
  if (HAS_ALPHA) {
1414
- let materialIndex = i32(ae(bitcast<i32>(od.z)).x);
1415
- if (!nl(
1414
+ let materialIndex = i32(ae(bitcast<i32>(oh.z)).x);
1415
+ if (!nr(
1416
1416
  materialIndex,
1417
1417
  index,
1418
1418
  aB,
@@ -1420,12 +1420,12 @@ eU,
1420
1420
  eC
1421
1421
  )) {
1422
1422
 
1423
- tMax = qc;
1424
- jl = false;
1423
+ tMax = qg;
1424
+ jn = false;
1425
1425
  }
1426
1426
  }
1427
1427
  }
1428
- if (jl) {
1428
+ if (jn) {
1429
1429
  return true;
1430
1430
  }
1431
1431
  `, hasDisplacement, true, blasLayoutMask, hasAnisotropyDirections)}