@meimu/mutracer 0.1.3 → 0.1.4

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 (118) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +4114 -4015
  3. package/docs/api.md +11 -9
  4. package/docs/threejs.md +30 -4
  5. package/lib/Engine.js +18 -1
  6. package/lib/Engine.js.map +1 -1
  7. package/lib/main.d.ts +1 -1
  8. package/lib/main.js.map +1 -1
  9. package/lib/oidn.d.ts +1 -1
  10. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  11. package/lib/renderer/MaterialTable.d.ts +1 -0
  12. package/lib/renderer/MaterialTable.js +10 -4
  13. package/lib/renderer/MaterialTable.js.map +1 -1
  14. package/lib/renderer/WGPUBloomPass.js +18 -18
  15. package/lib/renderer/WGPUFullQuadPass.js +6 -6
  16. package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
  17. package/lib/renderer/WGPURayTraceOutput.js +14 -14
  18. package/lib/renderer/WGPURayTracePass.d.ts +2 -0
  19. package/lib/renderer/WGPURayTracePass.js +12 -6
  20. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  21. package/lib/renderer/WGPURenderingPipeline.js +15 -15
  22. package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
  23. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  24. package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
  25. package/lib/renderer/WebGLRayTracePass.js +7 -1
  26. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  27. package/lib/renderer/envMapCreation.d.ts +5 -1
  28. package/lib/renderer/envMapCreation.js +42 -5
  29. package/lib/renderer/envMapCreation.js.map +1 -1
  30. package/lib/renderer/geometryUpdates.js +1 -1
  31. package/lib/renderer/geometryUpdates.js.map +1 -1
  32. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  33. package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
  34. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  35. package/lib/renderer/glsl/chunks/intersect.glsl.js +316 -310
  36. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  37. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +151 -119
  38. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  39. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +414 -414
  40. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  41. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  42. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +40 -39
  43. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  44. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
  45. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +78 -78
  46. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  47. package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
  48. package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
  49. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  50. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  51. package/lib/renderer/glsl/depthQuery.frag.js +5 -5
  52. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  53. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  54. package/lib/renderer/glsl/rayTrace.frag.js +133 -133
  55. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  56. package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
  57. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  58. package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
  59. package/lib/renderer/lightsUtil.js +6 -4
  60. package/lib/renderer/lightsUtil.js.map +1 -1
  61. package/lib/renderer/materialChanges.js +1 -1
  62. package/lib/renderer/materialChanges.js.map +1 -1
  63. package/lib/renderer/materialComparison.generated.js +36 -18
  64. package/lib/renderer/materialComparison.generated.js.map +1 -1
  65. package/lib/renderer/prepareMeshBVH.js +2 -2
  66. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  67. package/lib/renderer/sceneChangeDetector.js +4 -1
  68. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  69. package/lib/renderer/sceneLightChanges.js +3 -2
  70. package/lib/renderer/sceneLightChanges.js.map +1 -1
  71. package/lib/renderer/scratchSampling.js +18 -18
  72. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  73. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  74. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
  75. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  76. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +475 -469
  77. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  78. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
  79. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +93 -59
  80. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  81. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
  82. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  83. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
  84. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  85. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  86. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
  87. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  88. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
  89. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
  90. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
  91. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
  92. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
  93. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  94. package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
  95. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  96. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  97. package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
  98. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  99. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  100. package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
  101. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  102. package/lib/scene/EnvironmentLight.d.ts +9 -3
  103. package/lib/scene/EnvironmentLight.js +9 -2
  104. package/lib/scene/EnvironmentLight.js.map +1 -1
  105. package/lib/scene/Scene.d.ts +4 -0
  106. package/lib/scene/Scene.js.map +1 -1
  107. package/lib/scene/SpotLight.d.ts +2 -2
  108. package/lib/scene/SpotLight.js +1 -1
  109. package/lib/scene/SpotLight.js.map +1 -1
  110. package/lib/scene/Texture.d.ts +17 -6
  111. package/lib/scene/Texture.js +13 -4
  112. package/lib/scene/Texture.js.map +1 -1
  113. package/lib/util/fromTHREE.js +151 -29
  114. package/lib/util/fromTHREE.js.map +1 -1
  115. package/lib/version.d.ts +1 -1
  116. package/lib/version.js +1 -1
  117. package/lib/version.js.map +1 -1
  118. package/package.json +1 -1
