@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 @@ float aY(
77
77
  float bu,
78
78
  float specularWeight
79
79
  ) {
80
- float sE = min(
80
+ float sJ = min(
81
81
  cV(bu) * specularWeight,
82
82
  0.9999
83
83
  );
84
- float sG = sqrt(sE);
85
- float kV = (1.0 + sG) / (1.0 - sG);
86
- return bu < 1.0 ? 1.0 / kV : kV;
84
+ float sL = sqrt(sJ);
85
+ float kY = (1.0 + sL) / (1.0 - sL);
86
+ return bu < 1.0 ? 1.0 / kY : kY;
87
87
  }
88
88
 
89
89
  float af(float cc, float relativeIor) {
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
  float aC(float ior) {
@@ -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
- float F(int rX, int row) {
104
- return texelFetch(openPbrEnergyLut, ivec2(rX, row), 0).r;
103
+ float F(int sc, int row) {
104
+ return texelFetch(openPbrEnergyLut, ivec2(sc, row), 0).r;
105
105
  }
106
106
 
107
- float fY(
107
+ float fZ(
108
108
  float dI,
109
109
  float bR,
110
- float hO
110
+ float hN
111
111
  ) {
112
112
  float bA = clamp(dI, 0.0, 31.0);
113
- float aG = clamp(bR, 0.0, 31.0);
114
- float bt = clamp(hO, 0.0, 31.0);
113
+ float aH = clamp(bR, 0.0, 31.0);
114
+ float bt = clamp(hN, 0.0, 31.0);
115
115
  int dP = int(floor(bA));
116
- int aM = int(floor(aG));
116
+ int aN = int(floor(aH));
117
117
  int cI = int(floor(bt));
118
- int hB = min(dP + 1, 31);
119
- int cn = min(aM + 1, 31);
118
+ int hA = min(dP + 1, 31);
119
+ int cp = min(aN + 1, 31);
120
120
  int eO = min(cI + 1, 31);
121
- float cp = bA - float(dP);
122
- float cy = aG - float(aM);
123
- float ku = bt - float(cI);
124
-
125
- float uk = F(cI, dP * 32 + aM);
126
- float ul = F(eO, dP * 32 + aM);
127
- float um = F(cI, dP * 32 + cn);
128
- float un = F(eO, dP * 32 + cn);
129
- float uo = F(cI, hB * 32 + aM);
130
- float uq = F(eO, hB * 32 + aM);
131
- float ur = F(cI, hB * 32 + cn);
132
- float us = F(eO, hB * 32 + cn);
133
- float v00 = mix(uk, uo, cp);
134
- float v01 = mix(ul, uq, cp);
135
- float v10 = mix(um, ur, cp);
136
- float v11 = mix(un, us, cp);
121
+ float cq = bA - float(dP);
122
+ float cz = aH - float(aN);
123
+ float kw = bt - float(cI);
124
+
125
+ float ur = F(cI, dP * 32 + aN);
126
+ float us = F(eO, dP * 32 + aN);
127
+ float ut = F(cI, dP * 32 + cp);
128
+ float uw = F(eO, dP * 32 + cp);
129
+ float ux = F(cI, hA * 32 + aN);
130
+ float uy = F(eO, hA * 32 + aN);
131
+ float uz = F(cI, hA * 32 + cp);
132
+ float uA = F(eO, hA * 32 + cp);
133
+ float v00 = mix(ur, ux, cq);
134
+ float v01 = mix(us, uy, cq);
135
+ float v10 = mix(ut, uz, cq);
136
+ float 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
- float gx(float dI, float bR) {
144
+ float gz(float dI, float bR) {
145
145
  float bA = clamp(dI, 0.0, 31.0);
146
- float aG = clamp(bR, 0.0, 31.0);
146
+ float aH = clamp(bR, 0.0, 31.0);
147
147
  int dP = int(floor(bA));
148
- int aM = int(floor(aG));
149
- int hB = min(dP + 1, 31);
150
- int cn = min(aM + 1, 31);
151
- float cp = bA - float(dP);
152
- float cy = aG - float(aM);
153
- float v00 = F(aM, 1024 + dP);
154
- float v01 = F(cn, 1024 + dP);
155
- float v10 = F(aM, 1024 + hB);
156
- float v11 = F(cn, 1024 + hB);
148
+ int aN = int(floor(aH));
149
+ int hA = min(dP + 1, 31);
150
+ int cp = min(aN + 1, 31);
151
+ float cq = bA - float(dP);
152
+ float cz = aH - float(aN);
153
+ float v00 = F(aN, 1024 + dP);
154
+ float v01 = F(cp, 1024 + dP);
155
+ float v10 = F(aN, 1024 + hA);
156
+ float 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
  float ef(
167
167
  float dI,
168
168
  float bR,
169
- float hO
169
+ float hN
170
170
  ) {
171
171
  float bA = clamp(dI, 0.0, 31.0);
172
- float aG = clamp(bR, 0.0, 31.0);
173
- float bt = clamp(hO, 0.0, 31.0);
172
+ float aH = clamp(bR, 0.0, 31.0);
173
+ float bt = clamp(hN, 0.0, 31.0);
174
174
  int dP = int(floor(bA));
175
- int aM = int(floor(aG));
175
+ int aN = int(floor(aH));
176
176
  int cI = int(floor(bt));
177
- int hB = min(dP + 1, 31);
178
- int cn = min(aM + 1, 31);
177
+ int hA = min(dP + 1, 31);
178
+ int cp = min(aN + 1, 31);
179
179
  int eO = min(cI + 1, 31);
180
- float cp = bA - float(dP);
181
- float cy = aG - float(aM);
182
- float ku = bt - float(cI);
183
-
184
- float uk = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
185
- float ul = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
186
- float um = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
187
- float un = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
188
- float uo = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
189
- float uq = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
190
- float ur = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
191
- float us = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
192
- float v00 = mix(uk, uo, cp);
193
- float v01 = mix(ul, uq, cp);
194
- float v10 = mix(um, ur, cp);
195
- float v11 = mix(un, us, cp);
180
+ float cq = bA - float(dP);
181
+ float cz = aH - float(aN);
182
+ float kw = bt - float(cI);
183
+
184
+ float ur = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aN);
185
+ float us = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aN);
186
+ float ut = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cp);
187
+ float uw = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cp);
188
+ float ux = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + aN);
189
+ float uy = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + aN);
190
+ float uz = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + cp);
191
+ float uA = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hA * 32 + cp);
192
+ float v00 = mix(ur, ux, cq);
193
+ float v01 = mix(us, uy, cq);
194
+ float v10 = mix(ut, uz, cq);
195
+ float 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
  float ee(float dI, float bR) {
204
204
  float bA = clamp(dI, 0.0, 31.0);
205
- float aG = clamp(bR, 0.0, 31.0);
205
+ float aH = clamp(bR, 0.0, 31.0);
206
206
  int dP = int(floor(bA));
207
- int aM = int(floor(aG));
208
- int hB = min(dP + 1, 31);
209
- int cn = min(aM + 1, 31);
210
- float cp = bA - float(dP);
211
- float cy = aG - float(aM);
212
- float v00 = F(aM, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
213
- float v01 = F(cn, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
214
- float v10 = F(aM, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
215
- float v11 = F(cn, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
207
+ int aN = int(floor(aH));
208
+ int hA = min(dP + 1, 31);
209
+ int cp = min(aN + 1, 31);
210
+ float cq = bA - float(dP);
211
+ float cz = aH - float(aN);
212
+ float v00 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
213
+ float v01 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
214
+ float v10 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hA);
215
+ float 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
  float eF(float dI, float bR) {
224
224
  float bA = clamp(dI, 0.0, 31.0);
225
- float aG = clamp(bR, 0.0, 31.0);
225
+ float aH = clamp(bR, 0.0, 31.0);
226
226
  int dP = int(floor(bA));
227
- int aM = int(floor(aG));
228
- int hB = min(dP + 1, 31);
229
- int cn = min(aM + 1, 31);
230
- float cp = bA - float(dP);
231
- float cy = aG - float(aM);
232
- float v00 = F(aM, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
233
- float v01 = F(cn, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
234
- float v10 = F(aM, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
235
- float v11 = F(cn, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
227
+ int aN = int(floor(aH));
228
+ int hA = min(dP + 1, 31);
229
+ int cp = min(aN + 1, 31);
230
+ float cq = bA - float(dP);
231
+ float cz = aH - float(aN);
232
+ float v00 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
233
+ float v01 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
234
+ float v10 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hA);
235
+ float 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
 
@@ -252,19 +252,19 @@ return eF(aC(ior), sqrt(alpha) * 31.0);
252
252
 
253
253
 
254
254
  float bH(float alpha, float au) {
255
- float ia = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
255
+ float hZ = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
256
  float bt = clamp(au * 31.0, 0.0, 31.0);
257
- int r0 = int(floor(ia));
257
+ int r0 = int(floor(hZ));
258
258
  int c0 = int(floor(bt));
259
259
  int r1 = min(r0 + 1, 31);
260
260
  int c1 = min(c0 + 1, 31);
261
261
  return mix(
262
262
  mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bt)),
263
263
  mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bt)),
264
- fract(ia));
264
+ fract(hZ));
265
265
  }
266
266
 
267
- float cu(float alpha) {
267
+ float cv(float alpha) {
268
268
  float index = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
269
269
  int i0 = int(floor(index));
270
270
  return mix(F(i0, ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}),
@@ -273,19 +273,19 @@ F(min(i0 + 1, 31), ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}), fract(index));
273
273
 
274
274
  float aX(float value, float ior) {
275
275
  if (ior > 2.5 || ior < 0.4) {
276
- float tI = cV(2.5);
277
- float progress = (cV(ior) - tI) / (1.0 - tI);
276
+ float tN = cV(2.5);
277
+ float progress = (cV(ior) - tN) / (1.0 - tN);
278
278
  return (1.0 - progress) * value;
279
279
  }
280
280
  return value;
281
281
  }
282
282
 
283
- float aI(
283
+ float aJ(
284
284
  float ior,
285
285
  float alpha,
286
286
  float au
287
287
  ) {
288
- float value = fY(
288
+ float value = fZ(
289
289
  aC(ior),
290
290
  sqrt(alpha) * 31.0,
291
291
  au * 31.0
@@ -293,8 +293,8 @@ au * 31.0
293
293
  return aX(value, ior);
294
294
  }
295
295
 
296
- float cq(float ior, float alpha) {
297
- float value = gx(
296
+ float cr(float ior, float alpha) {
297
+ float value = gz(
298
298
  aC(ior),
299
299
  sqrt(alpha) * 31.0
300
300
  );
@@ -327,7 +327,7 @@ basis.tangent = vec3(0.0);
327
327
  basis.tangent = aU;
328
328
  #endif
329
329
  if (dot(basis.tangent, basis.tangent) < 0.001 || anisotropy <= 0.0) {
330
- aK(normal, basis.tangent, basis.bitangent);
330
+ aL(normal, basis.tangent, basis.bitangent);
331
331
  }
332
332
  else {
333
333
  basis.bitangent = normalize(cross(normal, basis.tangent));
@@ -336,7 +336,7 @@ basis.tangent = normalize(cross(basis.bitangent, normal));
336
336
  return basis;
337
337
  }
338
338
 
339
- float jR(
339
+ float jT(
340
340
  float av,
341
341
  float ak,
342
342
  float L,
@@ -346,7 +346,7 @@ return (av * L - ak * S)
346
346
  / (av * L + ak * S);
347
347
  }
348
348
 
349
- float jQ(
349
+ float jS(
350
350
  float av,
351
351
  float ak,
352
352
  float L,
@@ -356,7 +356,7 @@ return (ak * L - av * S)
356
356
  / (av * S + ak * L);
357
357
  }
358
358
 
359
- float gX(
359
+ float gY(
360
360
  float av,
361
361
  float ak,
362
362
  float L,
@@ -366,7 +366,7 @@ return 2.0 * av * L
366
366
  / (av * L + ak * S);
367
367
  }
368
368
 
369
- float gW(
369
+ float gX(
370
370
  float av,
371
371
  float ak,
372
372
  float L,
@@ -388,23 +388,23 @@ return vec2(
388
388
  );
389
389
  }
390
390
 
391
- vec2 hU(vec2 value) {
392
- float ns = length(value);
393
- float sC = sqrt(max(0.0, 0.5 * (ns + value.x)));
394
- float fc = sqrt(max(0.0, 0.5 * (ns - value.x)));
395
- return vec2(sC, value.y >= 0.0 ? fc : -fc);
391
+ vec2 hT(vec2 value) {
392
+ float nv = length(value);
393
+ float sH = sqrt(max(0.0, 0.5 * (nv + value.x)));
394
+ float fc = sqrt(max(0.0, 0.5 * (nv - value.x)));
395
+ return vec2(sH, value.y >= 0.0 ? fc : -fc);
396
396
  }
397
397
 
398
398
  vec2 bX(
399
399
  float L,
400
400
  float av,
401
401
  vec2 ak,
402
- bool qu
402
+ bool qy
403
403
  ) {
404
- float ob = sqrt(max(0.0, 1.0 - L * L));
405
- vec2 sj = aZ(vec2(av, 0.0), ak);
406
- vec2 hw = sj * ob;
407
- vec2 S = hU(
404
+ float oe = sqrt(max(0.0, 1.0 - L * L));
405
+ vec2 sp = aZ(vec2(av, 0.0), ak);
406
+ vec2 hw = sp * oe;
407
+ vec2 S = hT(
408
408
  vec2(1.0, 0.0) - aV(hw, hw)
409
409
  );
410
410
  if (aV(ak, S).y < 0.0) {
@@ -413,7 +413,7 @@ S = -S;
413
413
 
414
414
  vec2 fH = vec2(av * L, 0.0);
415
415
  vec2 eA = aV(ak, S);
416
- if (qu) {
416
+ if (qy) {
417
417
  vec2 ci = ak * L;
418
418
  vec2 ce = S * av;
419
419
  return aZ(
@@ -429,92 +429,92 @@ fH + eA
429
429
 
430
430
  float eq(
431
431
  float iD,
432
- float gG,
433
- float ov,
434
- float mA,
435
- vec2 jW,
432
+ float gI,
433
+ float oy,
434
+ float mD,
435
+ vec2 jY,
436
436
  float phase
437
437
  ) {
438
- vec2 mX = vec2(cos(phase), sin(phase));
439
- vec2 hX = aV(jW, mX);
440
- vec2 kC = hX * (gG * mA);
441
- vec2 ap = vec2(1.0, 0.0) - hX * ov;
438
+ vec2 nd = vec2(cos(phase), sin(phase));
439
+ vec2 hW = aV(jY, nd);
440
+ vec2 kF = hW * (gI * mD);
441
+ vec2 ap = vec2(1.0, 0.0) - hW * oy;
442
442
  vec2 hv = vec2(iD, 0.0)
443
- + aZ(kC, ap);
443
+ + aZ(kF, ap);
444
444
  return dot(hv, hv);
445
445
  }
446
446
 
447
447
  float ar(
448
448
  float L,
449
449
  float wavelength,
450
- float cm,
451
- float aL,
450
+ float cn,
451
+ float aM,
452
452
  float ck,
453
453
  vec2 eu
454
454
  ) {
455
455
  L = clamp(abs(L), 1e-5, 1.0);
456
- float hq = pow(aL / ck, 2.0)
456
+ float hq = pow(aM / ck, 2.0)
457
457
  * (1.0 - L * L);
458
458
  if (hq >= 1.0) {
459
459
  return 1.0;
460
460
  }
461
461
  float cU = sqrt(1.0 - hq);
462
- float kP = jR(
463
- aL, ck, L, cU
462
+ float kS = jT(
463
+ aM, ck, L, cU
464
464
  );
465
- float kO = jQ(
466
- aL, ck, L, cU
465
+ float kR = jS(
466
+ aM, ck, L, cU
467
467
  );
468
- float jd = gX(
469
- aL, ck, L, cU
468
+ float jf = gY(
469
+ aM, ck, L, cU
470
470
  );
471
- float jc = gW(
472
- aL, ck, L, cU
471
+ float je = gX(
472
+ aM, ck, L, cU
473
473
  );
474
- float gj = ck * cU
475
- / max(aL * L, 1e-9);
476
- vec2 sP = bX(
474
+ float gk = ck * cU
475
+ / max(aM * L, 1e-9);
476
+ vec2 sU = bX(
477
477
  cU, ck, eu, false
478
478
  );
479
- vec2 sO = bX(
479
+ vec2 sT = bX(
480
480
  cU, ck, eu, true
481
481
  );
482
- float phase = 2.0 * PI * (2.0 * ck * cm * cU) / wavelength;
483
- float tu = eq(
484
- kP,
485
- jd,
486
- -kP,
487
- jd * gj,
488
- sP,
482
+ float phase = 2.0 * PI * (2.0 * ck * cn * cU) / wavelength;
483
+ float tC = eq(
484
+ kS,
485
+ jf,
486
+ -kS,
487
+ jf * gk,
488
+ sU,
489
489
  phase
490
490
  );
491
- float tr = eq(
492
- kO,
493
- jc,
494
- -kO,
495
- jc * gj,
496
- sO,
491
+ float tB = eq(
492
+ kR,
493
+ je,
494
+ -kR,
495
+ je * gk,
496
+ sT,
497
497
  phase
498
498
  );
499
- return clamp(0.5 * (tu + tr), 0.0, 1.0);
499
+ return clamp(0.5 * (tC + tB), 0.0, 1.0);
500
500
  }
501
501
 
502
- vec3 hD(
502
+ vec3 hC(
503
503
  float L,
504
- float cm,
504
+ float cn,
505
505
  float ck,
506
506
  float eu,
507
- float aL
507
+ float aM
508
508
  ) {
509
509
  return vec3(
510
510
  ar(
511
- L, 620.0, cm, aL, ck, vec2(eu, 0.0)
511
+ L, 620.0, cn, aM, ck, vec2(eu, 0.0)
512
512
  ),
513
513
  ar(
514
- L, 540.0, cm, aL, ck, vec2(eu, 0.0)
514
+ L, 540.0, cn, aM, ck, vec2(eu, 0.0)
515
515
  ),
516
516
  ar(
517
- L, 450.0, cm, aL, ck, vec2(eu, 0.0)
517
+ L, 450.0, cn, aM, ck, vec2(eu, 0.0)
518
518
  )
519
519
  );
520
520
  }
@@ -522,119 +522,119 @@ L, 450.0, cm, aL, ck, vec2(eu, 0.0)
522
522
 
523
523
 
524
524
  vec3 dT(float au, vec3 f0, vec3 tint) {
525
- vec3 qW = mix(f0, vec3(1.0), aE(au));
526
- if (all(equal(tint, vec3(1.0)))) { return qW; }
525
+ vec3 ra = mix(f0, vec3(1.0), aE(au));
526
+ if (all(equal(tint, vec3(1.0)))) { return ra; }
527
527
  float dj = 1.0 / 7.0;
528
- float lW = 1.0 - dj;
528
+ float lZ = 1.0 - dj;
529
529
  vec3 fF = mix(f0, vec3(1.0), aE(dj));
530
530
  float dg = 1.0 - au;
531
- float qh = au * aE(au) * dg
532
- / (dj * pow(lW, 6.0));
533
- return clamp(qW - qh * (fF - tint * fF), vec3(0.0), vec3(1.0));
531
+ float ql = au * aE(au) * dg
532
+ / (dj * pow(lZ, 6.0));
533
+ return clamp(ra - ql * (fF - tint * fF), vec3(0.0), vec3(1.0));
534
534
  }
535
535
 
536
- vec2 cQ(float f0, float tb) {
536
+ vec2 cQ(float f0, float tg) {
537
537
  float dM = clamp(f0, 0.0, 0.99);
538
- float gF = sqrt(dM);
539
- float qt = (1.0 - dM) / (1.0 + dM);
540
- float qr = (1.0 + gF) / max(1.0 - gF, 1e-9);
541
- float ior = mix(qr, qt, clamp(tb, 0.0, 1.0));
542
- float jG = (
538
+ float gH = sqrt(dM);
539
+ float qx = (1.0 - dM) / (1.0 + dM);
540
+ float qv = (1.0 + gH) / max(1.0 - gH, 1e-9);
541
+ float ior = mix(qv, qx, clamp(tg, 0.0, 1.0));
542
+ float jI = (
543
543
  (ior + 1.0) * (ior + 1.0) * dM
544
544
  - (ior - 1.0) * (ior - 1.0)
545
545
  ) / max(1.0 - dM, 1e-9);
546
- return vec2(ior, sqrt(max(jG, 0.0)));
546
+ return vec2(ior, sqrt(max(jI, 0.0)));
547
547
  }
548
548
 
549
- vec3 iS(
549
+ vec3 iT(
550
550
  float L,
551
- float cm,
551
+ float cn,
552
552
  float ck,
553
- vec3 qS,
554
- vec3 jN,
555
- float aL
553
+ vec3 qW,
554
+ vec3 jP,
555
+ float aM
556
556
  ) {
557
557
  return vec3(
558
558
  ar(
559
559
  L,
560
560
  620.0,
561
- cm,
562
- aL,
561
+ cn,
562
+ aM,
563
563
  ck,
564
- cQ(qS.r, jN.r)
564
+ cQ(qW.r, jP.r)
565
565
  ),
566
566
  ar(
567
567
  L,
568
568
  540.0,
569
- cm,
570
- aL,
569
+ cn,
570
+ aM,
571
571
  ck,
572
- cQ(qS.g, jN.g)
572
+ cQ(qW.g, jP.g)
573
573
  ),
574
574
  ar(
575
575
  L,
576
576
  450.0,
577
- cm,
578
- aL,
577
+ cn,
578
+ aM,
579
579
  ck,
580
- cQ(qS.b, jN.b)
580
+ cQ(qW.b, jP.b)
581
581
  )
582
582
  );
583
583
  }
584
584
 
585
- float bN(float cm, float weight) {
586
- return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cm);
585
+ float bN(float cn, float weight) {
586
+ return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cn);
587
587
  }
588
588
 
589
589
  vec3 bW(
590
590
  vec3 ei,
591
591
  float L,
592
- float cm,
592
+ float cn,
593
593
  float ck,
594
594
  float eu,
595
595
  float weight,
596
- float aL
596
+ float aM
597
597
  ) {
598
- vec3 pd = hD(
598
+ vec3 ph = hC(
599
599
  L,
600
- cm,
600
+ cn,
601
601
  ck,
602
602
  eu,
603
- aL
603
+ aM
604
604
  );
605
605
  return mix(
606
606
  ei,
607
- pd,
608
- bN(cm, weight)
607
+ ph,
608
+ bN(cn, weight)
609
609
  );
610
610
  }
611
611
 
612
- vec3 lc(
612
+ vec3 lf(
613
613
  vec3 ei,
614
614
  float L,
615
- float cm,
615
+ float cn,
616
616
  float ck,
617
- vec3 qS,
618
- vec3 jN,
617
+ vec3 qW,
618
+ vec3 jP,
619
619
  float weight,
620
- float aL
620
+ float aM
621
621
  ) {
622
- vec3 pd = iS(
622
+ vec3 ph = iT(
623
623
  L,
624
- cm,
624
+ cn,
625
625
  ck,
626
- qS,
627
- jN,
628
- aL
626
+ qW,
627
+ jP,
628
+ aM
629
629
  );
630
630
  return mix(
631
631
  ei,
632
- pd,
633
- bN(cm, weight)
632
+ ph,
633
+ bN(cn, weight)
634
634
  );
635
635
  }
636
636
 
637
- vec3 cD(
637
+ vec3 cE(
638
638
  J material,
639
639
  vec3 color,
640
640
  vec3 viewLocal,
@@ -648,47 +648,47 @@ return vec3(0.0);
648
648
  }
649
649
 
650
650
  float roughness = material.diffuseRoughness;
651
- float gQ = 0.5 - 2.0 / (3.0 * PI);
652
- float nU = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
- float om = lightLocal.z;
654
- float mn = viewLocal.z;
655
- float hM = dot(lightLocal, viewLocal) - om * mn;
656
- float gN = hM > 0.0
657
- ? hM / max(max(om, mn), 1e-7)
658
- : hM;
659
- float ih = 1.0 / (1.0 + gQ * roughness);
660
- vec3 nf = color * INVPI * ih
661
- * (1.0 + roughness * gN);
662
-
663
- float dc = 1.0 - om;
664
- float cP = 1.0 - mn;
665
- float oc = dc * (
651
+ float gS = 0.5 - 2.0 / (3.0 * PI);
652
+ float nX = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
+ float os = lightLocal.z;
654
+ float mq = viewLocal.z;
655
+ float hL = dot(lightLocal, viewLocal) - os * mq;
656
+ float gP = hL > 0.0
657
+ ? hL / max(max(os, mq), 1e-7)
658
+ : hL;
659
+ float ig = 1.0 / (1.0 + gS * roughness);
660
+ vec3 ni = color * INVPI * ig
661
+ * (1.0 + roughness * gP);
662
+
663
+ float dc = 1.0 - os;
664
+ float cP = 1.0 - mq;
665
+ float og = dc * (
666
666
  0.0571085289 + dc * (
667
667
  0.491881867 + dc * (
668
668
  -0.332181442 + dc * 0.0714429953
669
669
  )
670
670
  )
671
671
  );
672
- float mW = cP * (
672
+ float mZ = cP * (
673
673
  0.0571085289 + cP * (
674
674
  0.491881867 + cP * (
675
675
  -0.332181442 + cP * 0.0714429953
676
676
  )
677
677
  )
678
678
  );
679
- float pi = (1.0 + roughness * oc)
680
- / (1.0 + gQ * roughness);
681
- float oq = (1.0 + roughness * mW)
682
- / (1.0 + gQ * roughness);
683
- float fQ = ih * (1.0 + nU * roughness);
684
- vec3 hC = color * color * fQ
679
+ float pm = (1.0 + roughness * og)
680
+ / (1.0 + gS * roughness);
681
+ float ou = (1.0 + roughness * mZ)
682
+ / (1.0 + gS * roughness);
683
+ float fQ = ig * (1.0 + nX * roughness);
684
+ vec3 hB = color * color * fQ
685
685
  / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fQ));
686
- vec3 lp = hC * INVPI
687
- * max(1e-7, 1.0 - oq)
688
- * max(1e-7, 1.0 - pi)
686
+ vec3 ls = hB * INVPI
687
+ * max(1e-7, 1.0 - ou)
688
+ * max(1e-7, 1.0 - pm)
689
689
  / max(1e-7, 1.0 - fQ);
690
690
  pdf = lightLocal.z * INVPI;
691
- return (nf + lp) * fo;
691
+ return (ni + ls) * fo;
692
692
  }
693
693
 
694
694
  float aO(float viewCosine, float roughness) {
@@ -705,7 +705,7 @@ float gaussian = exp(-0.5 * pow((x - mean) / scale, 2.0))
705
705
  return max(gaussian + offset, 0.0);
706
706
  }
707
707
 
708
- vec3 jP(
708
+ vec3 jR(
709
709
  J material,
710
710
  vec3 viewLocal,
711
711
  vec3 lightLocal,
@@ -737,12 +737,12 @@ return vec3(0.0);
737
737
  }
738
738
 
739
739
  vec2 alpha = vec2(material.alphaX, material.alphaY);
740
- float distribution = gE(V, alpha);
741
- float jM = bk(viewLocal, alpha);
742
- float ea = jM
740
+ float distribution = gG(V, alpha);
741
+ float jO = bk(viewLocal, alpha);
742
+ float ea = jO
743
743
  * bk(lightLocal, alpha);
744
744
 
745
- pdf = jM * distribution / (4.0 * max(viewLocal.z, 1e-8));
745
+ pdf = jO * distribution / (4.0 * max(viewLocal.z, 1e-8));
746
746
  return cK * distribution * ea
747
747
  / (4.0 * max(lightLocal.z * viewLocal.z, 1e-8));
748
748
  }
@@ -762,27 +762,27 @@ if (lightLocal.z >= 0.0) {
762
762
  return vec3(0.0);
763
763
  }
764
764
 
765
- float kz = dot(lightLocal, V);
765
+ float kC = dot(lightLocal, V);
766
766
  float bQ = dot(viewLocal, V);
767
767
 
768
768
 
769
- if (bQ <= 0.0 || kz >= 0.0) {
769
+ if (bQ <= 0.0 || kC >= 0.0) {
770
770
  return vec3(0.0);
771
771
  }
772
772
  vec2 alpha = vec2(material.alphaX, material.alphaY);
773
- float distribution = gE(V, alpha);
774
- float jM = bk(viewLocal, alpha);
775
- float ea = jM
773
+ float distribution = gG(V, alpha);
774
+ float jO = bk(viewLocal, alpha);
775
+ float ea = jO
776
776
  * bk(lightLocal, alpha);
777
- float ap = kz + bQ * relativeIor;
777
+ float ap = kC + bQ * relativeIor;
778
778
  ap *= ap;
779
- float pn = abs(kz) / max(ap, 1e-8);
780
- float jm = relativeIor * relativeIor;
779
+ float pr = abs(kC) / max(ap, 1e-8);
780
+ float jo = relativeIor * relativeIor;
781
781
 
782
- pdf = jM * max(0.0, bQ) * distribution * pn
782
+ pdf = jO * max(0.0, bQ) * distribution * pr
783
783
  / max(viewLocal.z, 1e-8);
784
784
  return tint * (vec3(1.0) - cK) * distribution * ea
785
- * abs(bQ) * pn * jm
785
+ * abs(bQ) * pr * jo
786
786
  / max(abs(lightLocal.z * viewLocal.z), 1e-8);
787
787
  }
788
788
 
@@ -803,11 +803,11 @@ vec3 aP(
803
803
  vec3 ah,
804
804
  float transmissionWeight
805
805
  ) {
806
- vec3 gf = 2.0 * ah
806
+ vec3 gg = 2.0 * ah
807
807
  / (vec3(1.0) + ah);
808
808
  return mix(
809
809
  ah,
810
- gf,
810
+ gg,
811
811
  clamp(transmissionWeight, 0.0, 1.0)
812
812
  );
813
813
  }
@@ -821,8 +821,8 @@ vec3 tint = bn(material);
821
821
  if (!material.thinWalled) {
822
822
  return tint;
823
823
  }
824
- float iF = max(0.0, 1.0 - L * L);
825
- float dN = iF
824
+ float iG = max(0.0, 1.0 - L * L);
825
+ float dN = iG
826
826
  / max(bu * bu, 1e-9);
827
827
  if (dN >= 1.0) {
828
828
  return vec3(0.0);
@@ -842,28 +842,28 @@ if (viewLocal.z <= 0.0 || lightLocal.z >= 0.0) {
842
842
  return vec3(0.0);
843
843
  }
844
844
  float S = -lightLocal.z;
845
- float nR = ct(
845
+ float nU = cu(
846
846
  viewLocal.z,
847
847
  material.relativeIor
848
848
  );
849
849
  pdf = S * INVPI;
850
- return vec3(1.0 - nR) * INVPI;
850
+ return vec3(1.0 - nU) * INVPI;
851
851
  }
852
852
 
853
853
  void dQ(inout ag prepared) {
854
854
  float total = prepared.probabilities[OPENPBR_LOBE_FUZZ];
855
- for (int hR = 1; hR < OPENPBR_LOBE_COUNT; hR++) {
856
- total += prepared.probabilities[hR];
855
+ for (int hQ = 1; hQ < OPENPBR_LOBE_COUNT; hQ++) {
856
+ total += prepared.probabilities[hQ];
857
857
  }
858
858
  if (total <= 1e-8) {
859
- for (int hR = 0; hR < OPENPBR_LOBE_COUNT; hR++) {
860
- prepared.probabilities[hR] = 0.0;
859
+ for (int hQ = 0; hQ < OPENPBR_LOBE_COUNT; hQ++) {
860
+ prepared.probabilities[hQ] = 0.0;
861
861
  }
862
862
  return;
863
863
  }
864
- float og = 1.0 / total;
865
- for (int hR = 0; hR < OPENPBR_LOBE_COUNT; hR++) {
866
- prepared.probabilities[hR] *= og;
864
+ float oj = 1.0 / total;
865
+ for (int hQ = 0; hQ < OPENPBR_LOBE_COUNT; hQ++) {
866
+ prepared.probabilities[hQ] *= oj;
867
867
  }
868
868
  }
869
869
 
@@ -884,51 +884,51 @@ return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
884
884
 
885
885
 
886
886
 
887
- vec3 cC(J material, float au) {
887
+ vec3 cD(J material, float au) {
888
888
  if (au <= 0.0) { return vec3(1.0); }
889
- float lr = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
- vec3 tl = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lr, 1e-5)));
891
- return mix(vec3(1.0), tl, material.coatWeight);
889
+ float lu = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
+ vec3 tr = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lu, 1e-5)));
891
+ return mix(vec3(1.0), tr, material.coatWeight);
892
892
  }
893
893
 
894
- float gi(J material, float au) {
894
+ float gj(J material, float au) {
895
895
  if (material.coatRoughness <= ROUGHNESS_MIN) {
896
896
  return af(au, 1.0 / material.coatIor);
897
897
  }
898
898
 
899
899
 
900
- return clamp(1.0 - aI(material.coatIor,
900
+ return clamp(1.0 - aJ(material.coatIor,
901
901
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
902
902
  }
903
903
 
904
- vec3 gV(ag prepared) {
904
+ vec3 gW(ag prepared) {
905
905
  J material = prepared.material;
906
906
  float dielectric = 1.0 - material.baseMetalness;
907
907
  float opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
908
908
  float sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
909
- float tT = dielectric * material.transmissionWeight;
909
+ float tZ = dielectric * material.transmissionWeight;
910
910
  float fL = bM(prepared.specularEtaTOverEtaI);
911
- float kI = bM(1.0 / prepared.transmissionReflectionIor);
912
- float pw = clamp(opaque * fL + (sss + tT) * kI + material.baseMetalness, 0.0, 1.0);
913
- float ji = mix(1.0, material.specularRoughness, pw);
911
+ float kL = bM(1.0 / prepared.transmissionReflectionIor);
912
+ float pJ = clamp(opaque * fL + (sss + tZ) * kL + material.baseMetalness, 0.0, 1.0);
913
+ float jk = mix(1.0, material.specularRoughness, pJ);
914
914
  float ks = bM(material.coatIor);
915
915
  float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
916
- float k = mix(ks, kr, ji);
916
+ float k = mix(ks, kr, jk);
917
917
  vec3 eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
918
918
  + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fL)
919
- + sss * material.subsurfaceColor + vec3(tT);
920
- vec3 qH = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
- return mix(vec3(1.0), qH, material.coatWeight * material.coatDarkening);
919
+ + sss * material.subsurfaceColor + vec3(tZ);
920
+ vec3 qL = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
+ return mix(vec3(1.0), qL, material.coatWeight * material.coatDarkening);
922
922
  }
923
923
 
924
- vec3 ds(ag prepared, float kY) {
924
+ vec3 ds(ag prepared, float lb) {
925
925
  if (prepared.material.coatWeight <= 0.0) { return vec3(1.0); }
926
926
  if (prepared.material.inside) {
927
927
 
928
- return cC(prepared.material, -kY);
928
+ return cD(prepared.material, -lb);
929
929
  }
930
930
 
931
- return prepared.coatBaseScale * cC(prepared.material, kY);
931
+ return prepared.coatBaseScale * cD(prepared.material, lb);
932
932
  }
933
933
 
934
934
 
@@ -983,15 +983,15 @@ prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bF);
983
983
  #endif
984
984
  prepared.diffuseColor = material.baseColor;
985
985
 
986
- float cA = 1.0 - material.baseMetalness;
987
- float dK = cA
986
+ float cB = 1.0 - material.baseMetalness;
987
+ float dK = cB
988
988
  * (1.0 - material.transmissionWeight);
989
989
  prepared.weights[OPENPBR_LOBE_FUZZ] = material.fuzzWeight;
990
990
  prepared.weights[OPENPBR_LOBE_COAT] = material.coatWeight;
991
991
  if (material.inside) { prepared.weights[OPENPBR_LOBE_COAT] = 0.0; }
992
992
  prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
993
- prepared.weights[OPENPBR_LOBE_SPECULAR] = cA;
994
- prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cA
993
+ prepared.weights[OPENPBR_LOBE_SPECULAR] = cB;
994
+ prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cB
995
995
  * material.transmissionWeight;
996
996
  prepared.weights[OPENPBR_LOBE_DIFFUSE] = dK
997
997
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
@@ -1056,7 +1056,7 @@ material.transmissionWeight
1056
1056
  )
1057
1057
  : ah
1058
1058
  );
1059
- vec3 hS = material.specularWeight * dT(
1059
+ vec3 hR = material.specularWeight * dT(
1060
1060
  viewCosine,
1061
1061
  material.baseWeight * material.baseColor,
1062
1062
  material.specularColor
@@ -1064,22 +1064,22 @@ material.specularColor
1064
1064
  float eL = material.thinWalled
1065
1065
  ? cS(af(viewCosine, prepared.transmissionReflectionIor))
1066
1066
  : af(viewCosine, prepared.transmissionReflectionIor);
1067
- vec3 gH = bG(
1067
+ vec3 gJ = bG(
1068
1068
  material,
1069
1069
  viewCosine,
1070
1070
  prepared.refractionEtaTOverEtaI
1071
1071
  );
1072
- float im = aI(
1072
+ float il = aJ(
1073
1073
  prepared.specularEtaTOverEtaI,
1074
1074
  prepared.specularAlpha,
1075
1075
  viewCosine
1076
1076
  );
1077
- float gk = cq(
1077
+ float gm = cr(
1078
1078
  prepared.specularEtaTOverEtaI,
1079
1079
  prepared.specularAlpha
1080
1080
  );
1081
- prepared.diffuseSpecularEnergyCompensation = im
1082
- / max(gk, 1e-12);
1081
+ prepared.diffuseSpecularEnergyCompensation = il
1082
+ / max(gm, 1e-12);
1083
1083
 
1084
1084
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
1085
1085
  * aw(material.fuzzColor)
@@ -1092,31 +1092,31 @@ prepared.coatBaseScale = vec3(1.0);
1092
1092
  if (material.coatWeight > 0.0 && !material.inside) {
1093
1093
  #ifdef NUM_COAT_NORMAL_MAPS
1094
1094
  float coatViewCosine = material.coatNormalEnabled ? max(prepared.coatViewLocal.z, 0.0) : viewCosine;
1095
- float kp = gi(material, coatViewCosine);
1095
+ float kt = gj(material, coatViewCosine);
1096
1096
  #else
1097
- float kp = gi(material, viewCosine);
1097
+ float kt = gj(material, viewCosine);
1098
1098
  #endif
1099
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kp;
1100
- prepared.coatBaseScale = cC(material,
1099
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kt;
1100
+ prepared.coatBaseScale = cD(material,
1101
1101
  #ifdef NUM_COAT_NORMAL_MAPS
1102
1102
  coatViewCosine
1103
1103
  #else
1104
1104
  viewCosine
1105
1105
  #endif
1106
1106
  )
1107
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kp) * gV(prepared);
1107
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kt) * gW(prepared);
1108
1108
  }
1109
1109
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1110
- * aw(hS);
1110
+ * aw(hR);
1111
1111
  prepared.metalMsScale = vec3(0.0);
1112
1112
  prepared.metalMsFactor = 0.0;
1113
1113
  prepared.metalMsProbability = 0.0;
1114
1114
  if (material.specularRoughness >= 0.04 && prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
1115
- vec3 hI = bP(material.baseWeight * material.baseColor, material.specularColor);
1116
- prepared.metalMsScale = material.specularWeight * hI * hI;
1117
- float pJ = bH(prepared.specularAlpha, viewCosine);
1118
- prepared.metalMsFactor = pJ / max(cu(prepared.specularAlpha), 1e-12);
1119
- float ff = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pJ;
1115
+ vec3 hH = bP(material.baseWeight * material.baseColor, material.specularColor);
1116
+ prepared.metalMsScale = material.specularWeight * hH * hH;
1117
+ float pN = bH(prepared.specularAlpha, viewCosine);
1118
+ prepared.metalMsFactor = pN / max(cv(prepared.specularAlpha), 1e-12);
1119
+ float ff = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pN;
1120
1120
  prepared.probabilities[OPENPBR_LOBE_METAL] += ff;
1121
1121
  prepared.metalMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1122
1122
  }
@@ -1124,7 +1124,7 @@ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SP
1124
1124
  * aw(ft);
1125
1125
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1126
1126
  * (1.0 - eL)
1127
- * aw(gH);
1127
+ * aw(gJ);
1128
1128
 
1129
1129
 
1130
1130
 
@@ -1139,14 +1139,14 @@ prepared.dielectricMsProbability = 0.0;
1139
1139
  if (!material.thinWalled && material.transmissionWeight > 0.0 &&
1140
1140
  prepared.specularAlpha >= 0.0016 && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 &&
1141
1141
  abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6) {
1142
- float lq = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
- prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lq;
1144
- prepared.dielectricMsTransmissionScale = gH * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1142
+ float lt = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
+ prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lt;
1144
+ prepared.dielectricMsTransmissionScale = gJ * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1145
1145
  + vec3(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1146
1146
  prepared.dielectricMsReflectionRatio = ch(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1147
1147
  prepared.dielectricMsViewLoss = bO(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1148
- vec3 nI = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
- float ff = aw(nI) * prepared.dielectricMsViewLoss;
1148
+ vec3 nL = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
+ float ff = aw(nL) * prepared.dielectricMsViewLoss;
1150
1150
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += ff;
1151
1151
  prepared.dielectricMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1152
1152
  }
@@ -1160,17 +1160,17 @@ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_
1160
1160
 
1161
1161
 
1162
1162
  if (material.coatWeight > 0.0 && material.thinFilmWeight > 0.0) {
1163
- float kW = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1164
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * kW);
1165
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * kW);
1163
+ float kZ = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1164
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * kZ);
1165
+ prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * kZ);
1166
1166
  }
1167
1167
  if (material.coatWeight > 0.0 && !material.inside) {
1168
- float gm = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gm;
1170
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gm;
1171
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gm;
1172
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gm;
1173
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gm;
1168
+ float gn = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gn;
1170
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gn;
1171
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gn;
1172
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gn;
1173
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gn;
1174
1174
  }
1175
1175
  dQ(prepared);
1176
1176
  return prepared;
@@ -1180,11 +1180,11 @@ float cR(ag prepared, float au, bool reflection) {
1180
1180
  if (prepared.material.coatWeight <= 0.0) {
1181
1181
  return af(au, prepared.material.relativeIor);
1182
1182
  }
1183
- float kg = af(au, prepared.transmissionReflectionIor);
1184
- if (!reflection) { return kg; }
1185
- float mU = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1186
- float rC = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
- return mix(mU, kg, rC);
1183
+ float ki = af(au, prepared.transmissionReflectionIor);
1184
+ if (!reflection) { return ki; }
1185
+ float mX = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1186
+ float rH = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
+ return mix(mX, ki, rH);
1188
1188
  }
1189
1189
 
1190
1190
  vec3 bI(
@@ -1216,11 +1216,11 @@ V = -V;
1216
1216
 
1217
1217
  vec3 response = vec3(0.0);
1218
1218
  pdf = 0.0;
1219
- float aH = 0.0;
1219
+ float aI = 0.0;
1220
1220
  float bQ = abs(dot(viewLocal, V));
1221
1221
  float diffuseSpecularEnergyCompensation =
1222
1222
  prepared.diffuseSpecularEnergyCompensation
1223
- * aI(
1223
+ * aJ(
1224
1224
  prepared.specularEtaTOverEtaI,
1225
1225
  prepared.specularAlpha,
1226
1226
  abs(lightLocal.z)
@@ -1231,34 +1231,34 @@ if (!independentCoat || (lightLocal.z != 0.0 && reflection == geometricReflectio
1231
1231
  #endif
1232
1232
  if (reflection) {
1233
1233
  if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0) {
1234
- response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cD(
1234
+ response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cE(
1235
1235
  material,
1236
1236
  prepared.diffuseColor,
1237
1237
  viewLocal,
1238
1238
  lightLocal,
1239
1239
  diffuseSpecularEnergyCompensation,
1240
- aH
1240
+ aI
1241
1241
  );
1242
- pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aH;
1242
+ pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aI;
1243
1243
  }
1244
1244
 
1245
1245
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && material.thinWalled) {
1246
- response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cD(
1246
+ response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * cE(
1247
1247
  material,
1248
1248
  material.subsurfaceColor,
1249
1249
  viewLocal,
1250
1250
  lightLocal,
1251
1251
  diffuseSpecularEnergyCompensation,
1252
- aH
1252
+ aI
1253
1253
  );
1254
- pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aH;
1254
+ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aI;
1255
1255
  }
1256
1256
 
1257
1257
  if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) {
1258
- vec3 cr = vec3(cR(prepared, bQ, true));
1258
+ vec3 ct = vec3(cR(prepared, bQ, true));
1259
1259
  if (material.thinFilmWeight > 0.0) {
1260
- cr = bW(
1261
- cr,
1260
+ ct = bW(
1261
+ ct,
1262
1262
  bQ,
1263
1263
  material.thinFilmThickness,
1264
1264
  material.thinFilmIor,
@@ -1268,21 +1268,21 @@ prepared.thinFilmExteriorIor
1268
1268
  );
1269
1269
  }
1270
1270
  if (material.thinWalled) {
1271
- cr = aP(
1272
- cr,
1271
+ ct = aP(
1272
+ ct,
1273
1273
  material.transmissionWeight
1274
1274
  );
1275
1275
  }
1276
- vec3 cK = material.specularColor * cr;
1276
+ vec3 cK = material.specularColor * ct;
1277
1277
  response += prepared.weights[OPENPBR_LOBE_SPECULAR] * am(
1278
1278
  material,
1279
1279
  viewLocal,
1280
1280
  lightLocal,
1281
1281
  V,
1282
1282
  cK,
1283
- aH
1283
+ aI
1284
1284
  );
1285
- pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aH;
1285
+ pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aI;
1286
1286
  }
1287
1287
 
1288
1288
  if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
@@ -1292,7 +1292,7 @@ material.baseWeight * material.baseColor,
1292
1292
  material.specularColor
1293
1293
  );
1294
1294
  if (material.thinFilmWeight > 0.0) {
1295
- cK = lc(
1295
+ cK = lf(
1296
1296
  cK,
1297
1297
  bQ,
1298
1298
  material.thinFilmThickness,
@@ -1310,14 +1310,14 @@ viewLocal,
1310
1310
  lightLocal,
1311
1311
  V,
1312
1312
  cK,
1313
- aH
1313
+ aI
1314
1314
  );
1315
1315
  if (prepared.metalMsFactor > 0.0) {
1316
1316
  float dW = min(prepared.metalMsFactor * bH(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1317
1317
  response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * dW * INVPI;
1318
- aH = mix(aH, 0.5 * INVPI, prepared.metalMsProbability);
1318
+ aI = mix(aI, 0.5 * INVPI, prepared.metalMsProbability);
1319
1319
  }
1320
- pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aH;
1320
+ pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aI;
1321
1321
  }
1322
1322
  }
1323
1323
  else {
@@ -1335,17 +1335,17 @@ prepared.thinFilmExteriorIor
1335
1335
  }
1336
1336
  if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) {
1337
1337
  if (material.thinWalled) {
1338
- vec3 kM = vec3(lightLocal.xy, -lightLocal.z);
1339
- vec3 dd = normalize(kM + viewLocal);
1338
+ vec3 kP = vec3(lightLocal.xy, -lightLocal.z);
1339
+ vec3 dd = normalize(kP + viewLocal);
1340
1340
  if (dd.z < 0.0) {
1341
1341
  dd = -dd;
1342
1342
  }
1343
- float nD = abs(dot(viewLocal, dd));
1344
- vec3 lv = vec3(cR(prepared, nD, false));
1343
+ float nG = abs(dot(viewLocal, dd));
1344
+ vec3 lB = vec3(cR(prepared, nG, false));
1345
1345
  if (material.thinFilmWeight > 0.0) {
1346
- lv = bW(
1347
- lv,
1348
- nD,
1346
+ lB = bW(
1347
+ lB,
1348
+ nG,
1349
1349
  material.thinFilmThickness,
1350
1350
  material.thinFilmIor,
1351
1351
  prepared.thinFilmBaseIor,
@@ -1353,8 +1353,8 @@ material.thinFilmWeight,
1353
1353
  prepared.thinFilmExteriorIor
1354
1354
  );
1355
1355
  }
1356
- vec3 gf = aP(
1357
- lv,
1356
+ vec3 gg = aP(
1357
+ lB,
1358
1358
  1.0
1359
1359
  );
1360
1360
  vec3 tint = bG(
@@ -1366,10 +1366,10 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1366
1366
  * am(
1367
1367
  material,
1368
1368
  viewLocal,
1369
- kM,
1369
+ kP,
1370
1370
  dd,
1371
- tint * (vec3(1.0) - gf),
1372
- aH
1371
+ tint * (vec3(1.0) - gg),
1372
+ aI
1373
1373
  );
1374
1374
  }
1375
1375
  else {
@@ -1382,37 +1382,37 @@ viewLocal,
1382
1382
  lightLocal,
1383
1383
  V,
1384
1384
  cK,
1385
- aH
1385
+ aI
1386
1386
  );
1387
1387
  }
1388
1388
  if (prepared.dielectricMsProbability > 0.0) {
1389
- aH *= 1.0 - prepared.dielectricMsProbability;
1389
+ aI *= 1.0 - prepared.dielectricMsProbability;
1390
1390
  }
1391
- pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aH;
1391
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aI;
1392
1392
  }
1393
1393
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) {
1394
1394
  if (material.thinWalled) {
1395
- vec3 nT = vec3(lightLocal.xy, -lightLocal.z);
1395
+ vec3 nW = vec3(lightLocal.xy, -lightLocal.z);
1396
1396
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1397
- * cD(
1397
+ * cE(
1398
1398
  material,
1399
1399
  material.subsurfaceColor,
1400
1400
  viewLocal,
1401
- nT,
1401
+ nW,
1402
1402
  diffuseSpecularEnergyCompensation,
1403
- aH
1403
+ aI
1404
1404
  );
1405
- aH *= 0.5;
1405
+ aI *= 0.5;
1406
1406
  }
1407
1407
  else {
1408
1408
  response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dL(
1409
1409
  material,
1410
1410
  viewLocal,
1411
1411
  lightLocal,
1412
- aH
1412
+ aI
1413
1413
  );
1414
1414
  }
1415
- pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aH;
1415
+ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aI;
1416
1416
  }
1417
1417
  }
1418
1418
 
@@ -1423,13 +1423,13 @@ if (prepared.dielectricMsProbability > 0.0) {
1423
1423
  float au = abs(lightLocal.z);
1424
1424
  if (au > 0.0) {
1425
1425
  float ior = (reflection ? prepared.refractionEtaTOverEtaI : 1.0 / prepared.refractionEtaTOverEtaI);
1426
- float iU = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
- float td = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1426
+ float iV = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
+ float tj = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1428
1428
  / max(cO(ior, prepared.specularAlpha), 1e-12);
1429
- float dW = min(td * iU, 1.0 / au);
1429
+ float dW = min(tj * iV, 1.0 / au);
1430
1430
  vec3 scale = (reflection ? prepared.dielectricMsReflectionScale : prepared.dielectricMsTransmissionScale);
1431
1431
  response += scale * dW * INVPI;
1432
- pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iU * 0.5 * INVPI;
1432
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iV * 0.5 * INVPI;
1433
1433
  }
1434
1434
  }
1435
1435
 
@@ -1457,28 +1457,28 @@ reflection
1457
1457
  #endif
1458
1458
  && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1459
1459
  vec3 dH = viewLocal;
1460
- vec3 kt = lightLocal;
1461
- vec3 gq = V;
1462
- float jD = bQ;
1460
+ vec3 kv = lightLocal;
1461
+ vec3 gr = V;
1462
+ float jF = bQ;
1463
1463
  if (prepared.directionFrames) {
1464
1464
  dH = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
1465
  #ifdef NUM_COAT_NORMAL_MAPS
1466
1466
  if (independentCoat) { dH = prepared.coatViewLocal; }
1467
1467
  #endif
1468
- kt = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
- gq = normalize(kt + dH);
1470
- if (gq.z < 0.0) { gq = -gq; }
1471
- jD = abs(dot(dH, gq));
1468
+ kv = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
+ gr = normalize(kv + dH);
1470
+ if (gr.z < 0.0) { gr = -gr; }
1471
+ jF = abs(dot(dH, gr));
1472
1472
  }
1473
1473
 
1474
- vec3 kU = vec3(af(
1475
- jD,
1474
+ vec3 kX = vec3(af(
1475
+ jF,
1476
1476
  1.0 / material.coatIor
1477
1477
  ));
1478
1478
  J dG = material;
1479
- vec2 jp = aJ(material.coatRoughness, material.coatAnisotropy);
1480
- dG.alphaX = jp.x;
1481
- dG.alphaY = jp.y;
1479
+ vec2 jr = aK(material.coatRoughness, material.coatAnisotropy);
1480
+ dG.alphaX = jr.x;
1481
+ dG.alphaY = jr.y;
1482
1482
  response += prepared.weights[OPENPBR_LOBE_COAT]
1483
1483
  #ifdef NUM_COAT_NORMAL_MAPS
1484
1484
  * (independentCoat ? max(coatLightCosine, 0.0) : 1.0)
@@ -1486,12 +1486,12 @@ response += prepared.weights[OPENPBR_LOBE_COAT]
1486
1486
  * am(
1487
1487
  dG,
1488
1488
  dH,
1489
- kt,
1490
- gq,
1491
- kU,
1492
- aH
1489
+ kv,
1490
+ gr,
1491
+ kX,
1492
+ aI
1493
1493
  );
1494
- pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aH;
1494
+ pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
1495
1495
  }
1496
1496
 
1497
1497
  if (
@@ -1501,25 +1501,25 @@ if (
1501
1501
  reflection
1502
1502
  #endif
1503
1503
  && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1504
- float qn = aO(
1504
+ float qr = aO(
1505
1505
  abs(viewLocal.z),
1506
1506
  material.fuzzRoughness
1507
1507
  );
1508
1508
  response *= max(
1509
1509
  vec3(0.0),
1510
- vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qn)
1510
+ vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qr)
1511
1511
  );
1512
1512
  response += prepared.weights[OPENPBR_LOBE_FUZZ]
1513
1513
  #ifdef NUM_COAT_NORMAL_MAPS
1514
1514
  * (independentCoat ? max(lightLocal.z, 0.0) : 1.0)
1515
1515
  #endif
1516
- * jP(
1516
+ * jR(
1517
1517
  material,
1518
1518
  viewLocal,
1519
1519
  lightLocal,
1520
- aH
1520
+ aI
1521
1521
  );
1522
- pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aH;
1522
+ pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aI;
1523
1523
  }
1524
1524
 
1525
1525
  #ifdef NUM_COAT_NORMAL_MAPS
@@ -1528,7 +1528,7 @@ if (independentCoat) { return response; }
1528
1528
  return response * abs(lightLocal.z);
1529
1529
  }
1530
1530
 
1531
- vec3 qU(
1531
+ vec3 qY(
1532
1532
  vec3 tangent,
1533
1533
  J material,
1534
1534
  vec3 bF,
@@ -1545,7 +1545,7 @@ normal
1545
1545
  return bI(prepared, lightDirection, pdf);
1546
1546
  }
1547
1547
 
1548
- float vJ(
1548
+ float vP(
1549
1549
  vec3 tangent,
1550
1550
  J material,
1551
1551
  vec3 bF,
@@ -1553,7 +1553,7 @@ vec3 normal,
1553
1553
  vec3 lightDirection
1554
1554
  ) {
1555
1555
  float pdf;
1556
- qU(
1556
+ qY(
1557
1557
  tangent,
1558
1558
  material,
1559
1559
  bF,
@@ -1566,16 +1566,16 @@ return pdf;
1566
1566
 
1567
1567
  vec3 dv(
1568
1568
  ag prepared,
1569
- vec3 cl,
1569
+ vec3 cm,
1570
1570
  out vec3 lightDirection,
1571
1571
  out float pdf,
1572
1572
  out bool isTransmissionEvent
1573
1573
  ) {
1574
1574
  J material = prepared.material;
1575
1575
  vec3 viewLocal = prepared.viewLocal;
1576
- float cx = cl.x;
1577
- float fp = cl.y;
1578
- float bm = cl.z;
1576
+ float cy = cm.x;
1577
+ float fp = cm.y;
1578
+ float bm = cm.z;
1579
1579
  pdf = 0.0;
1580
1580
  isTransmissionEvent = false;
1581
1581
  lightDirection = prepared.basis.normal;
@@ -1599,8 +1599,8 @@ prepared.material.coatNormalEnabled ? dot(prepared.coatBasis.normal, lightDirect
1599
1599
 
1600
1600
  float cdf[OPENPBR_LOBE_COUNT];
1601
1601
  cdf[OPENPBR_LOBE_FUZZ] = prepared.probabilities[OPENPBR_LOBE_FUZZ];
1602
- for (int hR = 1; hR < OPENPBR_LOBE_COUNT; hR++) {
1603
- cdf[hR] = cdf[hR - 1] + prepared.probabilities[hR];
1602
+ for (int hQ = 1; hQ < OPENPBR_LOBE_COUNT; hQ++) {
1603
+ cdf[hQ] = cdf[hQ - 1] + prepared.probabilities[hQ];
1604
1604
  }
1605
1605
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
1606
1606
  return vec3(0.0);
@@ -1610,7 +1610,7 @@ vec3 lightLocal;
1610
1610
  if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1611
1611
  bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1612
1612
  )) {
1613
- lightLocal = bi(vec2(cx, fp));
1613
+ lightLocal = bi(vec2(cy, fp));
1614
1614
  }
1615
1615
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1616
1616
  vec3 dH = viewLocal;
@@ -1621,8 +1621,8 @@ if (material.coatNormalEnabled) { dH = prepared.coatViewLocal; }
1621
1621
  vec3 V = aQ(
1622
1622
  dH,
1623
1623
 
1624
- aJ(material.coatRoughness, material.coatAnisotropy),
1625
- vec2(cx, fp)
1624
+ aK(material.coatRoughness, material.coatAnisotropy),
1625
+ vec2(cy, fp)
1626
1626
  );
1627
1627
  if (V.z < 0.0) {
1628
1628
  V = -V;
@@ -1638,10 +1638,10 @@ return bI(prepared, lightDirection, pdf);
1638
1638
  if (prepared.directionFrames) { lightLocal = openpbr_to_local(prepared.basis, openpbr_to_world(prepared.coatBasis, lightLocal)); }
1639
1639
  }
1640
1640
  else if (bm < cdf[OPENPBR_LOBE_SPECULAR]) {
1641
- bool tg = bm < cdf[OPENPBR_LOBE_METAL];
1642
- float rw = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
- if (tg && rw < prepared.metalMsProbability) {
1644
- float z = cx;
1641
+ bool tm = bm < cdf[OPENPBR_LOBE_METAL];
1642
+ float rE = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
+ if (tm && rE < prepared.metalMsProbability) {
1644
+ float z = cy;
1645
1645
  float fi = sqrt(max(0.0, 1.0 - z * z));
1646
1646
  float br = TWOPI * fp;
1647
1647
  lightLocal = vec3(fi * cos(br), fi * sin(br), z);
@@ -1650,7 +1650,7 @@ else {
1650
1650
  vec3 V = aQ(
1651
1651
  viewLocal,
1652
1652
  vec2(material.alphaX, material.alphaY),
1653
- vec2(cx, fp)
1653
+ vec2(cy, fp)
1654
1654
  );
1655
1655
  if (V.z < 0.0) {
1656
1656
  V = -V;
@@ -1662,23 +1662,23 @@ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1662
1662
  isTransmissionEvent = true;
1663
1663
 
1664
1664
 
1665
- float ue = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
- if (prepared.dielectricMsProbability > 0.0 && ue < prepared.dielectricMsProbability) {
1667
- float iU = prepared.dielectricMsReflectionRatio;
1668
- bool lM = cx < iU;
1665
+ float uk = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
+ if (prepared.dielectricMsProbability > 0.0 && uk < prepared.dielectricMsProbability) {
1667
+ float iV = prepared.dielectricMsReflectionRatio;
1668
+ bool lP = cy < iV;
1669
1669
  float z;
1670
- if (lM) { z = min(cx / iU, 0.99999994); }
1671
- else { z = -min((cx - iU) / (1.0 - iU), 0.99999994); }
1670
+ if (lP) { z = min(cy / iV, 0.99999994); }
1671
+ else { z = -min((cy - iV) / (1.0 - iV), 0.99999994); }
1672
1672
  float fi = sqrt(max(0.0, 1.0 - z * z));
1673
1673
  float br = TWOPI * fp;
1674
1674
  lightLocal = vec3(fi * cos(br), fi * sin(br), z);
1675
- isTransmissionEvent = !lM;
1675
+ isTransmissionEvent = !lP;
1676
1676
  }
1677
1677
  else {
1678
1678
  vec3 V = aQ(
1679
1679
  viewLocal,
1680
1680
  vec2(material.alphaX, material.alphaY),
1681
- vec2(cx, fp)
1681
+ vec2(cy, fp)
1682
1682
  );
1683
1683
  if (V.z < 0.0) {
1684
1684
  V = -V;
@@ -1700,8 +1700,8 @@ prepared.thinFilmExteriorIor
1700
1700
  );
1701
1701
  }
1702
1702
  if (material.thinWalled) {
1703
- vec3 hW = normalize(reflect(-viewLocal, V));
1704
- lightLocal = vec3(hW.xy, -hW.z);
1703
+ vec3 hV = normalize(reflect(-viewLocal, V));
1704
+ lightLocal = vec3(hV.xy, -hV.z);
1705
1705
  }
1706
1706
  else {
1707
1707
  lightLocal = refract(
@@ -1720,13 +1720,13 @@ lightLocal = normalize(lightLocal);
1720
1720
  else {
1721
1721
  isTransmissionEvent = true;
1722
1722
  if (material.thinWalled) {
1723
- float ky = cx;
1724
- bool pH = ky >= 0.5;
1725
- cx = pH
1726
- ? (ky - 0.5) * 2.0
1727
- : ky * 2.0;
1728
- lightLocal = bi(vec2(cx, fp));
1729
- if (pH) {
1723
+ float kB = cy;
1724
+ bool pL = kB >= 0.5;
1725
+ cy = pL
1726
+ ? (kB - 0.5) * 2.0
1727
+ : kB * 2.0;
1728
+ lightLocal = bi(vec2(cy, fp));
1729
+ if (pL) {
1730
1730
  lightLocal.z = -lightLocal.z;
1731
1731
  }
1732
1732
  else {
@@ -1734,7 +1734,7 @@ isTransmissionEvent = false;
1734
1734
  }
1735
1735
  }
1736
1736
  else {
1737
- lightLocal = bi(vec2(cx, fp));
1737
+ lightLocal = bi(vec2(cy, fp));
1738
1738
  lightLocal.z = -lightLocal.z;
1739
1739
  }
1740
1740
  }
@@ -1751,10 +1751,10 @@ if (material.coatNormalEnabled &&
1751
1751
  return bI(prepared, lightDirection, pdf);
1752
1752
  }
1753
1753
 
1754
- vec3 su(
1754
+ vec3 sB(
1755
1755
  vec3 tangent,
1756
1756
  J material,
1757
- vec3 cl,
1757
+ vec3 cm,
1758
1758
  vec3 bF,
1759
1759
  vec3 normal,
1760
1760
  out vec3 lightDirection,
@@ -1762,6 +1762,6 @@ out float pdf,
1762
1762
  out bool isTransmissionEvent
1763
1763
  ) {
1764
1764
  ag prepared = eG(tangent, material, bF, normal);
1765
- return dv(prepared, cl, lightDirection, pdf, isTransmissionEvent);
1765
+ return dv(prepared, cm, lightDirection, pdf, isTransmissionEvent);
1766
1766
  }`;
1767
1767
  //# sourceMappingURL=openPbrBsdf.glsl.js.map