@meimu/mutracer 0.1.3 → 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 (125) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +4155 -4052
  3. package/docs/api.md +13 -10
  4. package/docs/materials.md +17 -26
  5. package/docs/threejs.md +35 -9
  6. package/docs/viewer.md +36 -3
  7. package/lib/Engine.js +18 -1
  8. package/lib/Engine.js.map +1 -1
  9. package/lib/main.d.ts +1 -1
  10. package/lib/main.js.map +1 -1
  11. package/lib/oidn.d.ts +1 -1
  12. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  13. package/lib/renderer/MaterialTable.d.ts +1 -0
  14. package/lib/renderer/MaterialTable.js +10 -4
  15. package/lib/renderer/MaterialTable.js.map +1 -1
  16. package/lib/renderer/WGPUBloomPass.js +18 -18
  17. package/lib/renderer/WGPUFullQuadPass.js +6 -6
  18. package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
  19. package/lib/renderer/WGPURayTraceOutput.js +14 -14
  20. package/lib/renderer/WGPURayTracePass.d.ts +2 -0
  21. package/lib/renderer/WGPURayTracePass.js +17 -9
  22. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  23. package/lib/renderer/WGPURenderingPipeline.js +15 -15
  24. package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
  25. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  26. package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
  27. package/lib/renderer/WebGLRayTracePass.js +8 -1
  28. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  29. package/lib/renderer/envMapCreation.d.ts +5 -1
  30. package/lib/renderer/envMapCreation.js +42 -5
  31. package/lib/renderer/envMapCreation.js.map +1 -1
  32. package/lib/renderer/geometryUpdates.js +1 -1
  33. package/lib/renderer/geometryUpdates.js.map +1 -1
  34. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  35. package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
  36. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  37. package/lib/renderer/glsl/chunks/intersect.glsl.js +323 -315
  38. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  39. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +154 -121
  40. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  41. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +434 -434
  42. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  43. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  44. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  45. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +42 -41
  46. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  47. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
  48. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +84 -84
  49. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  50. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  51. package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
  52. package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
  53. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  54. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  55. package/lib/renderer/glsl/depthQuery.frag.js +5 -5
  56. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  57. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  58. package/lib/renderer/glsl/rayTrace.frag.js +133 -133
  59. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  60. package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
  61. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  62. package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
  63. package/lib/renderer/lightsUtil.js +6 -4
  64. package/lib/renderer/lightsUtil.js.map +1 -1
  65. package/lib/renderer/materialChanges.js +1 -1
  66. package/lib/renderer/materialChanges.js.map +1 -1
  67. package/lib/renderer/materialComparison.generated.js +36 -18
  68. package/lib/renderer/materialComparison.generated.js.map +1 -1
  69. package/lib/renderer/prepareMeshBVH.js +2 -2
  70. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  71. package/lib/renderer/sceneChangeDetector.js +4 -1
  72. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  73. package/lib/renderer/sceneLightChanges.js +3 -2
  74. package/lib/renderer/sceneLightChanges.js.map +1 -1
  75. package/lib/renderer/scratchSampling.js +18 -18
  76. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  77. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  78. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
  79. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  80. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +476 -470
  81. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  82. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
  83. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +95 -60
  84. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  85. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
  86. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  87. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
  88. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  89. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  90. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
  91. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  92. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
  93. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
  94. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
  95. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
  96. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
  97. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  98. package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
  99. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  100. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  101. package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
  102. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  103. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  104. package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
  105. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  106. package/lib/scene/EnvironmentLight.d.ts +9 -3
  107. package/lib/scene/EnvironmentLight.js +9 -2
  108. package/lib/scene/EnvironmentLight.js.map +1 -1
  109. package/lib/scene/OpenPBRMaterial.d.ts +1 -1
  110. package/lib/scene/OpenPBRMaterial.js +1 -1
  111. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  112. package/lib/scene/Scene.d.ts +4 -0
  113. package/lib/scene/Scene.js.map +1 -1
  114. package/lib/scene/SpotLight.d.ts +2 -2
  115. package/lib/scene/SpotLight.js +1 -1
  116. package/lib/scene/SpotLight.js.map +1 -1
  117. package/lib/scene/Texture.d.ts +17 -6
  118. package/lib/scene/Texture.js +13 -4
  119. package/lib/scene/Texture.js.map +1 -1
  120. package/lib/util/fromTHREE.js +151 -29
  121. package/lib/util/fromTHREE.js.map +1 -1
  122. package/lib/version.d.ts +1 -1
  123. package/lib/version.js +1 -1
  124. package/lib/version.js.map +1 -1
  125. package/package.json +1 -1
@@ -77,13 +77,13 @@ fn aY(
77
77
  bu: f32,
78
78
  specularWeight: f32
79
79
  ) -> f32 {
80
- let sJ = min(
80
+ let sR = min(
81
81
  cV(bu) * specularWeight,
82
82
  0.9999
83
83
  );
84
- let sL = sqrt(sJ);
85
- let kY = (1.0 + sL) / (1.0 - sL);
86
- return select(kY, 1.0 / kY, bu < 1.0);
84
+ let sT = sqrt(sR);
85
+ let lh = (1.0 + sT) / (1.0 - sT);
86
+ return select(lh, 1.0 / lh, bu < 1.0);
87
87
  }
88
88
 
89
89
  fn af(cc: f32, relativeIor: f32) -> f32 {
@@ -100,60 +100,60 @@ return 15.0 - ((1.0 / ior - 1.0) / 1.5) * 15.0;
100
100
  return 16.0 + ((ior - 1.0) / 1.5) * 15.0;
101
101
  }
102
102
 
103
- fn F(sc: i32, row: i32) -> f32 {
104
- return textureLoad(openPbrEnergyLut, vec2i(sc, row), 0).r;
103
+ fn F(sl: i32, row: i32) -> f32 {
104
+ return textureLoad(openPbrEnergyLut, vec2i(sl, row), 0).r;
105
105
  }
106
106
 
107
- fn fZ(
108
- dI: f32,
107
+ fn ge(
108
+ dJ: f32,
109
109
  bR: f32,
110
- hN: f32
110
+ hR: f32
111
111
  ) -> f32 {
112
- let bA = clamp(dI, 0.0, 31.0);
112
+ let bA = clamp(dJ, 0.0, 31.0);
113
113
  let aH = clamp(bR, 0.0, 31.0);
114
- let bt = clamp(hN, 0.0, 31.0);
115
- let dP = i32(floor(bA));
114
+ let bt = clamp(hR, 0.0, 31.0);
115
+ let dQ = i32(floor(bA));
116
116
  let aN = i32(floor(aH));
117
117
  let cI = i32(floor(bt));
118
- let hA = min(dP + 1, 31);
118
+ let hE = min(dQ + 1, 31);
119
119
  let cp = min(aN + 1, 31);
120
- let eO = min(cI + 1, 31);
121
- let cq = bA - f32(dP);
120
+ let eR = min(cI + 1, 31);
121
+ let cq = bA - f32(dQ);
122
122
  let cz = aH - f32(aN);
123
- let kw = bt - f32(cI);
124
-
125
- let ur = F(cI, dP * 32 + aN);
126
- let us = F(eO, dP * 32 + aN);
127
- let ut = F(cI, dP * 32 + cp);
128
- let uw = F(eO, dP * 32 + cp);
129
- let ux = F(cI, hA * 32 + aN);
130
- let uy = F(eO, hA * 32 + aN);
131
- let uz = F(cI, hA * 32 + cp);
132
- let uA = F(eO, hA * 32 + cp);
133
- let v00 = mix(ur, ux, cq);
134
- let v01 = mix(us, uy, cq);
135
- let v10 = mix(ut, uz, cq);
136
- let v11 = mix(uw, uA, cq);
123
+ let kE = bt - f32(cI);
124
+
125
+ let uA = F(cI, dQ * 32 + aN);
126
+ let uB = F(eR, dQ * 32 + aN);
127
+ let uC = F(cI, dQ * 32 + cp);
128
+ let uD = F(eR, dQ * 32 + cp);
129
+ let uE = F(cI, hE * 32 + aN);
130
+ let uF = F(eR, hE * 32 + aN);
131
+ let uG = F(cI, hE * 32 + cp);
132
+ let uH = F(eR, hE * 32 + cp);
133
+ let v00 = mix(uA, uE, cq);
134
+ let v01 = mix(uB, uF, cq);
135
+ let v10 = mix(uC, uG, cq);
136
+ let v11 = mix(uD, uH, cq);
137
137
  return mix(
138
138
  mix(v00, v10, cz),
139
139
  mix(v01, v11, cz),
140
- kw
140
+ kE
141
141
  );
142
142
  }
143
143
 
144
- fn gz(dI: f32, bR: f32) -> f32 {
145
- let bA = clamp(dI, 0.0, 31.0);
144
+ fn gG(dJ: f32, bR: f32) -> f32 {
145
+ let bA = clamp(dJ, 0.0, 31.0);
146
146
  let aH = clamp(bR, 0.0, 31.0);
147
- let dP = i32(floor(bA));
147
+ let dQ = i32(floor(bA));
148
148
  let aN = i32(floor(aH));
149
- let hA = min(dP + 1, 31);
149
+ let hE = min(dQ + 1, 31);
150
150
  let cp = min(aN + 1, 31);
151
- let cq = bA - f32(dP);
151
+ let cq = bA - f32(dQ);
152
152
  let cz = aH - f32(aN);
153
- let v00 = F(aN, 1024 + dP);
154
- let v01 = F(cp, 1024 + dP);
155
- let v10 = F(aN, 1024 + hA);
156
- let v11 = F(cp, 1024 + hA);
153
+ let v00 = F(aN, 1024 + dQ);
154
+ let v01 = F(cp, 1024 + dQ);
155
+ let v10 = F(aN, 1024 + hE);
156
+ let v11 = F(cp, 1024 + hE);
157
157
  return mix(
158
158
  mix(v00, v10, cq),
159
159
  mix(v01, v11, cq),
@@ -164,55 +164,55 @@ cz
164
164
 
165
165
 
166
166
  fn ef(
167
- dI: f32,
167
+ dJ: f32,
168
168
  bR: f32,
169
- hN: f32
169
+ hR: f32
170
170
  ) -> f32 {
171
- let bA = clamp(dI, 0.0, 31.0);
171
+ let bA = clamp(dJ, 0.0, 31.0);
172
172
  let aH = clamp(bR, 0.0, 31.0);
173
- let bt = clamp(hN, 0.0, 31.0);
174
- let dP = i32(floor(bA));
173
+ let bt = clamp(hR, 0.0, 31.0);
174
+ let dQ = i32(floor(bA));
175
175
  let aN = i32(floor(aH));
176
176
  let cI = i32(floor(bt));
177
- let hA = min(dP + 1, 31);
177
+ let hE = min(dQ + 1, 31);
178
178
  let cp = min(aN + 1, 31);
179
- let eO = min(cI + 1, 31);
180
- let cq = bA - f32(dP);
179
+ let eR = min(cI + 1, 31);
180
+ let cq = bA - f32(dQ);
181
181
  let cz = aH - f32(aN);
182
- let kw = bt - f32(cI);
183
-
184
- let ur = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aN);
185
- let us = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aN);
186
- let ut = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cp);
187
- let uw = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cp);
188
- let ux = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + aN);
189
- let uy = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + aN);
190
- let uz = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + cp);
191
- let uA = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + cp);
192
- let v00 = mix(ur, ux, cq);
193
- let v01 = mix(us, uy, cq);
194
- let v10 = mix(ut, uz, cq);
195
- let v11 = mix(uw, uA, cq);
182
+ let kE = bt - f32(cI);
183
+
184
+ let uA = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
185
+ let uB = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
186
+ let uC = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
187
+ let uD = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
188
+ let uE = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
189
+ let uF = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
190
+ let uG = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
191
+ let uH = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
192
+ let v00 = mix(uA, uE, cq);
193
+ let v01 = mix(uB, uF, cq);
194
+ let v10 = mix(uC, uG, cq);
195
+ let v11 = mix(uD, uH, cq);
196
196
  return mix(
197
197
  mix(v00, v10, cz),
198
198
  mix(v01, v11, cz),
199
- kw
199
+ kE
200
200
  );
