@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
@@ -37,7 +37,7 @@ J material;
37
37
  bj basis;
38
38
  bj coatBasis;
39
39
  bool directionFrames;
40
- #ifdef NUM_COAT_NORMAL_MAPS
40
+ #ifdef USE_COAT_NORMAL_FRAMES
41
41
  vec3 coatViewLocal;
42
42
  #endif
43
43
  vec3 viewLocal;
@@ -104,7 +104,7 @@ float F(int sl, int row) {
104
104
  return texelFetch(openPbrEnergyLut, ivec2(sl, row), 0).r;
105
105
  }
106
106
 
107
- float gd(
107
+ float ge(
108
108
  float dJ,
109
109
  float bR,
110
110
  float hR
@@ -141,7 +141,7 @@ kE
141
141
  );
142
142
  }
143
143
 
144
- float gF(float dJ, float bR) {
144
+ float gG(float dJ, float bR) {
145
145
  float bA = clamp(dJ, 0.0, 31.0);
146
146
  float aH = clamp(bR, 0.0, 31.0);
147
147
  int dQ = int(floor(bA));
@@ -285,7 +285,7 @@ float ior,
285
285
  float alpha,
286
286
  float au
287
287
  ) {
288
- float value = gd(
288
+ float value = ge(
289
289
  aC(ior),
290
290
  sqrt(alpha) * 31.0,
291
291
  au * 31.0
@@ -294,7 +294,7 @@ return aX(value, ior);
294
294
  }
295
295
 
296
296
  float cr(float ior, float alpha) {
297
- float value = gF(
297
+ float value = gG(
298
298
  aC(ior),
299
299
  sqrt(alpha) * 31.0
300
300
  );
@@ -356,7 +356,7 @@ return (ak * L - av * S)
356
356
  / (av * S + ak * L);
357
357
  }
358
358
 
359
- float hc(
359
+ float hd(
360
360
  float av,
361
361
  float ak,
362
362
  float L,
@@ -366,7 +366,7 @@ return 2.0 * av * L
366
366
  / (av * L + ak * S);
367
367
  }
368
368
 
369
- float hb(
369
+ float hc(
370
370
  float av,
371
371
  float ak,
372
372
  float L,
@@ -389,9 +389,9 @@ return vec2(
389
389
  }
390
390
 
391
391
  vec2 hX(vec2 value) {
392
- float nK = length(value);
393
- float sP = sqrt(max(0.0, 0.5 * (nK + value.x)));
394
- float ff = sqrt(max(0.0, 0.5 * (nK - value.x)));
392
+ float nJ = length(value);
393
+ float sP = sqrt(max(0.0, 0.5 * (nJ + value.x)));
394
+ float ff = sqrt(max(0.0, 0.5 * (nJ - value.x)));
395
395
  return vec2(sP, value.y >= 0.0 ? ff : -ff);
396
396
  }
397
397
 
@@ -401,9 +401,9 @@ float av,
401
401
  vec2 ak,
402
402
  bool qG
403
403
  ) {
404
- float os = sqrt(max(0.0, 1.0 - L * L));
404
+ float oq = sqrt(max(0.0, 1.0 - L * L));
405
405
  vec2 sA = aZ(vec2(av, 0.0), ak);
406
- vec2 hA = sA * os;
406
+ vec2 hA = sA * oq;
407
407
  vec2 S = hX(
408
408
  vec2(1.0, 0.0) - aU(hA, hA)
409
409
  );
@@ -411,7 +411,7 @@ if (aU(ak, S).y < 0.0) {
411
411
  S = -S;
412
412
  }
413
413
 
414
- vec2 fK = vec2(av * L, 0.0);
414
+ vec2 fL = vec2(av * L, 0.0);
415
415
  vec2 eB = aU(ak, S);
416
416
  if (qG) {
417
417
  vec2 ci = ak * L;
@@ -422,23 +422,23 @@ ci + ce
422
422
  );
423
423
  }
424
424
  return aZ(
425
- fK - eB,
426
- fK + eB
425
+ fL - eB,
426
+ fL + eB
427
427
  );
428
428
  }
429
429
 
430
430
  float eq(
431
431
  float iH,
432
- float gM,
433
- float oH,
434
- float mN,
432
+ float gN,
433
+ float oG,
434
+ float mM,
435
435
  vec2 kf,
436
436
  float phase
437
437
  ) {
438
- vec2 nr = vec2(cos(phase), sin(phase));
439
- vec2 ia = aU(kf, nr);
440
- vec2 kO = ia * (gM * mN);
441
- vec2 ap = vec2(1.0, 0.0) - ia * oH;
438
+ vec2 nq = vec2(cos(phase), sin(phase));
439
+ vec2 ia = aU(kf, nq);
440
+ vec2 kO = ia * (gN * mM);
441
+ vec2 ap = vec2(1.0, 0.0) - ia * oG;
442
442
  vec2 hz = vec2(iH, 0.0)
443
443
  + aZ(kO, ap);
444
444
  return dot(hz, hz);
@@ -465,13 +465,13 @@ aM, ck, L, cU
465
465
  float la = jZ(
466
466
  aM, ck, L, cU
467
467
  );
468
- float jj = hc(
468
+ float jj = hd(
469
469
  aM, ck, L, cU
470
470
  );
471
- float ji = hb(
471
+ float ji = hc(
472
472
  aM, ck, L, cU
473
473
  );
474
- float gq = ck * cU
474
+ float gr = ck * cU
475
475
  / max(aM * L, 1e-9);
476
476
  vec2 tb = bX(
477
477
  cU, ck, eu, false
@@ -484,7 +484,7 @@ float tJ = eq(
484
484
  lb,
485
485
  jj,
486
486
  -lb,
487
- jj * gq,
487
+ jj * gr,
488
488
  tb,
489
489
  phase
490
490
  );
@@ -492,7 +492,7 @@ float tI = eq(
492
492
  la,
493
493
  ji,
494
494
  -la,
495
- ji * gq,
495
+ ji * gr,
496
496
  ta,
497
497
  phase
498
498
  );
@@ -525,19 +525,19 @@ vec3 dU(float au, vec3 f0, vec3 tint) {
525
525
  vec3 rk = mix(f0, vec3(1.0), aE(au));
526
526
  if (all(equal(tint, vec3(1.0)))) { return rk; }
527
527
  float dk = 1.0 / 7.0;
528
- float ml = 1.0 - dk;
529
- vec3 fI = mix(f0, vec3(1.0), aE(dk));
528
+ float mk = 1.0 - dk;
529
+ vec3 fJ = mix(f0, vec3(1.0), aE(dk));
530
530
  float di = 1.0 - au;
531
531
  float qt = au * aE(au) * di
532
- / (dk * pow(ml, 6.0));
533
- return clamp(rk - qt * (fI - tint * fI), vec3(0.0), vec3(1.0));
532
+ / (dk * pow(mk, 6.0));
533
+ return clamp(rk - qt * (fJ - tint * fJ), vec3(0.0), vec3(1.0));
534
534
  }
535
535
 
536
536
  vec2 cQ(float f0, float tp) {
537
537
  float dN = clamp(f0, 0.0, 0.99);
538
- float gL = sqrt(dN);
538
+ float gM = sqrt(dN);
539
539
  float qF = (1.0 - dN) / (1.0 + dN);
540
- float qD = (1.0 + gL) / max(1.0 - gL, 1e-9);
540
+ float qD = (1.0 + gM) / max(1.0 - gM, 1e-9);
541
541
  float ior = mix(qD, qF, clamp(tp, 0.0, 1.0));
542
542
  float jO = (
543
543
  (ior + 1.0) * (ior + 1.0) * dN
@@ -639,7 +639,7 @@ J material,
639
639
  vec3 color,
640
640
  vec3 viewLocal,
641
641
  vec3 lightLocal,
642
- float ft,
642
+ float fu,
643
643
  out float pdf
644
644
  ) {
645
645
  pdf = 0.0;
@@ -648,47 +648,47 @@ return vec3(0.0);
648
648
  }
649
649
 
650
650
  float roughness = material.diffuseRoughness;
651
- float gW = 0.5 - 2.0 / (3.0 * PI);
652
- float oj = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
- float oB = lightLocal.z;
654
- float mB = viewLocal.z;
655
- float hP = dot(lightLocal, viewLocal) - oB * mB;
656
- float gT = hP > 0.0
657
- ? hP / max(max(oB, mB), 1e-7)
651
+ float gX = 0.5 - 2.0 / (3.0 * PI);
652
+ float oi = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
+ float oA = lightLocal.z;
654
+ float mA = viewLocal.z;
655
+ float hP = dot(lightLocal, viewLocal) - oA * mA;
656
+ float gU = hP > 0.0
657
+ ? hP / max(max(oA, mA), 1e-7)
658
658
  : hP;
659
- float il = 1.0 / (1.0 + gW * roughness);
660
- vec3 nA = color * INVPI * il
661
- * (1.0 + roughness * gT);
659
+ float il = 1.0 / (1.0 + gX * roughness);
660
+ vec3 nv = color * INVPI * il
661
+ * (1.0 + roughness * gU);
662
662
 
663
- float dd = 1.0 - oB;
664
- float cP = 1.0 - mB;
665
- float ot = dd * (
663
+ float dd = 1.0 - oA;
664
+ float cP = 1.0 - mA;
665
+ float os = dd * (
666
666
  0.0571085289 + dd * (
667
667
  0.491881867 + dd * (
668
668
  -0.332181442 + dd * 0.0714429953
669
669
  )
670
670
  )
671
671
  );
672
- float nq = cP * (
672
+ float np = cP * (
673
673
  0.0571085289 + cP * (
674
674
  0.491881867 + cP * (
675
675
  -0.332181442 + cP * 0.0714429953
676
676
  )
677
677
  )
678
678
  );
679
- float pv = (1.0 + roughness * ot)
680
- / (1.0 + gW * roughness);
681
- float oD = (1.0 + roughness * nq)
682
- / (1.0 + gW * roughness);
683
- float fU = il * (1.0 + oj * roughness);
684
- vec3 hF = color * color * fU
685
- / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fU));
686
- vec3 lF = hF * INVPI
687
- * max(1e-7, 1.0 - oD)
679
+ float pv = (1.0 + roughness * os)
680
+ / (1.0 + gX * roughness);
681
+ float oC = (1.0 + roughness * np)
682
+ / (1.0 + gX * roughness);
683
+ float fV = il * (1.0 + oi * roughness);
684
+ vec3 hF = color * color * fV
685
+ / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fV));
686
+ vec3 lE = hF * INVPI
687
+ * max(1e-7, 1.0 - oC)
688
688
  * max(1e-7, 1.0 - pv)
689
- / max(1e-7, 1.0 - fU);
689
+ / max(1e-7, 1.0 - fV);
690
690
  pdf = lightLocal.z * INVPI;
691
- return (nA + lF) * ft;
691
+ return (nv + lE) * fu;
692
692
  }
693
693
 
694
694
  float aO(float viewCosine, float roughness) {
@@ -737,7 +737,7 @@ return vec3(0.0);
737
737
  }
738
738
 
739
739
  vec2 alpha = vec2(material.alphaX, material.alphaY);
740
- float distribution = gK(V, alpha);
740
+ float distribution = gL(V, alpha);
741
741
  float jV = bk(viewLocal, alpha);
742
742
  float ea = jV
743
743
  * bk(lightLocal, alpha);
@@ -770,7 +770,7 @@ if (bQ <= 0.0 || kL >= 0.0) {
770
770
  return vec3(0.0);
771
771
  }
772
772
  vec2 alpha = vec2(material.alphaX, material.alphaY);
773
- float distribution = gK(V, alpha);
773
+ float distribution = gL(V, alpha);
774
774
  float jV = bk(viewLocal, alpha);
775
775
  float ea = jV
776
776
  * bk(lightLocal, alpha);
@@ -803,11 +803,11 @@ vec3 aP(
803
803
  vec3 ah,
804
804
  float transmissionWeight
805
805
  ) {
806
- vec3 gk = 2.0 * ah
806
+ vec3 gm = 2.0 * ah
807
807
  / (vec3(1.0) + ah);
808
808
  return mix(
809
809
  ah,
810
- gk,
810
+ gm,
811
811
  clamp(transmissionWeight, 0.0, 1.0)
812
812
  );
813
813
  }
@@ -842,12 +842,12 @@ if (viewLocal.z <= 0.0 || lightLocal.z >= 0.0) {
842
842
  return vec3(0.0);
843
843
  }
844
844
  float S = -lightLocal.z;
845
- float og = cu(
845
+ float oe = cu(
846
846
  viewLocal.z,
847
847
  material.relativeIor
848
848
  );
849
849
  pdf = S * INVPI;
850
- return vec3(1.0 - og) * INVPI;
850
+ return vec3(1.0 - oe) * INVPI;
851
851
  }
852
852
 
853
853
  void dR(inout ag prepared) {
@@ -861,9 +861,9 @@ prepared.probabilities[hU] = 0.0;
861
861
  }
862
862
  return;
863
863
  }
864
- float ow = 1.0 / total;
864
+ float ov = 1.0 / total;
865
865
  for (int hU = 0; hU < OPENPBR_LOBE_COUNT; hU++) {
866
- prepared.probabilities[hU] *= ow;
866
+ prepared.probabilities[hU] *= ov;
867
867
  }
868
868
  }
869
869
 
@@ -877,8 +877,8 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
877
877
 
878
878
  vec3 bP(vec3 f0, vec3 tint) {
879
879
  float dk = 1.0 / 7.0;
880
- vec3 fI = mix(f0, vec3(1.0), aE(dk));
881
- vec3 b = fI * (vec3(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
880
+ vec3 fJ = mix(f0, vec3(1.0), aE(dk));
881
+ vec3 b = fJ * (vec3(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
882
882
  return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
883
883
  }
884
884
 
@@ -886,12 +886,12 @@ return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
886
886
 
887
887
  vec3 cD(J material, float au) {
888
888
  if (au <= 0.0) { return vec3(1.0); }
889
- float lH = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
- vec3 tD = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lH, 1e-5)));
889
+ float lG = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
+ vec3 tD = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lG, 1e-5)));
891
891
  return mix(vec3(1.0), tD, material.coatWeight);
892
892
  }
893
893
 
894
- float gp(J material, float au) {
894
+ float gq(J material, float au) {
895
895
  if (material.coatRoughness <= ROUGHNESS_MIN) {
896
896
  return af(au, 1.0 / material.coatIor);
897
897
  }
@@ -901,21 +901,21 @@ return clamp(1.0 - aJ(material.coatIor,
901
901
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
902
902
  }
903
903
 
904
- vec3 ha(ag prepared) {
904
+ vec3 hb(ag prepared) {
905
905
  J material = prepared.material;
906
906
  float dielectric = 1.0 - material.baseMetalness;
907
907
  float opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
908
908
  float sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
909
909
  float ug = dielectric * material.transmissionWeight;
910
- float fO = bM(prepared.specularEtaTOverEtaI);
910
+ float fP = bM(prepared.specularEtaTOverEtaI);
911
911
  float kU = bM(1.0 / prepared.transmissionReflectionIor);
912
- float pR = clamp(opaque * fO + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
912
+ float pR = clamp(opaque * fP + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
913
913
  float jp = mix(1.0, material.specularRoughness, pR);
914
914
  float ks = bM(material.coatIor);
915
915
  float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
916
916
  float k = mix(ks, kr, jp);
917
917
  vec3 eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
918
- + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fO)
918
+ + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fP)
919
919
  + sss * material.subsurfaceColor + vec3(ug);
920
920
  vec3 qU = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
921
  return mix(vec3(1.0), qU, material.coatWeight * material.coatDarkening);
@@ -961,7 +961,7 @@ max(material.specularAnisotropy, material.coatAnisotropy)
961
961
  );
962
962
  prepared.coatBasis = prepared.basis;
963
963
  prepared.directionFrames = false;
964
- #ifdef NUM_COAT_NORMAL_MAPS
964
+ #ifdef USE_COAT_NORMAL_FRAMES
965
965
 
966
966
 
967
967
  if (material.coatNormalEnabled) {
@@ -978,7 +978,7 @@ prepared.coatBasis = du(prepared.coatBasis, material.geometryTangent, material.g
978
978
  prepared.directionFrames = true;
979
979
  }
980
980
  prepared.viewLocal = openpbr_to_local(prepared.basis, bF);
981
- #ifdef NUM_COAT_NORMAL_MAPS
981
+ #ifdef USE_COAT_NORMAL_FRAMES
982
982
  prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bF);
983
983
  #endif
984
984
  prepared.diffuseColor = material.baseColor;
@@ -1047,7 +1047,7 @@ float ah = af(
1047
1047
  viewCosine,
1048
1048
  1.0 / prepared.specularEtaTOverEtaI
1049
1049
  );
1050
- vec3 fw = material.specularColor * (
1050
+ vec3 fA = material.specularColor * (
1051
1051
  material.thinWalled
1052
1052
  ? mix(
1053
1053
  ah,
@@ -1064,7 +1064,7 @@ material.specularColor
1064
1064
  float eO = material.thinWalled
1065
1065
  ? cS(af(viewCosine, prepared.transmissionReflectionIor))
1066
1066
  : af(viewCosine, prepared.transmissionReflectionIor);
1067
- vec3 gN = bG(
1067
+ vec3 gO = bG(
1068
1068
  material,
1069
1069
  viewCosine,
1070
1070
  prepared.refractionEtaTOverEtaI
@@ -1074,12 +1074,12 @@ prepared.specularEtaTOverEtaI,
1074
1074
  prepared.specularAlpha,
1075
1075
  viewCosine
1076
1076
  );
1077
- float gr = cr(
1077
+ float gs = cr(
1078
1078
  prepared.specularEtaTOverEtaI,
1079
1079
  prepared.specularAlpha
1080
1080
  );
1081
1081
  prepared.diffuseSpecularEnergyCompensation = iu
1082
- / max(gr, 1e-12);
1082
+ / max(gs, 1e-12);
1083
1083
 
1084
1084
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
1085
1085
  * aw(material.fuzzColor)
@@ -1090,21 +1090,21 @@ material.fuzzRoughness
1090
1090
  prepared.probabilities[OPENPBR_LOBE_COAT] = 0.0;
1091
1091
  prepared.coatBaseScale = vec3(1.0);
1092
1092
  if (material.coatWeight > 0.0 && !material.inside) {
1093
- #ifdef NUM_COAT_NORMAL_MAPS
1093
+ #ifdef USE_COAT_NORMAL_FRAMES
1094
1094
  float coatViewCosine = material.coatNormalEnabled ? max(prepared.coatViewLocal.z, 0.0) : viewCosine;
1095
- float kB = gp(material, coatViewCosine);
1095
+ float kB = gq(material, coatViewCosine);
1096
1096
  #else
1097
- float kB = gp(material, viewCosine);
1097
+ float kB = gq(material, viewCosine);
1098
1098
  #endif
1099
1099
  prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kB;
1100
1100
  prepared.coatBaseScale = cD(material,
1101
- #ifdef NUM_COAT_NORMAL_MAPS
1101
+ #ifdef USE_COAT_NORMAL_FRAMES
1102
1102
  coatViewCosine
1103
1103
  #else
1104
1104
  viewCosine
1105
1105
  #endif
1106
1106
  )
1107
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kB) * ha(prepared);
1107
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kB) * hb(prepared);
1108
1108
  }
1109
1109
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1110
1110
  * aw(hV);
@@ -1121,10 +1121,10 @@ prepared.probabilities[OPENPBR_LOBE_METAL] += fi;
1121
1121
  prepared.metalMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1122
1122
  }
1123
1123
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1124
- * aw(fw);
1124
+ * aw(fA);
1125
1125
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1126
1126
  * (1.0 - eO)
1127
- * aw(gN);
1127
+ * aw(gO);
1128
1128
 
1129
1129
 
1130
1130
 
@@ -1139,14 +1139,14 @@ prepared.dielectricMsProbability = 0.0;
1139
1139
  if (!material.thinWalled && material.transmissionWeight > 0.0 &&
1140
1140
  prepared.specularAlpha >= 0.0016 && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 &&
1141
1141
  abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6) {
1142
- float lG = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
- prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lG;
1144
- prepared.dielectricMsTransmissionScale = gN * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1142
+ float lF = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
+ prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lF;
1144
+ prepared.dielectricMsTransmissionScale = gO * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1145
1145
  + vec3(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1146
1146
  prepared.dielectricMsReflectionRatio = ch(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1147
1147
  prepared.dielectricMsViewLoss = bO(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1148
- vec3 nW = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
- float fi = aw(nW) * prepared.dielectricMsViewLoss;
1148
+ vec3 nV = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
+ float fi = aw(nV) * prepared.dielectricMsViewLoss;
1150
1150
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fi;
1151
1151
  prepared.dielectricMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1152
1152
  }
@@ -1165,12 +1165,12 @@ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENP
1165
1165
  prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lj);
1166
1166
  }
1167
1167
  if (material.coatWeight > 0.0 && !material.inside) {
1168
- float gs = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gs;
1170
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gs;
1171
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gs;
1172
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gs;
1173
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gs;
1168
+ float gt = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gt;
1170
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gt;
1171
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gt;
1172
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gt;
1173
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gt;
1174
1174
  }
1175
1175
  dR(prepared);
1176
1176
  return prepared;
@@ -1182,9 +1182,9 @@ return af(au, prepared.material.relativeIor);
1182
1182
  }
1183
1183
  float kp = af(au, prepared.transmissionReflectionIor);
1184
1184
  if (!reflection) { return kp; }
1185
- float nl = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1185
+ float nk = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1186
1186
  float rP = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
- return mix(nl, kp, rP);
1187
+ return mix(nk, kp, rP);
1188
1188
  }
1189
1189
 
1190
1190
  vec3 bI(
@@ -1196,7 +1196,7 @@ J material = prepared.material;
1196
1196
  vec3 viewLocal = prepared.viewLocal;
1197
1197
  vec3 lightLocal = openpbr_to_local(prepared.basis, lightDirection);
1198
1198
  bool reflection = lightLocal.z * viewLocal.z > 0.0;
1199
- #ifdef NUM_COAT_NORMAL_MAPS
1199
+ #ifdef USE_COAT_NORMAL_FRAMES
1200
1200
  bool independentCoat = material.coatNormalEnabled;
1201
1201
  bool geometricReflection = dot(material.geometricNormal, lightDirection) > 0.0;
1202
1202
  float coatLightCosine = dot(prepared.coatBasis.normal, lightDirection);
@@ -1226,7 +1226,7 @@ prepared.specularAlpha,
1226
1226
  abs(lightLocal.z)
1227
1227
  );
1228
1228
 
1229
- #ifdef NUM_COAT_NORMAL_MAPS
1229
+ #ifdef USE_COAT_NORMAL_FRAMES
1230
1230
  if (!independentCoat || (lightLocal.z != 0.0 && reflection == geometricReflection)) {
1231
1231
  #endif
1232
1232
  if (reflection) {
@@ -1340,12 +1340,12 @@ vec3 df = normalize(kY + viewLocal);
1340
1340
  if (df.z < 0.0) {
1341
1341
  df = -df;
1342
1342
  }
1343
- float nR = abs(dot(viewLocal, df));
1344
- vec3 lL = vec3(cR(prepared, nR, false));
1343
+ float nQ = abs(dot(viewLocal, df));
1344
+ vec3 lK = vec3(cR(prepared, nQ, false));
1345
1345
  if (material.thinFilmWeight > 0.0) {
1346
- lL = bW(
1347
- lL,
1348
- nR,
1346
+ lK = bW(
1347
+ lK,
1348
+ nQ,
1349
1349
  material.thinFilmThickness,
1350
1350
  material.thinFilmIor,
1351
1351
  prepared.thinFilmBaseIor,
@@ -1353,8 +1353,8 @@ material.thinFilmWeight,
1353
1353
  prepared.thinFilmExteriorIor
1354
1354
  );
1355
1355
  }
1356
- vec3 gk = aP(
1357
- lL,
1356
+ vec3 gm = aP(
1357
+ lK,
1358
1358
  1.0
1359
1359
  );
1360
1360
  vec3 tint = bG(
@@ -1368,7 +1368,7 @@ material,
1368
1368
  viewLocal,
1369
1369
  kY,
1370
1370
  df,
1371
- tint * (vec3(1.0) - gk),
1371
+ tint * (vec3(1.0) - gm),
1372
1372
  aI
1373
1373
  );
1374
1374
  }
@@ -1392,13 +1392,13 @@ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aI;
1392
1392
  }
1393
1393
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) {
1394
1394
  if (material.thinWalled) {
1395
- vec3 oi = vec3(lightLocal.xy, -lightLocal.z);
1395
+ vec3 oh = vec3(lightLocal.xy, -lightLocal.z);
1396
1396
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1397
1397
  * cE(
1398
1398
  material,
1399
1399
  material.subsurfaceColor,
1400
1400
  viewLocal,
1401
- oi,
1401
+ oh,
1402
1402
  diffuseSpecularEnergyCompensation,
1403
1403
  aI
1404
1404
  );
@@ -1433,24 +1433,24 @@ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMs
1433
1433
  }
1434
1434
  }
1435
1435
 
1436
- #ifdef NUM_COAT_NORMAL_MAPS
1436
+ #ifdef USE_COAT_NORMAL_FRAMES
1437
1437
  }
1438
1438
  #endif
1439
1439
  if (material.coatWeight > 0.0) {
1440
1440
  response *= ds(prepared,
1441
- #ifdef NUM_COAT_NORMAL_MAPS
1441
+ #ifdef USE_COAT_NORMAL_FRAMES
1442
1442
  independentCoat ? coatLightCosine : lightLocal.z
1443
1443
  #else
1444
1444
  lightLocal.z
1445
1445
  #endif
1446
1446
  );
1447
1447
  }
1448
- #ifdef NUM_COAT_NORMAL_MAPS
1448
+ #ifdef USE_COAT_NORMAL_FRAMES
1449
1449
  if (independentCoat) { response *= abs(lightLocal.z); }
1450
1450
  #endif
1451
1451
 
1452
1452
  if (
1453
- #ifdef NUM_COAT_NORMAL_MAPS
1453
+ #ifdef USE_COAT_NORMAL_FRAMES
1454
1454
  (independentCoat ? coatReflection : reflection)
1455
1455
  #else
1456
1456
  reflection
@@ -1458,17 +1458,17 @@ reflection
1458
1458
  && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1459
1459
  vec3 dI = viewLocal;
1460
1460
  vec3 kD = lightLocal;
1461
- vec3 gv = V;
1461
+ vec3 gw = V;
1462
1462
  float jK = bQ;
1463
1463
  if (prepared.directionFrames) {
1464
1464
  dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
- #ifdef NUM_COAT_NORMAL_MAPS
1465
+ #ifdef USE_COAT_NORMAL_FRAMES
1466
1466
  if (independentCoat) { dI = prepared.coatViewLocal; }
1467
1467
  #endif
1468
1468
  kD = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
- gv = normalize(kD + dI);
1470
- if (gv.z < 0.0) { gv = -gv; }
1471
- jK = abs(dot(dI, gv));
1469
+ gw = normalize(kD + dI);
1470
+ if (gw.z < 0.0) { gw = -gw; }
1471
+ jK = abs(dot(dI, gw));
1472
1472
  }
1473
1473
 
1474
1474
  vec3 lg = vec3(af(
@@ -1480,14 +1480,14 @@ vec2 jx = aK(material.coatRoughness, material.coatAnisotropy);
1480
1480
  dH.alphaX = jx.x;
1481
1481
  dH.alphaY = jx.y;
1482
1482
  response += prepared.weights[OPENPBR_LOBE_COAT]
1483
- #ifdef NUM_COAT_NORMAL_MAPS
1483
+ #ifdef USE_COAT_NORMAL_FRAMES
1484
1484
  * (independentCoat ? max(coatLightCosine, 0.0) : 1.0)
1485
1485
  #endif
1486
1486
  * am(
1487
1487
  dH,
1488
1488
  dI,
1489
1489
  kD,
1490
- gv,
1490
+ gw,
1491
1491
  lg,
1492
1492
  aI
1493
1493
  );
@@ -1495,7 +1495,7 @@ pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
1495
1495
  }
1496
1496
 
1497
1497
  if (
1498
- #ifdef NUM_COAT_NORMAL_MAPS
1498
+ #ifdef USE_COAT_NORMAL_FRAMES
1499
1499
  (independentCoat ? geometricReflection : reflection)
1500
1500
  #else
1501
1501
  reflection
@@ -1510,7 +1510,7 @@ vec3(0.0),
1510
1510
  vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qz)
1511
1511
  );
1512
1512
  response += prepared.weights[OPENPBR_LOBE_FUZZ]
1513
- #ifdef NUM_COAT_NORMAL_MAPS
1513
+ #ifdef USE_COAT_NORMAL_FRAMES
1514
1514
  * (independentCoat ? max(lightLocal.z, 0.0) : 1.0)
1515
1515
  #endif
1516
1516
  * jY(
@@ -1522,7 +1522,7 @@ aI
1522
1522
  pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aI;
1523
1523
  }
1524
1524
 
1525
- #ifdef NUM_COAT_NORMAL_MAPS
1525
+ #ifdef USE_COAT_NORMAL_FRAMES
1526
1526
  if (independentCoat) { return response; }
1527
1527
  #endif
1528
1528
  return response * abs(lightLocal.z);
@@ -1574,7 +1574,7 @@ out bool isTransmissionEvent
1574
1574
  J material = prepared.material;
1575
1575
  vec3 viewLocal = prepared.viewLocal;
1576
1576
  float cy = cm.x;
1577
- float fu = cm.y;
1577
+ float fv = cm.y;
1578
1578
  float bm = cm.z;
1579
1579
  pdf = 0.0;
1580
1580
  isTransmissionEvent = false;
@@ -1589,7 +1589,7 @@ lightDirection = openpbr_to_world(prepared.basis, -viewLocal);
1589
1589
  pdf = 1.0;
1590
1590
  isTransmissionEvent = true;
1591
1591
  return (bn(prepared.material) * ds(prepared,
1592
- #ifdef NUM_COAT_NORMAL_MAPS
1592
+ #ifdef USE_COAT_NORMAL_FRAMES
1593
1593
  prepared.material.coatNormalEnabled ? dot(prepared.coatBasis.normal, lightDirection) : -prepared.viewLocal.z
1594
1594
  #else
1595
1595
  -prepared.viewLocal.z
@@ -1610,25 +1610,25 @@ vec3 lightLocal;
1610
1610
  if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1611
1611
  bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1612
1612
  )) {
1613
- lightLocal = bi(vec2(cy, fu));
1613
+ lightLocal = bi(vec2(cy, fv));
1614
1614
  }
1615
1615
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1616
1616
  vec3 dI = viewLocal;
1617
1617
  if (prepared.directionFrames) { dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1618
- #ifdef NUM_COAT_NORMAL_MAPS
1618
+ #ifdef USE_COAT_NORMAL_FRAMES
1619
1619
  if (material.coatNormalEnabled) { dI = prepared.coatViewLocal; }
1620
1620
  #endif
1621
1621
  vec3 V = aQ(
1622
1622
  dI,
1623
1623
 
1624
1624
  aK(material.coatRoughness, material.coatAnisotropy),
1625
- vec2(cy, fu)
1625
+ vec2(cy, fv)
1626
1626
  );
1627
1627
  if (V.z < 0.0) {
1628
1628
  V = -V;
1629
1629
  }
1630
1630
  lightLocal = normalize(reflect(-dI, V));
1631
- #ifdef NUM_COAT_NORMAL_MAPS
1631
+ #ifdef USE_COAT_NORMAL_FRAMES
1632
1632
  if (material.coatNormalEnabled) {
1633
1633
  lightDirection = openpbr_to_world(prepared.coatBasis, lightLocal);
1634
1634
  if (lightLocal.z <= 0.0 || dot(material.geometricNormal, lightDirection) <= 0.0) { return vec3(0.0); }
@@ -1643,14 +1643,14 @@ float rM = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LO
1643
1643
  if (tw && rM < prepared.metalMsProbability) {
1644
1644
  float z = cy;
1645
1645
  float fl = sqrt(max(0.0, 1.0 - z * z));
1646
- float br = TWOPI * fu;
1646
+ float br = TWOPI * fv;
1647
1647
  lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1648
1648
  }
1649
1649
  else {
1650
1650
  vec3 V = aQ(
1651
1651
  viewLocal,
1652
1652
  vec2(material.alphaX, material.alphaY),
1653
- vec2(cy, fu)
1653
+ vec2(cy, fv)
1654
1654
  );
1655
1655
  if (V.z < 0.0) {
1656
1656
  V = -V;
@@ -1665,20 +1665,20 @@ isTransmissionEvent = true;
1665
1665
  float us = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
1666
  if (prepared.dielectricMsProbability > 0.0 && us < prepared.dielectricMsProbability) {
1667
1667
  float ja = prepared.dielectricMsReflectionRatio;
1668
- bool lZ = cy < ja;
1668
+ bool lY = cy < ja;
1669
1669
  float z;
1670
- if (lZ) { z = min(cy / ja, 0.99999994); }
1670
+ if (lY) { z = min(cy / ja, 0.99999994); }
1671
1671
  else { z = -min((cy - ja) / (1.0 - ja), 0.99999994); }
1672
1672
  float fl = sqrt(max(0.0, 1.0 - z * z));
1673
- float br = TWOPI * fu;
1673
+ float br = TWOPI * fv;
1674
1674
  lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1675
- isTransmissionEvent = !lZ;
1675
+ isTransmissionEvent = !lY;
1676
1676
  }
1677
1677
  else {
1678
1678
  vec3 V = aQ(
1679
1679
  viewLocal,
1680
1680
  vec2(material.alphaX, material.alphaY),
1681
- vec2(cy, fu)
1681
+ vec2(cy, fv)
1682
1682
  );
1683
1683
  if (V.z < 0.0) {
1684
1684
  V = -V;
@@ -1725,7 +1725,7 @@ bool pT = kK >= 0.5;
1725
1725
  cy = pT
1726
1726
  ? (kK - 0.5) * 2.0
1727
1727
  : kK * 2.0;
1728
- lightLocal = bi(vec2(cy, fu));
1728
+ lightLocal = bi(vec2(cy, fv));
1729
1729
  if (pT) {
1730
1730
  lightLocal.z = -lightLocal.z;
1731
1731
  }
@@ -1734,7 +1734,7 @@ isTransmissionEvent = false;
1734
1734
  }
1735
1735
  }
1736
1736
  else {
1737
- lightLocal = bi(vec2(cy, fu));
1737
+ lightLocal = bi(vec2(cy, fv));
1738
1738
  lightLocal.z = -lightLocal.z;
1739
1739
  }
1740
1740
  }
@@ -1744,7 +1744,7 @@ lightDirection = openpbr_to_world(prepared.basis, lightLocal);
1744
1744
  if (lightLocal.z == 0.0 || (lightLocal.z < 0.0) != isTransmissionEvent) {
1745
1745
  return vec3(0.0);
1746
1746
  }
1747
- #ifdef NUM_COAT_NORMAL_MAPS
1747
+ #ifdef USE_COAT_NORMAL_FRAMES
1748
1748
  if (material.coatNormalEnabled &&
1749
1749
  ((dot(material.geometricNormal, lightDirection) <= 0.0) != isTransmissionEvent)) { return vec3(0.0); }
1750
1750
  #endif