@meimu/mutracer 0.1.4 → 0.1.5

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 (67) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +1425 -1421
  3. package/docs/api.md +2 -1
  4. package/docs/materials.md +17 -26
  5. package/docs/threejs.md +5 -5
  6. package/docs/viewer.md +36 -3
  7. package/lib/oidn.d.ts +1 -1
  8. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  9. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  10. package/lib/renderer/WGPUJNLMDenoiser.js +35 -35
  11. package/lib/renderer/WGPURayTraceOutput.js +4 -4
  12. package/lib/renderer/WGPURayTracePass.js +5 -3
  13. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  14. package/lib/renderer/WGPURenderingPipeline.js +7 -7
  15. package/lib/renderer/WebGLJNLMDenoiser.js +36 -36
  16. package/lib/renderer/WebGLRayTracePass.js +1 -0
  17. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  18. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +8 -8
  19. package/lib/renderer/glsl/chunks/envMap.glsl.js +26 -26
  20. package/lib/renderer/glsl/chunks/intersect.glsl.js +141 -139
  21. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  22. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +56 -55
  23. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  24. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +144 -144
  25. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  26. package/lib/renderer/glsl/chunks/random.glsl.js +1 -1
  27. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +14 -14
  28. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  29. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +19 -19
  30. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +46 -46
  31. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  32. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +6 -6
  33. package/lib/renderer/glsl/chunks/sampling.glsl.js +33 -33
  34. package/lib/renderer/glsl/chunks/sobol.glsl.js +7 -7
  35. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +1 -1
  36. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  37. package/lib/renderer/glsl/rayTrace.frag.js +67 -67
  38. package/lib/renderer/glsl/shadowCatcher.frag.js +3 -3
  39. package/lib/renderer/glsl/webglPipeline.frag.js +26 -26
  40. package/lib/renderer/scratchSampling.js +16 -16
  41. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +14 -14
  42. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +178 -178
  43. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  44. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +3 -3
  45. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +24 -23
  46. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  47. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +160 -160
  48. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +12 -12
  49. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +5 -5
  50. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +44 -44
  51. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +69 -69
  52. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +3 -3
  53. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +33 -33
  54. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +7 -7
  55. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +1 -1
  56. package/lib/renderer/wgsl/compose.frag.wgsl.js +54 -54
  57. package/lib/renderer/wgsl/customDenoise.wgsl.js +6 -6
  58. package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
  59. package/lib/renderer/wgsl/offlineAdaptive.compute.js +5 -5
  60. package/lib/renderer/wgsl/rayTrace.compute.js +103 -103
  61. package/lib/scene/OpenPBRMaterial.d.ts +1 -1
  62. package/lib/scene/OpenPBRMaterial.js +1 -1
  63. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  64. package/lib/version.d.ts +1 -1
  65. package/lib/version.js +1 -1
  66. package/lib/version.js.map +1 -1
  67. package/package.json +1 -1
@@ -8,12 +8,12 @@ import { createIntersectionAlphaWgsl } from './intersectionAlpha.wgsl.js';
8
8
  const displacementWgsl = pdm_displacementWgsl;
9
9
  const flatIntersectCode = function () {
10
10
  return /* wgsl */ `
11
- let hit = fL(o, d, tri, ey, gP, tMax);
11
+ let hit = fM(o, d, tri, ey, gQ, 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
  eD = normalize(cross(e1, e2));
16
- let kk = i32(ae(bitcast<i32>(ou.z)).x);
16
+ let kk = i32(ae(bitcast<i32>(ot.z)).x);
17
17
  let iN = materialsBuffer[kk].doubleSided > 0.5;
18
18
  if (!doubleSided && !iN && dot(eD, d) > 0.0) {
19
19
  eD = vec3f(0.0);
@@ -22,7 +22,7 @@ continue;
22
22
 
23
23
  tMax = hit.t;
24
24
  rb = true;
25
- ox = true;
25
+ ow = true;
26
26
  eY = o + tMax * d;
27
27
  aB = hit.barycentric;
28
28
  }
@@ -44,17 +44,17 @@ matData.displacementStepSize,
44
44
  i32(matData.displacementUvProjection),
45
45
  displacementUvProjectionScale,
46
46
  ${anyHit ? 'true' : 'false'},
47
- lD
47
+ lC
48
48
  );
49
49
  `;
50
50
  }