201
201
  }
202
202
 
203
- fn ee(dI: f32, bR: f32) -> f32 {
204
- let bA = clamp(dI, 0.0, 31.0);
203
+ fn ee(dJ: f32, bR: f32) -> f32 {
204
+ let bA = clamp(dJ, 0.0, 31.0);
205
205
  let aH = clamp(bR, 0.0, 31.0);
206
- let dP = i32(floor(bA));
206
+ let dQ = i32(floor(bA));
207
207
  let aN = i32(floor(aH));
208
- let hA = min(dP + 1, 31);
208
+ let hE = min(dQ + 1, 31);
209
209
  let cp = min(aN + 1, 31);
210
- let cq = bA - f32(dP);
210
+ let cq = bA - f32(dQ);
211
211
  let cz = aH - f32(aN);
212
- let v00 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
213
- let v01 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
214
- let v10 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hA);
215
- let v11 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hA);
212
+ let v00 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
213
+ let v01 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
214
+ let v10 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
215
+ let v11 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
216
216
  return mix(
217
217
  mix(v00, v10, cq),
218
218
  mix(v01, v11, cq),
@@ -220,19 +220,19 @@ cz
220
220
  );
221
221
  }
222
222
 
223
- fn eF(dI: f32, bR: f32) -> f32 {
224
- let bA = clamp(dI, 0.0, 31.0);
223
+ fn eG(dJ: f32, bR: f32) -> f32 {
224
+ let bA = clamp(dJ, 0.0, 31.0);
225
225
  let aH = clamp(bR, 0.0, 31.0);
226
- let dP = i32(floor(bA));
226
+ let dQ = i32(floor(bA));
227
227
  let aN = i32(floor(aH));
228
- let hA = min(dP + 1, 31);
228
+ let hE = min(dQ + 1, 31);
229
229
  let cp = min(aN + 1, 31);
230
- let cq = bA - f32(dP);
230
+ let cq = bA - f32(dQ);
231
231
  let cz = aH - f32(aN);
232
- let v00 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
233
- let v01 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
234
- let v10 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hA);
235
- let v11 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hA);
232
+ let v00 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
233
+ let v01 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
234
+ let v10 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
235
+ let v11 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
236
236
  return mix(
237
237
  mix(v00, v10, cq),
238
238
  mix(v01, v11, cq),
@@ -247,22 +247,22 @@ fn cO(ior: f32, alpha: f32) -> f32 {
247
247
  return ee(aC(ior), sqrt(alpha) * 31.0);
248
248
  }
249
249
  fn ch(ior: f32, alpha: f32) -> f32 {
250
- return eF(aC(ior), sqrt(alpha) * 31.0);
250
+ return eG(aC(ior), sqrt(alpha) * 31.0);
251
251
  }
252
252
 
253
253
 
254
254
 
255
255
  fn bH(alpha: f32, au: f32) -> f32 {
256
- let hZ = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
+ let ie = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
257
257
  let bt = clamp(au * 31.0, 0.0, 31.0);
258
- let r0 = i32(floor(hZ));
258
+ let r0 = i32(floor(ie));
259
259
  let c0 = i32(floor(bt));
260
260
  let r1 = min(r0 + 1, 31);
261
261
  let c1 = min(c0 + 1, 31);
262
262
  return mix(
263
263
  mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bt)),
264
264
  mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bt)),
265
- fract(hZ));
265
+ fract(ie));
266
266
  }
267
267
 
268
268
  fn cv(alpha: f32) -> f32 {
@@ -274,8 +274,8 @@ F(min(i0 + 1, 31), ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}), fract(index));
274
274
 