@@ -77,13 +77,13 @@ float aY(
77
77
  float bu,
78
78
  float specularWeight
79
79
  ) {
80
- float sJ = min(
80
+ float sR = min(
81
81
  cV(bu) * specularWeight,
82
82
  0.9999
83
83
  );
84
- float sL = sqrt(sJ);
85
- float kY = (1.0 + sL) / (1.0 - sL);
86
- return bu < 1.0 ? 1.0 / kY : kY;
84
+ float sT = sqrt(sR);
85
+ float lh = (1.0 + sT) / (1.0 - sT);
86
+ return bu < 1.0 ? 1.0 / lh : lh;
87
87
  }
88
88
 
89
89
  float af(float cc, float relativeIor) {
@@ -100,60 +100,60 @@ return 15.0 - ((1.0 / ior - 1.0) / 1.5) * 15.0;
100
100
  return 16.0 + ((ior - 1.0) / 1.5) * 15.0;
101
101
  }
102
102
 
103
- float F(int sc, int row) {
104
- return texelFetch(openPbrEnergyLut, ivec2(sc, row), 0).r;
103
+ float F(int sl, int row) {
104
+ return texelFetch(openPbrEnergyLut, ivec2(sl, row), 0).r;
105
105
  }
106
106
 
107
- float fZ(
108
- float dI,
107
+ float gd(
108
+ float dJ,
109
109
  float bR,
110
- float hN
110
+ float hR
111
111
  ) {
112
- float bA = clamp(dI, 0.0, 31.0);
112
+ float bA = clamp(dJ, 0.0, 31.0);
113
113
  float aH = clamp(bR, 0.0, 31.0);
114
- float bt = clamp(hN, 0.0, 31.0);
115
- int dP = int(floor(bA));
114
+ float bt = clamp(hR, 0.0, 31.0);
115
+ int dQ = int(floor(bA));
116
116
  int aN = int(floor(aH));
117
117
  int cI = int(floor(bt));
118
- int hA = min(dP + 1, 31);
118
+ int hE = min(dQ + 1, 31);
119
119
  int cp = min(aN + 1, 31);
120
- int eO = min(cI + 1, 31);
121
- float cq = bA - float(dP);
120
+ int eR = min(cI + 1, 31);
121
+ float cq = bA - float(dQ);
122
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);
123
+ float kE = bt - float(cI);
124
+
125
+ float uA = F(cI, dQ * 32 + aN);
126
+ float uB = F(eR, dQ * 32 + aN);
127
+ float uC = F(cI, dQ * 32 + cp);
128
+ float uD = F(eR, dQ * 32 + cp);
129
+ float uE = F(cI, hE * 32 + aN);
130
+ float uF = F(eR, hE * 32 + aN);
131
+ float uG = F(cI, hE * 32 + cp);
132
+ float uH = F(eR, hE * 32 + cp);
133
+ float v00 = mix(uA, uE, cq);
134
+ float v01 = mix(uB, uF, cq);
135
+ float v10 = mix(uC, uG, cq);
136
+ float v11 = mix(uD, uH, cq);
137
137
  return mix(
138
138
  mix(v00, v10, cz),
139
139
  mix(v01, v11, cz),
140
- kw
140
+ kE
141
141
  );
142
142
  }
143
143
 
144
- float gz(float dI, float bR) {
145
- float bA = clamp(dI, 0.0, 31.0);
144
+ float gF(float dJ, float bR) {
145
+ float bA = clamp(dJ, 0.0, 31.0);
146
146
  float aH = clamp(bR, 0.0, 31.0);
147
- int dP = int(floor(bA));
147
+ int dQ = int(floor(bA));
148
148
  int aN = int(floor(aH));
149
- int hA = min(dP + 1, 31);
149
+ int hE = min(dQ + 1, 31);
150
150
  int cp = min(aN + 1, 31);
151
- float cq = bA - float(dP);
151
+ float cq = bA - float(dQ);
152
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);
153
+ float v00 = F(aN, 1024 + dQ);
154
+ float v01 = F(cp, 1024 + dQ);
155
+ float v10 = F(aN, 1024 + hE);
156
+ float v11 = F(cp, 1024 + hE);
157
157
  return mix(
158
158
  mix(v00, v10, cq),
159
159
  mix(v01, v11, cq),
@@ -164,55 +164,55 @@ cz
164
164
 
165
165
 
166
166
  float ef(
167
- float dI,
167
+ float dJ,
168
168
  float bR,
169
- float hN
169
+ float hR
170
170
  ) {
171
- float bA = clamp(dI, 0.0, 31.0);
171
+ float bA = clamp(dJ, 0.0, 31.0);
172
172
  float aH = clamp(bR, 0.0, 31.0);
173
- float bt = clamp(hN, 0.0, 31.0);
174
- int dP = int(floor(bA));
173
+ float bt = clamp(hR, 0.0, 31.0);
174
+ int dQ = int(floor(bA));
175
175
  int aN = int(floor(aH));
176
176
  int cI = int(floor(bt));
177
- int hA = min(dP + 1, 31);
177
+ int hE = min(dQ + 1, 31);
178
178
  int cp = min(aN + 1, 31);
179
- int eO = min(cI + 1, 31);
180
- float cq = bA - float(dP);
179
+ int eR = min(cI + 1, 31);
180
+ float cq = bA - float(dQ);
181
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);
182
+ float kE = bt - float(cI);
183
+
184
+ float uA = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
185
+ float uB = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
186
+ float uC = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
187
+ float uD = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
188
+ float uE = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
189
+ float uF = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
190
+ float uG = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
191
+ float uH = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
192
+ float v00 = mix(uA, uE, cq);
193
+ float v01 = mix(uB, uF, cq);
194
+ float v10 = mix(uC, uG, cq);
195
+ float v11 = mix(uD, uH, cq);
196
196
  return mix(
197
197
  mix(v00, v10, cz),
198
198
  mix(v01, v11, cz),
199
- kw
199
+ kE
200
200
  );
201
201
  }
202
202
 
203
- float ee(float dI, float bR) {
204
- float bA = clamp(dI, 0.0, 31.0);
203
+ float ee(float dJ, float bR) {
204
+ float bA = clamp(dJ, 0.0, 31.0);
205
205
  float aH = clamp(bR, 0.0, 31.0);
206
- int dP = int(floor(bA));
206
+ int dQ = int(floor(bA));
207
207
  int aN = int(floor(aH));
208
- int hA = min(dP + 1, 31);
208
+ int hE = min(dQ + 1, 31);
209
209
  int cp = min(aN + 1, 31);
210
- float cq = bA - float(dP);
210
+ float cq = bA - float(dQ);
211
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);
212
+ float v00 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
213
+ float v01 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
214
+ float v10 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
215
+ float v11 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
216
216
  return mix(
217
217
  mix(v00, v10, cq),
218
218
  mix(v01, v11, cq),
@@ -220,19 +220,19 @@ cz
220
220
  );
221
221
  }
222
222
 
223
- float eF(float dI, float bR) {
224
- float bA = clamp(dI, 0.0, 31.0);
223
+ float eG(float dJ, float bR) {
224
+ float bA = clamp(dJ, 0.0, 31.0);
225
225
  float aH = clamp(bR, 0.0, 31.0);
226
- int dP = int(floor(bA));
226
+ int dQ = int(floor(bA));
227
227
  int aN = int(floor(aH));
228
- int hA = min(dP + 1, 31);
228
+ int hE = min(dQ + 1, 31);
229
229
  int cp = min(aN + 1, 31);
230
- float cq = bA - float(dP);
230
+ float cq = bA - float(dQ);
231
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);
232
+ float v00 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
233
+ float v01 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
234
+ float v10 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
235
+ float v11 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
236
236
  return mix(
237
237
  mix(v00, v10, cq),
238
238
  mix(v01, v11, cq),
@@ -247,21 +247,21 @@ float cO(float ior, float alpha) {
247
247
  return ee(aC(ior), sqrt(alpha) * 31.0);
248
248
  }
249
249
  float ch(float ior, float alpha) {
250
- return eF(aC(ior), sqrt(alpha) * 31.0);
250
+ return eG(aC(ior), sqrt(alpha) * 31.0);
251
251
  }
252
252
 
253
253
 
254
254
  float bH(float alpha, float au) {
255
- float hZ = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
255
+ float ie = 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(hZ));
257
+ int r0 = int(floor(ie));
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(hZ));
264
+ fract(ie));
265
265
  }
266
266
 
267
267
  float cv(float alpha) {
@@ -273,8 +273,8 @@ 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 tN = cV(2.5);
277
- float progress = (cV(ior) - tN) / (1.0 - tN);
276
+ float tU = cV(2.5);
277
+ float progress = (cV(ior) - tU) / (1.0 - tU);
278
278
  return (1.0 - progress) * value;
279
279
  }
280
280
  return value;
@@ -285,7 +285,7 @@ float ior,
285
285
  float alpha,
286
286
  float au
287
287
  ) {
288
- float value = fZ(
288
+ float value = gd(
289
289
  aC(ior),
290
290
  sqrt(alpha) * 31.0,
291
291
  au * 31.0
@@ -294,7 +294,7 @@ return aX(value, ior);
294
294
  }
295
295
 
296
296
  float cr(float ior, float alpha) {
297
- float value = gz(
297
+ float value = gF(
298
298
  aC(ior),
299
299
  sqrt(alpha) * 31.0
300
300
  );
@@ -315,8 +315,8 @@ dot(direction, basis.normal)
315
315
  );
316
316
  }
317
317
 
318
- bj fg(
319
- vec3 aU,
318
+ bj fj(
319
+ vec3 aT,
320
320
  vec3 normal,
321
321
  float anisotropy
322
322
  ) {
@@ -324,7 +324,7 @@ bj basis;
324
324
  basis.normal = normal;
325
325
  basis.tangent = vec3(0.0);
326
326
  #ifdef USE_TANGENT
327
- basis.tangent = aU;
327
+ basis.tangent = aT;
328
328
  #endif
329
329
  if (dot(basis.tangent, basis.tangent) < 0.001 || anisotropy <= 0.0) {
330
330
  aL(normal, basis.tangent, basis.bitangent);
@@ -336,7 +336,7 @@ basis.tangent = normalize(cross(basis.bitangent, normal));
336
336
  return basis;
337
337
  }
338
338
 
339
- float jT(
339
+ float ka(
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 jS(
349
+ float jZ(
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 gY(
359
+ float hc(
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 gX(
369
+ float hb(
370
370
  float av,
371
371
  float ak,
372
372
  float L,
@@ -376,7 +376,7 @@ return 2.0 * av * L
376
376
  / (av * S + ak * L);
377
377
  }
378
378
 
379
- vec2 aV(vec2 a, vec2 b) {
379
+ vec2 aU(vec2 a, vec2 b) {
380
380
  return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
381
381
  }
382
382
 
@@ -388,32 +388,32 @@ return vec2(
388
388
  );
389
389
  }
390
390
 
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);
391
+ vec2 hX(vec2 value) {
392
+ float nK = length(value);
393
+ float sP = sqrt(max(0.0, 0.5 * (nK + value.x)));
394
+ float ff = sqrt(max(0.0, 0.5 * (nK - value.x)));
395
+ return vec2(sP, value.y >= 0.0 ? ff : -ff);
396
396
  }
397
397
 
398
398
  vec2 bX(
399
399
  float L,
400
400
  float av,
401
401
  vec2 ak,
402
- bool qy
402
+ bool qG
403
403
  ) {
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
- vec2(1.0, 0.0) - aV(hw, hw)
404
+ float os = sqrt(max(0.0, 1.0 - L * L));
405
+ vec2 sA = aZ(vec2(av, 0.0), ak);
406
+ vec2 hA = sA * os;
407
+ vec2 S = hX(
408
+ vec2(1.0, 0.0) - aU(hA, hA)
409
409
  );
410
- if (aV(ak, S).y < 0.0) {
410
+ if (aU(ak, S).y < 0.0) {
411
411
  S = -S;
412
412
  }
413
413
 
414
- vec2 fH = vec2(av * L, 0.0);
415
- vec2 eA = aV(ak, S);
416
- if (qy) {
414
+ vec2 fK = vec2(av * L, 0.0);
415
+ vec2 eB = aU(ak, S);
416
+ if (qG) {
417
417
  vec2 ci = ak * L;
418
418
  vec2 ce = S * av;
419
419
  return aZ(
@@ -422,26 +422,26 @@ ci + ce
422
422
  );
423
423
  }
424
424
  return aZ(
425
- fH - eA,
426
- fH + eA
425
+ fK - eB,
426
+ fK + eB
427
427
  );
428
428
  }
429
429
 
430
430
  float eq(
431
- float iD,
432
- float gI,
433
- float oy,
434
- float mD,
435
- vec2 jY,
431
+ float iH,
432
+ float gM,
433
+ float oH,
434
+ float mN,
435
+ vec2 kf,
436
436
  float phase
437
437
  ) {
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
- vec2 hv = vec2(iD, 0.0)
443
- + aZ(kF, ap);
444
- return dot(hv, hv);
438
+ vec2 nr = vec2(cos(phase), sin(phase));
439
+ vec2 ia = aU(kf, nr);
440
+ vec2 kO = ia * (gM * mN);
441
+ vec2 ap = vec2(1.0, 0.0) - ia * oH;
442
+ vec2 hz = vec2(iH, 0.0)
443
+ + aZ(kO, ap);
444
+ return dot(hz, hz);
445
445
  }
446
446
 
447
447
  float ar(
@@ -453,53 +453,53 @@ float ck,
453
453
  vec2 eu
454
454
  ) {
455
455
  L = clamp(abs(L), 1e-5, 1.0);
456
- float hq = pow(aM / ck, 2.0)
456
+ float hu = pow(aM / ck, 2.0)
457
457
  * (1.0 - L * L);
458
- if (hq >= 1.0) {
458
+ if (hu >= 1.0) {
459
459
  return 1.0;
460
460
  }
461
- float cU = sqrt(1.0 - hq);
462
- float kS = jT(
461
+ float cU = sqrt(1.0 - hu);
462
+ float lb = ka(
463
463
  aM, ck, L, cU
464
464
  );
465
- float kR = jS(
465
+ float la = jZ(
466
466
  aM, ck, L, cU
467
467
  );
468
- float jf = gY(
468
+ float jj = hc(
469
469
  aM, ck, L, cU
470
470
  );
471
- float je = gX(
471
+ float ji = hb(
472
472
  aM, ck, L, cU
473
473
  );
474
- float gk = ck * cU
474
+ float gq = ck * cU
475
475
  / max(aM * L, 1e-9);
476
- vec2 sU = bX(
476
+ vec2 tb = bX(
477
477
  cU, ck, eu, false
478
478
  );
479
- vec2 sT = bX(
479
+ vec2 ta = bX(
480
480
  cU, ck, eu, true
481
481
  );
482
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,
483
+ float tJ = eq(
484
+ lb,
485
+ jj,
486
+ -lb,
487
+ jj * gq,
488
+ tb,
489
489
  phase
490
490
  );
491
- float tB = eq(
492
- kR,
493
- je,
494
- -kR,
495
- je * gk,
496
- sT,
491
+ float tI = eq(
492
+ la,
493
+ ji,
494
+ -la,
495
+ ji * gq,
496
+ ta,
497
497
  phase
498
498
  );
499
- return clamp(0.5 * (tC + tB), 0.0, 1.0);
499
+ return clamp(0.5 * (tJ + tI), 0.0, 1.0);
500
500
  }
501
501
 
502
- vec3 hC(
502
+ vec3 hG(
503
503
  float L,
504
504
  float cn,
505
505
  float ck,
@@ -521,37 +521,37 @@ L, 450.0, cn, aM, ck, vec2(eu, 0.0)
521
521
 
522
522
 
523
523
 
524
- vec3 dT(float au, vec3 f0, vec3 tint) {
525
- vec3 ra = mix(f0, vec3(1.0), aE(au));
526
- if (all(equal(tint, vec3(1.0)))) { return ra; }
527
- float dj = 1.0 / 7.0;
528
- float lZ = 1.0 - dj;
529
- vec3 fF = mix(f0, vec3(1.0), aE(dj));
530
- float dg = 1.0 - au;
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));
524
+ vec3 dU(float au, vec3 f0, vec3 tint) {
525
+ vec3 rk = mix(f0, vec3(1.0), aE(au));
526
+ if (all(equal(tint, vec3(1.0)))) { return rk; }
527
+ float dk = 1.0 / 7.0;
528
+ float ml = 1.0 - dk;
529
+ vec3 fI = mix(f0, vec3(1.0), aE(dk));
530
+ float di = 1.0 - au;
531
+ float qt = au * aE(au) * di
532
+ / (dk * pow(ml, 6.0));
533
+ return clamp(rk - qt * (fI - tint * fI), vec3(0.0), vec3(1.0));
534
534
  }
535
535
 
536
- vec2 cQ(float f0, float tg) {
537
- float dM = clamp(f0, 0.0, 0.99);
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
- (ior + 1.0) * (ior + 1.0) * dM
536
+ vec2 cQ(float f0, float tp) {
537
+ float dN = clamp(f0, 0.0, 0.99);
538
+ float gL = sqrt(dN);
539
+ float qF = (1.0 - dN) / (1.0 + dN);
540
+ float qD = (1.0 + gL) / max(1.0 - gL, 1e-9);
541
+ float ior = mix(qD, qF, clamp(tp, 0.0, 1.0));
542
+ float jO = (
543
+ (ior + 1.0) * (ior + 1.0) * dN
544
544
  - (ior - 1.0) * (ior - 1.0)
545
- ) / max(1.0 - dM, 1e-9);
546
- return vec2(ior, sqrt(max(jI, 0.0)));
545
+ ) / max(1.0 - dN, 1e-9);
546
+ return vec2(ior, sqrt(max(jO, 0.0)));
547
547
  }
548
548
 
549
- vec3 iT(
549
+ vec3 iY(
550
550
  float L,
551
551
  float cn,
552
552
  float ck,
553
- vec3 qW,
554
- vec3 jP,
553
+ vec3 rf,
554
+ vec3 jW,
555
555
  float aM
556
556
  ) {
557
557
  return vec3(
@@ -561,7 +561,7 @@ L,
561
561
  cn,
562
562
  aM,
563
563
  ck,
564
- cQ(qW.r, jP.r)
564
+ cQ(rf.r, jW.r)
565
565
  ),
566
566
  ar(
567
567
  L,
@@ -569,7 +569,7 @@ L,
569
569
  cn,
570
570
  aM,
571
571
  ck,
572
- cQ(qW.g, jP.g)
572
+ cQ(rf.g, jW.g)
573
573
  ),
574
574
  ar(
575
575
  L,
@@ -577,7 +577,7 @@ L,
577
577
  cn,
578
578
  aM,
579
579
  ck,
580
- cQ(qW.b, jP.b)
580
+ cQ(rf.b, jW.b)
581
581
  )
582
582
  );
583
583
  }
@@ -595,7 +595,7 @@ float eu,
595
595
  float weight,
596
596
  float aM
597
597
  ) {
598
- vec3 ph = hC(
598
+ vec3 pq = hG(
599
599
  L,
600
600
  cn,
601
601
  ck,
@@ -604,32 +604,32 @@ aM
604
604
  );
605
605
  return mix(
606
606
  ei,
607
- ph,
607
+ pq,
608
608
  bN(cn, weight)
609
609
  );
610
610
  }
611
611
 
612
- vec3 lf(
612
+ vec3 lq(
613
613
  vec3 ei,
614
614
  float L,
615
615
  float cn,
616
616
  float ck,
617
- vec3 qW,
618
- vec3 jP,
617
+ vec3 rf,
618
+ vec3 jW,
619
619
  float weight,
620
620
  float aM
621
621
  ) {
622
- vec3 ph = iT(
622
+ vec3 pq = iY(
623
623
  L,
624
624
  cn,
625
625
  ck,
626
- qW,
627
- jP,
626
+ rf,
627
+ jW,
628
628
  aM
629
629
  );
630
630
  return mix(
631
631
  ei,
632
- ph,
632
+ pq,
633
633
  bN(cn, weight)
634
634
  );
635
635
  }
@@ -639,7 +639,7 @@ J material,
639
639
  vec3 color,
640
640
  vec3 viewLocal,
641
641
  vec3 lightLocal,
642
- float fo,
642
+ float ft,
643
643
  out float pdf
644
644
  ) {
645
645
  pdf = 0.0;
@@ -648,47 +648,47 @@ return vec3(0.0);
648
648
  }
649
649
 
650
650
  float roughness = material.diffuseRoughness;
651
- float 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
- 0.0571085289 + dc * (
667
- 0.491881867 + dc * (
668
- -0.332181442 + dc * 0.0714429953
651
+ float gW = 0.5 - 2.0 / (3.0 * PI);
652
+ float oj = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
+ float oB = lightLocal.z;
654
+ float mB = viewLocal.z;
655
+ float hP = dot(lightLocal, viewLocal) - oB * mB;
656
+ float gT = hP > 0.0
657
+ ? hP / max(max(oB, mB), 1e-7)
658
+ : hP;
659
+ float il = 1.0 / (1.0 + gW * roughness);
660
+ vec3 nA = color * INVPI * il
661
+ * (1.0 + roughness * gT);
662
+
663
+ float dd = 1.0 - oB;
664
+ float cP = 1.0 - mB;
665
+ float ot = dd * (
666
+ 0.0571085289 + dd * (
667
+ 0.491881867 + dd * (
668
+ -0.332181442 + dd * 0.0714429953
669
669
  )
670
670
  )
671
671
  );
672
- float mZ = cP * (
672
+ float nq = 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 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
- / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fQ));
686
- vec3 ls = hB * INVPI
687
- * max(1e-7, 1.0 - ou)
688
- * max(1e-7, 1.0 - pm)
689
- / max(1e-7, 1.0 - fQ);
679
+ float pv = (1.0 + roughness * ot)
680
+ / (1.0 + gW * roughness);
681
+ float oD = (1.0 + roughness * nq)
682
+ / (1.0 + gW * roughness);
683
+ float fU = il * (1.0 + oj * roughness);
684
+ vec3 hF = color * color * fU
685
+ / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fU));
686
+ vec3 lF = hF * INVPI
687
+ * max(1e-7, 1.0 - oD)
688
+ * max(1e-7, 1.0 - pv)
689
+ / max(1e-7, 1.0 - fU);
690
690
  pdf = lightLocal.z * INVPI;
691
- return (ni + ls) * fo;
691
+ return (nA + lF) * ft;
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 jR(
708
+ vec3 jY(
709
709
  J material,
710
710
  vec3 viewLocal,
711
711
  vec3 lightLocal,
@@ -737,17 +737,17 @@ return vec3(0.0);
737
737
  }
738
738
 
739
739
  vec2 alpha = vec2(material.alphaX, material.alphaY);
740
- float distribution = gG(V, alpha);
741
- float jO = bk(viewLocal, alpha);
742
- float ea = jO
740
+ float distribution = gK(V, alpha);
741
+ float jV = bk(viewLocal, alpha);
742
+ float ea = jV
743
743
  * bk(lightLocal, alpha);
744
744
 
745
- pdf = jO * distribution / (4.0 * max(viewLocal.z, 1e-8));
745
+ pdf = jV * 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
  }
749
749
 
750
- vec3 dk(
750
+ vec3 dl(
751
751
  J material,
752
752
  float relativeIor,
753
753
  vec3 tint,
@@ -762,27 +762,27 @@ if (lightLocal.z >= 0.0) {
762
762
  return vec3(0.0);
763
763
  }
764
764
 
765
- float kC = dot(lightLocal, V);
765
+ float kL = dot(lightLocal, V);
766
766
  float bQ = dot(viewLocal, V);
767
767
 
768
768
 
769
- if (bQ <= 0.0 || kC >= 0.0) {
769
+ if (bQ <= 0.0 || kL >= 0.0) {
770
770
  return vec3(0.0);
771
771
  }
772
772
  vec2 alpha = vec2(material.alphaX, material.alphaY);
773
- float distribution = gG(V, alpha);
774
- float jO = bk(viewLocal, alpha);
775
- float ea = jO
773
+ float distribution = gK(V, alpha);
774
+ float jV = bk(viewLocal, alpha);
775
+ float ea = jV
776
776
  * bk(lightLocal, alpha);
777
- float ap = kC + bQ * relativeIor;
777
+ float ap = kL + bQ * relativeIor;
778
778
  ap *= ap;
779
- float pr = abs(kC) / max(ap, 1e-8);
780
- float jo = relativeIor * relativeIor;
779
+ float pJ = abs(kL) / max(ap, 1e-8);
780
+ float ju = relativeIor * relativeIor;
781
781
 
782
- pdf = jO * max(0.0, bQ) * distribution * pr
782
+ pdf = jV * max(0.0, bQ) * distribution * pJ
783
783
  / max(viewLocal.z, 1e-8);
784
784
  return tint * (vec3(1.0) - cK) * distribution * ea
785
- * abs(bQ) * pr * jo
785
+ * abs(bQ) * pJ * ju
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 gg = 2.0 * ah
806
+ vec3 gk = 2.0 * ah
807
807
  / (vec3(1.0) + ah);
808
808
  return mix(
809
809
  ah,
810
- gg,
810
+ gk,
811
811
  clamp(transmissionWeight, 0.0, 1.0)
812
812
  );
813
813
  }
@@ -821,17 +821,17 @@ vec3 tint = bn(material);
821
821
  if (!material.thinWalled) {
822
822
  return tint;
823
823
  }
824
- float iG = max(0.0, 1.0 - L * L);
825
- float dN = iG
824
+ float iL = max(0.0, 1.0 - L * L);
825
+ float dO = iL
826
826
  / max(bu * bu, 1e-9);
827
- if (dN >= 1.0) {
827
+ if (dO >= 1.0) {
828
828
  return vec3(0.0);
829
829
  }
830
- float S = sqrt(1.0 - dN);
830
+ float S = sqrt(1.0 - dO);
831
831
  return pow(max(tint, vec3(0.0)), vec3(1.0 / max(S, 1e-5)));
832
832
  }
833
833
 
834
- vec3 dL(
834
+ vec3 dM(
835
835
  J material,
836
836
  vec3 viewLocal,
837
837
  vec3 lightLocal,
@@ -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 nU = cu(
845
+ float og = cu(
846
846
  viewLocal.z,
847
847
  material.relativeIor
848
848
  );
849
849
  pdf = S * INVPI;
850
- return vec3(1.0 - nU) * INVPI;
850
+ return vec3(1.0 - og) * INVPI;
851
851
  }
852
852
 
853
- void dQ(inout ag prepared) {
853
+ void dR(inout ag prepared) {
854
854
  float total = prepared.probabilities[OPENPBR_LOBE_FUZZ];
855
- for (int hQ = 1; hQ < OPENPBR_LOBE_COUNT; hQ++) {
856
- total += prepared.probabilities[hQ];
855
+ for (int hU = 1; hU < OPENPBR_LOBE_COUNT; hU++) {
856
+ total += prepared.probabilities[hU];
857
857
  }
858
858
  if (total <= 1e-8) {
859
- for (int hQ = 0; hQ < OPENPBR_LOBE_COUNT; hQ++) {
860
- prepared.probabilities[hQ] = 0.0;
859
+ for (int hU = 0; hU < OPENPBR_LOBE_COUNT; hU++) {
860
+ prepared.probabilities[hU] = 0.0;
861
861
  }
862
862
  return;
863
863
  }
864
- float oj = 1.0 / total;
865
- for (int hQ = 0; hQ < OPENPBR_LOBE_COUNT; hQ++) {
866
- prepared.probabilities[hQ] *= oj;
864
+ float ow = 1.0 / total;
865
+ for (int hU = 0; hU < OPENPBR_LOBE_COUNT; hU++) {
866
+ prepared.probabilities[hU] *= ow;
867
867
  }
868
868
  }
869
869
 
@@ -876,9 +876,9 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
876
876
  }
877
877
 
878
878
  vec3 bP(vec3 f0, vec3 tint) {
879
- float dj = 1.0 / 7.0;
880
- vec3 fF = mix(f0, vec3(1.0), aE(dj));
881
- vec3 b = fF * (vec3(1.0) - tint) / (dj * pow(1.0 - dj, 6.0));
879
+ float dk = 1.0 / 7.0;
880
+ vec3 fI = mix(f0, vec3(1.0), aE(dk));
881
+ vec3 b = fI * (vec3(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
882
882
  return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
883
883
  }
884
884
 
@@ -886,12 +886,12 @@ return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
886
886
 
887
887
  vec3 cD(J material, float au) {
888
888
  if (au <= 0.0) { return vec3(1.0); }
889
- float 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);
889
+ float lH = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
+ vec3 tD = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lH, 1e-5)));
891
+ return mix(vec3(1.0), tD, material.coatWeight);
892
892
  }
893
893
 
894
- float gj(J material, float au) {
894
+ float gp(J material, float au) {
895
895
  if (material.coatRoughness <= ROUGHNESS_MIN) {
896
896
  return af(au, 1.0 / material.coatIor);
897
897
  }
@@ -901,34 +901,34 @@ return clamp(1.0 - aJ(material.coatIor,
901
901
  material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
902
902
  }
903
903
 
904
- vec3 gW(ag prepared) {
904
+ vec3 ha(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 tZ = dielectric * material.transmissionWeight;
910
- float fL = bM(prepared.specularEtaTOverEtaI);
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);
909
+ float ug = dielectric * material.transmissionWeight;
910
+ float fO = bM(prepared.specularEtaTOverEtaI);
911
+ float kU = bM(1.0 / prepared.transmissionReflectionIor);
912
+ float pR = clamp(opaque * fO + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
913
+ float jp = mix(1.0, material.specularRoughness, pR);
914
914
  float ks = bM(material.coatIor);
915
915
  float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
916
- float k = mix(ks, kr, jk);
916
+ float k = mix(ks, kr, jp);
917
917
  vec3 eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
918
- + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fL)
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);
918
+ + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fO)
919
+ + sss * material.subsurfaceColor + vec3(ug);
920
+ vec3 qU = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
+ return mix(vec3(1.0), qU, material.coatWeight * material.coatDarkening);
922
922
  }
923
923
 
924
- vec3 ds(ag prepared, float lb) {
924
+ vec3 ds(ag prepared, float lm) {
925
925
  if (prepared.material.coatWeight <= 0.0) { return vec3(1.0); }
926
926
  if (prepared.material.inside) {
927
927
 
928
- return cD(prepared.material, -lb);
928
+ return cD(prepared.material, -lm);
929
929
  }
930
930
 
931
- return prepared.coatBaseScale * cD(prepared.material, lb);
931
+ return prepared.coatBaseScale * cD(prepared.material, lm);
932
932
  }
933
933
 
934
934
 
@@ -946,7 +946,7 @@ basis.tangent = normalize(cross(basis.bitangent, basis.normal));
946
946
  return basis;
947
947
  }
948
948
 
949
- ag eG(
949
+ ag eH(
950
950
  vec3 tangent,
951
951
  J material,
952
952
  vec3 bF,
@@ -954,7 +954,7 @@ vec3 normal
954
954
  ) {
955
955
  ag prepared;
956
956
  prepared.material = material;
957
- prepared.basis = fg(
957
+ prepared.basis = fj(
958
958
  tangent,
959
959
  normal,
960
960
  max(material.specularAnisotropy, material.coatAnisotropy)
@@ -965,7 +965,7 @@ prepared.directionFrames = false;
965
965
 
966
966
 
967
967
  if (material.coatNormalEnabled) {
968
- prepared.coatBasis = fg(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
968
+ prepared.coatBasis = fj(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
969
969
  prepared.directionFrames = true;
970
970
  }
971
971
  #endif
@@ -984,7 +984,7 @@ prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bF);
984
984
  prepared.diffuseColor = material.baseColor;
985
985
 
986
986
  float cB = 1.0 - material.baseMetalness;
987
- float dK = cB
987
+ float dL = 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;
@@ -993,9 +993,9 @@ prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
993
993
  prepared.weights[OPENPBR_LOBE_SPECULAR] = cB;
994
994
  prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cB
995
995
  * material.transmissionWeight;
996
- prepared.weights[OPENPBR_LOBE_DIFFUSE] = dK
996
+ prepared.weights[OPENPBR_LOBE_DIFFUSE] = dL
997
997
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
998
- prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dK
998
+ prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dL
999
999
  * material.subsurfaceWeight;
1000
1000
 
1001
1001
  prepared.specularEtaTOverEtaI = aY(
@@ -1047,7 +1047,7 @@ float ah = af(
1047
1047
  viewCosine,
1048
1048
  1.0 / prepared.specularEtaTOverEtaI
1049
1049
  );
1050
- vec3 ft = material.specularColor * (
1050
+ vec3 fw = material.specularColor * (
1051
1051
  material.thinWalled
1052
1052
  ? mix(
1053
1053
  ah,
@@ -1056,30 +1056,30 @@ material.transmissionWeight
1056
1056
  )
1057
1057
  : ah
1058
1058
  );
1059
- vec3 hR = material.specularWeight * dT(
1059
+ vec3 hV = material.specularWeight * dU(
1060
1060
  viewCosine,
1061
1061
  material.baseWeight * material.baseColor,
1062
1062
  material.specularColor
1063
1063
  );
1064
- float eL = material.thinWalled
1064
+ float eO = material.thinWalled
1065
1065
  ? cS(af(viewCosine, prepared.transmissionReflectionIor))
1066
1066
  : af(viewCosine, prepared.transmissionReflectionIor);
1067
- vec3 gJ = bG(
1067
+ vec3 gN = bG(
1068
1068
  material,
1069
1069
  viewCosine,
1070
1070
  prepared.refractionEtaTOverEtaI
1071
1071
  );
1072
- float il = aJ(
1072
+ float iu = aJ(
1073
1073
  prepared.specularEtaTOverEtaI,
1074
1074
  prepared.specularAlpha,
1075
1075
  viewCosine
1076
1076
  );
1077
- float gm = cr(
1077
+ float gr = cr(
1078
1078
  prepared.specularEtaTOverEtaI,
1079
1079
  prepared.specularAlpha
1080
1080
  );
1081
- prepared.diffuseSpecularEnergyCompensation = il
1082
- / max(gm, 1e-12);
1081
+ prepared.diffuseSpecularEnergyCompensation = iu
1082
+ / max(gr, 1e-12);
1083
1083
 
1084
1084
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
1085
1085
  * aw(material.fuzzColor)
@@ -1092,11 +1092,11 @@ 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 kt = gj(material, coatViewCosine);
1095
+ float kB = gp(material, coatViewCosine);
1096
1096
  #else
1097
- float kt = gj(material, viewCosine);
1097
+ float kB = gp(material, viewCosine);
1098
1098
  #endif
1099
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kt;
1099
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kB;
1100
1100
  prepared.coatBaseScale = cD(material,
1101
1101
  #ifdef NUM_COAT_NORMAL_MAPS
1102
1102
  coatViewCosine
@@ -1104,27 +1104,27 @@ coatViewCosine
1104
1104
  viewCosine
1105
1105
  #endif
1106
1106
  )
1107
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kt) * gW(prepared);
1107
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kB) * ha(prepared);
1108
1108
  }
1109
1109
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1110
- * aw(hR);
1110
+ * aw(hV);
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 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
- prepared.probabilities[OPENPBR_LOBE_METAL] += ff;
1121
- prepared.metalMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1115
+ vec3 hL = bP(material.baseWeight * material.baseColor, material.specularColor);
1116
+ prepared.metalMsScale = material.specularWeight * hL * hL;
1117
+ float pV = bH(prepared.specularAlpha, viewCosine);
1118
+ prepared.metalMsFactor = pV / max(cv(prepared.specularAlpha), 1e-12);
1119
+ float fi = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pV;
1120
+ prepared.probabilities[OPENPBR_LOBE_METAL] += fi;
1121
+ prepared.metalMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1122
1122
  }
1123
1123
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1124
- * aw(ft);
1124
+ * aw(fw);
1125
1125
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1126
- * (1.0 - eL)
1127
- * aw(gJ);
1126
+ * (1.0 - eO)
1127
+ * aw(gN);
1128
1128
 
1129
1129
 
1130
1130
 
@@ -1139,40 +1139,40 @@ 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 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]
1142
+ float lG = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
+ prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lG;
1144
+ prepared.dielectricMsTransmissionScale = gN * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
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 nL = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
- float ff = aw(nL) * prepared.dielectricMsViewLoss;
1150
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += ff;
1151
- prepared.dielectricMsProbability = ff / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1148
+ vec3 nW = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
+ float fi = aw(nW) * prepared.dielectricMsViewLoss;
1150
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fi;
1151
+ prepared.dielectricMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1152
1152
  }
1153
1153
  prepared.probabilities[OPENPBR_LOBE_DIFFUSE] = prepared.weights[OPENPBR_LOBE_DIFFUSE]
1154
1154
  * aw(prepared.diffuseColor)
1155
1155
  * prepared.diffuseSpecularEnergyCompensation;
1156
1156
  prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1157
- * (1.0 - eL)
1157
+ * (1.0 - eO)
1158
1158
  * aw(material.subsurfaceColor)
1159
1159
  * prepared.diffuseSpecularEnergyCompensation;
1160
1160
 
1161
1161
 
1162
1162
  if (material.coatWeight > 0.0 && material.thinFilmWeight > 0.0) {
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);
1163
+ float lj = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1164
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lj);
1165
+ prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lj);
1166
1166
  }
1167
1167
  if (material.coatWeight > 0.0 && !material.inside) {
1168
- float 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
- }
1175
- dQ(prepared);
1168
+ float gs = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gs;
1170
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gs;
1171
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gs;
1172
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gs;
1173
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gs;
1174
+ }
1175
+ dR(prepared);
1176
1176
  return prepared;
1177
1177
  }
1178
1178
 
@@ -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 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);
1183
+ float kp = af(au, prepared.transmissionReflectionIor);
1184
+ if (!reflection) { return kp; }
1185
+ float nl = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1186
+ float rP = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
+ return mix(nl, kp, rP);
1188
1188
  }
1189
1189
 
1190
1190
  vec3 bI(
@@ -1286,13 +1286,13 @@ pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aI;
1286
1286
  }
1287
1287
 
1288
1288
  if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
1289
- vec3 cK = dT(
1289
+ vec3 cK = dU(
1290
1290
  bQ,
1291
1291
  material.baseWeight * material.baseColor,
1292
1292
  material.specularColor
1293
1293
  );
1294
1294
  if (material.thinFilmWeight > 0.0) {
1295
- cK = lf(
1295
+ cK = lq(
1296
1296
  cK,
1297
1297
  bQ,
1298
1298
  material.thinFilmThickness,
@@ -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 kP = vec3(lightLocal.xy, -lightLocal.z);
1339
- vec3 dd = normalize(kP + viewLocal);
1340
- if (dd.z < 0.0) {
1341
- dd = -dd;
1338
+ vec3 kY = vec3(lightLocal.xy, -lightLocal.z);
1339
+ vec3 df = normalize(kY + viewLocal);
1340
+ if (df.z < 0.0) {
1341
+ df = -df;
1342
1342
  }
1343
- float nG = abs(dot(viewLocal, dd));
1344
- vec3 lB = vec3(cR(prepared, nG, false));
1343
+ float nR = abs(dot(viewLocal, df));
1344
+ vec3 lL = vec3(cR(prepared, nR, false));
1345
1345
  if (material.thinFilmWeight > 0.0) {
1346
- lB = bW(
1347
- lB,
1348
- nG,
1346
+ lL = bW(
1347
+ lL,
1348
+ nR,
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 gg = aP(
1357
- lB,
1356
+ vec3 gk = aP(
1357
+ lL,
1358
1358
  1.0
1359
1359
  );
1360
1360
  vec3 tint = bG(
@@ -1366,15 +1366,15 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1366
1366
  * am(
1367
1367
  material,
1368
1368
  viewLocal,
1369
- kP,
1370
- dd,
1371
- tint * (vec3(1.0) - gg),
1369
+ kY,
1370
+ df,
1371
+ tint * (vec3(1.0) - gk),
1372
1372
  aI
1373
1373
  );
1374
1374
  }
1375
1375
  else {
1376
1376
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1377
- * dk(
1377
+ * dl(
1378
1378
  material,
1379
1379
  material.relativeIor,
1380
1380
  bn(material),
@@ -1392,20 +1392,20 @@ 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 nW = vec3(lightLocal.xy, -lightLocal.z);
1395
+ vec3 oi = vec3(lightLocal.xy, -lightLocal.z);
1396
1396
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1397
1397
  * cE(
1398
1398
  material,
1399
1399
  material.subsurfaceColor,
1400
1400
  viewLocal,
1401
- nW,
1401
+ oi,
1402
1402
  diffuseSpecularEnergyCompensation,
1403
1403
  aI
1404
1404
  );
1405
1405
  aI *= 0.5;
1406
1406
  }
1407
1407
  else {
1408
- response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dL(
1408
+ response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dM(
1409
1409
  material,
1410
1410
  viewLocal,
1411
1411
  lightLocal,
@@ -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 iV = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
- float tj = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1426
+ float ja = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
+ float tr = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1428
1428
  / max(cO(ior, prepared.specularAlpha), 1e-12);
1429
- float dW = min(tj * iV, 1.0 / au);
1429
+ float dW = min(tr * ja, 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 * iV * 0.5 * INVPI;
1432
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * ja * 0.5 * INVPI;
1433
1433
  }
1434
1434
  }
1435
1435
 
@@ -1456,39 +1456,39 @@ if (
1456
1456
  reflection
1457
1457
  #endif
1458
1458
  && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1459
- vec3 dH = viewLocal;
1460
- vec3 kv = lightLocal;
1461
- vec3 gr = V;
1462
- float jF = bQ;
1459
+ vec3 dI = viewLocal;
1460
+ vec3 kD = lightLocal;
1461
+ vec3 gv = V;
1462
+ float jK = bQ;
1463
1463
  if (prepared.directionFrames) {
1464
- dH = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1464
+ dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
1465
  #ifdef NUM_COAT_NORMAL_MAPS
1466
- if (independentCoat) { dH = prepared.coatViewLocal; }
1466
+ if (independentCoat) { dI = prepared.coatViewLocal; }
1467
1467
  #endif
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));
1468
+ kD = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
+ gv = normalize(kD + dI);
1470
+ if (gv.z < 0.0) { gv = -gv; }
1471
+ jK = abs(dot(dI, gv));
1472
1472
  }
1473
1473
 
1474
- vec3 kX = vec3(af(
1475
- jF,
1474
+ vec3 lg = vec3(af(
1475
+ jK,
1476
1476
  1.0 / material.coatIor
1477
1477
  ));
1478
- J dG = material;
1479
- vec2 jr = aK(material.coatRoughness, material.coatAnisotropy);
1480
- dG.alphaX = jr.x;
1481
- dG.alphaY = jr.y;
1478
+ J dH = material;
1479
+ vec2 jx = aK(material.coatRoughness, material.coatAnisotropy);
1480
+ dH.alphaX = jx.x;
1481
+ dH.alphaY = jx.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)
1485
1485
  #endif
1486
1486
  * am(
1487
- dG,
1488
1487
  dH,
1489
- kv,
1490
- gr,
1491
- kX,
1488
+ dI,
1489
+ kD,
1490
+ gv,
1491
+ lg,
1492
1492
  aI
1493
1493
  );
1494
1494
  pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
@@ -1501,19 +1501,19 @@ if (
1501
1501
  reflection
1502
1502
  #endif
1503
1503
  && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1504
- float qr = aO(
1504
+ float qz = 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] * qr)
1510
+ vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * qz)
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
- * jR(
1516
+ * jY(
1517
1517
  material,
1518
1518
  viewLocal,
1519
1519
  lightLocal,
@@ -1528,7 +1528,7 @@ if (independentCoat) { return response; }
1528
1528
  return response * abs(lightLocal.z);
1529
1529
  }
1530
1530
 
1531
- vec3 qY(
1531
+ vec3 ri(
1532
1532
  vec3 tangent,
1533
1533
  J material,
1534
1534
  vec3 bF,
@@ -1536,7 +1536,7 @@ vec3 normal,
1536
1536
  vec3 lightDirection,
1537
1537
  out float pdf
1538
1538
  ) {
1539
- ag prepared = eG(
1539
+ ag prepared = eH(
1540
1540
  tangent,
1541
1541
  material,
1542
1542
  bF,
@@ -1545,7 +1545,7 @@ normal
1545
1545
  return bI(prepared, lightDirection, pdf);
1546
1546
  }
1547
1547
 
1548
- float vP(
1548
+ float vW(
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
- qY(
1556
+ ri(
1557
1557
  tangent,
1558
1558
  material,
1559
1559
  bF,
@@ -1574,7 +1574,7 @@ out bool isTransmissionEvent
1574
1574
  J material = prepared.material;
1575
1575
  vec3 viewLocal = prepared.viewLocal;
1576
1576
  float cy = cm.x;
1577
- float fp = cm.y;
1577
+ float fu = cm.y;
1578
1578
  float bm = cm.z;
1579
1579
  pdf = 0.0;
1580
1580
  isTransmissionEvent = false;
@@ -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 hQ = 1; hQ < OPENPBR_LOBE_COUNT; hQ++) {
1603
- cdf[hQ] = cdf[hQ - 1] + prepared.probabilities[hQ];
1602
+ for (int hU = 1; hU < OPENPBR_LOBE_COUNT; hU++) {
1603
+ cdf[hU] = cdf[hU - 1] + prepared.probabilities[hU];
1604
1604
  }
1605
1605
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
1606
1606
  return vec3(0.0);
@@ -1610,24 +1610,24 @@ vec3 lightLocal;
1610
1610
  if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1611
1611
  bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1612
1612
  )) {
1613
- lightLocal = bi(vec2(cy, fp));
1613
+ lightLocal = bi(vec2(cy, fu));
1614
1614
  }
1615
1615
  else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1616
- vec3 dH = viewLocal;
1617
- if (prepared.directionFrames) { dH = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1616
+ vec3 dI = viewLocal;
1617
+ if (prepared.directionFrames) { dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1618
1618
  #ifdef NUM_COAT_NORMAL_MAPS
1619
- if (material.coatNormalEnabled) { dH = prepared.coatViewLocal; }
1619
+ if (material.coatNormalEnabled) { dI = prepared.coatViewLocal; }
1620
1620
  #endif
1621
1621
  vec3 V = aQ(
1622
- dH,
1622
+ dI,
1623
1623
 
1624
1624
  aK(material.coatRoughness, material.coatAnisotropy),
1625
- vec2(cy, fp)
1625
+ vec2(cy, fu)
1626
1626
  );
1627
1627
  if (V.z < 0.0) {
1628
1628
  V = -V;
1629
1629
  }
1630
- lightLocal = normalize(reflect(-dH, V));
1630
+ lightLocal = normalize(reflect(-dI, V));
1631
1631
  #ifdef NUM_COAT_NORMAL_MAPS
1632
1632
  if (material.coatNormalEnabled) {
1633
1633
  lightDirection = openpbr_to_world(prepared.coatBasis, lightLocal);
@@ -1638,19 +1638,19 @@ 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 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) {
1641
+ bool tw = bm < cdf[OPENPBR_LOBE_METAL];
1642
+ float rM = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
+ if (tw && rM < prepared.metalMsProbability) {
1644
1644
  float z = cy;
1645
- float fi = sqrt(max(0.0, 1.0 - z * z));
1646
- float br = TWOPI * fp;
1647
- lightLocal = vec3(fi * cos(br), fi * sin(br), z);
1645
+ float fl = sqrt(max(0.0, 1.0 - z * z));
1646
+ float br = TWOPI * fu;
1647
+ lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1648
1648
  }
1649
1649
  else {
1650
1650
  vec3 V = aQ(
1651
1651
  viewLocal,
1652
1652
  vec2(material.alphaX, material.alphaY),
1653
- vec2(cy, fp)
1653
+ vec2(cy, fu)
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 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;
1665
+ float us = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
+ if (prepared.dielectricMsProbability > 0.0 && us < prepared.dielectricMsProbability) {
1667
+ float ja = prepared.dielectricMsReflectionRatio;
1668
+ bool lZ = cy < ja;
1669
1669
  float z;
1670
- if (lP) { z = min(cy / iV, 0.99999994); }
1671
- else { z = -min((cy - iV) / (1.0 - iV), 0.99999994); }
1672
- float fi = sqrt(max(0.0, 1.0 - z * z));
1673
- float br = TWOPI * fp;
1674
- lightLocal = vec3(fi * cos(br), fi * sin(br), z);
1675
- isTransmissionEvent = !lP;
1670
+ if (lZ) { z = min(cy / ja, 0.99999994); }
1671
+ else { z = -min((cy - ja) / (1.0 - ja), 0.99999994); }
1672
+ float fl = sqrt(max(0.0, 1.0 - z * z));
1673
+ float br = TWOPI * fu;
1674
+ lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1675
+ isTransmissionEvent = !lZ;
1676
1676
  }
1677
1677
  else {
1678
1678
  vec3 V = aQ(
1679
1679
  viewLocal,
1680
1680
  vec2(material.alphaX, material.alphaY),
1681
- vec2(cy, fp)
1681
+ vec2(cy, fu)
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 hV = normalize(reflect(-viewLocal, V));
1704
- lightLocal = vec3(hV.xy, -hV.z);
1703
+ vec3 hZ = normalize(reflect(-viewLocal, V));
1704
+ lightLocal = vec3(hZ.xy, -hZ.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 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) {
1723
+ float kK = cy;
1724
+ bool pT = kK >= 0.5;
1725
+ cy = pT
1726
+ ? (kK - 0.5) * 2.0
1727
+ : kK * 2.0;
1728
+ lightLocal = bi(vec2(cy, fu));
1729
+ if (pT) {
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(cy, fp));
1737
+ lightLocal = bi(vec2(cy, fu));
1738
1738
  lightLocal.z = -lightLocal.z;
1739
1739
  }
1740
1740
  }
@@ -1751,7 +1751,7 @@ if (material.coatNormalEnabled &&
1751
1751
  return bI(prepared, lightDirection, pdf);
1752
1752
  }
1753
1753
 
1754
- vec3 sB(
1754
+ vec3 sJ(
1755
1755
  vec3 tangent,
1756
1756
  J material,
1757
1757
  vec3 cm,
@@ -1761,7 +1761,7 @@ out vec3 lightDirection,
1761
1761
  out float pdf,
1762
1762
  out bool isTransmissionEvent
1763
1763
  ) {
1764
- ag prepared = eG(tangent, material, bF, normal);
1764
+ ag prepared = eH(tangent, material, bF, normal);
1765
1765
  return dv(prepared, cm, lightDirection, pdf, isTransmissionEvent);
1766
1766
  }`;
1767
1767
  //# sourceMappingURL=openPbrBsdf.glsl.js.map