@meimu/mutracer 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +3525 -3484
  3. package/docs/materials.md +27 -7
  4. package/docs/threejs.md +13 -2
  5. package/docs/viewer.md +53 -0
  6. package/lib/oidn.d.ts +1 -1
  7. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  8. package/lib/renderer/MaterialTable.d.ts +1 -0
  9. package/lib/renderer/MaterialTable.js +2 -1
  10. package/lib/renderer/MaterialTable.js.map +1 -1
  11. package/lib/renderer/WGPUBloomPass.js +18 -18
  12. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  13. package/lib/renderer/WGPUJNLMDenoiser.js +62 -62
  14. package/lib/renderer/WGPURayTraceOutput.js +14 -12
  15. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  16. package/lib/renderer/WGPURayTracePass.js +2 -2
  17. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  18. package/lib/renderer/WGPURenderingPipeline.js +20 -18
  19. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  20. package/lib/renderer/WebGLJNLMDenoiser.js +61 -61
  21. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  22. package/lib/renderer/WebGLRayTracePass.js +3 -1
  23. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  24. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
  25. package/lib/renderer/glsl/chunks/envMap.glsl.js +45 -45
  26. package/lib/renderer/glsl/chunks/intersect.glsl.js +262 -262
  27. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +111 -111
  28. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +436 -436
  29. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  30. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  31. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +32 -32
  32. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +54 -54
  33. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +71 -71
  34. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  35. package/lib/renderer/glsl/chunks/sampling.glsl.js +64 -64
  36. package/lib/renderer/glsl/chunks/sobol.glsl.js +49 -49
  37. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  38. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +5 -5
  39. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  40. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  41. package/lib/renderer/glsl/rayTrace.frag.js +128 -128
  42. package/lib/renderer/glsl/shadowCatcher.frag.js +12 -12
  43. package/lib/renderer/glsl/webglPipeline.frag.js +49 -49
  44. package/lib/renderer/lightsUtil.js +1 -1
  45. package/lib/renderer/lightsUtil.js.map +1 -1
  46. package/lib/renderer/materialComparison.generated.js +5 -0
  47. package/lib/renderer/materialComparison.generated.js.map +1 -1
  48. package/lib/renderer/materialLayout.js +2 -1
  49. package/lib/renderer/materialLayout.js.map +1 -1
  50. package/lib/renderer/prepareMeshBVH.d.ts +4 -2
  51. package/lib/renderer/prepareMeshBVH.js +44 -20
  52. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  53. package/lib/renderer/scratchSampling.js +6 -6
  54. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  55. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +29 -29
  56. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +376 -379
  57. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  58. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +5 -5
  59. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +51 -51
  60. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +453 -453
  61. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  62. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +122 -117
  63. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  64. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  65. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +13 -13
  66. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +94 -94
  67. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +119 -119
  68. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +5 -5
  69. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +62 -62
  70. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
  71. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
  72. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  73. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +53 -53
  74. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +5 -5
  75. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
  76. package/lib/renderer/wgsl/compose.frag.wgsl.js +120 -92
  77. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  78. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  79. package/lib/renderer/wgsl/depthQuery.wgsl.js +3 -3
  80. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  81. package/lib/renderer/wgsl/rayTrace.compute.js +220 -211
  82. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  83. package/lib/scene/OpenPBRMaterial.d.ts +4 -2
  84. package/lib/scene/OpenPBRMaterial.js +4 -2
  85. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  86. package/lib/scene/openPbrSchema.d.ts +7 -2
  87. package/lib/scene/openPbrSchema.js +2 -1
  88. package/lib/scene/openPbrSchema.js.map +1 -1
  89. package/lib/util/fromTHREE.d.ts +1 -0
  90. package/lib/util/fromTHREE.js +24 -6
  91. package/lib/util/fromTHREE.js.map +1 -1
  92. package/lib/version.d.ts +1 -1
  93. package/lib/version.js +1 -1
  94. package/lib/version.js.map +1 -1
  95. package/package.json +5 -4