275
275
  fn aX(value: f32, ior: f32) -> f32 {
276
276
  if (ior > 2.5 || ior < 0.4) {
277
- let tN = cV(2.5);
278
- let progress = (cV(ior) - tN) / (1.0 - tN);
277
+ let tU = cV(2.5);
278
+ let progress = (cV(ior) - tU) / (1.0 - tU);
279
279
  return (1.0 - progress) * value;
280
280
  }
281
281
  return value;
@@ -286,7 +286,7 @@ ior: f32,
286
286
  alpha: f32,
287
287
  au: f32
288
288
  ) -> f32 {
289
- let value = fZ(
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 = gz(
298
+ let value = gG(
299
299
  aC(ior),
300
300
  sqrt(alpha) * 31.0
301
301
  );
@@ -316,14 +316,14 @@ dot(direction, basis.normal)
316
316
  );
317
317
  }
318
318
 
319
- fn fg(
320
- aU: vec3f,
319
+ fn fj(
320
+ aT: vec3f,
321
321
  normal: vec3f,
322
322
  anisotropy: f32
323
323
  ) -> bj {
324
324
  var basis: bj;
325
325
  basis.normal = normal;
326
- var tangent = aU;
326
+ var tangent = aT;
327
327
  var bitangent = vec3f(0.0);
328
328
  if (dot(tangent, tangent) < 0.001 || anisotropy <= 0.0) {
329
329
  aL(normal, &tangent, &bitangent);
@@ -337,7 +337,7 @@ basis.bitangent = bitangent;
337
337
  return basis;
338
338
  }
339
339
 
340
- fn jT(
340
+ fn ka(
341
341
  av: f32,
342
342
  ak: f32,
343
343
  L: f32,
@@ -347,7 +347,7 @@ return (av * L - ak * S)
347
347
  / (av * L + ak * S);
348
348
  }
349
349
 
350
- fn jS(
350
+ fn jZ(
351
351
  av: f32,
352
352
  ak: f32,
353
353
  L: f32,
@@ -357,7 +357,7 @@ return (ak * L - av * S)
357
357
  / (av * S + ak * L);
358
358
  }
359
359
 
360
- fn gY(
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 gX(
370
+ fn hc(
371
371
  av: f32,
372
372
  ak: f32,
373
373
  L: f32,
@@ -377,7 +377,7 @@ return 2.0 * av * L
377
377
  / (av * S + ak * L);
378
378
  }
379
379
 
380
- fn aV(a: vec2f, b: vec2f) -> vec2f {
380
+ fn aU(a: vec2f, b: vec2f) -> vec2f {
381
381
  return vec2f(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
382
382
  }
383
383
 
@@ -389,32 +389,32 @@ return vec2f(
389
389
  );
390
390
  }
391
391
 
392
- fn hT(value: vec2f) -> vec2f {
393
- let nv = length(value);
394
- let sH = sqrt(max(0.0, 0.5 * (nv + value.x)));
395
- let fc = sqrt(max(0.0, 0.5 * (nv - value.x)));
396
- return vec2f(sH, select(-fc, fc, value.y >= 0.0));
392
+ fn hX(value: vec2f) -> vec2f {
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
+ return vec2f(sP, select(-ff, ff, value.y >= 0.0));
397
397
  }
398
398
 
399
399
  fn bX(
400
400
  L: f32,
401
401
  av: f32,
402
402
  ak: vec2f,
403
- qy: bool
403
+ qG: bool
404
404
  ) -> vec2f {
405
- let oe = sqrt(max(0.0, 1.0 - L * L));
406
- let sp = aZ(vec2f(av, 0.0), ak);
407
- let hw = sp * oe;
408
- var S = hT(
409
- vec2f(1.0, 0.0) - aV(hw, hw)
405
+ let oq = sqrt(max(0.0, 1.0 - L * L));
406
+ let sA = aZ(vec2f(av, 0.0), ak);
407
+ let hA = sA * oq;
408
+ var S = hX(
409
+ vec2f(1.0, 0.0) - aU(hA, hA)
410
410
  );
411
- if (aV(ak, S).y < 0.0) {
411
+ if (aU(ak, S).y < 0.0) {
412
412
  S = -S;
413
413
  }
414
414
 
415
- let fH = vec2f(av * L, 0.0);
416
- let eA = aV(ak, S);
417
- if (qy) {
415
+ let fL = vec2f(av * L, 0.0);
416
+ let eB = aU(ak, S);
417
+ if (qG) {
418
418
  let ci = ak * L;
419
419
  let ce = S * av;
420
420
  return aZ(
@@ -423,26 +423,26 @@ ci + ce
423
423
  );
424
424
  }
425
425
  return aZ(
426
- fH - eA,
427
- fH + eA
426
+ fL - eB,
427
+ fL + eB
428
428
  );
429
429
  }
430
430
 
431
431
  fn eq(
432
- iD: f32,
433
- gI: f32,
434
- oy: f32,
435
- mD: f32,
436
- jY: vec2f,
432
+ iH: f32,
433
+ gN: f32,
434
+ oG: f32,
435
+ mM: f32,
436
+ kf: vec2f,
437
437
  phase: f32
438
438
  ) -> f32 {
439
- let nd = vec2f(cos(phase), sin(phase));
440
- let hW = aV(jY, nd);
441
- let kF = hW * (gI * mD);
442
- let ap = vec2f(1.0, 0.0) - hW * oy;
443
- let hv = vec2f(iD, 0.0)
444
- + aZ(kF, ap);
445
- return dot(hv, hv);
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
+ let hz = vec2f(iH, 0.0)
444
+ + aZ(kO, ap);
445
+ return dot(hz, hz);
446
446
  }
447
447
 
448
448
  fn ar(
@@ -453,67 +453,67 @@ aM: f32,
453
453
  ck: f32,
454
454
  eu: vec2f
455
455
  ) -> f32 {
456
- let dl = clamp(abs(L), 1e-5, 1.0);
457
- let hq = pow(aM / ck, 2.0)
458
- * (1.0 - dl * dl);
459
- if (hq >= 1.0) {
456
+ let dm = clamp(abs(L), 1e-5, 1.0);
457
+ let hu = pow(aM / ck, 2.0)
458
+ * (1.0 - dm * dm);
459
+ if (hu >= 1.0) {
460
460
  return 1.0;
461
461
  }
462
- let cU = sqrt(1.0 - hq);
463
- let kS = jT(
464
- aM, ck, dl, cU
462
+ let cU = sqrt(1.0 - hu);
463
+ let lb = ka(
464
+ aM, ck, dm, cU
465
465
  );
466
- let kR = jS(
467
- aM, ck, dl, cU
466
+ let la = jZ(
467
+ aM, ck, dm, cU
468
468
  );
469
- let jf = gY(
470
- aM, ck, dl, cU
469
+ let jj = hd(
470
+ aM, ck, dm, cU
471
471
  );
472
- let je = gX(
473
- aM, ck, dl, cU
472
+ let ji = hc(
473
+ aM, ck, dm, cU
474
474
  );
475
- let gk = ck * cU
476
- / max(aM * dl, 1e-9);
475
+ let gr = ck * cU
476
+ / max(aM * dm, 1e-9);
477
477
  let phase = 2.0 * PI * (2.0 * ck * cn * cU) / wavelength;
478
- var rT = 0.0;
478
+ var sb = 0.0;
479
479
 
480
- for (var jX = 0u; jX < (rtUniform.loopUnrollGuard >> 1u); jX++) {
481
- let iD = select(kS, kR, jX == 1u);
482
- let gI = select(jf, je, jX == 1u);
483
- let jY = bX(
484
- cU, ck, eu, jX == 1u);
485
- rT += eq(iD, gI,
486
- -iD, gI * gk, jY, phase);
480
+ for (var ke = 0u; ke < (rtUniform.loopUnrollGuard >> 1u); ke++) {
481
+ let iH = select(lb, la, ke == 1u);
482
+ let gN = select(jj, ji, ke == 1u);
483
+ let kf = bX(
484
+ cU, ck, eu, ke == 1u);
485
+ sb += eq(iH, gN,
486
+ -iH, gN * gr, kf, phase);
487
487
  }
488
- return clamp(0.5 * rT, 0.0, 1.0);
488
+ return clamp(0.5 * sb, 0.0, 1.0);
489
489
  }
490
490
 
491
491
 
492
492
 
493
493
 
494
- fn dT(au: f32, f0: vec3f, tint: vec3f) -> vec3f {
495
- let ra = mix(f0, vec3f(1.0), aE(au));
496
- if (all(tint == vec3f(1.0))) { return ra; }
497
- let dj = 1.0 / 7.0;
498
- let lZ = 1.0 - dj;
499
- let fF = mix(f0, vec3f(1.0), aE(dj));
500
- let dg = 1.0 - au;
501
- let ql = au * aE(au) * dg
502
- / (dj * pow(lZ, 6.0));
503
- return clamp(ra - ql * (fF - tint * fF), vec3f(0.0), vec3f(1.0));
494
+ fn dU(au: f32, f0: vec3f, tint: vec3f) -> vec3f {
495
+ let rk = mix(f0, vec3f(1.0), aE(au));
496
+ if (all(tint == vec3f(1.0))) { return rk; }
497
+ let dk = 1.0 / 7.0;
498
+ let mk = 1.0 - dk;
499
+ let fJ = mix(f0, vec3f(1.0), aE(dk));
500
+ let di = 1.0 - au;
501
+ let qt = au * aE(au) * di
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
- fn cQ(f0: f32, tg: f32) -> vec2f {
507
- let dM = clamp(f0, 0.0, 0.99);
508
- let gH = sqrt(dM);
509
- let qx = (1.0 - dM) / (1.0 + dM);
510
- let qv = (1.0 + gH) / max(1.0 - gH, 1e-9);
511
- let ior = mix(qv, qx, clamp(tg, 0.0, 1.0));
512
- let jI = (
513
- (ior + 1.0) * (ior + 1.0) * dM
506
+ fn cQ(f0: f32, tp: f32) -> vec2f {
507
+ let dN = clamp(f0, 0.0, 0.99);
508
+ let gM = sqrt(dN);
509
+ let qF = (1.0 - dN) / (1.0 + dN);
510
+ let qD = (1.0 + gM) / max(1.0 - gM, 1e-9);
511
+ let ior = mix(qD, qF, clamp(tp, 0.0, 1.0));
512
+ let jO = (
513
+ (ior + 1.0) * (ior + 1.0) * dN
514
514
  - (ior - 1.0) * (ior - 1.0)
515
- ) / max(1.0 - dM, 1e-9);
516
- return vec2f(ior, sqrt(max(jI, 0.0)));
515
+ ) / max(1.0 - dN, 1e-9);
516
+ return vec2f(ior, sqrt(max(jO, 0.0)));
517
517
  }
518
518
 
519
519
 
@@ -528,7 +528,7 @@ material: J,
528
528
  color: vec3f,
529
529
  viewLocal: vec3f,
530
530
  lightLocal: vec3f,
531
- fo: 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 gS = 0.5 - 2.0 / (3.0 * PI);
541
- let nX = 2.0 / 3.0 - 28.0 / (15.0 * PI);
542
- let os = lightLocal.z;
543
- let mq = viewLocal.z;
544
- let hL = dot(lightLocal, viewLocal) - os * mq;
545
- let gP = select(
546
- hL,
547
- hL / max(max(os, mq), 1e-7),
548
- hL > 0.0
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
+ hP,
547
+ hP / max(max(oA, mA), 1e-7),
548
+ hP > 0.0
549
549
  );
550
- let ig = 1.0 / (1.0 + gS * roughness);
551
- let ni = color * INVPI * ig
552
- * (1.0 + roughness * gP);
553
-
554
- let dc = 1.0 - os;
555
- let cP = 1.0 - mq;
556
- let og = dc * (
557
- 0.0571085289 + dc * (
558
- 0.491881867 + dc * (
559
- -0.332181442 + dc * 0.0714429953
550
+ let il = 1.0 / (1.0 + gX * roughness);
551
+ let nv = color * INVPI * il
552
+ * (1.0 + roughness * gU);
553
+
554
+ let dd = 1.0 - oA;
555
+ let cP = 1.0 - mA;
556
+ let os = dd * (
557
+ 0.0571085289 + dd * (
558
+ 0.491881867 + dd * (
559
+ -0.332181442 + dd * 0.0714429953
560
560
  )
561
561
  )
562
562
  );
563
- let mZ = 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 pm = (1.0 + roughness * og)
571
- / (1.0 + gS * roughness);
572
- let ou = (1.0 + roughness * mZ)
573
- / (1.0 + gS * roughness);
574
- let fQ = ig * (1.0 + nX * roughness);
575
- let hB = color * color * fQ
576
- / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - fQ));
577
- let ls = hB * INVPI
578
- * max(1e-7, 1.0 - ou)
579
- * max(1e-7, 1.0 - pm)
580
- / max(1e-7, 1.0 - fQ);
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
+ * max(1e-7, 1.0 - pv)
580
+ / max(1e-7, 1.0 - fV);
581
581
  *pdf = lightLocal.z * INVPI;
582
- return (ni + ls) * fo;
582
+ return (nv + lE) * fu;
583
583
  }
584
584
 
585
585
  fn aO(viewCosine: f32, roughness: f32) -> f32 {
@@ -596,7 +596,7 @@ let gaussian = exp(-0.5 * pow((x - mean) / scale, 2.0))
596
596
  return max(gaussian + offset, 0.0);
597
597
  }
598
598
 
599
- fn jR(
599
+ fn jY(
600
600
  material: J,
601
601
  viewLocal: vec3f,
602
602
  lightLocal: vec3f,
@@ -628,17 +628,17 @@ return vec3f(0.0);
628
628
  }
629
629
 
630
630
  let alpha = vec2f(material.alphaX, material.alphaY);
631
- let distribution = gG(V, alpha);
632
- let jO = bk(viewLocal, alpha);
633
- let ea = jO
631
+ let distribution = gL(V, alpha);
632
+ let jV = bk(viewLocal, alpha);
633
+ let ea = jV
634
634
  * bk(lightLocal, alpha);
635
635
 
636
- *pdf = jO * distribution / (4.0 * max(viewLocal.z, 1e-8));
636
+ *pdf = jV * distribution / (4.0 * max(viewLocal.z, 1e-8));
637
637
  return cK * distribution * ea
638
638
  / (4.0 * max(lightLocal.z * viewLocal.z, 1e-8));
639
639
  }
640
640
 
641
- fn dk(
641
+ fn dl(
642
642
  material: J,
643
643
  relativeIor: f32,
644
644
  tint: vec3f,
@@ -653,27 +653,27 @@ if (lightLocal.z >= 0.0) {
653
653
  return vec3f(0.0);
654
654
  }
655
655
 
656
- let kC = dot(lightLocal, V);
656
+ let kL = dot(lightLocal, V);
657
657
  let bQ = dot(viewLocal, V);
658
658
 
659
659
 
660
- if (bQ <= 0.0 || kC >= 0.0) {
660
+ 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 = gG(V, alpha);
665
- let jO = bk(viewLocal, alpha);
666
- let ea = jO
664
+ let distribution = gL(V, alpha);
665
+ let jV = bk(viewLocal, alpha);
666
+ let ea = jV
667
667
  * bk(lightLocal, alpha);
668
- var ap = kC + bQ * relativeIor;
668
+ var ap = kL + bQ * relativeIor;
669
669
  ap *= ap;
670
- let pr = abs(kC) / max(ap, 1e-8);
671
- let jo = relativeIor * relativeIor;
670
+ let pJ = abs(kL) / max(ap, 1e-8);
671
+ let ju = relativeIor * relativeIor;
672
672
 
673
- *pdf = jO * max(0.0, bQ) * distribution * pr
673
+ *pdf = jV * max(0.0, bQ) * distribution * pJ
674
674
  / max(viewLocal.z, 1e-8);
675
675
  return tint * (vec3f(1.0) - cK) * distribution * ea
676
- * abs(bQ) * pr * jo
676
+ * abs(bQ) * pJ * ju
677
677
  / max(abs(lightLocal.z * viewLocal.z), 1e-8);
678
678
  }
679
679
 
@@ -692,11 +692,11 @@ fn aP(
692
692
  ah: vec3f,
693
693
  transmissionWeight: f32
694
694
  ) -> vec3f {
695
- let gg = 2.0 * ah
695
+ let gm = 2.0 * ah
696
696
  / (vec3f(1.0) + ah);
697
697
  return mix(
698
698
  ah,
699
- gg,
699
+ gm,
700
700
  clamp(transmissionWeight, 0.0, 1.0)
701
701
  );
702
702
  }
@@ -710,17 +710,17 @@ let tint = bn(material);
710
710
  if (!material.thinWalled) {
711
711
  return tint;
712
712
  }
713
- let iG = max(0.0, 1.0 - L * L);
714
- let dN = iG
713
+ let iL = max(0.0, 1.0 - L * L);
714
+ let dO = iL
715
715
  / max(bu * bu, 1e-9);
716
- if (dN >= 1.0) {
716
+ if (dO >= 1.0) {
717
717
  return vec3f(0.0);
718
718
  }
719
- let S = sqrt(1.0 - dN);
719
+ let S = sqrt(1.0 - dO);
720
720
  return pow(max(tint, vec3f(0.0)), vec3f(1.0 / max(S, 1e-5)));
721
721
  }
722
722
 
723
- fn dL(
723
+ fn dM(
724
724
  material: J,
725
725
  viewLocal: vec3f,
726
726
  lightLocal: vec3f,
@@ -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 nU = 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 - nU) * INVPI;
739
+ return vec3f(1.0 - oe) * INVPI;
740
740
  }
741
741
 
742
- fn dQ(prepared: ptr<function, ag>) {
742
+ fn dR(prepared: ptr<function, ag>) {
743
743
 
744
744
 
745
- let nu = 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 hQ = 1; hQ < nu; hQ++) {
748
- total += (*prepared).probabilities[hQ];
747
+ for (var hU = 1; hU < nI; hU++) {
748
+ total += (*prepared).probabilities[hU];
749
749
  }
750
750
  if (total <= 1e-8) {
751
- for (var hQ = 0; hQ < nu; hQ++) {
752
- (*prepared).probabilities[hQ] = 0.0;
751
+ for (var hU = 0; hU < nI; hU++) {
752
+ (*prepared).probabilities[hU] = 0.0;
753
753
  }
754
754
  return;
755
755
  }
756
- let oj = 1.0 / total;
757
- for (var hQ = 0; hQ < nu; hQ++) {
758
- (*prepared).probabilities[hQ] *= oj;
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
 
@@ -768,9 +768,9 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
768
768
  }
769
769
 
770
770
  fn bP(f0: vec3f, tint: vec3f) -> vec3f {
771
- let dj = 1.0 / 7.0;
772
- let fF = mix(f0, vec3f(1.0), aE(dj));
773
- let b = fF * (vec3f(1.0) - tint) / (dj * pow(1.0 - dj, 6.0));
771
+ let dk = 1.0 / 7.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 lu = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
782
- let tr = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(lu, 1e-5)));
783
- return mix(vec3f(1.0), tr, material.coatWeight);
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
+ return mix(vec3f(1.0), tD, material.coatWeight);
784
784
  }
785
785
 
786
- fn gj(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,34 +793,34 @@ return clamp(1.0 - aJ(material.coatIor,
793
793
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
794
794
  }
795
795
 
796
- fn gW(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
- let tZ = dielectric * material.transmissionWeight;
802
- let fL = bM(prepared.specularEtaTOverEtaI);
803
- let kL = bM(1.0 / prepared.transmissionReflectionIor);
804
- let pJ = clamp(opaque * fL + (sss + tZ) * kL + material.baseMetalness, 0.0, 1.0);
805
- let jk = mix(1.0, material.specularRoughness, pJ);
801
+ let ug = dielectric * material.transmissionWeight;
802
+ let fP = bM(prepared.specularEtaTOverEtaI);
803
+ let kU = bM(1.0 / prepared.transmissionReflectionIor);
804
+ let pR = clamp(opaque * fP + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
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
- let k = mix(ks, kr, jk);
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), fL)
811
- + sss * material.subsurfaceColor + vec3f(tZ);
812
- let qL = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
813
- return mix(vec3f(1.0), qL, material.coatWeight * material.coatDarkening);
810
+ + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), fP)
811
+ + sss * material.subsurfaceColor + vec3f(ug);
812
+ let qU = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
813
+ return mix(vec3f(1.0), qU, material.coatWeight * material.coatDarkening);
814
814
  }
815
815
 
816
- fn ds(prepared: ag, lb: f32) -> vec3f {
816
+ fn ds(prepared: ag, lm: f32) -> vec3f {
817
817
  if (prepared.material.coatWeight <= 0.0) { return vec3f(1.0); }
818
818
  if (prepared.material.inside) {
819
819
 
820
- return cD(prepared.material, -lb);
820
+ return cD(prepared.material, -lm);
821
821
  }
822
822
 
823
- return prepared.coatBaseScale * cD(prepared.material, lb);
823
+ return prepared.coatBaseScale * cD(prepared.material, lm);
824
824
  }
825
825
 
826
826
 
@@ -840,7 +840,7 @@ return basis;
840
840
  }
841
841
 
842
842
  ` : /* wgsl */ ``}
843
- fn eG(
843
+ fn eH(
844
844
  tangent: vec3f,
845
845
  material: J,
846
846
  bF: vec3f,
@@ -848,7 +848,7 @@ normal: vec3f
848
848
  ) -> ag {
849
849
  var prepared: ag;
850
850
  prepared.material = material;
851
- prepared.basis = fg(
851
+ prepared.basis = fj(
852
852
  tangent,
853
853
  normal,
854
854
  max(material.specularAnisotropy, material.coatAnisotropy)
@@ -860,7 +860,7 @@ ${hasCoatNormals ? /* wgsl */ `
860
860
 
861
861
 
862
862
  if (material.coatNormalEnabled) {
863
- prepared.coatBasis = fg(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
863
+ prepared.coatBasis = fj(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
864
864
  prepared.directionFrames = true;
865
865
  }
866
866
  ` : ''}
@@ -878,7 +878,7 @@ ${hasCoatNormals ? /* wgsl */ ` prepared.coatViewLocal = openpbr_to_local(pre
878
878
  prepared.diffuseColor = material.baseColor;
879
879
 
880
880
  let cB = 1.0 - material.baseMetalness;
881
- let dK = cB
881
+ let dL = cB
882
882
  * (1.0 - material.transmissionWeight);
883
883
  prepared.weights[OPENPBR_LOBE_FUZZ] = material.fuzzWeight;
884
884
  prepared.weights[OPENPBR_LOBE_COAT] = material.coatWeight;
@@ -887,9 +887,9 @@ prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
887
887
  prepared.weights[OPENPBR_LOBE_SPECULAR] = cB;
888
888
  prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cB
889
889
  * material.transmissionWeight;
890
- prepared.weights[OPENPBR_LOBE_DIFFUSE] = dK
890
+ prepared.weights[OPENPBR_LOBE_DIFFUSE] = dL
891
891
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
892
- prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dK
892
+ prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dL
893
893
  * material.subsurfaceWeight;
894
894
 
895
895
  prepared.specularEtaTOverEtaI = aY(
@@ -941,7 +941,7 @@ let ah = af(
941
941
  viewCosine,
942
942
  1.0 / prepared.specularEtaTOverEtaI
943
943
  );
944
- let ft = material.specularColor * select(
944
+ let fA = material.specularColor * select(
945
945
  ah,
946
946
  mix(
947
947
  ah,
@@ -950,32 +950,32 @@ material.transmissionWeight
950
950
  ),
951
951
  material.thinWalled
952
952
  );
953
- let hR = material.specularWeight * dT(
953
+ let hV = material.specularWeight * dU(
954
954
  viewCosine,
955
955
  material.baseWeight * material.baseColor,
956
956
  material.specularColor
957
957
  );
958
- let eL = select(
958
+ let eO = select(
959
959
  af(viewCosine, prepared.transmissionReflectionIor),
960
960
  cS(af(viewCosine, prepared.transmissionReflectionIor)),
961
961
  material.thinWalled
962
962
  );
963
- let gJ = bG(
963
+ let gO = bG(
964
964
  material,
965
965
  viewCosine,
966
966
  prepared.refractionEtaTOverEtaI
967
967
  );
968
- let il = aJ(
968
+ let iu = aJ(
969
969
  prepared.specularEtaTOverEtaI,
970
970
  prepared.specularAlpha,
971
971
  viewCosine
972
972
  );
973
- let gm = cr(
973
+ let gs = cr(
974
974
  prepared.specularEtaTOverEtaI,
975
975
  prepared.specularAlpha
976
976
  );
977
- prepared.diffuseSpecularEnergyCompensation = il
978
- / max(gm, 1e-12);
977
+ prepared.diffuseSpecularEnergyCompensation = iu
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,32 +987,32 @@ 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 kt = gj(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
991
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kt;
990
+ let kB = gq(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
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] * kt) * gW(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
- * aw(hR);
996
+ * aw(hV);
997
997
  prepared.metalMsScale = vec3f(0.0);
998
998
  prepared.metalMsFactor = 0.0;
999
999
  prepared.metalMsProbability = 0.0;
1000
1000
 
1001
1001
 
1002
1002
  if (material.specularRoughness >= 0.04 && prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
1003
- let hH = bP(material.baseWeight * material.baseColor, material.specularColor);
1004
- prepared.metalMsScale = material.specularWeight * hH * hH;
1005
- let pN = bH(prepared.specularAlpha, viewCosine);
1006
- prepared.metalMsFactor = pN / max(cv(prepared.specularAlpha), 1e-12);
1007
- let ff = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pN;
1008
- prepared.probabilities[OPENPBR_LOBE_METAL] += ff;
1009
- prepared.metalMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1003
+ let hL = bP(material.baseWeight * material.baseColor, material.specularColor);
1004
+ prepared.metalMsScale = material.specularWeight * hL * hL;
1005
+ let pV = bH(prepared.specularAlpha, viewCosine);
1006
+ prepared.metalMsFactor = pV / max(cv(prepared.specularAlpha), 1e-12);
1007
+ let fi = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pV;
1008
+ prepared.probabilities[OPENPBR_LOBE_METAL] += fi;
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(ft);
1012
+ * aw(fA);
1013
1013
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1014
- * (1.0 - eL)
1015
- * aw(gJ);
1014
+ * (1.0 - eO)
1015
+ * aw(gO);
1016
1016
 
1017
1017
 
1018
1018
 
@@ -1027,40 +1027,40 @@ 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 lt = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1031
- prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * lt;
1032
- prepared.dielectricMsTransmissionScale = gJ * 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 nL = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
- let ff = aw(nL) * prepared.dielectricMsViewLoss;
1038
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += ff;
1039
- prepared.dielectricMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1036
+ let nV = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
+ let fi = aw(nV) * prepared.dielectricMsViewLoss;
1038
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fi;
1039
+ prepared.dielectricMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1040
1040
  }
1041
1041
  prepared.probabilities[OPENPBR_LOBE_DIFFUSE] = prepared.weights[OPENPBR_LOBE_DIFFUSE]
1042
1042
  * aw(prepared.diffuseColor)
1043
1043
  * prepared.diffuseSpecularEnergyCompensation;
1044
1044
  prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1045
- * (1.0 - eL)
1045
+ * (1.0 - eO)
1046
1046
  * aw(material.subsurfaceColor)
1047
1047
  * prepared.diffuseSpecularEnergyCompensation;
1048
1048
 
1049
1049
 
1050
1050
  if (material.coatWeight > 0.0 && HAS_THIN_FILM && material.thinFilmWeight > 0.0) {
1051
- let kZ = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1052
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * kZ);
1053
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * kZ);
1051
+ let lj = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1052
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lj);
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 gn = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1057
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gn;
1058
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gn;
1059
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gn;
1060
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gn;
1061
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gn;
1062
- }
1063
- dQ(&prepared);
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
+ }
1063
+ dR(&prepared);
1064
1064
  return prepared;
1065
1065
  }
1066
1066
 
@@ -1069,17 +1069,17 @@ fn cR(prepared: ag, au: f32, reflection: bool) -> f32 {
1069
1069
  if (prepared.material.coatWeight <= 0.0) {
1070
1070
  return af(au, prepared.material.relativeIor);
1071
1071
  }
1072
- let ki = af(au, prepared.transmissionReflectionIor);
1073
- if (!reflection) { return ki; }
1074
- let mX = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1075
- let rH = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1076
- return mix(mX, ki, rH);
1072
+ let kp = af(au, prepared.transmissionReflectionIor);
1073
+ if (!reflection) { return kp; }
1074
+ let nk = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1075
+ let rP = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1076
+ return mix(nk, kp, rP);
1077
1077
  }
1078
1078
 
1079
- fn mu(
1079
+ fn mD(
1080
1080
  prepared: ag,
1081
1081
  lightDirection: vec3f,
1082
- gK: i32,
1082
+ gP: i32,
1083
1083
  pdf: ptr<function, f32>
1084
1084
  ) -> vec3f {
1085
1085
  let material = prepared.material;
@@ -1107,58 +1107,58 @@ V = -V;
1107
1107
  var response = vec3f(0.0);
1108
1108
  *pdf = 0.0;
1109
1109
  var aI = 0.0;
1110
- let lT = gK < 0;
1111
- let uG = lT || gK == OPENPBR_LOBE_FUZZ;
1112
- let sV = lT || gK == OPENPBR_LOBE_COAT;
1113
- let rY = lT || gK == OPENPBR_LOBE_METAL;
1114
- let pX = lT || gK == OPENPBR_LOBE_SPECULAR;
1115
- let jB = lT ||
1116
- gK == OPENPBR_LOBE_TRANSMISSION;
1117
- let ta = lT || gK == OPENPBR_LOBE_DIFFUSE;
1118
- let oL = lT ||
1119
- gK == 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
 
1123
1123
 
1124
- var dd = V;
1125
- var ji = bQ;
1124
+ var df = V;
1125
+ var jn = bQ;
1126
1126
  if (!reflection && material.thinWalled) {
1127
- dd = normalize(vec3f(lightLocal.xy, -lightLocal.z) + viewLocal);
1128
- if (dd.z < 0.0) { dd = -dd; }
1129
- ji = abs(dot(viewLocal, dd));
1127
+ df = normalize(vec3f(lightLocal.xy, -lightLocal.z) + viewLocal);
1128
+ if (df.z < 0.0) { df = -df; }
1129
+ jn = abs(dot(viewLocal, df));
1130
1130
  }
1131
- let me =
1132
- (reflection && prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && pX) ||
1133
- (!reflection && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jB);
1134
- let qb = reflection && prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && rY;
1135
- var np: array<vec3f, 2>;
1136
- if (me) {
1137
- np[0] = vec3f(cR(prepared, ji, reflection));
1131
+ let mo =
1132
+ (reflection && prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && qf) ||
1133
+ (!reflection && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jG);
1134
+ let qj = reflection && prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && sg;
1135
+ var nD: array<vec3f, 2>;
1136
+ if (mo) {
1137
+ nD[0] = vec3f(cR(prepared, jn, reflection));
1138
1138
  }
1139
- if (qb) {
1140
- np[1] = dT(bQ, material.baseWeight * material.baseColor, material.specularColor);
1139
+ if (qj) {
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
- for (var kK = 0u; kK < (rtUniform.loopUnrollGuard >> 1u); kK++) {
1146
- if (!select(me, qb, kK == 1u)) { continue; }
1147
- var wi = vec3f(0.0);
1148
- let L = select(ji, bQ, kK == 1u);
1145
+ for (var kT = 0u; kT < (rtUniform.loopUnrollGuard >> 1u); kT++) {
1146
+ if (!select(mo, qj, kT == 1u)) { continue; }
1147
+ var wp = vec3f(0.0);
1148
+ let L = select(jn, bQ, kT == 1u);
1149
1149
  for (var channel = 0u; channel + 1u < rtUniform.loopUnrollGuard; channel++) {
1150
1150
  var ior = vec2f(prepared.thinFilmBaseIor, 0.0);
1151
- if (kK == 1u) {
1151
+ if (kT == 1u) {
1152
1152
  ior = cQ(material.baseWeight * material.baseColor[channel], material.specularColor[channel]);
1153
1153
  }
1154
- wi[channel] = ar(L,
1154
+ wp[channel] = ar(L,
1155
1155
  wavelengths[channel], material.thinFilmThickness, prepared.thinFilmExteriorIor, material.thinFilmIor, ior);
1156
1156
  }
1157
- np[kK] = mix(np[kK], wi,
1157
+ nD[kT] = mix(nD[kT], wp,
1158
1158
  bN(material.thinFilmThickness, material.thinFilmWeight));
1159
1159
  }
1160
1160
  }
1161
- let ei = np[0];
1161
+ let ei = nD[0];
1162
1162
  let diffuseSpecularEnergyCompensation =
1163
1163
  prepared.diffuseSpecularEnergyCompensation
1164
1164
  * aJ(
@@ -1172,7 +1172,7 @@ ${hasCoatNormals ? /* wgsl */ `
1172
1172
  if (!independentCoat || (lightLocal.z != 0.0 && reflection == geometricReflection)) {
1173
1173
  ` : ''}
1174
1174
  if (reflection) {
1175
- if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0 && ta) {
1175
+ if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0 && th) {
1176
1176
  response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cE(
1177
1177
  material,
1178
1178
  prepared.diffuseColor,
@@ -1185,7 +1185,7 @@ diffuseSpecularEnergyCompensation,
1185
1185
  }
1186
1186
 
1187
1187
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && material.thinWalled &&
1188
- oL) {
1188
+ oT) {
1189
1189
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cE(
1190
1190
  material,
1191
1191
  material.subsurfaceColor,
@@ -1197,7 +1197,7 @@ diffuseSpecularEnergyCompensation,
1197
1197
  *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aI;
1198
1198
  }
1199
1199
 
1200
- if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && pX) {
1200
+ if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && qf) {
1201
1201
  var ct = ei;
1202
1202
  if (material.thinWalled) {
1203
1203
  ct = aP(
@@ -1217,8 +1217,8 @@ cK,
1217
1217
  *pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aI;
1218
1218
  }
1219
1219
 
1220
- if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && rY) {
1221
- let cK = material.specularWeight * np[1];
1220
+ if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && sg) {
1221
+ let cK = material.specularWeight * nD[1];
1222
1222
  response += prepared.weights[OPENPBR_LOBE_METAL] * am(
1223
1223
  material,
1224
1224
  viewLocal,
@@ -1237,10 +1237,10 @@ aI = mix(aI, 0.5 * INVPI, prepared.metalMsProbability);
1237
1237
  }
1238
1238
  else {
1239
1239
  let cK = ei;
1240
- if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jB) {
1240
+ if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jG) {
1241
1241
  if (material.thinWalled) {
1242
- let kP = vec3f(lightLocal.xy, -lightLocal.z);
1243
- let gg = aP(
1242
+ let kY = vec3f(lightLocal.xy, -lightLocal.z);
1243
+ let gm = aP(
1244
1244
  ei,
1245
1245
  1.0
1246
1246
  );
@@ -1253,15 +1253,15 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1253
1253
  * am(
1254
1254
  material,
1255
1255
  viewLocal,
1256
- kP,
1257
- dd,
1258
- tint * (vec3f(1.0) - gg),
1256
+ kY,
1257
+ df,
1258
+ tint * (vec3f(1.0) - gm),
1259
1259
  &aI
1260
1260
  );
1261
1261
  }
1262
1262
  else {
1263
1263
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1264
- * dk(
1264
+ * dl(
1265
1265
  material,
1266
1266
  material.relativeIor,
1267
1267
  bn(material),
@@ -1277,22 +1277,22 @@ 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 && oL) {
1280
+ if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && oT) {
1281
1281
  if (material.thinWalled) {
1282
- let nW = 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
- nW,
1288
+ oh,
1289
1289
  diffuseSpecularEnergyCompensation,
1290
1290
  &aI
1291
1291
  );
1292
1292
  aI *= 0.5;
1293
1293
  }
1294
1294
  else {
1295
- response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dL(
1295
+ response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dM(
1296
1296
  material,
1297
1297
  viewLocal,
1298
1298
  lightLocal,
@@ -1306,17 +1306,17 @@ lightLocal,
1306
1306
 
1307
1307
 
1308
1308
 
1309
- if (prepared.dielectricMsProbability > 0.0 && jB) {
1309
+ if (prepared.dielectricMsProbability > 0.0 && jG) {
1310
1310
  let au = abs(lightLocal.z);
1311
1311
  if (au > 0.0) {
1312
1312
  let ior = select(1.0 / prepared.refractionEtaTOverEtaI, prepared.refractionEtaTOverEtaI, reflection);
1313
- let iV = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1314
- let tj = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1313
+ let ja = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1314
+ let tr = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1315
1315
  / max(cO(ior, prepared.specularAlpha), 1e-12);
1316
- let dW = min(tj * iV, 1.0 / au);
1316
+ let dW = min(tr * ja, 1.0 / au);
1317
1317
  let scale = select(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, reflection);
1318
1318
  response += scale * dW * INVPI;
1319
- *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iV * 0.5 * INVPI;
1319
+ *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * ja * 0.5 * INVPI;
1320
1320
  }
1321
1321
  }
1322
1322
 
@@ -1331,33 +1331,33 @@ if (independentCoat) { response *= abs(lightLocal.z); }
1331
1331
 
1332
1332
  ${hasAnisotropyDirections ? /* wgsl */ `
1333
1333
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1334
- var dH = viewLocal;
1335
- var kv = lightLocal;
1336
- var gr = V;
1337
- var jF = bQ;
1334
+ var dI = viewLocal;
1335
+ var kD = lightLocal;
1336
+ var gw = V;
1337
+ var jK = bQ;
1338
1338
  if (prepared.directionFrames) {
1339
- dH = ${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
- kv = openpbr_to_local(prepared.coatBasis, lightDirection);
1341
- gr = normalize(kv + dH);
1342
- if (gr.z < 0.0) { gr = -gr; }
1343
- jF = abs(dot(dH, gr));
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
+ kD = openpbr_to_local(prepared.coatBasis, lightDirection);
1341
+ gw = normalize(kD + dI);
1342
+ if (gw.z < 0.0) { gw = -gw; }
1343
+ jK = abs(dot(dI, gw));
1344
1344
  }
1345
1345
 
1346
- let kX = vec3f(af(
1347
- jF,
1346
+ let lg = vec3f(af(
1347
+ jK,
1348
1348
  1.0 / material.coatIor
1349
1349
  ));
1350
- var dG = material;
1351
- let jr = aK(material.coatRoughness, material.coatAnisotropy);
1352
- dG.alphaX = jr.x;
1353
- dG.alphaY = jr.y;
1354
- if (sV) {
1350
+ var dH = material;
1351
+ let jx = aK(material.coatRoughness, material.coatAnisotropy);
1352
+ dH.alphaX = jx.x;
1353
+ dH.alphaY = jx.y;
1354
+ if (tc) {
1355
1355
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * am(
1356
- dG,
1357
1356
  dH,
1358
- kv,
1359
- gr,
1360
- kX,
1357
+ dI,
1358
+ kD,
1359
+ gw,
1360
+ lg,
1361
1361
  &aI
1362
1362
  );
1363
1363
  *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
@@ -1365,21 +1365,21 @@ kX,
1365
1365
  }
1366
1366
  ` : /* wgsl */ `
1367
1367
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1368
- let kX = vec3f(af(
1368
+ let lg = vec3f(af(
1369
1369
  bQ,
1370
1370
  1.0 / material.coatIor
1371
1371
  ));
1372
- var dG = material;
1373
- let jr = aK(material.coatRoughness, material.coatAnisotropy);
1374
- dG.alphaX = jr.x;
1375
- dG.alphaY = jr.y;
1376
- if (sV) {
1372
+ var dH = material;
1373
+ let jx = aK(material.coatRoughness, material.coatAnisotropy);
1374
+ dH.alphaX = jx.x;
1375
+ dH.alphaY = jx.y;
1376
+ if (tc) {
1377
1377
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * am(
1378
- dG,
1378
+ dH,
1379
1379
  viewLocal,
1380
1380
  lightLocal,
1381
1381
  V,
1382
- kX,
1382
+ lg,
1383
1383
  &aI
1384
1384
  );
1385
1385
  *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
@@ -1388,16 +1388,16 @@ kX,
1388
1388
  `}
1389
1389
 
1390
1390
  if (${hasCoatNormals ? 'select(reflection, geometricReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1391
- let qr = aO(
1391
+ let qz = aO(
1392
1392
  abs(viewLocal.z),
1393
1393
  material.fuzzRoughness
1394
1394
  );
1395
1395
  response *= max(
1396
1396
  vec3f(0.0),
1397
- vec3f(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qr)
1397
+ vec3f(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qz)
1398
1398
  );
1399
- if (uG) {
1400
- response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * jR(
1399
+ if (uN) {
1400
+ response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * jY(
1401
1401
  material,
1402
1402
  viewLocal,
1403
1403
  lightLocal,
@@ -1415,14 +1415,14 @@ prepared: ag,
1415
1415
  lightDirection: vec3f,
1416
1416
  pdf: ptr<function, f32>
1417
1417
  ) -> vec3f {
1418
- return mu(prepared, lightDirection, -1, pdf);
1418
+ return mD(prepared, lightDirection, -1, pdf);
1419
1419
  }
1420
1420
 
1421
1421
 
1422
1422
 
1423
1423
 
1424
1424
 
1425
- fn qY(
1425
+ fn ri(
1426
1426
  tangent: vec3f,
1427
1427
  material: J,
1428
1428
  bF: vec3f,
@@ -1430,7 +1430,7 @@ normal: vec3f,
1430
1430
  lightDirection: vec3f,
1431
1431
  pdf: ptr<function, f32>
1432
1432
  ) -> vec3f {
1433
- let prepared = eG(
1433
+ let prepared = eH(
1434
1434
  tangent,
1435
1435
  material,
1436
1436
  bF,
@@ -1443,29 +1443,29 @@ return bI(prepared, lightDirection, pdf);
1443
1443
 
1444
1444
 
1445
1445
 
1446
- fn mY(
1446
+ fn nl(
1447
1447
  prepared: ag, cm: vec3f,
1448
1448
  lightDirection: ptr<function, vec3f>, isTransmissionEvent: ptr<function, bool>,
1449
- aA: ptr<function, f32>, aT: ptr<function, bool>,
1449
+ aA: ptr<function, f32>, aS: ptr<function, bool>,
1450
1450
  bE: ptr<function, bool>, aR: ptr<function, u32>
1451
1451
  ) -> bool {
1452
1452
  let material = prepared.material;
1453
1453
  let viewLocal = prepared.viewLocal;
1454
1454
  var cy = cm.x;
1455
- let fp = cm.y;
1455
+ let fv = cm.y;
1456
1456
  let bm = cm.z;
1457
1457
  *isTransmissionEvent = false;
1458
1458
  *aA = 1.0;
1459
- *aT = false;
1459
+ *aS = false;
1460
1460
  *bE = false;
1461
1461
  *aR = u32(OPENPBR_LOBE_DIFFUSE);
1462
1462
  *lightDirection = prepared.basis.normal;
1463
1463
 
1464
1464
  var cdf: array<f32, OPENPBR_LOBE_COUNT>;
1465
1465
  cdf[OPENPBR_LOBE_FUZZ] = prepared.probabilities[OPENPBR_LOBE_FUZZ];
1466
- let nu = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
1467
- for (var hQ = 1; hQ < nu; hQ++) {
1468
- cdf[hQ] = cdf[hQ - 1] + prepared.probabilities[hQ];
1466
+ let nI = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
1467
+ for (var hU = 1; hU < nI; hU++) {
1468
+ cdf[hU] = cdf[hU - 1] + prepared.probabilities[hU];
1469
1469
  }
1470
1470
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
1471
1471
  return false;
@@ -1475,37 +1475,37 @@ var lightLocal: vec3f;
1475
1475
  if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1476
1476
  bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1477
1477
  )) {
1478
- let pI = bm < cdf[OPENPBR_LOBE_FUZZ];
1478
+ let pQ = bm < cdf[OPENPBR_LOBE_FUZZ];
1479
1479
  *aA = select(
1480
1480
  1.0,
1481
1481
  material.fuzzRoughness,
1482
- pI
1482
+ pQ
1483
1483
  );
1484
- *bE = !pI;
1484
+ *bE = !pQ;
1485
1485
  *aR = select(
1486
1486
  u32(OPENPBR_LOBE_DIFFUSE),
1487
1487
  u32(OPENPBR_LOBE_FUZZ),
1488
- pI
1488
+ pQ
1489
1489
  );
1490
- lightLocal = bi(vec2f(cy, fp));
1490
+ lightLocal = bi(vec2f(cy, fv));
1491
1491
  }
1492
1492
  ${hasAnisotropyDirections ? /* wgsl */ `
1493
1493
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1494
1494
  *aA = material.coatRoughness;
1495
- *aT = true;
1495
+ *aS = true;
1496
1496
  *aR = u32(OPENPBR_LOBE_COAT);
1497
- var dH = viewLocal;
1498
- if (prepared.directionFrames) { dH = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, material.coatNormalEnabled)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'}; }
1497
+ var dI = viewLocal;
1498
+ if (prepared.directionFrames) { dI = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, material.coatNormalEnabled)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'}; }
1499
1499
  var V = aQ(
1500
- dH,
1500
+ dI,
1501
1501
 
1502
1502
  aK(material.coatRoughness, material.coatAnisotropy),
1503
- vec2f(cy, fp)
1503
+ vec2f(cy, fv)
1504
1504
  );
1505
1505
  if (V.z < 0.0) {
1506
1506
  V = -V;
1507
1507
  }
1508
- lightLocal = normalize(reflect(-dH, V));
1508
+ lightLocal = normalize(reflect(-dI, V));
1509
1509
  ${hasCoatNormals ? /* wgsl */ `
1510
1510
  if (material.coatNormalEnabled) {
1511
1511
 
@@ -1518,13 +1518,13 @@ if (prepared.directionFrames) { lightLocal = openpbr_to_local(prepared.basis, op
1518
1518
  ` : /* wgsl */ `
1519
1519
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1520
1520
  *aA = material.coatRoughness;
1521
- *aT = true;
1521
+ *aS = true;
1522
1522
  *aR = u32(OPENPBR_LOBE_COAT);
1523
1523
  var V = aQ(
1524
1524
  viewLocal,
1525
1525
 
1526
1526
  aK(material.coatRoughness, material.coatAnisotropy),
1527
- vec2f(cy, fp)
1527
+ vec2f(cy, fv)
1528
1528
  );
1529
1529
  if (V.z < 0.0) {
1530
1530
  V = -V;
@@ -1534,25 +1534,25 @@ lightLocal = normalize(reflect(-viewLocal, V));
1534
1534
  `}
1535
1535
  else if (bm < cdf[OPENPBR_LOBE_SPECULAR]) {
1536
1536
  *aA = material.specularRoughness;
1537
- *aT = true;
1537
+ *aS = true;
1538
1538
  *aR = select(
1539
1539
  u32(OPENPBR_LOBE_SPECULAR),
1540
1540
  u32(OPENPBR_LOBE_METAL),
1541
1541
  bm < cdf[OPENPBR_LOBE_METAL]
1542
1542
  );
1543
- let tm = bm < cdf[OPENPBR_LOBE_METAL];
1544
- let rE = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1545
- if (tm && rE < prepared.metalMsProbability) {
1543
+ let tw = bm < cdf[OPENPBR_LOBE_METAL];
1544
+ let rM = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1545
+ if (tw && rM < prepared.metalMsProbability) {
1546
1546
  let z = cy;
1547
- let fi = sqrt(max(0.0, 1.0 - z * z));
1548
- let br = TWOPI * fp;
1549
- lightLocal = vec3f(fi * cos(br), fi * sin(br), z);
1547
+ let fl = sqrt(max(0.0, 1.0 - z * z));
1548
+ let br = TWOPI * fv;
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, fp)
1555
+ vec2f(cy, fv)
1556
1556
  );
1557
1557
  if (V.z < 0.0) {
1558
1558
  V = -V;
@@ -1562,36 +1562,36 @@ lightLocal = normalize(reflect(-viewLocal, V));
1562
1562
  }
1563
1563
  else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1564
1564
  *aA = material.specularRoughness;
1565
- *aT = true;
1565
+ *aS = true;
1566
1566
  *isTransmissionEvent = true;
1567
1567
  *aR = u32(OPENPBR_LOBE_TRANSMISSION);
1568
1568
 
1569
1569
 
1570
- let uk = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1571
- if (prepared.dielectricMsProbability > 0.0 && uk < prepared.dielectricMsProbability) {
1572
- let iV = prepared.dielectricMsReflectionRatio;
1573
- let lP = cy < iV;
1570
+ let us = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1571
+ if (prepared.dielectricMsProbability > 0.0 && us < prepared.dielectricMsProbability) {
1572
+ let ja = prepared.dielectricMsReflectionRatio;
1573
+ let lY = cy < ja;
1574
1574
  var z: f32;
1575
- if (lP) { z = min(cy / iV, 0.99999994); }
1576
- else { z = -min((cy - iV) / (1.0 - iV), 0.99999994); }
1577
- let fi = sqrt(max(0.0, 1.0 - z * z));
1578
- let br = TWOPI * fp;
1579
- lightLocal = vec3f(fi * cos(br), fi * sin(br), z);
1580
- *isTransmissionEvent = !lP;
1581
- *aR = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), lP);
1575
+ if (lY) { z = min(cy / ja, 0.99999994); }
1576
+ else { z = -min((cy - ja) / (1.0 - ja), 0.99999994); }
1577
+ let fl = sqrt(max(0.0, 1.0 - z * z));
1578
+ let br = TWOPI * fv;
1579
+ lightLocal = vec3f(fl * cos(br), fl * sin(br), z);
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, fp)
1587
+ vec2f(cy, fv)
1588
1588
  );
1589
1589
  if (V.z < 0.0) {
1590
1590
  V = -V;
1591
1591
  }
1592
1592
  if (material.thinWalled) {
1593
- let hV = normalize(reflect(-viewLocal, V));
1594
- lightLocal = vec3f(hV.xy, -hV.z);
1593
+ let hZ = normalize(reflect(-viewLocal, V));
1594
+ lightLocal = vec3f(hZ.xy, -hZ.z);
1595
1595
  }
1596
1596
  else {
1597
1597
  lightLocal = refract(
@@ -1613,15 +1613,15 @@ else {
1613
1613
  *isTransmissionEvent = true;
1614
1614
  *aR = u32(OPENPBR_LOBE_SUBSURFACE);
1615
1615
  if (material.thinWalled) {
1616
- let pL = cy >= 0.5;
1617
- if (pL) {
1616
+ let pT = cy >= 0.5;
1617
+ if (pT) {
1618
1618
  cy = (cy - 0.5) * 2.0;
1619
1619
  }
1620
1620
  else {
1621
1621
  cy *= 2.0;
1622
1622
  }
1623
- lightLocal = bi(vec2f(cy, fp));
1624
- if (pL) {
1623
+ lightLocal = bi(vec2f(cy, fv));
1624
+ if (pT) {
1625
1625
  lightLocal.z = -lightLocal.z;
1626
1626
  }
1627
1627
  else {
@@ -1629,7 +1629,7 @@ else {
1629
1629
  }
1630
1630
  }
1631
1631
  else {
1632
- lightLocal = bi(vec2f(cy, fp));
1632
+ lightLocal = bi(vec2f(cy, fv));
1633
1633
  lightLocal.z = -lightLocal.z;
1634
1634
  }
1635
1635
  }
@@ -1655,15 +1655,15 @@ lightDirection: ptr<function, vec3f>,
1655
1655
  pdf: ptr<function, f32>,
1656
1656
  isTransmissionEvent: ptr<function, bool>,
1657
1657
  aA: ptr<function, f32>,
1658
- aT: ptr<function, bool>,
1658
+ aS: ptr<function, bool>,
1659
1659
  bE: ptr<function, bool>,
1660
1660
  aR: ptr<function, u32>,
1661
- ld: ptr<function, f32>,
1662
- gT: ptr<function, vec3f>
1661
+ lo: ptr<function, f32>,
1662
+ gY: ptr<function, vec3f>
1663
1663
  ) -> vec3f {
1664
1664
  *pdf = 0.0;
1665
- *ld = 0.0;
1666
- *gT = vec3f(0.0);
1665
+ *lo = 0.0;
1666
+ *gY = vec3f(0.0);
1667
1667
 
1668
1668
 
1669
1669
 
@@ -1675,28 +1675,28 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6) {
1675
1675
  prepared.basis,
1676
1676
  -prepared.viewLocal
1677
1677
  );
1678
- let nB = 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
- *ld = 1.0;
1682
- *gT = nB;
1681
+ *lo = 1.0;
1682
+ *gY = nL;
1683
1683
  *isTransmissionEvent = true;
1684
1684
  *aA = 0.0;
1685
- *aT = true;
1685
+ *aS = true;
1686
1686
  *bE = false;
1687
1687
  *aR = u32(OPENPBR_LOBE_TRANSMISSION);
1688
- return nB;
1688
+ return nL;
1689
1689
  }
1690
- if (!mY(prepared, cm, lightDirection,
1691
- isTransmissionEvent, aA, aT,
1690
+ if (!nl(prepared, cm, lightDirection,
1691
+ isTransmissionEvent, aA, aS,
1692
1692
  bE, aR)) { return vec3f(0.0); }
1693
1693
  let response = bI(prepared, *lightDirection, pdf);
1694
- *ld = *pdf;
1695
- *gT = response;
1694
+ *lo = *pdf;
1695
+ *gY = response;
1696
1696
  return response;
1697
1697
  }
1698
1698
 
1699
- fn sB(
1699
+ fn sJ(
1700
1700
  tangent: vec3f,
1701
1701
  material: J,
1702
1702
  cm: vec3f,
@@ -1706,18 +1706,18 @@ lightDirection: ptr<function, vec3f>,
1706
1706
  pdf: ptr<function, f32>,
1707
1707
  isTransmissionEvent: ptr<function, bool>,
1708
1708
  aA: ptr<function, f32>,
1709
- aT: ptr<function, bool>,
1709
+ aS: ptr<function, bool>,
1710
1710
  bE: ptr<function, bool>,
1711
1711
  aR: ptr<function, u32>,
1712
- ld: ptr<function, f32>
1712
+ lo: ptr<function, f32>
1713
1713
  ) -> vec3f {
1714
- let prepared = eG(
1714
+ let prepared = eH(
1715
1715
  tangent,
1716
1716
  material,
1717
1717
  bF,
1718
1718
  normal
1719
1719
  );
1720
- var gT = vec3f(0.0);
1720
+ var gY = vec3f(0.0);
1721
1721
  return dv(
1722
1722
  prepared,
1723
1723
  cm,
@@ -1725,11 +1725,11 @@ lightDirection,
1725
1725
  pdf,
1726
1726
  isTransmissionEvent,
1727
1727
  aA,
1728
- aT,
1728
+ aS,
1729
1729
  bE,
1730
1730
  aR,
1731
- ld,
1732
- &gT
1731
+ lo,
1732
+ &gY
1733
1733
  );
1734
1734
  }`;
1735
1735
  }