@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
@@ -104,7 +104,7 @@ fn F(sl: i32, row: i32) -> f32 {
104
104
  return textureLoad(openPbrEnergyLut, vec2i(sl, row), 0).r;
105
105
  }
106
106
 
107
- fn gd(
107
+ fn ge(
108
108
  dJ: f32,
109
109
  bR: f32,
110
110
  hR: f32
@@ -141,7 +141,7 @@ kE
141
141
  );
142
142
  }
143
143
 
144
- fn gF(dJ: f32, bR: f32) -> f32 {
144
+ fn gG(dJ: f32, bR: f32) -> f32 {
145
145
  let bA = clamp(dJ, 0.0, 31.0);
146
146
  let aH = clamp(bR, 0.0, 31.0);
147
147
  let dQ = i32(floor(bA));
@@ -286,7 +286,7 @@ ior: f32,
286
286
  alpha: f32,
287
287
  au: f32
288
288
  ) -> f32 {
289
- let value = gd(
289
+ let value = ge(
290
290
  aC(ior),
291
291
  sqrt(alpha) * 31.0,
292
292
  au * 31.0
@@ -295,7 +295,7 @@ return aX(value, ior);
295
295
  }
296
296
 
297
297
  fn cr(ior: f32, alpha: f32) -> f32 {
298
- let value = gF(
298
+ let value = gG(
299
299
  aC(ior),
300
300
  sqrt(alpha) * 31.0
301
301
  );
@@ -357,7 +357,7 @@ return (ak * L - av * S)
357
357
  / (av * S + ak * L);
358
358
  }
359
359
 
360
- fn hc(
360
+ fn hd(
361
361
  av: f32,
362
362
  ak: f32,
363
363
  L: f32,
@@ -367,7 +367,7 @@ return 2.0 * av * L
367
367
  / (av * L + ak * S);
368
368
  }
369
369
 
370
- fn hb(
370
+ fn hc(
371
371
  av: f32,
372
372
  ak: f32,
373
373
  L: f32,
@@ -390,9 +390,9 @@ return vec2f(
390
390
  }
391
391
 
392
392
  fn hX(value: vec2f) -> vec2f {
393
- let nK = length(value);
394
- let sP = sqrt(max(0.0, 0.5 * (nK + value.x)));
395
- let ff = sqrt(max(0.0, 0.5 * (nK - value.x)));
393
+ let nJ = length(value);
394
+ let sP = sqrt(max(0.0, 0.5 * (nJ + value.x)));
395
+ let ff = sqrt(max(0.0, 0.5 * (nJ - value.x)));
396
396
  return vec2f(sP, select(-ff, ff, value.y >= 0.0));
397
397
  }
398
398
 
@@ -402,9 +402,9 @@ av: f32,
402
402
  ak: vec2f,
403
403
  qG: bool
404
404
  ) -> vec2f {
405
- let os = sqrt(max(0.0, 1.0 - L * L));
405
+ let oq = sqrt(max(0.0, 1.0 - L * L));
406
406
  let sA = aZ(vec2f(av, 0.0), ak);
407
- let hA = sA * os;
407
+ let hA = sA * oq;
408
408
  var S = hX(
409
409
  vec2f(1.0, 0.0) - aU(hA, hA)
410
410
  );
@@ -412,7 +412,7 @@ if (aU(ak, S).y < 0.0) {
412
412
  S = -S;
413
413
  }
414
414
 
415
- let fK = vec2f(av * L, 0.0);
415
+ let fL = vec2f(av * L, 0.0);
416
416
  let eB = aU(ak, S);
417
417
  if (qG) {
418
418
  let ci = ak * L;
@@ -423,23 +423,23 @@ ci + ce
423
423
  );
424
424
  }
425
425
  return aZ(
426
- fK - eB,
427
- fK + eB
426
+ fL - eB,
427
+ fL + eB
428
428
  );
429
429
  }
430
430
 
431
431
  fn eq(
432
432
  iH: f32,
433
- gM: f32,
434
- oH: f32,
435
- mN: f32,
433
+ gN: f32,
434
+ oG: f32,
435
+ mM: f32,
436
436
  kf: vec2f,
437
437
  phase: f32
438
438
  ) -> f32 {
439
- let nr = vec2f(cos(phase), sin(phase));
440
- let ia = aU(kf, nr);
441
- let kO = ia * (gM * mN);
442
- let ap = vec2f(1.0, 0.0) - ia * oH;
439
+ let nq = vec2f(cos(phase), sin(phase));
440
+ let ia = aU(kf, nq);
441
+ let kO = ia * (gN * mM);
442
+ let ap = vec2f(1.0, 0.0) - ia * oG;
443
443
  let hz = vec2f(iH, 0.0)
444
444
  + aZ(kO, ap);
445
445
  return dot(hz, hz);
@@ -466,24 +466,24 @@ aM, ck, dm, cU
466
466
  let la = jZ(
467
467
  aM, ck, dm, cU
468
468
  );
469
- let jj = hc(
469
+ let jj = hd(
470
470
  aM, ck, dm, cU
471
471
  );
472
- let ji = hb(
472
+ let ji = hc(
473
473
  aM, ck, dm, cU
474
474
  );
475
- let gq = ck * cU
475
+ let gr = ck * cU
476
476
  / max(aM * dm, 1e-9);
477
477
  let phase = 2.0 * PI * (2.0 * ck * cn * cU) / wavelength;
478
478
  var sb = 0.0;
479
479
 
480
480
  for (var ke = 0u; ke < (rtUniform.loopUnrollGuard >> 1u); ke++) {
481
481
  let iH = select(lb, la, ke == 1u);
482
- let gM = select(jj, ji, ke == 1u);
482
+ let gN = select(jj, ji, ke == 1u);
483
483
  let kf = bX(
484
484
  cU, ck, eu, ke == 1u);
485
- sb += eq(iH, gM,
486
- -iH, gM * gq, kf, phase);
485
+ sb += eq(iH, gN,
486
+ -iH, gN * gr, kf, phase);
487
487
  }
488
488
  return clamp(0.5 * sb, 0.0, 1.0);
489
489
  }
@@ -495,19 +495,19 @@ fn dU(au: f32, f0: vec3f, tint: vec3f) -> vec3f {
495
495
  let rk = mix(f0, vec3f(1.0), aE(au));
496
496
  if (all(tint == vec3f(1.0))) { return rk; }
497
497
  let dk = 1.0 / 7.0;
498
- let ml = 1.0 - dk;
499
- let fI = mix(f0, vec3f(1.0), aE(dk));
498
+ let mk = 1.0 - dk;
499
+ let fJ = mix(f0, vec3f(1.0), aE(dk));
500
500
  let di = 1.0 - au;
501
501
  let qt = au * aE(au) * di
502
- / (dk * pow(ml, 6.0));
503
- return clamp(rk - qt * (fI - tint * fI), vec3f(0.0), vec3f(1.0));
502
+ / (dk * pow(mk, 6.0));
503
+ return clamp(rk - qt * (fJ - tint * fJ), vec3f(0.0), vec3f(1.0));
504
504
  }
505
505
 
506
506
  fn cQ(f0: f32, tp: f32) -> vec2f {
507
507
  let dN = clamp(f0, 0.0, 0.99);
508
- let gL = sqrt(dN);
508
+ let gM = sqrt(dN);
509
509
  let qF = (1.0 - dN) / (1.0 + dN);
510
- let qD = (1.0 + gL) / max(1.0 - gL, 1e-9);
510
+ let qD = (1.0 + gM) / max(1.0 - gM, 1e-9);
511
511
  let ior = mix(qD, qF, clamp(tp, 0.0, 1.0));
512
512
  let jO = (
513
513
  (ior + 1.0) * (ior + 1.0) * dN
@@ -528,7 +528,7 @@ material: J,
528
528
  color: vec3f,
529
529
  viewLocal: vec3f,
530
530
  lightLocal: vec3f,
531
- ft: f32,
531
+ fu: f32,
532
532
  pdf: ptr<function, f32>
533
533
  ) -> vec3f {
534
534
  *pdf = 0.0;
@@ -537,49 +537,49 @@ return vec3f(0.0);
537
537
  }
538
538
 
539
539
  let roughness = material.diffuseRoughness;
540
- let gW = 0.5 - 2.0 / (3.0 * PI);
541
- let oj = 2.0 / 3.0 - 28.0 / (15.0 * PI);
542
- let oB = lightLocal.z;
543
- let mB = viewLocal.z;
544
- let hP = dot(lightLocal, viewLocal) - oB * mB;
545
- let gT = select(
540
+ let gX = 0.5 - 2.0 / (3.0 * PI);
541
+ let oi = 2.0 / 3.0 - 28.0 / (15.0 * PI);
542
+ let oA = lightLocal.z;
543
+ let mA = viewLocal.z;
544
+ let hP = dot(lightLocal, viewLocal) - oA * mA;
545
+ let gU = select(
546
546
  hP,
547
- hP / max(max(oB, mB), 1e-7),
547
+ hP / max(max(oA, mA), 1e-7),
548
548
  hP > 0.0
549
549
  );
550
- let il = 1.0 / (1.0 + gW * roughness);
551
- let nA = color * INVPI * il
552
- * (1.0 + roughness * gT);
550
+ let il = 1.0 / (1.0 + gX * roughness);
551
+ let nv = color * INVPI * il
552
+ * (1.0 + roughness * gU);
553
553
 
554
- let dd = 1.0 - oB;
555
- let cP = 1.0 - mB;
556
- let ot = dd * (
554
+ let dd = 1.0 - oA;
555
+ let cP = 1.0 - mA;
556
+ let os = dd * (
557
557
  0.0571085289 + dd * (
558
558
  0.491881867 + dd * (
559
559
  -0.332181442 + dd * 0.0714429953
560
560
  )
561
561
  )
562
562
  );
563
- let nq = cP * (
563
+ let np = cP * (
564
564
  0.0571085289 + cP * (
565
565
  0.491881867 + cP * (
566
566
  -0.332181442 + cP * 0.0714429953
567
567
  )
568
568
  )
569
569
  );
570
- let pv = (1.0 + roughness * ot)
571
- / (1.0 + gW * roughness);
572
- let oD = (1.0 + roughness * nq)
573
- / (1.0 + gW * roughness);
574
- let fU = il * (1.0 + oj * roughness);
575
- let hF = color * color * fU
576
- / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - fU));
577
- let lF = hF * INVPI
578
- * max(1e-7, 1.0 - oD)
570
+ let pv = (1.0 + roughness * os)
571
+ / (1.0 + gX * roughness);
572
+ let oC = (1.0 + roughness * np)
573
+ / (1.0 + gX * roughness);
574
+ let fV = il * (1.0 + oi * roughness);
575
+ let hF = color * color * fV
576
+ / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - fV));
577
+ let lE = hF * INVPI
578
+ * max(1e-7, 1.0 - oC)
579
579
  * max(1e-7, 1.0 - pv)
580
- / max(1e-7, 1.0 - fU);
580
+ / max(1e-7, 1.0 - fV);
581
581
  *pdf = lightLocal.z * INVPI;
582
- return (nA + lF) * ft;
582
+ return (nv + lE) * fu;
583
583
  }
584
584
 
585
585
  fn aO(viewCosine: f32, roughness: f32) -> f32 {
@@ -628,7 +628,7 @@ return vec3f(0.0);
628
628
  }
629
629
 
630
630
  let alpha = vec2f(material.alphaX, material.alphaY);
631
- let distribution = gK(V, alpha);
631
+ let distribution = gL(V, alpha);
632
632
  let jV = bk(viewLocal, alpha);
633
633
  let ea = jV
634
634
  * bk(lightLocal, alpha);
@@ -661,7 +661,7 @@ if (bQ <= 0.0 || kL >= 0.0) {
661
661
  return vec3f(0.0);
662
662
  }
663
663
  let alpha = vec2f(material.alphaX, material.alphaY);
664
- let distribution = gK(V, alpha);
664
+ let distribution = gL(V, alpha);
665
665
  let jV = bk(viewLocal, alpha);
666
666
  let ea = jV
667
667
  * bk(lightLocal, alpha);
@@ -692,11 +692,11 @@ fn aP(
692
692
  ah: vec3f,
693
693
  transmissionWeight: f32
694
694
  ) -> vec3f {
695
- let gk = 2.0 * ah
695
+ let gm = 2.0 * ah
696
696
  / (vec3f(1.0) + ah);
697
697
  return mix(
698
698
  ah,
699
- gk,
699
+ gm,
700
700
  clamp(transmissionWeight, 0.0, 1.0)
701
701
  );
702
702
  }
@@ -731,31 +731,31 @@ if (viewLocal.z <= 0.0 || lightLocal.z >= 0.0) {
731
731
  return vec3f(0.0);
732
732
  }
733
733
  let S = -lightLocal.z;
734
- let og = cu(
734
+ let oe = cu(
735
735
  viewLocal.z,
736
736
  material.relativeIor
737
737
  );
738
738
  *pdf = S * INVPI;
739
- return vec3f(1.0 - og) * INVPI;
739
+ return vec3f(1.0 - oe) * INVPI;
740
740
  }
741
741
 
742
742
  fn dR(prepared: ptr<function, ag>) {
743
743
 
744
744
 
745
- let nJ = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
745
+ let nI = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
746
746
  var total = (*prepared).probabilities[OPENPBR_LOBE_FUZZ];
747
- for (var hU = 1; hU < nJ; hU++) {
747
+ for (var hU = 1; hU < nI; hU++) {
748
748
  total += (*prepared).probabilities[hU];
749
749
  }
750
750
  if (total <= 1e-8) {
751
- for (var hU = 0; hU < nJ; hU++) {
751
+ for (var hU = 0; hU < nI; hU++) {
752
752
  (*prepared).probabilities[hU] = 0.0;
753
753
  }
754
754
  return;
755
755
  }
756
- let ow = 1.0 / total;
757
- for (var hU = 0; hU < nJ; hU++) {
758
- (*prepared).probabilities[hU] *= ow;
756
+ let ov = 1.0 / total;
757
+ for (var hU = 0; hU < nI; hU++) {
758
+ (*prepared).probabilities[hU] *= ov;
759
759
  }
760
760
  }
761
761
 
@@ -769,8 +769,8 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
769
769
 
770
770
  fn bP(f0: vec3f, tint: vec3f) -> vec3f {
771
771
  let dk = 1.0 / 7.0;
772
- let fI = mix(f0, vec3f(1.0), aE(dk));
773
- let b = fI * (vec3f(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
772
+ let fJ = mix(f0, vec3f(1.0), aE(dk));
773
+ let b = fJ * (vec3f(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
774
774
  return clamp(f0 + (vec3f(1.0) - f0) / 21.0 - b / 126.0, vec3f(0.0), vec3f(1.0));
775
775
  }
776
776
 
@@ -778,12 +778,12 @@ return clamp(f0 + (vec3f(1.0) - f0) / 21.0 - b / 126.0, vec3f(0.0), vec3f(1.0));
778
778
 
779
779
  fn cD(material: J, au: f32) -> vec3f {
780
780
  if (au <= 0.0) { return vec3f(1.0); }
781
- let lH = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
782
- let tD = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(lH, 1e-5)));
781
+ let lG = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
782
+ let tD = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(lG, 1e-5)));
783
783
  return mix(vec3f(1.0), tD, material.coatWeight);
784
784
  }
785
785
 
786
- fn gp(material: J, au: f32) -> f32 {
786
+ fn gq(material: J, au: f32) -> f32 {
787
787
  if (material.coatRoughness <= ROUGHNESS_MIN) {
788
788
  return af(au, 1.0 / material.coatIor);
789
789
  }
@@ -793,21 +793,21 @@ return clamp(1.0 - aJ(material.coatIor,
793
793
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
794
794
  }
795
795
 
796
- fn ha(prepared: ag) -> vec3f {
796
+ fn hb(prepared: ag) -> vec3f {
797
797
  let material = prepared.material;
798
798
  let dielectric = 1.0 - material.baseMetalness;
799
799
  let opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
800
800
  let sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
801
801
  let ug = dielectric * material.transmissionWeight;
802
- let fO = bM(prepared.specularEtaTOverEtaI);
802
+ let fP = bM(prepared.specularEtaTOverEtaI);
803
803
  let kU = bM(1.0 / prepared.transmissionReflectionIor);
804
- let pR = clamp(opaque * fO + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
804
+ let pR = clamp(opaque * fP + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
805
805
  let jp = mix(1.0, material.specularRoughness, pR);
806
806
  let ks = bM(material.coatIor);
807
807
  let kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
808
808
  let k = mix(ks, kr, jp);
809
809
  let eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
810
- + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), fO)
810
+ + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), fP)
811
811
  + sss * material.subsurfaceColor + vec3f(ug);
812
812
  let qU = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
813
813
  return mix(vec3f(1.0), qU, material.coatWeight * material.coatDarkening);
@@ -941,7 +941,7 @@ let ah = af(
941
941
  viewCosine,
942
942
  1.0 / prepared.specularEtaTOverEtaI
943
943
  );
944
- let fw = material.specularColor * select(
944
+ let fA = material.specularColor * select(
945
945
  ah,
946
946
  mix(
947
947
  ah,
@@ -960,7 +960,7 @@ af(viewCosine, prepared.transmissionReflectionIor),
960
960
  cS(af(viewCosine, prepared.transmissionReflectionIor)),
961
961
  material.thinWalled
962
962
  );
963
- let gN = bG(
963
+ let gO = bG(
964
964
  material,
965
965
  viewCosine,
966
966
  prepared.refractionEtaTOverEtaI
@@ -970,12 +970,12 @@ prepared.specularEtaTOverEtaI,
970
970
  prepared.specularAlpha,
971
971
  viewCosine
972
972
  );
973
- let gr = cr(
973
+ let gs = cr(
974
974
  prepared.specularEtaTOverEtaI,
975
975
  prepared.specularAlpha
976
976
  );
977
977
  prepared.diffuseSpecularEnergyCompensation = iu
978
- / max(gr, 1e-12);
978
+ / max(gs, 1e-12);
979
979
 
980
980
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
981
981
  * aw(material.fuzzColor)
@@ -987,10 +987,10 @@ prepared.probabilities[OPENPBR_LOBE_COAT] = 0.0;
987
987
  prepared.coatBaseScale = vec3f(1.0);
988
988
  if (material.coatWeight > 0.0 && !material.inside) {
989
989
  ${hasCoatNormals ? /* wgsl */ `let coatViewCosine = select(viewCosine, max(prepared.coatViewLocal.z, 0.0), material.coatNormalEnabled);` : ''}
990
- let kB = gp(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
990
+ let kB = gq(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
991
991
  prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kB;
992
992
  prepared.coatBaseScale = cD(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'})
993
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kB) * ha(prepared);
993
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kB) * hb(prepared);
994
994
  }
995
995
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
996
996
  * aw(hV);
@@ -1009,10 +1009,10 @@ prepared.probabilities[OPENPBR_LOBE_METAL] += fi;
1009
1009
  prepared.metalMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1010
1010
  }
1011
1011
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1012
- * aw(fw);
1012
+ * aw(fA);
1013
1013
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1014
1014
  * (1.0 - eO)
1015
- * aw(gN);
1015
+ * aw(gO);
1016
1016
 
1017
1017
 
1018
1018
 
@@ -1027,14 +1027,14 @@ prepared.dielectricMsProbability = 0.0;
1027
1027
  if (!material.thinWalled && material.transmissionWeight > 0.0 &&
1028
1028
  prepared.specularAlpha >= 0.0016 && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 &&
1029
1029
  abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6) {
1030
- let lG = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1031
- prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * lG;
1032
- prepared.dielectricMsTransmissionScale = gN * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1030
+ let lF = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1031
+ prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * lF;
1032
+ prepared.dielectricMsTransmissionScale = gO * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1033
1033
  + vec3f(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1034
1034
  prepared.dielectricMsReflectionRatio = ch(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1035
1035
  prepared.dielectricMsViewLoss = bO(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1036
- let nW = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
- let fi = aw(nW) * prepared.dielectricMsViewLoss;
1036
+ let nV = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
+ let fi = aw(nV) * prepared.dielectricMsViewLoss;
1038
1038
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fi;
1039
1039
  prepared.dielectricMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1040
1040
  }
@@ -1053,12 +1053,12 @@ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENP
1053
1053
  prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lj);
1054
1054
  }
1055
1055
  if (material.coatWeight > 0.0 && !material.inside) {
1056
- let gs = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1057
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gs;
1058
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gs;
1059
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gs;
1060
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gs;
1061
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gs;
1056
+ let gt = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1057
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gt;
1058
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gt;
1059
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gt;
1060
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gt;
1061
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gt;
1062
1062
  }
1063
1063
  dR(&prepared);
1064
1064
  return prepared;
@@ -1071,15 +1071,15 @@ return af(au, prepared.material.relativeIor);
1071
1071
  }
1072
1072
  let kp = af(au, prepared.transmissionReflectionIor);
1073
1073
  if (!reflection) { return kp; }
1074
- let nl = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1074
+ let nk = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1075
1075
  let rP = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1076
- return mix(nl, kp, rP);
1076
+ return mix(nk, kp, rP);
1077
1077
  }
1078
1078
 
1079
- fn mE(
1079
+ fn mD(
1080
1080
  prepared: ag,
1081
1081
  lightDirection: vec3f,
1082
- gO: i32,
1082
+ gP: i32,
1083
1083
  pdf: ptr<function, f32>
1084
1084
  ) -> vec3f {
1085
1085
  let material = prepared.material;
@@ -1107,16 +1107,16 @@ V = -V;
1107
1107
  var response = vec3f(0.0);
1108
1108
  *pdf = 0.0;
1109
1109
  var aI = 0.0;
1110
- let mf = gO < 0;
1111
- let uN = mf || gO == OPENPBR_LOBE_FUZZ;
1112
- let tc = mf || gO == OPENPBR_LOBE_COAT;
1113
- let sg = mf || gO == OPENPBR_LOBE_METAL;
1114
- let qf = mf || gO == OPENPBR_LOBE_SPECULAR;
1115
- let jG = mf ||
1116
- gO == OPENPBR_LOBE_TRANSMISSION;
1117
- let th = mf || gO == OPENPBR_LOBE_DIFFUSE;
1118
- let oU = mf ||
1119
- gO == OPENPBR_LOBE_SUBSURFACE;
1110
+ let me = gP < 0;
1111
+ let uN = me || gP == OPENPBR_LOBE_FUZZ;
1112
+ let tc = me || gP == OPENPBR_LOBE_COAT;
1113
+ let sg = me || gP == OPENPBR_LOBE_METAL;
1114
+ let qf = me || gP == OPENPBR_LOBE_SPECULAR;
1115
+ let jG = me ||
1116
+ gP == OPENPBR_LOBE_TRANSMISSION;
1117
+ let th = me || gP == OPENPBR_LOBE_DIFFUSE;
1118
+ let oT = me ||
1119
+ gP == OPENPBR_LOBE_SUBSURFACE;
1120
1120
  let bQ = abs(dot(viewLocal, V));
1121
1121
 
1122
1122
 
@@ -1128,22 +1128,22 @@ df = normalize(vec3f(lightLocal.xy, -lightLocal.z) + viewLocal);
1128
1128
  if (df.z < 0.0) { df = -df; }
1129
1129
  jn = abs(dot(viewLocal, df));
1130
1130
  }
1131
- let mp =
1131
+ let mo =
1132
1132
  (reflection && prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && qf) ||
1133
1133
  (!reflection && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jG);
1134
1134
  let qj = reflection && prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && sg;
1135
- var nE: array<vec3f, 2>;
1136
- if (mp) {
1137
- nE[0] = vec3f(cR(prepared, jn, reflection));
1135
+ var nD: array<vec3f, 2>;
1136
+ if (mo) {
1137
+ nD[0] = vec3f(cR(prepared, jn, reflection));
1138
1138
  }
1139
1139
  if (qj) {
1140
- nE[1] = dU(bQ, material.baseWeight * material.baseColor, material.specularColor);
1140
+ nD[1] = dU(bQ, material.baseWeight * material.baseColor, material.specularColor);
1141
1141
  }
1142
1142
  if (HAS_THIN_FILM && material.thinFilmWeight > 0.0) {
1143
1143
  let wavelengths = vec3f(620.0, 540.0, 450.0);
1144
1144
 
1145
1145
  for (var kT = 0u; kT < (rtUniform.loopUnrollGuard >> 1u); kT++) {
1146
- if (!select(mp, qj, kT == 1u)) { continue; }
1146
+ if (!select(mo, qj, kT == 1u)) { continue; }
1147
1147
  var wp = vec3f(0.0);
1148
1148
  let L = select(jn, bQ, kT == 1u);
1149
1149
  for (var channel = 0u; channel + 1u < rtUniform.loopUnrollGuard; channel++) {
@@ -1154,11 +1154,11 @@ ior = cQ(material.baseWeight * material.baseColor[channel], material.specularCol
1154
1154
  wp[channel] = ar(L,
1155
1155
  wavelengths[channel], material.thinFilmThickness, prepared.thinFilmExteriorIor, material.thinFilmIor, ior);
1156
1156
  }
1157
- nE[kT] = mix(nE[kT], wp,
1157
+ nD[kT] = mix(nD[kT], wp,
1158
1158
  bN(material.thinFilmThickness, material.thinFilmWeight));
1159
1159
  }
1160
1160
  }
1161
- let ei = nE[0];
1161
+ let ei = nD[0];
1162
1162
  let diffuseSpecularEnergyCompensation =
1163
1163
  prepared.diffuseSpecularEnergyCompensation
1164
1164
  * aJ(
@@ -1185,7 +1185,7 @@ diffuseSpecularEnergyCompensation,
1185
1185
  }
1186
1186
 
1187
1187
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && material.thinWalled &&
1188
- oU) {
1188
+ oT) {
1189
1189
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cE(
1190
1190
  material,
1191
1191
  material.subsurfaceColor,
@@ -1218,7 +1218,7 @@ cK,
1218
1218
  }
1219
1219
 
1220
1220
  if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && sg) {
1221
- let cK = material.specularWeight * nE[1];
1221
+ let cK = material.specularWeight * nD[1];
1222
1222
  response += prepared.weights[OPENPBR_LOBE_METAL] * am(
1223
1223
  material,
1224
1224
  viewLocal,
@@ -1240,7 +1240,7 @@ let cK = ei;
1240
1240
  if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jG) {
1241
1241
  if (material.thinWalled) {
1242
1242
  let kY = vec3f(lightLocal.xy, -lightLocal.z);
1243
- let gk = aP(
1243
+ let gm = aP(
1244
1244
  ei,
1245
1245
  1.0
1246
1246
  );
@@ -1255,7 +1255,7 @@ material,
1255
1255
  viewLocal,
1256
1256
  kY,
1257
1257
  df,
1258
- tint * (vec3f(1.0) - gk),
1258
+ tint * (vec3f(1.0) - gm),
1259
1259
  &aI
1260
1260
  );
1261
1261
  }
@@ -1277,15 +1277,15 @@ aI *= 1.0 - prepared.dielectricMsProbability;
1277
1277
  }
1278
1278
  *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aI;
1279
1279
  }
1280
- if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && oU) {
1280
+ if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && oT) {
1281
1281
  if (material.thinWalled) {
1282
- let oi = vec3f(lightLocal.xy, -lightLocal.z);
1282
+ let oh = vec3f(lightLocal.xy, -lightLocal.z);
1283
1283
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1284
1284
  * cE(
1285
1285
  material,
1286
1286
  material.subsurfaceColor,
1287
1287
  viewLocal,
1288
- oi,
1288
+ oh,
1289
1289
  diffuseSpecularEnergyCompensation,
1290
1290
  &aI
1291
1291
  );
@@ -1333,14 +1333,14 @@ ${hasAnisotropyDirections ? /* wgsl */ `
1333
1333
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1334
1334
  var dI = viewLocal;
1335
1335
  var kD = lightLocal;
1336
- var gv = V;
1336
+ var gw = V;
1337
1337
  var jK = bQ;
1338
1338
  if (prepared.directionFrames) {
1339
1339
  dI = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, independentCoat)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'};
1340
1340
  kD = openpbr_to_local(prepared.coatBasis, lightDirection);
1341
- gv = normalize(kD + dI);
1342
- if (gv.z < 0.0) { gv = -gv; }
1343
- jK = abs(dot(dI, gv));
1341
+ gw = normalize(kD + dI);
1342
+ if (gw.z < 0.0) { gw = -gw; }
1343
+ jK = abs(dot(dI, gw));
1344
1344
  }
1345
1345
 
1346
1346
  let lg = vec3f(af(
@@ -1356,7 +1356,7 @@ response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0
1356
1356
  dH,
1357
1357
  dI,
1358
1358
  kD,
1359
- gv,
1359
+ gw,
1360
1360
  lg,
1361
1361
  &aI
1362
1362
  );
@@ -1415,7 +1415,7 @@ prepared: ag,
1415
1415
  lightDirection: vec3f,
1416
1416
  pdf: ptr<function, f32>
1417
1417
  ) -> vec3f {
1418
- return mE(prepared, lightDirection, -1, pdf);
1418
+ return mD(prepared, lightDirection, -1, pdf);
1419
1419
  }
1420
1420
 
1421
1421
 
@@ -1443,7 +1443,7 @@ return bI(prepared, lightDirection, pdf);
1443
1443
 
1444
1444
 
1445
1445
 
1446
- fn np(
1446
+ fn nl(
1447
1447
  prepared: ag, cm: vec3f,
1448
1448
  lightDirection: ptr<function, vec3f>, isTransmissionEvent: ptr<function, bool>,
1449
1449
  aA: ptr<function, f32>, aS: ptr<function, bool>,
@@ -1452,7 +1452,7 @@ bE: ptr<function, bool>, aR: ptr<function, u32>
1452
1452
  let material = prepared.material;
1453
1453
  let viewLocal = prepared.viewLocal;
1454
1454
  var cy = cm.x;
1455
- let fu = cm.y;
1455
+ let fv = cm.y;
1456
1456
  let bm = cm.z;
1457
1457
  *isTransmissionEvent = false;
1458
1458
  *aA = 1.0;
@@ -1463,8 +1463,8 @@ let bm = cm.z;
1463
1463
 
1464
1464
  var cdf: array<f32, OPENPBR_LOBE_COUNT>;
1465
1465
  cdf[OPENPBR_LOBE_FUZZ] = prepared.probabilities[OPENPBR_LOBE_FUZZ];
1466
- let nJ = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
1467
- for (var hU = 1; hU < nJ; hU++) {
1466
+ let nI = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
1467
+ for (var hU = 1; hU < nI; hU++) {
1468
1468
  cdf[hU] = cdf[hU - 1] + prepared.probabilities[hU];
1469
1469
  }
1470
1470
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
@@ -1487,7 +1487,7 @@ u32(OPENPBR_LOBE_DIFFUSE),
1487
1487
  u32(OPENPBR_LOBE_FUZZ),
1488
1488
  pQ
1489
1489
  );
1490
- lightLocal = bi(vec2f(cy, fu));
1490
+ lightLocal = bi(vec2f(cy, fv));
1491
1491
  }
1492
1492
  ${hasAnisotropyDirections ? /* wgsl */ `
1493
1493
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
@@ -1500,7 +1500,7 @@ var V = aQ(
1500
1500
  dI,
1501
1501
 
1502
1502
  aK(material.coatRoughness, material.coatAnisotropy),
1503
- vec2f(cy, fu)
1503
+ vec2f(cy, fv)
1504
1504
  );
1505
1505
  if (V.z < 0.0) {
1506
1506
  V = -V;
@@ -1524,7 +1524,7 @@ var V = aQ(
1524
1524
  viewLocal,
1525
1525
 
1526
1526
  aK(material.coatRoughness, material.coatAnisotropy),
1527
- vec2f(cy, fu)
1527
+ vec2f(cy, fv)
1528
1528
  );
1529
1529
  if (V.z < 0.0) {
1530
1530
  V = -V;
@@ -1545,14 +1545,14 @@ let rM = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE
1545
1545
  if (tw && rM < prepared.metalMsProbability) {
1546
1546
  let z = cy;
1547
1547
  let fl = sqrt(max(0.0, 1.0 - z * z));
1548
- let br = TWOPI * fu;
1548
+ let br = TWOPI * fv;
1549
1549
  lightLocal = vec3f(fl * cos(br), fl * sin(br), z);
1550
1550
  }
1551
1551
  else {
1552
1552
  var V = aQ(
1553
1553
  viewLocal,
1554
1554
  vec2f(material.alphaX, material.alphaY),
1555
- vec2f(cy, fu)
1555
+ vec2f(cy, fv)
1556
1556
  );
1557
1557
  if (V.z < 0.0) {
1558
1558
  V = -V;
@@ -1570,21 +1570,21 @@ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1570
1570
  let us = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1571
1571
  if (prepared.dielectricMsProbability > 0.0 && us < prepared.dielectricMsProbability) {
1572
1572
  let ja = prepared.dielectricMsReflectionRatio;
1573
- let lZ = cy < ja;
1573
+ let lY = cy < ja;
1574
1574
  var z: f32;
1575
- if (lZ) { z = min(cy / ja, 0.99999994); }
1575
+ if (lY) { z = min(cy / ja, 0.99999994); }
1576
1576
  else { z = -min((cy - ja) / (1.0 - ja), 0.99999994); }
1577
1577
  let fl = sqrt(max(0.0, 1.0 - z * z));
1578
- let br = TWOPI * fu;
1578
+ let br = TWOPI * fv;
1579
1579
  lightLocal = vec3f(fl * cos(br), fl * sin(br), z);
1580
- *isTransmissionEvent = !lZ;
1581
- *aR = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), lZ);
1580
+ *isTransmissionEvent = !lY;
1581
+ *aR = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), lY);
1582
1582
  }
1583
1583
  else {
1584
1584
  var V = aQ(
1585
1585
  viewLocal,
1586
1586
  vec2f(material.alphaX, material.alphaY),
1587
- vec2f(cy, fu)
1587
+ vec2f(cy, fv)
1588
1588
  );
1589
1589
  if (V.z < 0.0) {
1590
1590
  V = -V;
@@ -1620,7 +1620,7 @@ cy = (cy - 0.5) * 2.0;
1620
1620
  else {
1621
1621
  cy *= 2.0;
1622
1622
  }
1623
- lightLocal = bi(vec2f(cy, fu));
1623
+ lightLocal = bi(vec2f(cy, fv));
1624
1624
  if (pT) {
1625
1625
  lightLocal.z = -lightLocal.z;
1626
1626
  }
@@ -1629,7 +1629,7 @@ else {
1629
1629
  }
1630
1630
  }
1631
1631
  else {
1632
- lightLocal = bi(vec2f(cy, fu));
1632
+ lightLocal = bi(vec2f(cy, fv));
1633
1633
  lightLocal.z = -lightLocal.z;
1634
1634
  }
1635
1635
  }
@@ -1659,11 +1659,11 @@ aS: ptr<function, bool>,
1659
1659
  bE: ptr<function, bool>,
1660
1660
  aR: ptr<function, u32>,
1661
1661
  lo: ptr<function, f32>,
1662
- gX: ptr<function, vec3f>
1662
+ gY: ptr<function, vec3f>
1663
1663
  ) -> vec3f {
1664
1664
  *pdf = 0.0;
1665
1665
  *lo = 0.0;
1666
- *gX = vec3f(0.0);
1666
+ *gY = vec3f(0.0);
1667
1667
 
1668
1668
 
1669
1669
 
@@ -1675,24 +1675,24 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6) {
1675
1675
  prepared.basis,
1676
1676
  -prepared.viewLocal
1677
1677
  );
1678
- let nM = bn(prepared.material)
1678
+ let nL = bn(prepared.material)
1679
1679
  * ds(prepared, ${hasCoatNormals ? 'select(-prepared.viewLocal.z, dot(prepared.coatBasis.normal, *lightDirection), prepared.material.coatNormalEnabled)' : '-prepared.viewLocal.z'});
1680
1680
  *pdf = 1.0;
1681
1681
  *lo = 1.0;
1682
- *gX = nM;
1682
+ *gY = nL;
1683
1683
  *isTransmissionEvent = true;
1684
1684
  *aA = 0.0;
1685
1685
  *aS = true;
1686
1686
  *bE = false;
1687
1687
  *aR = u32(OPENPBR_LOBE_TRANSMISSION);
1688
- return nM;
1688
+ return nL;
1689
1689
  }
1690
- if (!np(prepared, cm, lightDirection,
1690
+ if (!nl(prepared, cm, lightDirection,
1691
1691
  isTransmissionEvent, aA, aS,
1692
1692
  bE, aR)) { return vec3f(0.0); }
1693
1693
  let response = bI(prepared, *lightDirection, pdf);
1694
1694
  *lo = *pdf;
1695
- *gX = response;
1695
+ *gY = response;
1696
1696
  return response;
1697
1697
  }
1698
1698
 
@@ -1717,7 +1717,7 @@ material,
1717
1717
  bF,
1718
1718
  normal
1719
1719
  );
1720
- var gX = vec3f(0.0);
1720
+ var gY = vec3f(0.0);
1721
1721
  return dv(
1722
1722
  prepared,
1723
1723
  cm,
@@ -1729,7 +1729,7 @@ aS,
1729
1729
  bE,
1730
1730
  aR,
1731
1731
  lo,
1732
- &gX
1732
+ &gY
1733
1733
  );
1734
1734
  }`;
1735
1735
  }