@@ -77,20 +77,20 @@ fn aY(
77
77
  bu: f32,
78
78
  specularWeight: f32
79
79
  ) -> f32 {
80
- let sE = min(
80
+ let sJ = min(
81
81
  cV(bu) * specularWeight,
82
82
  0.9999
83
83
  );
84
- let sG = sqrt(sE);
85
- let kV = (1.0 + sG) / (1.0 - sG);
86
- return select(kV, 1.0 / kV, bu < 1.0);
84
+ let sL = sqrt(sJ);
85
+ let kY = (1.0 + sL) / (1.0 - sL);
86
+ return select(kY, 1.0 / kY, bu < 1.0);
87
87
  }
88
88
 
89
89
  fn af(cc: f32, relativeIor: f32) -> f32 {
90
90
  if (abs(relativeIor - 1.0) < 1e-6) {
91
91
  return 0.0;
92
92
  }
93
- return ct(cc, relativeIor);
93
+ return cu(cc, relativeIor);
94
94
  }
95
95
 
96
96
  fn aC(ior: f32) -> f32 {
@@ -100,64 +100,64 @@ 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(rX: i32, row: i32) -> f32 {
104
- return textureLoad(openPbrEnergyLut, vec2i(rX, row), 0).r;
103
+ fn F(sc: i32, row: i32) -> f32 {
104
+ return textureLoad(openPbrEnergyLut, vec2i(sc, row), 0).r;
105
105
  }
106
106
 
107
- fn fY(
107
+ fn fZ(
108
108
  dI: f32,
109
109
  bR: f32,
110
- hO: f32
110
+ hN: f32
111
111
  ) -> f32 {
112
112
  let bA = clamp(dI, 0.0, 31.0);
113
- let aG = clamp(bR, 0.0, 31.0);
114
- let bt = clamp(hO, 0.0, 31.0);
113
+ let aH = clamp(bR, 0.0, 31.0);
114
+ let bt = clamp(hN, 0.0, 31.0);
115
115
  let dP = i32(floor(bA));
116
- let aM = i32(floor(aG));
116
+ let aN = i32(floor(aH));
117
117
  let cI = i32(floor(bt));
118
- let hB = min(dP + 1, 31);
119
- let cn = min(aM + 1, 31);
118
+ let hA = min(dP + 1, 31);
119
+ let cp = min(aN + 1, 31);
120
120
  let eO = min(cI + 1, 31);
121
- let cp = bA - f32(dP);
122
- let cy = aG - f32(aM);
123
- let ku = bt - f32(cI);
124
-
125
- let uk = F(cI, dP * 32 + aM);
126
- let ul = F(eO, dP * 32 + aM);
127
- let um = F(cI, dP * 32 + cn);
128
- let un = F(eO, dP * 32 + cn);
129
- let uo = F(cI, hB * 32 + aM);
130
- let uq = F(eO, hB * 32 + aM);
131
- let ur = F(cI, hB * 32 + cn);
132
- let us = F(eO, hB * 32 + cn);
133
- let v00 = mix(uk, uo, cp);
134
- let v01 = mix(ul, uq, cp);
135
- let v10 = mix(um, ur, cp);
136
- let v11 = mix(un, us, cp);
121
+ let cq = bA - f32(dP);
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);
137
137
  return mix(
138
- mix(v00, v10, cy),
139
- mix(v01, v11, cy),
140
- ku
138
+ mix(v00, v10, cz),
139
+ mix(v01, v11, cz),
140
+ kw
141
141
  );
142
142
  }
143
143
 
144
- fn gx(dI: f32, bR: f32) -> f32 {
144
+ fn gz(dI: f32, bR: f32) -> f32 {
145
145
  let bA = clamp(dI, 0.0, 31.0);
146
- let aG = clamp(bR, 0.0, 31.0);
146
+ let aH = clamp(bR, 0.0, 31.0);
147
147
  let dP = i32(floor(bA));
148
- let aM = i32(floor(aG));
149
- let hB = min(dP + 1, 31);
150
- let cn = min(aM + 1, 31);
151
- let cp = bA - f32(dP);
152
- let cy = aG - f32(aM);
153
- let v00 = F(aM, 1024 + dP);
154
- let v01 = F(cn, 1024 + dP);
155
- let v10 = F(aM, 1024 + hB);
156
- let v11 = F(cn, 1024 + hB);
148
+ let aN = i32(floor(aH));
149
+ let hA = min(dP + 1, 31);
150
+ let cp = min(aN + 1, 31);
151
+ let cq = bA - f32(dP);
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);
157
157
  return mix(
158
- mix(v00, v10, cp),
159
- mix(v01, v11, cp),
160
- cy
158
+ mix(v00, v10, cq),
159
+ mix(v01, v11, cq),
160
+ cz
161
161
  );
162
162
  }
163
163
 
@@ -166,77 +166,77 @@ cy
166
166
  fn ef(
167
167
  dI: f32,
168
168
  bR: f32,
169
- hO: f32
169
+ hN: f32
170
170
  ) -> f32 {
171
171
  let bA = clamp(dI, 0.0, 31.0);
172
- let aG = clamp(bR, 0.0, 31.0);
173
- let bt = clamp(hO, 0.0, 31.0);
172
+ let aH = clamp(bR, 0.0, 31.0);
173
+ let bt = clamp(hN, 0.0, 31.0);
174
174
  let dP = i32(floor(bA));
175
- let aM = i32(floor(aG));
175
+ let aN = i32(floor(aH));
176
176
  let cI = i32(floor(bt));
177
- let hB = min(dP + 1, 31);
178
- let cn = min(aM + 1, 31);
177
+ let hA = min(dP + 1, 31);
178
+ let cp = min(aN + 1, 31);
179
179
  let eO = min(cI + 1, 31);
180
- let cp = bA - f32(dP);
181
- let cy = aG - f32(aM);
182
- let ku = bt - f32(cI);
183
-
184
- let uk = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
185
- let ul = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
186
- let um = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
187
- let un = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
188
- let uo = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
189
- let uq = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
190
- let ur = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
191
- let us = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
192
- let v00 = mix(uk, uo, cp);
193
- let v01 = mix(ul, uq, cp);
194
- let v10 = mix(um, ur, cp);
195
- let v11 = mix(un, us, cp);
180
+ let cq = bA - f32(dP);
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);
196
196
  return mix(
197
- mix(v00, v10, cy),
198
- mix(v01, v11, cy),
199
- ku
197
+ mix(v00, v10, cz),
198
+ mix(v01, v11, cz),
199
+ kw
200
200
  );
201
201
  }
202
202
 
203
203
  fn ee(dI: f32, bR: f32) -> f32 {
204
204
  let bA = clamp(dI, 0.0, 31.0);
205
- let aG = clamp(bR, 0.0, 31.0);
205
+ let aH = clamp(bR, 0.0, 31.0);
206
206
  let dP = i32(floor(bA));
207
- let aM = i32(floor(aG));
208
- let hB = min(dP + 1, 31);
209
- let cn = min(aM + 1, 31);
210
- let cp = bA - f32(dP);
211
- let cy = aG - f32(aM);
212
- let v00 = F(aM, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
213
- let v01 = F(cn, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
214
- let v10 = F(aM, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
215
- let v11 = F(cn, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
207
+ let aN = i32(floor(aH));
208
+ let hA = min(dP + 1, 31);
209
+ let cp = min(aN + 1, 31);
210
+ let cq = bA - f32(dP);
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);
216
216
  return mix(
217
- mix(v00, v10, cp),
218
- mix(v01, v11, cp),
219
- cy
217
+ mix(v00, v10, cq),
218
+ mix(v01, v11, cq),
219
+ cz
220
220
  );
221
221
  }
222
222
 
223
223
  fn eF(dI: f32, bR: f32) -> f32 {
224
224
  let bA = clamp(dI, 0.0, 31.0);
225
- let aG = clamp(bR, 0.0, 31.0);
225
+ let aH = clamp(bR, 0.0, 31.0);
226
226
  let dP = i32(floor(bA));
227
- let aM = i32(floor(aG));
228
- let hB = min(dP + 1, 31);
229
- let cn = min(aM + 1, 31);
230
- let cp = bA - f32(dP);
231
- let cy = aG - f32(aM);
232
- let v00 = F(aM, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
233
- let v01 = F(cn, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
234
- let v10 = F(aM, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
235
- let v11 = F(cn, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
227
+ let aN = i32(floor(aH));
228
+ let hA = min(dP + 1, 31);
229
+ let cp = min(aN + 1, 31);
230
+ let cq = bA - f32(dP);
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);
236
236
  return mix(
237
- mix(v00, v10, cp),
238
- mix(v01, v11, cp),
239
- cy
237
+ mix(v00, v10, cq),
238
+ mix(v01, v11, cq),
239
+ cz
240
240
  );
241
241
  }
242
242
 
@@ -253,19 +253,19 @@ return eF(aC(ior), sqrt(alpha) * 31.0);
253
253
 
254
254
 
255
255
  fn bH(alpha: f32, au: f32) -> f32 {
256
- let ia = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
+ let hZ = 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(ia));
258
+ let r0 = i32(floor(hZ));
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(ia));
265
+ fract(hZ));
266
266
  }
267
267
 
268
- fn cu(alpha: f32) -> f32 {
268
+ fn cv(alpha: f32) -> f32 {
269
269
  let index = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
270
270
  let i0 = i32(floor(index));
271
271
  return mix(F(i0, ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}),
@@ -274,19 +274,19 @@ 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 tI = cV(2.5);
278
- let progress = (cV(ior) - tI) / (1.0 - tI);
277
+ let tN = cV(2.5);
278
+ let progress = (cV(ior) - tN) / (1.0 - tN);
279
279
  return (1.0 - progress) * value;
280
280
  }
281
281
  return value;
282
282
  }
283
283
 
284
- fn aI(
284
+ fn aJ(
285
285
  ior: f32,
286
286
  alpha: f32,
287
287
  au: f32
288
288
  ) -> f32 {
289
- let value = fY(
289
+ let value = fZ(
290
290
  aC(ior),
291
291
  sqrt(alpha) * 31.0,
292
292
  au * 31.0
@@ -294,8 +294,8 @@ au * 31.0
294
294
  return aX(value, ior);
295
295
  }
296
296
 
297
- fn cq(ior: f32, alpha: f32) -> f32 {
298
- let value = gx(
297
+ fn cr(ior: f32, alpha: f32) -> f32 {
298
+ let value = gz(
299
299
  aC(ior),
300
300
  sqrt(alpha) * 31.0
301
301
  );
@@ -326,7 +326,7 @@ basis.normal = normal;
326
326
  var tangent = aU;
327
327
  var bitangent = vec3f(0.0);
328
328
  if (dot(tangent, tangent) < 0.001 || anisotropy <= 0.0) {
329
- aK(normal, &tangent, &bitangent);
329
+ aL(normal, &tangent, &bitangent);
330
330
  }
331
331
  else {
332
332
  bitangent = normalize(cross(normal, tangent));
@@ -337,7 +337,7 @@ basis.bitangent = bitangent;
337
337
  return basis;
338
338
  }
339
339
 
340
- fn jR(
340
+ fn jT(
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 jQ(
350
+ fn jS(
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 gX(
360
+ fn gY(
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 gW(
370
+ fn gX(
371
371
  av: f32,
372
372
  ak: f32,
373
373
  L: f32,
@@ -389,23 +389,23 @@ return vec2f(
389
389
  );
390
390
  }
391
391
 
392
- fn hU(value: vec2f) -> vec2f {
393
- let ns = length(value);
394
- let sC = sqrt(max(0.0, 0.5 * (ns + value.x)));
395
- let fc = sqrt(max(0.0, 0.5 * (ns - value.x)));
396
- return vec2f(sC, select(-fc, fc, value.y >= 0.0));
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));
397
397
  }
398
398
 
399
399
  fn bX(
400
400
  L: f32,
401
401
  av: f32,
402
402
  ak: vec2f,
403
- qu: bool
403
+ qy: bool
404
404
  ) -> vec2f {
405
- let ob = sqrt(max(0.0, 1.0 - L * L));
406
- let sj = aZ(vec2f(av, 0.0), ak);
407
- let hw = sj * ob;
408
- var S = hU(
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
409
  vec2f(1.0, 0.0) - aV(hw, hw)
410
410
  );
411
411
  if (aV(ak, S).y < 0.0) {
@@ -414,7 +414,7 @@ S = -S;
414
414
 
415
415
  let fH = vec2f(av * L, 0.0);
416
416
  let eA = aV(ak, S);
417
- if (qu) {
417
+ if (qy) {
418
418
  let ci = ak * L;
419
419
  let ce = S * av;
420
420
  return aZ(
@@ -430,100 +430,100 @@ fH + eA
430
430
 
431
431
  fn eq(
432
432
  iD: f32,
433
- gG: f32,
434
- ov: f32,
435
- mA: f32,
436
- jW: vec2f,
433
+ gI: f32,
434
+ oy: f32,
435
+ mD: f32,
436
+ jY: vec2f,
437
437
  phase: f32
438
438
  ) -> f32 {
439
- let mX = vec2f(cos(phase), sin(phase));
440
- let hX = aV(jW, mX);
441
- let kC = hX * (gG * mA);
442
- let ap = vec2f(1.0, 0.0) - hX * ov;
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
443
  let hv = vec2f(iD, 0.0)
444
- + aZ(kC, ap);
444
+ + aZ(kF, ap);
445
445
  return dot(hv, hv);
446
446
  }
447
447
 
448
448
  fn ar(
449
449
  L: f32,
450
450
  wavelength: f32,
451
- cm: f32,
452
- aL: f32,
451
+ cn: f32,
452
+ aM: f32,
453
453
  ck: f32,
454
454
  eu: vec2f
455
455
  ) -> f32 {
456
456
  let dl = clamp(abs(L), 1e-5, 1.0);
457
- let hq = pow(aL / ck, 2.0)
457
+ let hq = pow(aM / ck, 2.0)
458
458
  * (1.0 - dl * dl);
459
459
  if (hq >= 1.0) {
460
460
  return 1.0;
461
461
  }
462
462
  let cU = sqrt(1.0 - hq);
463
- let kP = jR(
464
- aL, ck, dl, cU
463
+ let kS = jT(
464
+ aM, ck, dl, cU
465
465
  );
466
- let kO = jQ(
467
- aL, ck, dl, cU
466
+ let kR = jS(
467
+ aM, ck, dl, cU
468
468
  );
469
- let jd = gX(
470
- aL, ck, dl, cU
469
+ let jf = gY(
470
+ aM, ck, dl, cU
471
471
  );
472
- let jc = gW(
473
- aL, ck, dl, cU
472
+ let je = gX(
473
+ aM, ck, dl, cU
474
474
  );
475
- let gj = ck * cU
476
- / max(aL * dl, 1e-9);
477
- let phase = 2.0 * PI * (2.0 * ck * cm * cU) / wavelength;
478
- var rO = 0.0;
475
+ let gk = ck * cU
476
+ / max(aM * dl, 1e-9);
477
+ let phase = 2.0 * PI * (2.0 * ck * cn * cU) / wavelength;
478
+ var rT = 0.0;
479
479
 
480
- for (var jV = 0u; jV < (rtUniform.loopUnrollGuard >> 1u); jV++) {
481
- let iD = select(kP, kO, jV == 1u);
482
- let gG = select(jd, jc, jV == 1u);
483
- let jW = bX(
484
- cU, ck, eu, jV == 1u);
485
- rO += eq(iD, gG,
486
- -iD, gG * gj, jW, phase);
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);
487
487
  }
488
- return clamp(0.5 * rO, 0.0, 1.0);
488
+ return clamp(0.5 * rT, 0.0, 1.0);
489
489
  }
490
490
 
491
491
 
492
492
 
493
493
 
494
494
  fn dT(au: f32, f0: vec3f, tint: vec3f) -> vec3f {
495
- let qW = mix(f0, vec3f(1.0), aE(au));
496
- if (all(tint == vec3f(1.0))) { return qW; }
495
+ let ra = mix(f0, vec3f(1.0), aE(au));
496
+ if (all(tint == vec3f(1.0))) { return ra; }
497
497
  let dj = 1.0 / 7.0;
498
- let lW = 1.0 - dj;
498
+ let lZ = 1.0 - dj;
499
499
  let fF = mix(f0, vec3f(1.0), aE(dj));
500
500
  let dg = 1.0 - au;
501
- let qh = au * aE(au) * dg
502
- / (dj * pow(lW, 6.0));
503
- return clamp(qW - qh * (fF - tint * fF), vec3f(0.0), vec3f(1.0));
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));
504
504
  }
505
505
 
506
- fn cQ(f0: f32, tb: f32) -> vec2f {
506
+ fn cQ(f0: f32, tg: f32) -> vec2f {
507
507
  let dM = clamp(f0, 0.0, 0.99);
508
- let gF = sqrt(dM);
509
- let qt = (1.0 - dM) / (1.0 + dM);
510
- let qr = (1.0 + gF) / max(1.0 - gF, 1e-9);
511
- let ior = mix(qr, qt, clamp(tb, 0.0, 1.0));
512
- let jG = (
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
513
  (ior + 1.0) * (ior + 1.0) * dM
514
514
  - (ior - 1.0) * (ior - 1.0)
515
515
  ) / max(1.0 - dM, 1e-9);
516
- return vec2f(ior, sqrt(max(jG, 0.0)));
516
+ return vec2f(ior, sqrt(max(jI, 0.0)));
517
517
  }
518
518
 
519
519
 
520
- fn bN(cm: f32, weight: f32) -> f32 {
521
- return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cm);
520
+ fn bN(cn: f32, weight: f32) -> f32 {
521
+ return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cn);
522
522
  }
523
523
 
524
524
 
525
525
 
526
- fn cD(
526
+ fn cE(
527
527
  material: J,
528
528
  color: vec3f,
529
529
  viewLocal: vec3f,
@@ -537,49 +537,49 @@ return vec3f(0.0);
537
537
  }
538
538
 
539
539
  let roughness = material.diffuseRoughness;
540
- let gQ = 0.5 - 2.0 / (3.0 * PI);
541
- let nU = 2.0 / 3.0 - 28.0 / (15.0 * PI);
542
- let om = lightLocal.z;
543
- let mn = viewLocal.z;
544
- let hM = dot(lightLocal, viewLocal) - om * mn;
545
- let gN = select(
546
- hM,
547
- hM / max(max(om, mn), 1e-7),
548
- hM > 0.0
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
549
549
  );
550
- let ih = 1.0 / (1.0 + gQ * roughness);
551
- let nf = color * INVPI * ih
552
- * (1.0 + roughness * gN);
550
+ let ig = 1.0 / (1.0 + gS * roughness);
551
+ let ni = color * INVPI * ig
552
+ * (1.0 + roughness * gP);
553
553
 
554
- let dc = 1.0 - om;
555
- let cP = 1.0 - mn;
556
- let oc = dc * (
554
+ let dc = 1.0 - os;
555
+ let cP = 1.0 - mq;
556
+ let og = dc * (
557
557
  0.0571085289 + dc * (
558
558
  0.491881867 + dc * (
559
559
  -0.332181442 + dc * 0.0714429953
560
560
  )
561
561
  )
562
562
  );
563
- let mW = cP * (
563
+ let mZ = 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 pi = (1.0 + roughness * oc)
571
- / (1.0 + gQ * roughness);
572
- let oq = (1.0 + roughness * mW)
573
- / (1.0 + gQ * roughness);
574
- let fQ = ih * (1.0 + nU * roughness);
575
- let hC = color * color * fQ
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
576
  / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - fQ));
577
- let lp = hC * INVPI
578
- * max(1e-7, 1.0 - oq)
579
- * max(1e-7, 1.0 - pi)
577
+ let ls = hB * INVPI
578
+ * max(1e-7, 1.0 - ou)
579
+ * max(1e-7, 1.0 - pm)
580
580
  / max(1e-7, 1.0 - fQ);
581
581
  *pdf = lightLocal.z * INVPI;
582
- return (nf + lp) * fo;
582
+ return (ni + ls) * fo;
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 jP(
599
+ fn jR(
600
600
  material: J,
601
601
  viewLocal: vec3f,
602
602
  lightLocal: vec3f,
@@ -628,12 +628,12 @@ return vec3f(0.0);
628
628
  }
629
629
 
630
630
  let alpha = vec2f(material.alphaX, material.alphaY);
631
- let distribution = gE(V, alpha);
632
- let jM = bk(viewLocal, alpha);
633
- let ea = jM
631
+ let distribution = gG(V, alpha);
632
+ let jO = bk(viewLocal, alpha);
633
+ let ea = jO
634
634
  * bk(lightLocal, alpha);
635
635
 
636
- *pdf = jM * distribution / (4.0 * max(viewLocal.z, 1e-8));
636
+ *pdf = jO * 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
  }
@@ -653,27 +653,27 @@ if (lightLocal.z >= 0.0) {
653
653
  return vec3f(0.0);
654
654
  }
655
655
 
656
- let kz = dot(lightLocal, V);
656
+ let kC = dot(lightLocal, V);
657
657
  let bQ = dot(viewLocal, V);
658
658
 
659
659
 
660
- if (bQ <= 0.0 || kz >= 0.0) {
660
+ if (bQ <= 0.0 || kC >= 0.0) {
661
661
  return vec3f(0.0);
662
662
  }
663
663
  let alpha = vec2f(material.alphaX, material.alphaY);
664
- let distribution = gE(V, alpha);
665
- let jM = bk(viewLocal, alpha);
666
- let ea = jM
664
+ let distribution = gG(V, alpha);
665
+ let jO = bk(viewLocal, alpha);
666
+ let ea = jO
667
667
  * bk(lightLocal, alpha);
668
- var ap = kz + bQ * relativeIor;
668
+ var ap = kC + bQ * relativeIor;
669
669
  ap *= ap;
670
- let pn = abs(kz) / max(ap, 1e-8);
671
- let jm = relativeIor * relativeIor;
670
+ let pr = abs(kC) / max(ap, 1e-8);
671
+ let jo = relativeIor * relativeIor;
672
672
 
673
- *pdf = jM * max(0.0, bQ) * distribution * pn
673
+ *pdf = jO * max(0.0, bQ) * distribution * pr
674
674
  / max(viewLocal.z, 1e-8);
675
675
  return tint * (vec3f(1.0) - cK) * distribution * ea
676
- * abs(bQ) * pn * jm
676
+ * abs(bQ) * pr * jo
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 gf = 2.0 * ah
695
+ let gg = 2.0 * ah
696
696
  / (vec3f(1.0) + ah);
697
697
  return mix(
698
698
  ah,
699
- gf,
699
+ gg,
700
700
  clamp(transmissionWeight, 0.0, 1.0)
701
701
  );
702
702
  }
@@ -710,8 +710,8 @@ let tint = bn(material);
710
710
  if (!material.thinWalled) {
711
711
  return tint;
712
712
  }
713
- let iF = max(0.0, 1.0 - L * L);
714
- let dN = iF
713
+ let iG = max(0.0, 1.0 - L * L);
714
+ let dN = iG
715
715
  / max(bu * bu, 1e-9);
716
716
  if (dN >= 1.0) {
717
717
  return vec3f(0.0);
@@ -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 nR = ct(
734
+ let nU = cu(
735
735
  viewLocal.z,
736
736
  material.relativeIor
737
737
  );
738
738
  *pdf = S * INVPI;
739
- return vec3f(1.0 - nR) * INVPI;
739
+ return vec3f(1.0 - nU) * INVPI;
740
740
  }
741
741
 
742
742
  fn dQ(prepared: ptr<function, ag>) {
743
743
 
744
744
 
745
- let nr = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
745
+ let nu = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
746
746
  var total = (*prepared).probabilities[OPENPBR_LOBE_FUZZ];
747
- for (var hR = 1; hR < nr; hR++) {
748
- total += (*prepared).probabilities[hR];
747
+ for (var hQ = 1; hQ < nu; hQ++) {
748
+ total += (*prepared).probabilities[hQ];
749
749
  }
750
750
  if (total <= 1e-8) {
751
- for (var hR = 0; hR < nr; hR++) {
752
- (*prepared).probabilities[hR] = 0.0;
751
+ for (var hQ = 0; hQ < nu; hQ++) {
752
+ (*prepared).probabilities[hQ] = 0.0;
753
753
  }
754
754
  return;
755
755
  }
756
- let og = 1.0 / total;
757
- for (var hR = 0; hR < nr; hR++) {
758
- (*prepared).probabilities[hR] *= og;
756
+ let oj = 1.0 / total;
757
+ for (var hQ = 0; hQ < nu; hQ++) {
758
+ (*prepared).probabilities[hQ] *= oj;
759
759
  }
760
760
  }
761
761
 
@@ -776,51 +776,51 @@ return clamp(f0 + (vec3f(1.0) - f0) / 21.0 - b / 126.0, vec3f(0.0), vec3f(1.0));
776
776
 
777
777
 
778
778
 
779
- fn cC(material: J, au: f32) -> vec3f {
779
+ fn cD(material: J, au: f32) -> vec3f {
780
780
  if (au <= 0.0) { return vec3f(1.0); }
781
- let lr = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
782
- let tl = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(lr, 1e-5)));
783
- return mix(vec3f(1.0), tl, material.coatWeight);
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);
784
784
  }
785
785
 
786
- fn gi(material: J, au: f32) -> f32 {
786
+ fn gj(material: J, au: f32) -> f32 {
787
787
  if (material.coatRoughness <= ROUGHNESS_MIN) {
788
788
  return af(au, 1.0 / material.coatIor);
789
789
  }
790
790
 
791
791
 
792
- return clamp(1.0 - aI(material.coatIor,
792
+ return clamp(1.0 - aJ(material.coatIor,
793
793
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
794
794
  }
795
795
 
796
- fn gV(prepared: ag) -> vec3f {
796
+ fn gW(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 tT = dielectric * material.transmissionWeight;
801
+ let tZ = dielectric * material.transmissionWeight;
802
802
  let fL = bM(prepared.specularEtaTOverEtaI);
803
- let kI = bM(1.0 / prepared.transmissionReflectionIor);
804
- let pw = clamp(opaque * fL + (sss + tT) * kI + material.baseMetalness, 0.0, 1.0);
805
- let ji = mix(1.0, material.specularRoughness, pw);
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);
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, ji);
808
+ let k = mix(ks, kr, jk);
809
809
  let eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
810
810
  + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), fL)
811
- + sss * material.subsurfaceColor + vec3f(tT);
812
- let qH = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
813
- return mix(vec3f(1.0), qH, material.coatWeight * material.coatDarkening);
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);
814
814
  }
815
815
 
816
- fn ds(prepared: ag, kY: f32) -> vec3f {
816
+ fn ds(prepared: ag, lb: f32) -> vec3f {
817
817
  if (prepared.material.coatWeight <= 0.0) { return vec3f(1.0); }
818
818
  if (prepared.material.inside) {
819
819
 
820
- return cC(prepared.material, -kY);
820
+ return cD(prepared.material, -lb);
821
821
  }
822
822
 
823
- return prepared.coatBaseScale * cC(prepared.material, kY);
823
+ return prepared.coatBaseScale * cD(prepared.material, lb);
824
824
  }
825
825
 
826
826
 
@@ -877,15 +877,15 @@ prepared.viewLocal = openpbr_to_local(prepared.basis, bF);
877
877
  ${hasCoatNormals ? /* wgsl */ ` prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bF);` : ''}
878
878
  prepared.diffuseColor = material.baseColor;
879
879
 
880
- let cA = 1.0 - material.baseMetalness;
881
- let dK = cA
880
+ let cB = 1.0 - material.baseMetalness;
881
+ let dK = 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;
885
885
  if (material.inside) { prepared.weights[OPENPBR_LOBE_COAT] = 0.0; }
886
886
  prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
887
- prepared.weights[OPENPBR_LOBE_SPECULAR] = cA;
888
- prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cA
887
+ prepared.weights[OPENPBR_LOBE_SPECULAR] = cB;
888
+ prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cB
889
889
  * material.transmissionWeight;
890
890
  prepared.weights[OPENPBR_LOBE_DIFFUSE] = dK
891
891
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
@@ -950,7 +950,7 @@ material.transmissionWeight
950
950
  ),
951
951
  material.thinWalled
952
952
  );
953
- let hS = material.specularWeight * dT(
953
+ let hR = material.specularWeight * dT(
954
954
  viewCosine,
955
955
  material.baseWeight * material.baseColor,
956
956
  material.specularColor
@@ -960,22 +960,22 @@ af(viewCosine, prepared.transmissionReflectionIor),
960
960
  cS(af(viewCosine, prepared.transmissionReflectionIor)),
961
961
  material.thinWalled
962
962
  );
963
- let gH = bG(
963
+ let gJ = bG(
964
964
  material,
965
965
  viewCosine,
966
966
  prepared.refractionEtaTOverEtaI
967
967
  );
968
- let im = aI(
968
+ let il = aJ(
969
969
  prepared.specularEtaTOverEtaI,
970
970
  prepared.specularAlpha,
971
971
  viewCosine
972
972
  );
973
- let gk = cq(
973
+ let gm = cr(
974
974
  prepared.specularEtaTOverEtaI,
975
975
  prepared.specularAlpha
976
976
  );
977
- prepared.diffuseSpecularEnergyCompensation = im
978
- / max(gk, 1e-12);
977
+ prepared.diffuseSpecularEnergyCompensation = il
978
+ / max(gm, 1e-12);
979
979
 
980
980
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
981
981
  * aw(material.fuzzColor)
@@ -987,24 +987,24 @@ 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 kp = gi(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
991
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kp;
992
- prepared.coatBaseScale = cC(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'})
993
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kp) * gV(prepared);
990
+ let kt = gj(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
991
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kt;
992
+ prepared.coatBaseScale = cD(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'})
993
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kt) * gW(prepared);
994
994
  }
995
995
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
996
- * aw(hS);
996
+ * aw(hR);
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 hI = bP(material.baseWeight * material.baseColor, material.specularColor);
1004
- prepared.metalMsScale = material.specularWeight * hI * hI;
1005
- let pJ = bH(prepared.specularAlpha, viewCosine);
1006
- prepared.metalMsFactor = pJ / max(cu(prepared.specularAlpha), 1e-12);
1007
- let ff = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pJ;
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
1008
  prepared.probabilities[OPENPBR_LOBE_METAL] += ff;
1009
1009
  prepared.metalMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1010
1010
  }
@@ -1012,7 +1012,7 @@ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SP
1012
1012
  * aw(ft);
1013
1013
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1014
1014
  * (1.0 - eL)
1015
- * aw(gH);
1015
+ * aw(gJ);
1016
1016
 
1017
1017
 
1018
1018
 
@@ -1027,14 +1027,14 @@ prepared.dielectricMsProbability = 0.0;
1027
1027
  if (!material.thinWalled && material.transmissionWeight > 0.0 &&
1028
1028
  prepared.specularAlpha >= 0.0016 && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 &&
1029
1029
  abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6) {
1030
- let lq = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1031
- prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * lq;
1032
- prepared.dielectricMsTransmissionScale = gH * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
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]
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 nI = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
- let ff = aw(nI) * prepared.dielectricMsViewLoss;
1036
+ let nL = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1037
+ let ff = aw(nL) * prepared.dielectricMsViewLoss;
1038
1038
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += ff;
1039
1039
  prepared.dielectricMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1040
1040
  }
@@ -1048,17 +1048,17 @@ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_
1048
1048
 
1049
1049
 
1050
1050
  if (material.coatWeight > 0.0 && HAS_THIN_FILM && material.thinFilmWeight > 0.0) {
1051
- let kW = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1052
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * kW);
1053
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * kW);
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);
1054
1054
  }
1055
1055
  if (material.coatWeight > 0.0 && !material.inside) {
1056
- let gm = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1057
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gm;
1058
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gm;
1059
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gm;
1060
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gm;
1061
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gm;
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
1062
  }
1063
1063
  dQ(&prepared);
1064
1064
  return prepared;
@@ -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 kg = af(au, prepared.transmissionReflectionIor);
1073
- if (!reflection) { return kg; }
1074
- let mU = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1075
- let rC = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1076
- return mix(mU, kg, rC);
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);
1077
1077
  }
1078
1078
 
1079
- fn mq(
1079
+ fn mu(
1080
1080
  prepared: ag,
1081
1081
  lightDirection: vec3f,
1082
- gI: i32,
1082
+ gK: i32,
1083
1083
  pdf: ptr<function, f32>
1084
1084
  ) -> vec3f {
1085
1085
  let material = prepared.material;
@@ -1106,62 +1106,62 @@ V = -V;
1106
1106
 
1107
1107
  var response = vec3f(0.0);
1108
1108
  *pdf = 0.0;
1109
- var aH = 0.0;
1110
- let lQ = gI < 0;
1111
- let uz = lQ || gI == OPENPBR_LOBE_FUZZ;
1112
- let sQ = lQ || gI == OPENPBR_LOBE_COAT;
1113
- let rT = lQ || gI == OPENPBR_LOBE_METAL;
1114
- let pT = lQ || gI == OPENPBR_LOBE_SPECULAR;
1115
- let jz = lQ ||
1116
- gI == OPENPBR_LOBE_TRANSMISSION;
1117
- let sV = lQ || gI == OPENPBR_LOBE_DIFFUSE;
1118
- let oI = lQ ||
1119
- gI == OPENPBR_LOBE_SUBSURFACE;
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;
1120
1120
  let bQ = abs(dot(viewLocal, V));
1121
1121
 
1122
1122
 
1123
1123
 
1124
1124
  var dd = V;
1125
- var jg = bQ;
1125
+ var ji = bQ;
1126
1126
  if (!reflection && material.thinWalled) {
1127
1127
  dd = normalize(vec3f(lightLocal.xy, -lightLocal.z) + viewLocal);
1128
1128
  if (dd.z < 0.0) { dd = -dd; }
1129
- jg = abs(dot(viewLocal, dd));
1129
+ ji = abs(dot(viewLocal, dd));
1130
1130
  }
1131
- let lZ =
1132
- (reflection && prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && pT) ||
1133
- (!reflection && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jz);
1134
- let pX = reflection && prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && rT;
1135
- var nj: array<vec3f, 2>;
1136
- if (lZ) {
1137
- nj[0] = vec3f(cR(prepared, jg, reflection));
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));
1138
1138
  }
1139
- if (pX) {
1140
- nj[1] = dT(bQ, material.baseWeight * material.baseColor, material.specularColor);
1139
+ if (qb) {
1140
+ np[1] = dT(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 kH = 0u; kH < (rtUniform.loopUnrollGuard >> 1u); kH++) {
1146
- if (!select(lZ, pX, kH == 1u)) { continue; }
1147
- var wb = vec3f(0.0);
1148
- let L = select(jg, bQ, kH == 1u);
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);
1149
1149
  for (var channel = 0u; channel + 1u < rtUniform.loopUnrollGuard; channel++) {
1150
1150
  var ior = vec2f(prepared.thinFilmBaseIor, 0.0);
1151
- if (kH == 1u) {
1151
+ if (kK == 1u) {
1152
1152
  ior = cQ(material.baseWeight * material.baseColor[channel], material.specularColor[channel]);
1153
1153
  }
1154
- wb[channel] = ar(L,
1154
+ wi[channel] = ar(L,
1155
1155
  wavelengths[channel], material.thinFilmThickness, prepared.thinFilmExteriorIor, material.thinFilmIor, ior);
1156
1156
  }
1157
- nj[kH] = mix(nj[kH], wb,
1157
+ np[kK] = mix(np[kK], wi,
1158
1158
  bN(material.thinFilmThickness, material.thinFilmWeight));
1159
1159
  }
1160
1160
  }
1161
- let ei = nj[0];
1161
+ let ei = np[0];
1162
1162
  let diffuseSpecularEnergyCompensation =
1163
1163
  prepared.diffuseSpecularEnergyCompensation
1164
- * aI(
1164
+ * aJ(
1165
1165
  prepared.specularEtaTOverEtaI,
1166
1166
  prepared.specularAlpha,
1167
1167
  abs(lightLocal.z)
@@ -1172,75 +1172,75 @@ ${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 && sV) {
1176
- response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cD(
1175
+ if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0 && ta) {
1176
+ response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cE(
1177
1177
  material,
1178
1178
  prepared.diffuseColor,
1179
1179
  viewLocal,
1180
1180
  lightLocal,
1181
1181
  diffuseSpecularEnergyCompensation,
1182
- &aH
1182
+ &aI
1183
1183
  );
1184
- *pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aH;
1184
+ *pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aI;
1185
1185
  }
1186
1186
 
1187
1187
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && material.thinWalled &&
1188
- oI) {
1189
- response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cD(
1188
+ oL) {
1189
+ response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cE(
1190
1190
  material,
1191
1191
  material.subsurfaceColor,
1192
1192
  viewLocal,
1193
1193
  lightLocal,
1194
1194
  diffuseSpecularEnergyCompensation,
1195
- &aH
1195
+ &aI
1196
1196
  );
1197
- *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aH;
1197
+ *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aI;
1198
1198
  }
1199
1199
 
1200
- if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && pT) {
1201
- var cr = ei;
1200
+ if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0 && pX) {
1201
+ var ct = ei;
1202
1202
  if (material.thinWalled) {
1203
- cr = aP(
1204
- cr,
1203
+ ct = aP(
1204
+ ct,
1205
1205
  material.transmissionWeight
1206
1206
  );
1207
1207
  }
1208
- let cK = material.specularColor * cr;
1208
+ let cK = material.specularColor * ct;
1209
1209
  response += prepared.weights[OPENPBR_LOBE_SPECULAR] * am(
1210
1210
  material,
1211
1211
  viewLocal,
1212
1212
  lightLocal,
1213
1213
  V,
1214
1214
  cK,
1215
- &aH
1215
+ &aI
1216
1216
  );
1217
- *pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aH;
1217
+ *pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aI;
1218
1218
  }
1219
1219
 
1220
- if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && rT) {
1221
- let cK = material.specularWeight * nj[1];
1220
+ if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0 && rY) {
1221
+ let cK = material.specularWeight * np[1];
1222
1222
  response += prepared.weights[OPENPBR_LOBE_METAL] * am(
1223
1223
  material,
1224
1224
  viewLocal,
1225
1225
  lightLocal,
1226
1226
  V,
1227
1227
  cK,
1228
- &aH
1228
+ &aI
1229
1229
  );
1230
1230
  if (prepared.metalMsFactor > 0.0) {
1231
1231
  let dW = min(prepared.metalMsFactor * bH(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1232
1232
  response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * dW * INVPI;
1233
- aH = mix(aH, 0.5 * INVPI, prepared.metalMsProbability);
1233
+ aI = mix(aI, 0.5 * INVPI, prepared.metalMsProbability);
1234
1234
  }
1235
- *pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aH;
1235
+ *pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aI;
1236
1236
  }
1237
1237
  }
1238
1238
  else {
1239
1239
  let cK = ei;
1240
- if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jz) {
1240
+ if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 && jB) {
1241
1241
  if (material.thinWalled) {
1242
- let kM = vec3f(lightLocal.xy, -lightLocal.z);
1243
- let gf = aP(
1242
+ let kP = vec3f(lightLocal.xy, -lightLocal.z);
1243
+ let gg = aP(
1244
1244
  ei,
1245
1245
  1.0
1246
1246
  );
@@ -1253,10 +1253,10 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1253
1253
  * am(
1254
1254
  material,
1255
1255
  viewLocal,
1256
- kM,
1256
+ kP,
1257
1257
  dd,
1258
- tint * (vec3f(1.0) - gf),
1259
- &aH
1258
+ tint * (vec3f(1.0) - gg),
1259
+ &aI
1260
1260
  );
1261
1261
  }
1262
1262
  else {
@@ -1269,54 +1269,54 @@ viewLocal,
1269
1269
  lightLocal,
1270
1270
  V,
1271
1271
  cK,
1272
- &aH
1272
+ &aI
1273
1273
  );
1274
1274
  }
1275
1275
  if (prepared.dielectricMsProbability > 0.0) {
1276
- aH *= 1.0 - prepared.dielectricMsProbability;
1276
+ aI *= 1.0 - prepared.dielectricMsProbability;
1277
1277
  }
1278
- *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aH;
1278
+ *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aI;
1279
1279
  }
1280
- if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && oI) {
1280
+ if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && oL) {
1281
1281
  if (material.thinWalled) {
1282
- let nT = vec3f(lightLocal.xy, -lightLocal.z);
1282
+ let nW = vec3f(lightLocal.xy, -lightLocal.z);
1283
1283
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1284
- * cD(
1284
+ * cE(
1285
1285
  material,
1286
1286
  material.subsurfaceColor,
1287
1287
  viewLocal,
1288
- nT,
1288
+ nW,
1289
1289
  diffuseSpecularEnergyCompensation,
1290
- &aH
1290
+ &aI
1291
1291
  );
1292
- aH *= 0.5;
1292
+ aI *= 0.5;
1293
1293
  }
1294
1294
  else {
1295
1295
  response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dL(
1296
1296
  material,
1297
1297
  viewLocal,
1298
1298
  lightLocal,
1299
- &aH
1299
+ &aI
1300
1300
  );
1301
1301
  }
1302
- *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aH;
1302
+ *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aI;
1303
1303
  }
1304
1304
  }
1305
1305
 
1306
1306
 
1307
1307
 
1308
1308
 
1309
- if (prepared.dielectricMsProbability > 0.0 && jz) {
1309
+ if (prepared.dielectricMsProbability > 0.0 && jB) {
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 iU = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1314
- let td = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1313
+ let iV = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1314
+ let tj = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1315
1315
  / max(cO(ior, prepared.specularAlpha), 1e-12);
1316
- let dW = min(td * iU, 1.0 / au);
1316
+ let dW = min(tj * iV, 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 * iU * 0.5 * INVPI;
1319
+ *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iV * 0.5 * INVPI;
1320
1320
  }
1321
1321
  }
1322
1322
 
@@ -1332,78 +1332,78 @@ if (independentCoat) { response *= abs(lightLocal.z); }
1332
1332
  ${hasAnisotropyDirections ? /* wgsl */ `
1333
1333
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1334
1334
  var dH = viewLocal;
1335
- var kt = lightLocal;
1336
- var gq = V;
1337
- var jD = bQ;
1335
+ var kv = lightLocal;
1336
+ var gr = V;
1337
+ var jF = bQ;
1338
1338
  if (prepared.directionFrames) {
1339
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
- kt = openpbr_to_local(prepared.coatBasis, lightDirection);
1341
- gq = normalize(kt + dH);
1342
- if (gq.z < 0.0) { gq = -gq; }
1343
- jD = abs(dot(dH, gq));
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));
1344
1344
  }
1345
1345
 
1346
- let kU = vec3f(af(
1347
- jD,
1346
+ let kX = vec3f(af(
1347
+ jF,
1348
1348
  1.0 / material.coatIor
1349
1349
  ));
1350
1350
  var dG = material;
1351
- let jp = aJ(material.coatRoughness, material.coatAnisotropy);
1352
- dG.alphaX = jp.x;
1353
- dG.alphaY = jp.y;
1354
- if (sQ) {
1351
+ let jr = aK(material.coatRoughness, material.coatAnisotropy);
1352
+ dG.alphaX = jr.x;
1353
+ dG.alphaY = jr.y;
1354
+ if (sV) {
1355
1355
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * am(
1356
1356
  dG,
1357
1357
  dH,
1358
- kt,
1359
- gq,
1360
- kU,
1361
- &aH
1358
+ kv,
1359
+ gr,
1360
+ kX,
1361
+ &aI
1362
1362
  );
1363
- *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aH;
1363
+ *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
1364
1364
  }
1365
1365
  }
1366
1366
  ` : /* wgsl */ `
1367
1367
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1368
- let kU = vec3f(af(
1368
+ let kX = vec3f(af(
1369
1369
  bQ,
1370
1370
  1.0 / material.coatIor
1371
1371
  ));
1372
1372
  var dG = material;
1373
- let jp = aJ(material.coatRoughness, material.coatAnisotropy);
1374
- dG.alphaX = jp.x;
1375
- dG.alphaY = jp.y;
1376
- if (sQ) {
1373
+ let jr = aK(material.coatRoughness, material.coatAnisotropy);
1374
+ dG.alphaX = jr.x;
1375
+ dG.alphaY = jr.y;
1376
+ if (sV) {
1377
1377
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * am(
1378
1378
  dG,
1379
1379
  viewLocal,
1380
1380
  lightLocal,
1381
1381
  V,
1382
- kU,
1383
- &aH
1382
+ kX,
1383
+ &aI
1384
1384
  );
1385
- *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aH;
1385
+ *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
1386
1386
  }
1387
1387
  }
1388
1388
  `}
1389
1389
 
1390
1390
  if (${hasCoatNormals ? 'select(reflection, geometricReflection, independentCoat)' : 'reflection'} && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1391
- let qn = aO(
1391
+ let qr = 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] * qn)
1397
+ vec3f(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qr)
1398
1398
  );
1399
- if (uz) {
1400
- response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * jP(
1399
+ if (uG) {
1400
+ response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * jR(
1401
1401
  material,
1402
1402
  viewLocal,
1403
1403
  lightLocal,
1404
- &aH
1404
+ &aI
1405
1405
  );
1406
- *pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aH;
1406
+ *pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aI;
1407
1407
  }
1408
1408
  }
1409
1409
 
@@ -1415,14 +1415,14 @@ prepared: ag,
1415
1415
  lightDirection: vec3f,
1416
1416
  pdf: ptr<function, f32>
1417
1417
  ) -> vec3f {
1418
- return mq(prepared, lightDirection, -1, pdf);
1418
+ return mu(prepared, lightDirection, -1, pdf);
1419
1419
  }
1420
1420
 
1421
1421
 
1422
1422
 
1423
1423
 
1424
1424
 
1425
- fn qU(
1425
+ fn qY(
1426
1426
  tangent: vec3f,
1427
1427
  material: J,
1428
1428
  bF: vec3f,
@@ -1443,17 +1443,17 @@ return bI(prepared, lightDirection, pdf);
1443
1443
 
1444
1444
 
1445
1445
 
1446
- fn mV(
1447
- prepared: ag, cl: vec3f,
1446
+ fn mY(
1447
+ prepared: ag, cm: vec3f,
1448
1448
  lightDirection: ptr<function, vec3f>, isTransmissionEvent: ptr<function, bool>,
1449
1449
  aA: ptr<function, f32>, aT: 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
- var cx = cl.x;
1455
- let fp = cl.y;
1456
- let bm = cl.z;
1454
+ var cy = cm.x;
1455
+ let fp = cm.y;
1456
+ let bm = cm.z;
1457
1457
  *isTransmissionEvent = false;
1458
1458
  *aA = 1.0;
1459
1459
  *aT = false;
@@ -1463,9 +1463,9 @@ let bm = cl.z;
1463
1463
 
1464
1464
  var cdf: array<f32, OPENPBR_LOBE_COUNT>;
1465
1465
  cdf[OPENPBR_LOBE_FUZZ] = prepared.probabilities[OPENPBR_LOBE_FUZZ];
1466
- let nr = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
1467
- for (var hR = 1; hR < nr; hR++) {
1468
- cdf[hR] = cdf[hR - 1] + prepared.probabilities[hR];
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];
1469
1469
  }
1470
1470
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
1471
1471
  return false;
@@ -1475,19 +1475,19 @@ 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 pv = bm < cdf[OPENPBR_LOBE_FUZZ];
1478
+ let pI = bm < cdf[OPENPBR_LOBE_FUZZ];
1479
1479
  *aA = select(
1480
1480
  1.0,
1481
1481
  material.fuzzRoughness,
1482
- pv
1482
+ pI
1483
1483
  );
1484
- *bE = !pv;
1484
+ *bE = !pI;
1485
1485
  *aR = select(
1486
1486
  u32(OPENPBR_LOBE_DIFFUSE),
1487
1487
  u32(OPENPBR_LOBE_FUZZ),
1488
- pv
1488
+ pI
1489
1489
  );
1490
- lightLocal = bi(vec2f(cx, fp));
1490
+ lightLocal = bi(vec2f(cy, fp));
1491
1491
  }
1492
1492
  ${hasAnisotropyDirections ? /* wgsl */ `
1493
1493
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
@@ -1499,8 +1499,8 @@ if (prepared.directionFrames) { dH = ${hasCoatNormals ? 'select(openpbr_to_local
1499
1499
  var V = aQ(
1500
1500
  dH,
1501
1501
 
1502
- aJ(material.coatRoughness, material.coatAnisotropy),
1503
- vec2f(cx, fp)
1502
+ aK(material.coatRoughness, material.coatAnisotropy),
1503
+ vec2f(cy, fp)
1504
1504
  );
1505
1505
  if (V.z < 0.0) {
1506
1506
  V = -V;
@@ -1523,8 +1523,8 @@ else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1523
1523
  var V = aQ(
1524
1524
  viewLocal,
1525
1525
 
1526
- aJ(material.coatRoughness, material.coatAnisotropy),
1527
- vec2f(cx, fp)
1526
+ aK(material.coatRoughness, material.coatAnisotropy),
1527
+ vec2f(cy, fp)
1528
1528
  );
1529
1529
  if (V.z < 0.0) {
1530
1530
  V = -V;
@@ -1540,10 +1540,10 @@ u32(OPENPBR_LOBE_SPECULAR),
1540
1540
  u32(OPENPBR_LOBE_METAL),
1541
1541
  bm < cdf[OPENPBR_LOBE_METAL]
1542
1542
  );
1543
- let tg = bm < cdf[OPENPBR_LOBE_METAL];
1544
- let rw = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1545
- if (tg && rw < prepared.metalMsProbability) {
1546
- let z = cx;
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) {
1546
+ let z = cy;
1547
1547
  let fi = sqrt(max(0.0, 1.0 - z * z));
1548
1548
  let br = TWOPI * fp;
1549
1549
  lightLocal = vec3f(fi * cos(br), fi * sin(br), z);
@@ -1552,7 +1552,7 @@ else {
1552
1552
  var V = aQ(
1553
1553
  viewLocal,
1554
1554
  vec2f(material.alphaX, material.alphaY),
1555
- vec2f(cx, fp)
1555
+ vec2f(cy, fp)
1556
1556
  );
1557
1557
  if (V.z < 0.0) {
1558
1558
  V = -V;
@@ -1567,31 +1567,31 @@ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1567
1567
  *aR = u32(OPENPBR_LOBE_TRANSMISSION);
1568
1568
 
1569
1569
 
1570
- let ue = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1571
- if (prepared.dielectricMsProbability > 0.0 && ue < prepared.dielectricMsProbability) {
1572
- let iU = prepared.dielectricMsReflectionRatio;
1573
- let lM = cx < iU;
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;
1574
1574
  var z: f32;
1575
- if (lM) { z = min(cx / iU, 0.99999994); }
1576
- else { z = -min((cx - iU) / (1.0 - iU), 0.99999994); }
1575
+ if (lP) { z = min(cy / iV, 0.99999994); }
1576
+ else { z = -min((cy - iV) / (1.0 - iV), 0.99999994); }
1577
1577
  let fi = sqrt(max(0.0, 1.0 - z * z));
1578
1578
  let br = TWOPI * fp;
1579
1579
  lightLocal = vec3f(fi * cos(br), fi * sin(br), z);
1580
- *isTransmissionEvent = !lM;
1581
- *aR = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), lM);
1580
+ *isTransmissionEvent = !lP;
1581
+ *aR = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), lP);
1582
1582
  }
1583
1583
  else {
1584
1584
  var V = aQ(
1585
1585
  viewLocal,
1586
1586
  vec2f(material.alphaX, material.alphaY),
1587
- vec2f(cx, fp)
1587
+ vec2f(cy, fp)
1588
1588
  );
1589
1589
  if (V.z < 0.0) {
1590
1590
  V = -V;
1591
1591
  }
1592
1592
  if (material.thinWalled) {
1593
- let hW = normalize(reflect(-viewLocal, V));
1594
- lightLocal = vec3f(hW.xy, -hW.z);
1593
+ let hV = normalize(reflect(-viewLocal, V));
1594
+ lightLocal = vec3f(hV.xy, -hV.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 pH = cx >= 0.5;
1617
- if (pH) {
1618
- cx = (cx - 0.5) * 2.0;
1616
+ let pL = cy >= 0.5;
1617
+ if (pL) {
1618
+ cy = (cy - 0.5) * 2.0;
1619
1619
  }
1620
1620
  else {
1621
- cx *= 2.0;
1621
+ cy *= 2.0;
1622
1622
  }
1623
- lightLocal = bi(vec2f(cx, fp));
1624
- if (pH) {
1623
+ lightLocal = bi(vec2f(cy, fp));
1624
+ if (pL) {
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(cx, fp));
1632
+ lightLocal = bi(vec2f(cy, fp));
1633
1633
  lightLocal.z = -lightLocal.z;
1634
1634
  }
1635
1635
  }
@@ -1650,7 +1650,7 @@ return true;
1650
1650
 
1651
1651
  fn dv(
1652
1652
  prepared: ag,
1653
- cl: vec3f,
1653
+ cm: vec3f,
1654
1654
  lightDirection: ptr<function, vec3f>,
1655
1655
  pdf: ptr<function, f32>,
1656
1656
  isTransmissionEvent: ptr<function, bool>,
@@ -1658,12 +1658,12 @@ aA: ptr<function, f32>,
1658
1658
  aT: ptr<function, bool>,
1659
1659
  bE: ptr<function, bool>,
1660
1660
  aR: ptr<function, u32>,
1661
- la: ptr<function, f32>,
1662
- gR: ptr<function, vec3f>
1661
+ ld: ptr<function, f32>,
1662
+ gT: ptr<function, vec3f>
1663
1663
  ) -> vec3f {
1664
1664
  *pdf = 0.0;
1665
- *la = 0.0;
1666
- *gR = vec3f(0.0);
1665
+ *ld = 0.0;
1666
+ *gT = vec3f(0.0);
1667
1667
 
1668
1668
 
1669
1669
 
@@ -1675,31 +1675,31 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6) {
1675
1675
  prepared.basis,
1676
1676
  -prepared.viewLocal
1677
1677
  );
1678
- let nu = bn(prepared.material)
1678
+ let nB = 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
- *la = 1.0;
1682
- *gR = nu;
1681
+ *ld = 1.0;
1682
+ *gT = nB;
1683
1683
  *isTransmissionEvent = true;
1684
1684
  *aA = 0.0;
1685
1685
  *aT = true;
1686
1686
  *bE = false;
1687
1687
  *aR = u32(OPENPBR_LOBE_TRANSMISSION);
1688
- return nu;
1688
+ return nB;
1689
1689
  }
1690
- if (!mV(prepared, cl, lightDirection,
1690
+ if (!mY(prepared, cm, lightDirection,
1691
1691
  isTransmissionEvent, aA, aT,
1692
1692
  bE, aR)) { return vec3f(0.0); }
1693
1693
  let response = bI(prepared, *lightDirection, pdf);
1694
- *la = *pdf;
1695
- *gR = response;
1694
+ *ld = *pdf;
1695
+ *gT = response;
1696
1696
  return response;
1697
1697
  }
1698
1698
 
1699
- fn su(
1699
+ fn sB(
1700
1700
  tangent: vec3f,
1701
1701
  material: J,
1702
- cl: vec3f,
1702
+ cm: vec3f,
1703
1703
  bF: vec3f,
1704
1704
  normal: vec3f,
1705
1705
  lightDirection: ptr<function, vec3f>,
@@ -1709,7 +1709,7 @@ aA: ptr<function, f32>,
1709
1709
  aT: ptr<function, bool>,
1710
1710
  bE: ptr<function, bool>,
1711
1711
  aR: ptr<function, u32>,
1712
- la: ptr<function, f32>
1712
+ ld: ptr<function, f32>
1713
1713
  ) -> vec3f {
1714
1714
  let prepared = eG(
1715
1715
  tangent,
@@ -1717,10 +1717,10 @@ material,
1717
1717
  bF,
1718
1718
  normal
1719
1719
  );
1720
- var gR = vec3f(0.0);
1720
+ var gT = vec3f(0.0);
1721
1721
  return dv(
1722
1722
  prepared,
1723
- cl,
1723
+ cm,
1724
1724
  lightDirection,
1725
1725
  pdf,
1726
1726
  isTransmissionEvent,
@@ -1728,8 +1728,8 @@ aA,
1728
1728
  aT,
1729
1729
  bE,
1730
1730
  aR,
1731
- la,
1732
- &gR
1731
+ ld,
1732
+ &gT
1733
1733
  );
1734
1734
  }`;
1735
1735
  }