51
51
  const displacementIntersectCode = function (anyHit, hasAnisotropyDirections) {
52
52
  return /* wgsl */ `
53
53
 
54
- let hScale = ou.w;
54
+ let hScale = ot.w;
55
55
  let tA = bitcast<i32>(r3.w);
56
56
 
57
- let materialIndex = i32(ae(bitcast<i32>(ou.z)).x);
57
+ let materialIndex = i32(ae(bitcast<i32>(ot.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' : ''});
@@ -88,7 +88,7 @@ eY = o + tMax * d;
88
88
 
89
89
  bU = true;
90
90
  rb = true;
91
- ox = true;
91
+ ow = true;
92
92
  }
93
93
  }
94
94
  else {
@@ -116,16 +116,16 @@ fn kx(value: u32) -> u32 {
116
116
  return (bitcast<u32>(f32(value)) >> 23u) - 127u;
117
117
  }
118
118
 
119
- fn nZ(value: u32) -> u32 {
119
+ fn nY(value: u32) -> u32 {
120
120
  return (bitcast<u32>(f32(value)) >> 23u) - 127u;
121
121
  }
122
122
 
123
- fn ov(
123
+ fn ou(
124
124
  node: i32,
125
125
  tk: i32,
126
126
  n0: vec4f,
127
127
  o: vec3f,
128
- gC: vec3f,
128
+ gE: vec3f,
129
129
  tMax: f32
130
130
  ) -> u32 {
131
131
  let i = node + tk;
@@ -141,9 +141,9 @@ bitcast<f32>(u32(rG + 127) << 23u),
141
141
  bitcast<f32>(u32(rH + 127) << 23u),
142
142
  bitcast<f32>(u32(rI + 127) << 23u)
143
143
  );
144
- let bJ = eZ(gC, o);
145
- let eI = (n0.xyz - o) * gC;
146
- let dc = hJ * gC;
144
+ let bJ = eZ(gE, o);
145
+ let eI = (n0.xyz - o) * gE;
146
+ let dc = hJ * gE;
147
147
  let wy = bp(bitcast<u32>(n2.x));
148
148
  let wB = bp(bitcast<u32>(n2.y));
149
149
  let wC = bp(bitcast<u32>(n2.z));
@@ -202,8 +202,8 @@ return select(0u, 1u, uK.x)
202
202
  `;
203
203
  function getBVHTraverseCode(handleHitCode, hasDisplacement, anyHit, blasLayoutMask, hasAnisotropyDirections, skipTriangleCode = '') {
204
204
  const intersectTriangles = /* wgsl */ `
205
- let ou = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
206
- let vertexOffset = vec3i(bitcast<i32>(ou.y));
205
+ let ot = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
206
+ let vertexOffset = vec3i(bitcast<i32>(ot.y));
207
207
  for (var k = 0; k < bh; k++) {
208
208
  let triangleIndex = primitiveOffset + k;
209
209
  ${skipTriangleCode}
@@ -213,17 +213,17 @@ continue;
213
213
 
214
214
  let r3 = bvhBuffer[triangleIndex];
215
215
  let index = bitcast<vec3i>(r3.xyz) + vertexOffset;
216
- var tri = fA(
216
+ var tri = fB(
217
217
  attrBuffers[index.x * ATTR_STRIDE + POSITION_OFF]${hasAnisotropyDirections ? '.xyz' : ''},
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 ox = false;
221
+ var ow = false;
222
222
 
223
223
  ${hasDisplacement
224
224
  ? displacementIntersectCode(anyHit, hasAnisotropyDirections)
225
225
  : flatIntersectCode()}
226
- if (ox) {
226
+ if (ow) {
227
227
  ${handleHitCode}
228
228
  }
229
229
  }
@@ -231,9 +231,9 @@ ${handleHitCode}
231
231
  return /* wgsl */ `
232
232
  var d = ray.d;
233
233
  var o = ray.o;
234
- var mb: array<i32, TLAS_STACK_SIZE>;
234
+ var lZ: array<i32, TLAS_STACK_SIZE>;
235
235
  var jh = -1;
236
- var gC = fb(d);
236
+ var gE = fb(d);
237
237
  var bU = false;
238
238
  var rb = false;
239
239
  var eY: vec3f;
@@ -241,16 +241,16 @@ var eD: vec3f;
241
241
  var aB: vec3f;
242
242
 
243
243
 
244
- if (cM(o, bvhBuffer[0].xyz, bvhBuffer[1].xyz, gC, tMax) > 0.0) {
244
+ if (cM(o, bvhBuffer[0].xyz, bvhBuffer[1].xyz, gE, tMax) > 0.0) {
245
245
  jh = 0;
246
- mb[0] = 0;
246
+ lZ[0] = 0;
247
247
  }
248
248
  while (jh >= 0) {
249
- let sV = mb[jh];
249
+ let sV = lZ[jh];
250
250
  jh--;
251
251
  o = ray.o;
252
252
  d = ray.d;
253
- gC = fb(d);
253
+ gE = fb(d);
254
254
 
255
255
  let wf = bvhBuffer[sV];
256
256
  let eV = bitcast<i32>(wf.w);
@@ -261,24 +261,24 @@ let d0 = cM(
261
261
  o,
262
262
  bvhBuffer[left].xyz,
263
263
  bvhBuffer[left + 1].xyz,
264
- gC,
264
+ gE,
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
- gC,
271
+ gE,
272
272
  tMax
273
273
  );
274
274
 
275
275
  if (d0 > d1) {
276
- if (d0 > 0.0) { jh++; mb[jh] = left; }
277
- if (d1 > 0.0) { jh++; mb[jh] = right; }
276
+ if (d0 > 0.0) { jh++; lZ[jh] = left; }
277
+ if (d1 > 0.0) { jh++; lZ[jh] = right; }
278
278
  }
279
279
  else {
280
- if (d1 > 0.0) { jh++; mb[jh] = right; }
281
- if (d0 > 0.0) { jh++; mb[jh] = left; }
280
+ if (d1 > 0.0) { jh++; lZ[jh] = right; }
281
+ if (d0 > 0.0) { jh++; lZ[jh] = left; }
282
282
  }
283
283
  }
284
284
  else {
@@ -286,14 +286,14 @@ let qJ = -eV;
286
286
 
287
287
 
288
288
  for (
289
- var mx = qJ - 1;
290
- mx >= 0;
291
- mx--
289
+ var mw = qJ - 1;
290
+ mw >= 0;
291
+ mw--
292
292
  ) {
293
- let pI = bvhBuffer[sV + 2 + mx];
293
+ let pI = bvhBuffer[sV + 2 + mw];
294
294
  let cf = bitcast<i32>(pI.x);
295
295
  let uU = bitcast<i32>(pI.y);
296
- let ou = instancesBuffer[cf * ${INSTANCE_VEC4_STRIDE}];
296
+ let ot = 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,17 +302,17 @@ 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
- gC = fb(d);
305
+ gE = fb(d);
306
306
  ey = maxDimension(abs(d));
307
- gP = mv(d, ey);
307
+ gQ = mu(d, ey);
308
308
 
309
- let fJ = bitcast<u32>(ou.x);
310
- let gR = fJ >> 30u;
311
- let blasOffset = i32(fJ & 0x3fffffffu);
309
+ let fK = bitcast<u32>(ot.x);
310
+ let gS = fK >> 30u;
311
+ let blasOffset = i32(fK & 0x3fffffffu);
312
312
  let bo = rtUniform.blasOffset;
313
313
 
314
314
  ${(blasLayoutMask & 8) !== 0 ? /* wgsl */ `
315
- if (gR == 3u) {
315
+ if (gS == 3u) {
316
316
 
317
317
 
318
318
 
@@ -345,19 +345,19 @@ sm[pn] = vec2u(kZ, ep);
345
345
  }
346
346
 
347
347
  let slot = (qh - 24u) ^ ql;
348
- let ns = (1u << slot) - 1u;
349
- let relativeIndex = countOneBits(internalMask & ns);
348
+ let nr = (1u << slot) - 1u;
349
+ let relativeIndex = countOneBits(internalMask & nr);
350
350
  let sk = kZ + relativeIndex;
351
351
  let node = blasOffset + i32(sk * 5u);
352
352
  let jA = bvhBuffer[node + bo];
353
- let ue = ov(
354
- node, bo, jA, o, gC, tMax
353
+ let ue = ou(
354
+ node, bo, jA, o, gE, tMax
355
355
  );
356
356
 
357
357
 
358
358
  ep = 0u;
359
359
  if (ue != 0u) {
360
- let fF = bvhBuffer[node + bo + 1];
360
+ let fG = bvhBuffer[node + bo + 1];
361
361
  let rO = bitcast<u32>(jA.w) >> 24u;
362
362
  var tv = 0u;
363
363
  var kg = ue;
@@ -365,8 +365,8 @@ while (kg != 0u) {
365
365
  let rC = kx(kg);
366
366
  kg &= ~(1u << rC);
367
367
  let sE = select(
368
- bitcast<u32>(fF.z),
369
- bitcast<u32>(fF.w),
368
+ bitcast<u32>(fG.z),
369
+ bitcast<u32>(fG.w),
370
370
  rC >= 4u
371
371
  );
372
372
  let td =
@@ -381,16 +381,16 @@ let uO = (td >> 5u) & 0x7u;
381
381
  tv |= uO << uT;
382
382
  }
383
383
 
384
- kZ = bitcast<u32>(fF.x);
384
+ kZ = bitcast<u32>(fG.x);
385
385
  ep = (tv & 0xff000000u) | rO;
386
- let oQ = bitcast<u32>(fF.y);
387
- var oR = tv & 0x00ffffffu;
388
- while (oR != 0u) {
389
- let nT = nZ(oR);
390
- oR &= ~(1u << nT);
386
+ let oP = bitcast<u32>(fG.y);
387
+ var oQ = tv & 0x00ffffffu;
388
+ while (oQ != 0u) {
389
+ let nS = nY(oQ);
390
+ oQ &= ~(1u << nS);
391
391
  let bh = 1;
392
392
  let primitiveOffset = bo + blasOffset
393
- + i32(oQ + nT);
393
+ + i32(oP + nS);
394
394
  ${intersectTriangles}
395
395
  }
396
396
  }
@@ -407,23 +407,23 @@ else { break; }
407
407
  }
408
408
  ` : ''}
409
409
 
410
- var gt: array<i32, BLAS_STACK_SIZE>;
410
+ var gu: array<i32, BLAS_STACK_SIZE>;
411
411
  var dS = -1;
412
- if (gR != 3u) {
412
+ if (gS != 3u) {
413
413
  dS = 0;
414
414
 
415
- gt[0] = uU;
415
+ gu[0] = uU;
416
416
  }
417
417
 
418
418
  while (dS >= 0) {
419
419
 
420
- let node = gt[dS];
420
+ let node = gu[dS];
421
421
  dS--;
422
422
  var bh = 0;
423
423
  var primitiveOffset = 0;
424
424
 
425
425
  ${(blasLayoutMask & 4) !== 0 ? /* wgsl */ `
426
- if (gR == 2u) {
426
+ if (gS == 2u) {
427
427
  let i = node + bo;
428
428
  let uY = bvhBuffer[i];
429
429
  let uZ = bvhBuffer[i + 1];
@@ -437,33 +437,33 @@ primitiveOffset = bo + blasOffset
437
437
  else {
438
438
  let left = blasOffset + i32(bitcast<u32>(uY.w) * 4u);
439
439
  let right = blasOffset + i32(bitcast<u32>(uZ.w) * 4u);
440
- let oy = cM(
441
- o, uY.xyz, uZ.xyz, gC, tMax
440
+ let ox = cM(
441
+ o, uY.xyz, uZ.xyz, gE, tMax
442
442
  );
443
- let nu = cM(
444
- o, va.xyz, vb.xyz, gC, tMax
443
+ let nt = cM(
444
+ o, va.xyz, vb.xyz, gE, tMax
445
445
  );
446
- if (oy > nu) {
447
- if (oy > 0.0) {
448
- dS++; gt[dS] = left;
446
+ if (ox > nt) {
447
+ if (ox > 0.0) {
448
+ dS++; gu[dS] = left;
449
449
  }
450
- if (nu > 0.0) {
451
- dS++; gt[dS] = right;
450
+ if (nt > 0.0) {
451
+ dS++; gu[dS] = right;
452
452
  }
453
453
  }
454
454
  else {
455
- if (nu > 0.0) {
456
- dS++; gt[dS] = right;
455
+ if (nt > 0.0) {
456
+ dS++; gu[dS] = right;
457
457
  }
458
- if (oy > 0.0) {
459
- dS++; gt[dS] = left;
458
+ if (ox > 0.0) {
459
+ dS++; gu[dS] = left;
460
460
  }
461
461
  }
462
462
  }
463
463
  }
464
464
  ` : ''}
465
465
  ${(blasLayoutMask & 2) !== 0 ? /* wgsl */ `
466
- if (gR == 1u) {
466
+ if (gS == 1u) {
467
467
  let hW = bitcast<u32>(node);
468
468
  if ((hW & 0x80000000u) != 0u) {
469
469
  bh = i32((hW >> 23u) & 0xffu);
@@ -478,7 +478,7 @@ let rp = bvhBuffer[i + 2];
478
478
  let rq = bvhBuffer[i + 3];
479
479
  let nodeMin = ui.xyz;
480
480
  let ec = vec3f(ui.w, ro.x, ro.y);
481
- let mh = array<u32, 4>(
481
+ let mg = array<u32, 4>(
482
482
  bitcast<u32>(ro.z), bitcast<u32>(ro.w),
483
483
  bitcast<u32>(rp.x), bitcast<u32>(rp.y)
484
484
  );
@@ -488,14 +488,14 @@ let rB = unpack4x8unorm(bitcast<u32>(rq.x));
488
488
  let rt = unpack4x8unorm(bitcast<u32>(rq.y));
489
489
  let ru = unpack4x8unorm(bitcast<u32>(rq.z));
490
490
  let rv = unpack4x8unorm(bitcast<u32>(rq.w));
491
- let tx0 = (nodeMin.x + rw * ec.x - o.x) * gC.x;
492
- let tx1 = (nodeMin.x + rt * ec.x - o.x) * gC.x;
493
- let ty0 = (nodeMin.y + rA * ec.y - o.y) * gC.y;
494
- let ty1 = (nodeMin.y + ru * ec.y - o.y) * gC.y;
495
- let tz0 = (nodeMin.z + rB * ec.z - o.z) * gC.z;
496
- let tz1 = (nodeMin.z + rv * ec.z - o.z) * gC.z;
497
- let bJ = eZ(gC, o);
498
- let mL = max(
491
+ let tx0 = (nodeMin.x + rw * ec.x - o.x) * gE.x;
492
+ let tx1 = (nodeMin.x + rt * ec.x - o.x) * gE.x;
493
+ let ty0 = (nodeMin.y + rA * ec.y - o.y) * gE.y;
494
+ let ty1 = (nodeMin.y + ru * ec.y - o.y) * gE.y;
495
+ let tz0 = (nodeMin.z + rB * ec.z - o.z) * gE.z;
496
+ let tz1 = (nodeMin.z + rv * ec.z - o.z) * gE.z;
497
+ let bJ = eZ(gE, o);
498
+ let mK = 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
  );
@@ -503,11 +503,11 @@ let rU = 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(rU, mL, mL > vec4f(0.0));
506
+ var distance = select(rU, mK, mK > vec4f(0.0));
507
507
  distance = select(
508
508
  distance,
509
509
  vec4f(-1.0),
510
- mL > min(rU, vec4f(tMax))
510
+ mK > min(rU, vec4f(tMax))
511
511
  );
512
512
  var fd = 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
- mh[child] != 0u &&
525
+ mg[child] != 0u &&
526
526
  fd[child] > dX
527
527
  ) {
528
528
  dX = fd[child];
@@ -530,13 +530,13 @@ el = child;
530
530
  }
531
531
  }
532
532
  if (el >= 0 && dX > 0.0) {
533
- let nD = mh[el];
534
- var jI = bitcast<i32>(nD);
535
- if ((nD & 0x80000000u) == 0u) {
533
+ let nC = mg[el];
534
+ var jI = bitcast<i32>(nC);
535
+ if ((nC & 0x80000000u) == 0u) {
536
536
  jI += blasOffset;
537
537
  }
538
538
  dS++;
539
- gt[dS] = jI;
539
+ gu[dS] = jI;
540
540
  fd[el] = -1.0;
541
541
  }
542
542
  }
@@ -544,7 +544,7 @@ fd[el] = -1.0;
544
544
  }
545
545
  ` : ''}
546
546
  ${(blasLayoutMask & 1) !== 0 ? /* wgsl */ `
547
- if (gR == 0u) {
547
+ if (gS == 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
- gC,
559
+ gE,
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
- gC,
566
+ gE,
567
567
  tMax
568
568
  );
569
569
 
570
570
  if (d0 > d1) {
571
571
  if (d0 > 0.0) {
572
- dS++; gt[dS] = left;
572
+ dS++; gu[dS] = left;
573
573
 
574
574
  }
575
575
  if (d1 > 0.0) {
576
- dS++; gt[dS] = right;
576
+ dS++; gu[dS] = right;
577
577
 
578
578
  }
579
579
  }
580
580
  else {
581
581
  if (d1 > 0.0) {
582
- dS++; gt[dS] = right;
582
+ dS++; gu[dS] = right;
583
583
 
584
584
  }
585
585
  if (d0 > 0.0) {
586
- dS++; gt[dS] = left;
586
+ dS++; gu[dS] = left;
587
587
 
588
588
  }
589
589
  }
@@ -610,7 +610,7 @@ export default function getIntersectCode({ hasDisplacement, hasAnisotropyDirecti
610
610
  ${hasDisplacement ? displacementWgsl : ''}
611
611
  ${(blasLayoutMask & 8) !== 0 ? cwbvhTraversalWgsl : ''}
612
612
 
613
- struct fA {
613
+ struct fB {
614
614
  p0: vec3f,
615
615
  p1: vec3f,
616
616
  p2: vec3f,
@@ -639,7 +639,7 @@ return t2;
639
639
  return INF;
640
640
  }
641
641
 
642
- fn ni(pos: vec3f, u: vec3f, v: vec3f, n: vec3f, r: Ray) -> f32 {
642
+ fn nh(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
 
@@ -666,7 +666,7 @@ let cosThetaMax = sqrt(max(0.0, 1.0 - jv));
666
666
  return 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
667
667
  }
668
668
 
669
- fn mz(r: Ray, light: Light, lightSample: ptr<function, LightSampleRec>) -> f32 {
669
+ fn my(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 = ni(pos, u, v, normal, r);
691
+ d = nh(pos, u, v, normal, r);
692
692
  if (d < 0.0) {
693
693
  d = INF;
694
694
  }
@@ -775,8 +775,8 @@ d = hx(light.radiusOrSpread, light.position, r);
775
775
  }
776
776
  if (d != INF) {
777
777
  let ve = r.o + d * r.d;
778
- let mC = bL(light, normalize(r.o - ve));
779
- if (mC <= 0.0) { return INF; }
778
+ let mB = bL(light, normalize(r.o - ve));
779
+ if (mB <= 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 * mC * select(
788
+ (*lightSample).emission = light.emission * mB * select(
789
789
  1.0,
790
790
  1.0 / max(d * d, 1e-8),
791
791
  light.radiusOrSpread <= 0.0
@@ -834,30 +834,30 @@ w21 = w21 / hk + w20;
834
834
  w22 = w22 / hk + w21;
835
835
 
836
836
  let rand = eo(0u);
837
- var nj: f32;
837
+ var ni: f32;
838
838
  if (rand < w00) {
839
- nj = m00.x;
839
+ ni = m00.x;
840
840
  } else if (rand < w01) {
841
- nj = m01.x;
841
+ ni = m01.x;
842
842
  } else if (rand < w02) {
843
- nj = m02.x;
843
+ ni = m02.x;
844
844
  } else if (rand < w10) {
845
- nj = m10.x;
845
+ ni = m10.x;
846
846
  } else if (rand < w11) {
847
- nj = m11.x;
847
+ ni = m11.x;
848
848
  } else if (rand < w12) {
849
- nj = m12.x;
849
+ ni = m12.x;
850
850
  } else if (rand < w20) {
851
- nj = m20.x;
851
+ ni = m20.x;
852
852
  } else if (rand < w21) {
853
- nj = m21.x;
853
+ ni = m21.x;
854
854
  } else {
855
- nj = m22.x;
855
+ ni = m22.x;
856
856
  }
857
- return i32(nj);
857
+ return i32(ni);
858
858
  }
859
859
 
860
- fn lW(
860
+ fn lV(
861
861
  pa: i32,
862
862
  index: vec3i,
863
863
  eK: vec3f
@@ -874,15 +874,15 @@ return pa;
874
874
 
875
875
 
876
876
  ${hasAnisotropyDirections ? /* wgsl */ `
877
- fn eE(normal: vec3f, dp1: vec3f, dp2: vec3f, od: vec2f, oe: vec2f, input: vec4f) -> mat2x3f {
878
- let determinant = od.x * oe.y - od.y * oe.x;
877
+ fn eE(normal: vec3f, dp1: vec3f, dp2: vec3f, oc: vec2f, od: vec2f, input: vec4f) -> mat2x3f {
878
+ let determinant = oc.x * od.y - oc.y * od.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 * oe.y - dp2 * od.y) / determinant;
885
- let db = (dp2 * od.x - dp1 * oe.x) / determinant;
884
+ let dt = (dp1 * od.y - dp2 * oc.y) / determinant;
885
+ let db = (dp2 * oc.x - dp1 * od.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
  }
@@ -901,11 +901,11 @@ return mat2x3f(t, b * select(1.0, -1.0, sign < 0.0));
901
901
  ` : /* wgsl */ ``}
902
902
  fn ht(
903
903
  si: ptr<function, ad>,
904
- tri: fA,
904
+ tri: fB,
905
905
  eK: vec3f,
906
906
  index: vec3i,
907
907
  bU: bool,
908
- fv: i32
908
+ fw: i32
909
909
  ) {
910
910
  (*si).hit = true;
911
911
 
@@ -924,7 +924,7 @@ if (USE_VERTEX_COLOR) {
924
924
  let oY = uvProjection == ${uvProjectionConstants.spherical};
925
925
 
926
926
  var normal: vec3f = (*si).normal;
927
- var gZ: vec3f;
927
+ var ha: vec3f;
928
928
  var n0 = vec3f(0.0);
929
929
  var n1 = vec3f(0.0);
930
930
  var n2 = vec3f(0.0);
@@ -934,9 +934,9 @@ if (!bU || oY) {
934
934
  n0 = attrBuffers[i0 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
935
935
  n1 = attrBuffers[i1 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
936
936
  n2 = attrBuffers[i2 * ATTR_STRIDE + NORMAL_OFF]${hasAnisotropyDirections ? '.xyz' : ''};
937
- gZ = normalize(eK.x * n0 + eK.y * n1 + eK.z * n2);
937
+ ha = normalize(eK.x * n0 + eK.y * n1 + eK.z * n2);
938
938
  if (!bU) {
939
- normal = gZ;
939
+ normal = ha;
940
940
  }
941
941
  }
942
942
 
@@ -967,11 +967,11 @@ let t2 = attrBuffers[i2 * ATTR_STRIDE + TANGENT_OFF]${hasAnisotropyDirections ?
967
967
  (*si).tangent = normalize(eK.x * t0 + eK.y * t1 + eK.z * t2);
968
968
  }
969
969
 
970
- if (fv >= 0) {
971
- (*si).materialIndex = fv;
970
+ if (fw >= 0) {
971
+ (*si).materialIndex = fw;
972
972
  }
973
973
  else {
974
- (*si).materialIndex = lW(
974
+ (*si).materialIndex = lV(
975
975
  (*si).materialIndex,
976
976
  index,
977
977
  eK
@@ -980,7 +980,7 @@ eK
980
980
 
981
981
  if (uvProjection > 0) {
982
982
 
983
- uv = gH(uvProjection, (*si).position, select(normal, gZ, oY));
983
+ uv = gI(uvProjection, (*si).position, select(normal, ha, oY));
984
984
  cX = uv;
985
985
  }
986
986
 
@@ -995,7 +995,7 @@ uv = fract(uv);
995
995
  ${hasAnisotropyDirections ? /* wgsl */ `
996
996
  ${hasCoatNormals ? /* wgsl */ ` (*si).coatNormal = normal;` : ''}
997
997
  let directionMaterial = materialsBuffer[(*si).materialIndex];
998
- if (directionMaterial.anisotropyMapIndex >= 0.0 || directionMaterial.specularAnisotropyRotation != 0.0 || directionMaterial.coatAnisotropyRotation != 0.0${hasCoatNormals ? " || (USE_COAT_NORMAL_MAPS && directionMaterial.coatNormalMapIndex >= 0.0)" : ""}) {
998
+ if (directionMaterial.anisotropyMapIndex >= 0.0 || directionMaterial.specularAnisotropyRotation != 0.0 || directionMaterial.coatAnisotropyRotation != 0.0${hasCoatNormals ? " || directionMaterial.coatWeight > 0.0" : ""}) {
999
999
  let dp1 = tri.p0 - tri.p2;
1000
1000
  let dp2 = tri.p1 - tri.p2;
1001
1001
  var aT = vec4f(0.0);
@@ -1007,32 +1007,32 @@ aT = eK.x * attrBuffers[i0 * ATTR_STRIDE + TANGENT_OFF]
1007
1007
  let eS = eE(normal, dp1, dp2, uv0-uv2, uv1-uv2, aT);
1008
1008
  (*si).geometryTangent = eS[0];
1009
1009
  (*si).geometryBitangent = eS[1];
1010
- var fY = eS;
1010
+ var fZ = eS;
1011
1011
  if (USE_UV1 && directionMaterial.anisotropyMapIndex >= 0.0 && mapInfo[i32(directionMaterial.anisotropyMapIndex) + NUM_MAPS * 2].x > 0.5) {
1012
1012
  let a = attrBuffers[i0 * ATTR_STRIDE + UV1_OFF].xy;
1013
1013
  let b = attrBuffers[i1 * ATTR_STRIDE + UV1_OFF].xy;
1014
1014
  let c = attrBuffers[i2 * ATTR_STRIDE + UV1_OFF].xy;
1015
- fY = eE(normal, dp1, dp2, a-c, b-c, select(aT, vec4f(0.0), aT.w == 0.0));
1015
+ fZ = eE(normal, dp1, dp2, a-c, b-c, select(aT, vec4f(0.0), aT.w == 0.0));
1016
1016
  }
1017
- (*si).directionTangent = fY[0];
1018
- (*si).directionBitangent = fY[1];
1017
+ (*si).directionTangent = fZ[0];
1018
+ (*si).directionBitangent = fZ[1];
1019
1019
  ${hasCoatNormals ? /* wgsl */ `
1020
1020
  if (USE_COAT_NORMAL_MAPS && directionMaterial.coatNormalMapIndex >= 0.0) {
1021
1021
  let kC = i32(directionMaterial.coatNormalMapIndex);
1022
- var mi = eS;
1022
+ var mh = eS;
1023
1023
  if (USE_UV1 && mapInfo[kC + NUM_MAPS * 2].x > 0.5) {
1024
1024
  let a = attrBuffers[i0 * ATTR_STRIDE + UV1_OFF].xy;
1025
1025
  let b = attrBuffers[i1 * ATTR_STRIDE + UV1_OFF].xy;
1026
1026
  let c = attrBuffers[i2 * ATTR_STRIDE + UV1_OFF].xy;
1027
- mi = eE(normal, dp1, dp2, a-c, b-c,
1027
+ mh = eE(normal, dp1, dp2, a-c, b-c,
1028
1028
  select(aT, vec4f(0.0), aT.w == 0.0));
1029
1029
  }
1030
1030
 
1031
1031
 
1032
1032
  let decoded = sampleMap(kC, getMapUvSet(kC, uv,
1033
1033
  select(cX, uv, uvProjection > 0))).rgb * 2.0 - 1.0;
1034
- let mapped = mi[0] * decoded.x * directionMaterial.coatNormalScale.x
1035
- + mi[1] * decoded.y * directionMaterial.coatNormalScale.y + normal * decoded.z;
1034
+ let mapped = mh[0] * decoded.x * directionMaterial.coatNormalScale.x
1035
+ + mh[1] * decoded.y * directionMaterial.coatNormalScale.y + normal * decoded.z;
1036
1036
  if (dot(mapped, mapped) > 1e-12) { (*si).coatNormal = normalize(mapped); }
1037
1037
  }
1038
1038
  ` : ''}
@@ -1079,10 +1079,10 @@ h = min(-min(min(h0, h1), h2), h * 0.5);
1079
1079
  if (USE_NORMAL_MAPS) {
1080
1080
  let dp1 = tri.p0 - tri.p2;
1081
1081
  let dp2 = tri.p1 - tri.p2;
1082
- let od = uv0 - uv2;
1083
- let oe = uv1 - uv2;
1084
- (*si).normal = om(
1085
- (*si).materialIndex, uv, normal, dp1, dp2, od, oe
1082
+ let oc = uv0 - uv2;
1083
+ let od = uv1 - uv2;
1084
+ (*si).normal = ol(
1085
+ (*si).materialIndex, uv, normal, dp1, dp2, oc, od
1086
1086
  );
1087
1087
  }
1088
1088
  }
@@ -1096,7 +1096,7 @@ barycentric: vec3f,
1096
1096
 
1097
1097
 
1098
1098
 
1099
- fn fL(o: vec3f, d: vec3f, tri: fA, ey: i32, gP: vec3f, tMax: f32) -> eC {
1099
+ fn fM(o: vec3f, d: vec3f, tri: fB, ey: i32, gQ: vec3f, tMax: f32) -> eC {
1100
1100
  var ti: eC;
1101
1101
 
1102
1102
 
@@ -1117,9 +1117,9 @@ p2t = p2t.zxy;
1117
1117
 
1118
1118
 
1119
1119
 
1120
- p0t = vec3f(p0t.xy + gP.xy * p0t.z, p0t.z);
1121
- p1t = vec3f(p1t.xy + gP.xy * p1t.z, p1t.z);
1122
- p2t = vec3f(p2t.xy + gP.xy * p2t.z, p2t.z);
1120
+ p0t = vec3f(p0t.xy + gQ.xy * p0t.z, p0t.z);
1121
+ p1t = vec3f(p1t.xy + gQ.xy * p1t.z, p1t.z);
1122
+ p2t = vec3f(p2t.xy + gQ.xy * p2t.z, p2t.z);
1123
1123
 
1124
1124
 
1125
1125
  var e = vec3f(
@@ -1144,9 +1144,9 @@ return ti;
1144
1144
  let det = e.x + e.y + e.z;
1145
1145
  if (DEPTH_QUERY_MODE && det == 0.0) { return ti; }
1146
1146
 
1147
- p0t.z *= gP.z;
1148
- p1t.z *= gP.z;
1149
- p2t.z *= gP.z;
1147
+ p0t.z *= gQ.z;
1148
+ p1t.z *= gQ.z;
1149
+ p2t.z *= gQ.z;
1150
1150
  let rn = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
1151
1151
 
1152
1152
 
@@ -1171,20 +1171,20 @@ if (!DEPTH_QUERY_MODE) { return 1.0 / d; }
1171
1171
  return 1.0 / select(d, select(vec3f(1e-20), vec3f(-1e-20), d < vec3f(0.0)), abs(d) < vec3f(1e-20));
1172
1172
  }
1173
1173
 
1174
- fn eZ(gC: vec3f, o: vec3f) -> vec3f {
1174
+ fn eZ(gE: vec3f, o: vec3f) -> vec3f {
1175
1175
  if (!DEPTH_QUERY_MODE) { return vec3f(0.0); }
1176
- return abs(gC) * max(vec3f(1.0), abs(o)) * 1e-6;
1176
+ return abs(gE) * max(vec3f(1.0), abs(o)) * 1e-6;
1177
1177
  }
1178
1178
 
1179
1179
 
1180
1180
 
1181
- fn cM(o: vec3f, vK: vec3f, vJ: vec3f, gC: vec3f, tMax: f32) -> f32 {
1182
- let uR = (vK - o) * gC;
1183
- let uS = (vJ - o) * gC;
1184
- let bJ = eZ(gC, o);
1185
- let mL = min(uR, uS) - bJ;
1181
+ fn cM(o: vec3f, vK: vec3f, vJ: vec3f, gE: vec3f, tMax: f32) -> f32 {
1182
+ let uR = (vK - o) * gE;
1183
+ let uS = (vJ - o) * gE;
1184
+ let bJ = eZ(gE, o);
1185
+ let mK = min(uR, uS) - bJ;
1186
1186
  let rU = max(uR, uS) + bJ;
1187
- let t0 = max(mL.x, max(mL.y, mL.z));
1187
+ let t0 = max(mK.x, max(mK.y, mK.z));
1188
1188
  let t1 = min(rU.x, min(rU.y, rU.z));
1189
1189
  return select(select(t1, t0, t0 > 0.0), -1.0, (t0 > t1 || t0 > tMax));
1190
1190
  }
@@ -1193,7 +1193,7 @@ fn maxDimension(v: vec3f) -> i32 {
1193
1193
  return select(select(2, 1, v.y > v.z), select(2, 0, v.x > v.z), v.x > v.y);
1194
1194
  }
1195
1195
 
1196
- fn mv(d: vec3f, ey: i32) -> vec3f {
1196
+ fn mu(d: vec3f, ey: i32) -> vec3f {
1197
1197
 
1198
1198
 
1199
1199
  if (ey == 0) {
@@ -1205,16 +1205,16 @@ return vec3f(-d.x, -d.y, 1.0) / d.z;
1205
1205
  }
1206
1206
  }
1207
1207
 
1208
- fn mj(
1208
+ fn mi(
1209
1209
  si: ptr<function, ad>,
1210
- lC: fA,
1210
+ lB: fB,
1211
1211
  aB: vec3f,
1212
1212
  hw: vec3i,
1213
1213
  bU: bool,
1214
1214
  ao: i32,
1215
1215
  eD: vec3f,
1216
1216
  eY: vec3f,
1217
- fv: i32
1217
+ fw: i32
1218
1218
  ) {
1219
1219
  (*si).instanceIndex = ao;
1220
1220
  (*si).barycentrics = aB.xy;
@@ -1227,11 +1227,11 @@ bitcast<i32>(instancesBuffer[ao * ${INSTANCE_VEC4_STRIDE}].z)
1227
1227
 
1228
1228
  ht(
1229
1229
  si,
1230
- lC,
1230
+ lB,
1231
1231
  aB,
1232
1232
  hw,
1233
1233
  bU,
1234
- fv
1234
+ fw
1235
1235
  );
1236
1236
 
1237
1237
  let l2w = mat4x4<f32>(
@@ -1275,7 +1275,7 @@ ${createIntersectionAlphaWgsl(hasAnisotropyDirections)}
1275
1275
 
1276
1276
 
1277
1277
 
1278
- fn cZ(ray: Ray, si: ptr<function, ad>, bounces: i32, doubleSided: bool, lD: bool) {
1278
+ fn cZ(ray: Ray, si: ptr<function, ad>, bounces: i32, doubleSided: bool, lC: bool) {
1279
1279
 
1280
1280
  (*si).hit = false;
1281
1281
 
@@ -1285,24 +1285,24 @@ return;
1285
1285
 
1286
1286
  var tMax = RAY_MAX_DISTANCE;
1287
1287
  var ey: i32;
1288
- var gP: vec3f;
1288
+ var gQ: vec3f;
1289
1289
 
1290
1290
  var hw: vec3i;
1291
- var lC: fA;
1291
+ var lB: fB;
1292
1292
  var ao: i32;
1293
1293
  var hO: i32 = (*si).triangleIndex;
1294
1294
 
1295
1295
  ${getBVHTraverseCode(`
1296
1296
  (*si).triangleIndex = triangleIndex;
1297
- lC = tri;
1297
+ lB = tri;
1298
1298
  hw = index;
1299
1299
  ao = cf;
1300
1300
  `, hasDisplacement, false, blasLayoutMask, hasAnisotropyDirections)}
1301
1301
 
1302
1302
  if (rb) {
1303
- mj(
1303
+ mi(
1304
1304
  si,
1305
- lC,
1305
+ lB,
1306
1306
  aB,
1307
1307
  hw,
1308
1308
  bU,
@@ -1324,18 +1324,18 @@ return;
1324
1324
 
1325
1325
  let bounces = 0;
1326
1326
  let doubleSided = true;
1327
- let lD = false;
1327
+ let lC = false;
1328
1328
  var tMax = maxDistance;
1329
1329
  var ey: i32;
1330
- var gP: vec3f;
1330
+ var gQ: vec3f;
1331
1331
  var hw: vec3i;
1332
- var lC: fA;
1332
+ var lB: fB;
1333
1333
  var ao: i32;
1334
1334
  var hO: i32 = -1;
1335
1335
 
1336
1336
  ${getBVHTraverseCode(`
1337
1337
  (*si).triangleIndex = triangleIndex;
1338
- lC = tri;
1338
+ lB = tri;
1339
1339
  hw = index;
1340
1340
  ao = cf;
1341
1341
  `, hasDisplacement, false, blasLayoutMask, hasAnisotropyDirections, `
@@ -1351,7 +1351,7 @@ if (rb) {
1351
1351
  (*si).materialIndex = i32(ae(bitcast<i32>(instancesBuffer[ao * ${INSTANCE_VEC4_STRIDE}].z)).x);
1352
1352
  ht(
1353
1353
  si,
1354
- lC,
1354
+ lB,
1355
1355
  aB,
1356
1356
  hw,
1357
1357
  bU,
@@ -1402,10 +1402,10 @@ let doubleSided = true;
1402
1402
  let qo = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
1403
1403
  var tMax = qo;
1404
1404
  var ey: i32;
1405
- var gP: vec3f;
1405
+ var gQ: vec3f;
1406
1406
 
1407
1407
  let bounces = 1;
1408
- var lD = false;
1408
+ var lC = false;
1409
1409
  var hO: i32 = jL;
1410
1410
 
1411
1411
  ${getBVHTraverseCode(
@@ -1417,8 +1417,8 @@ var jt = true;
1417
1417
 
1418
1418
  if (jt) {
1419
1419
  if (HAS_ALPHA) {
1420
- let materialIndex = i32(ae(bitcast<i32>(ou.z)).x);
1421
- if (!nG(
1420
+ let materialIndex = i32(ae(bitcast<i32>(ot.z)).x);
1421
+ if (!nF(
1422
1422
  materialIndex,
1423
1423
  index,
1424
1424
  aB,