@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
@@ -4,7 +4,7 @@
4
4
  export function createSampleMaterialWgsl(hasAnisotropyDirections = true, hasCoatNormals = false) {
5
5
  return /* wgsl */ `
6
6
 
7
- struct mO {
7
+ struct mR {
8
8
  ray: Ray,
9
9
  maxDistance: f32,
10
10
  triangleIndex: i32,
@@ -16,26 +16,26 @@ lightSelectionPmf: f32,
16
16
  valid: bool,
17
17
  }
18
18
 
19
- fn qe(
19
+ fn qi(
20
20
  si: ptr<function, ad>,
21
21
  ma: J,
22
22
  prepared: ag,
23
23
  aa: ptr<function, Path>,
24
24
  ffnormal: vec3f,
25
- gw: bool,
25
+ gy: bool,
26
26
  ca: u32,
27
27
  aW: u32,
28
- gd: ptr<function, mO>
28
+ ge: ptr<function, mR>
29
29
  ) -> bool {
30
- (*gd).valid = false;
31
- (*gd).lightSelectionPmf = 0.0;
32
- (*gd).risTarget = 0.0;
33
- let kZ = vec3f(fk(qR(ca, 1u)), dz(qR(ca, 0u)));
30
+ (*ge).valid = false;
31
+ (*ge).lightSelectionPmf = 0.0;
32
+ (*ge).risTarget = 0.0;
33
+ let lc = vec3f(fk(qV(ca, 1u)), dz(qV(ca, 0u)));
34
34
 
35
35
  var lightSample: LightSampleRec;
36
- mv(
36
+ my(
37
37
  (*si).position,
38
- kZ,
38
+ lc,
39
39
  ca,
40
40
  aW,
41
41
  &lightSample
@@ -43,13 +43,13 @@ aW,
43
43
  var Li = lightSample.emission;
44
44
 
45
45
  let lightDir = lightSample.direction;
46
- let oH = -(*aa).ray.d;
46
+ let oK = -(*aa).ray.d;
47
47
  let fd = lightSample.pdf;
48
48
  let lightSelectionPmf = lightSample.selectionPmf;
49
49
 
50
50
 
51
51
  ${hasCoatNormals ? /* wgsl */ `var cosThetaL = dot(ffnormal, lightDir);
52
- if (gw && ma.coatNormalEnabled) { cosThetaL = dot(ma.geometricNormal, lightDir); }` : 'let cosThetaL = dot(ffnormal, lightDir);'}
52
+ if (gy && ma.coatNormalEnabled) { cosThetaL = dot(ma.geometricNormal, lightDir); }` : 'let cosThetaL = dot(ffnormal, lightDir);'}
53
53
 
54
54
  if (fd <= 0.0 || lightSelectionPmf <= 0.0 ||
55
55
  max(max(Li.x, Li.y), Li.z) <= 0.0) {
@@ -58,7 +58,7 @@ return false;
58
58
 
59
59
  var scatteringPdf = 0.0;
60
60
  var f = vec3f(0.0);
61
- if (gw) {
61
+ if (gy) {
62
62
 
63
63
 
64
64
  if (cosThetaL <= 0.0 && ma.transmissionWeight <= 0.0 && ma.subsurfaceWeight <= 0.0) {
@@ -68,7 +68,7 @@ f = bI(prepared, lightDir, &scatteringPdf);
68
68
  }
69
69
  else {
70
70
  scatteringPdf = bD(
71
- dot(oH, lightDir),
71
+ dot(oK, lightDir),
72
72
  (*si).mediumAnisotropy
73
73
  );
74
74
  f = vec3f(scatteringPdf);
@@ -78,10 +78,10 @@ if (scatteringPdf <= 0.0 || max(max(f.x, f.y), f.z) <= 0.0) {
78
78
  return false;
79
79
  }
80
80
 
81
- var ml: Ray;
82
- var hc = (*si).position + EPS * lightDir;
83
- if (gw) {
84
- hc = rD((*si).position, (*si).faceNormal, lightDir);
81
+ var mp: Ray;
82
+ var hd = (*si).position + EPS * lightDir;
83
+ if (gy) {
84
+ hd = rI((*si).position, (*si).faceNormal, lightDir);
85
85
  let bZ = 0.1;
86
86
  var dr = dot((*si).normal, lightDir);
87
87
  ${hasCoatNormals ? /* wgsl */ ` if (ma.coatNormalEnabled) { dr = dot((*si).faceNormal, lightDir); }` : ''}
@@ -91,39 +91,39 @@ let geometricNormal = select(
91
91
  dr < 0.0
92
92
  );
93
93
  dr = abs(dr);
94
- let hP = dot(geometricNormal, lightDir);
95
- let oo = select(
96
- clamp(1.0 - hP / bZ, 0.0, 1.0),
94
+ let hO = dot(geometricNormal, lightDir);
95
+ let ot = select(
96
+ clamp(1.0 - hO / bZ, 0.0, 1.0),
97
97
  clamp(
98
- 2.0 - (hP + dr) / bZ,
98
+ 2.0 - (hO + dr) / bZ,
99
99
  0.0,
100
100
  1.0
101
101
  ),
102
102
  dr < bZ
103
103
  );
104
- hc += (*si).shadowOffset * oo;
104
+ hd += (*si).shadowOffset * ot;
105
105
  }
106
106
 
107
107
 
108
108
 
109
109
 
110
- var lE = lightDir;
111
- var mC = lightSample.dist - EPS;
110
+ var lH = lightDir;
111
+ var mF = lightSample.dist - EPS;
112
112
  if (lightSample.sourceType == 1u) {
113
- let sM =
113
+ let sR =
114
114
  (*si).position + lightSample.direction * lightSample.dist;
115
- let pS = sM + EPS * lightSample.normal;
116
- let qd = pS - hc;
117
- mC = length(qd);
118
- lE = normalize(qd);
115
+ let pW = sR + EPS * lightSample.normal;
116
+ let qh = pW - hd;
117
+ mF = length(qh);
118
+ lH = normalize(qh);
119
119
  }
120
- iw(&ml, hc, lE);
120
+ iw(&mp, hd, lH);
121
121
 
122
122
 
123
123
 
124
124
 
125
- if (gw && cosThetaL < 0.0 && lightSample.sourceType == 0u) {
126
- let background = hE(ml);
125
+ if (gy && cosThetaL < 0.0 && lightSample.sourceType == 0u) {
126
+ let background = hD(mp);
127
127
  Li = background.rgb * background.a;
128
128
  }
129
129
  if (SPECTRAL) {
@@ -133,77 +133,77 @@ Li = ai(Li, (*si).wavelength);
133
133
 
134
134
 
135
135
  let eW = select(
136
- tk(fd, scatteringPdf),
136
+ tq(fd, scatteringPdf),
137
137
  1.0,
138
138
  lightSample.isDelta
139
139
  );
140
140
  if (eW > 0.0) {
141
- let kh = Li * f / fd * (*aa).beta;
142
- (*gd).risTarget = max(
143
- dot(max(kh * lightSelectionPmf, vec3f(0.0)), luminance),
141
+ let kj = Li * f / fd * (*aa).beta;
142
+ (*ge).risTarget = max(
143
+ dot(max(kj * lightSelectionPmf, vec3f(0.0)), luminance),
144
144
  0.0
145
145
  );
146
- (*gd).ray = ml;
147
- (*gd).maxDistance = mC;
148
- (*gd).triangleIndex = (*si).triangleIndex;
149
- (*gd).contribution = eW * kh;
150
- (*gd).lightSelectionPmf = lightSelectionPmf;
151
- (*gd).valid = true;
146
+ (*ge).ray = mp;
147
+ (*ge).maxDistance = mF;
148
+ (*ge).triangleIndex = (*si).triangleIndex;
149
+ (*ge).contribution = eW * kj;
150
+ (*ge).lightSelectionPmf = lightSelectionPmf;
151
+ (*ge).valid = true;
152
152
  return true;
153
153
  }
154
154
  return false;
155
155
  }
156
156
 
157
- fn mG(
157
+ fn mJ(
158
158
  si: ptr<function, ad>,
159
159
  ma: J,
160
160
  prepared: ag,
161
161
  aa: ptr<function, Path>,
162
162
  ffnormal: vec3f,
163
- gw: bool
163
+ gy: bool
164
164
  ) {
165
- let aW = jO();
166
- var selected: mO;
165
+ let aW = jQ();
166
+ var selected: mR;
167
167
  selected.valid = false;
168
- var mw = 0.0;
169
- var ls = 0.0;
168
+ var mz = 0.0;
169
+ var lv = 0.0;
170
170
 
171
171
 
172
172
  for (var ca = 0u; ca < aW; ca++) {
173
- var candidate: mO;
174
- let oW = qe(
175
- si, ma, prepared, aa, ffnormal, gw,
173
+ var candidate: mR;
174
+ let pa = qi(
175
+ si, ma, prepared, aa, ffnormal, gy,
176
176
  ca, aW, &candidate);
177
177
  if (aW == 1u) {
178
- if (!oW) { return; }
178
+ if (!pa) { return; }
179
179
  selected = candidate;
180
180
  break;
181
181
  }
182
- if (!oW) { continue; }
183
- let ka = candidate.risTarget / max(candidate.lightSelectionPmf, 1e-20);
184
- if (!(ka > 0.0) || ka != ka) { continue; }
185
- ls += ka;
182
+ if (!pa) { continue; }
183
+ let kc = candidate.risTarget / max(candidate.lightSelectionPmf, 1e-20);
184
+ if (!(kc > 0.0) || kc != kc) { continue; }
185
+ lv += kc;
186
186
  if (!selected.valid ||
187
- po(ca) * ls <= ka) {
187
+ ps(ca) * lv <= kc) {
188
188
  selected = candidate;
189
- mw = candidate.risTarget;
189
+ mz = candidate.risTarget;
190
190
  }
191
191
  }
192
- var qC = 1.0;
192
+ var qG = 1.0;
193
193
  if (aW > 1u) {
194
- if (!selected.valid || mw <= 0.0) { return; }
194
+ if (!selected.valid || mz <= 0.0) { return; }
195
195
 
196
196
 
197
- qC = selected.lightSelectionPmf * ls /
198
- (f32(aW) * mw);
197
+ qG = selected.lightSelectionPmf * lv /
198
+ (f32(aW) * mz);
199
199
  }
200
200
  if (selected.valid &&
201
201
  !ex(selected.ray, selected.maxDistance, selected.triangleIndex)) {
202
- (*aa).li += selected.contribution * qC;
202
+ (*aa).li += selected.contribution * qG;
203
203
  }
204
204
  }
205
205
 
206
- fn pc(
206
+ fn pg(
207
207
  si: ptr<function, ad>,
208
208
  aa: ptr<function, Path>
209
209
  ) -> f32 {
@@ -215,54 +215,54 @@ let samplingLuminance = dot(
215
215
  materialsBuffer[(*si).materialIndex].emission,
216
216
  luminance
217
217
  );
218
- let oZ = dot((*si).faceNormal, -(*aa).ray.d);
219
- if (samplingLuminance <= 0.0 || oZ <= 0.0) {
218
+ let pd = dot((*si).faceNormal, -(*aa).ray.d);
219
+ if (samplingLuminance <= 0.0 || pd <= 0.0) {
220
220
  return 1.0;
221
221
  }
222
- let rL = distance((*si).position, (*aa).ray.o);
222
+ let rQ = distance((*si).position, (*aa).ray.o);
223
223
  let fd = samplingLuminance / rtUniform.lightWeightTotal *
224
- rL * rL / max(oZ, 1e-8);
224
+ rQ * rQ / max(pd, 1e-8);
225
225
  return fS((*aa).scatteringPdf, fd);
226
226
  }
227
227
 
228
228
  ${hasCoatNormals ? /* wgsl */ `
229
229
 
230
230
 
231
- fn fB(input: vec3f, tc: vec3f, view: vec3f) -> vec3f {
232
- let qL = dot(tc, view) >= 0.0;
233
- let ub = select(-tc, tc, qL);
234
- let qK = select(-input, input, qL);
235
- if (dot(input, tc) <= 0.0 || dot(qK, view) <= 1e-6) { return ub; }
236
- return qK;
231
+ fn fB(input: vec3f, th: vec3f, view: vec3f) -> vec3f {
232
+ let qQ = dot(th, view) >= 0.0;
233
+ let uh = select(-th, th, qQ);
234
+ let qP = select(-input, input, qQ);
235
+ if (dot(input, th) <= 0.0 || dot(qP, view) <= 1e-6) { return uh; }
236
+ return qP;
237
237
  }
238
238
  ` : ''}
239
- fn lO(
239
+ fn lR(
240
240
  si: ptr<function, ad>,
241
241
  ma: ptr<function, J>,
242
242
  aa: ptr<function, Path>
243
243
  ) {
244
244
  ${hasCoatNormals ? /* wgsl */ `
245
245
  let bC = (*si).faceNormal;
246
- let mr = (*si).normal;
246
+ let mv = (*si).normal;
247
247
  ` : ''}
248
- var rA: f32 = -dot((*si).faceNormal, (*aa).ray.d);
249
- var sq: f32 = -dot((*si).normal, (*aa).ray.d);
248
+ var rF: f32 = -dot((*si).faceNormal, (*aa).ray.d);
249
+ var sw: f32 = -dot((*si).normal, (*aa).ray.d);
250
250
  if (((*ma).transmissionWeight > 0.0 || (*ma).subsurfaceWeight > 0.0) && (*ma).thinWalled) {
251
251
 
252
- if (rA < 0.0) {
252
+ if (rF < 0.0) {
253
253
  (*si).faceNormal = -(*si).faceNormal;
254
- rA = -rA;
254
+ rF = -rF;
255
255
  }
256
- if (sq < 0.0) {
256
+ if (sw < 0.0) {
257
257
  (*si).normal = -(*si).normal;
258
- sq = -sq;
258
+ sw = -sw;
259
259
  }
260
260
  }
261
261
 
262
262
 
263
- var pI: bool = rA >= 0.0 && sq < 0.0;
264
- var ndv: f32 = select(sq, rA, pI);
265
- var N: vec3f = select((*si).normal, (*si).faceNormal, pI);
263
+ var pM: bool = rF >= 0.0 && sw < 0.0;
264
+ var ndv: f32 = select(sw, rF, pM);
265
+ var N: vec3f = select((*si).normal, (*si).faceNormal, pM);
266
266
 
267
267
  (*ma).inside = ndv <= 0.0 && !(*ma).thinWalled;
268
268
 
@@ -273,7 +273,7 @@ if ((*ma).coatNormalEnabled) {
273
273
  let view = -(*aa).ray.d;
274
274
  let fW = dot(bC, view);
275
275
  (*ma).geometricNormal = select(-bC, bC, fW >= 0.0);
276
- ffnormal = fB(mr, bC, view);
276
+ ffnormal = fB(mv, bC, view);
277
277
  (*ma).coatNormal = fB((*si).coatNormal, bC, view);
278
278
  (*ma).inside = fW <= 0.0 && !(*ma).thinWalled;
279
279
  (*ma).relativeIor = select((*ma).specularIor, 1.0 / (*ma).specularIor, fW > 0.0 || (*ma).thinWalled);
@@ -286,46 +286,46 @@ var hj = false;
286
286
  let mediumType = (*si).mediumType;
287
287
 
288
288
  var scatteringPdf: f32;
289
- var cF: vec3f;
289
+ var cG: vec3f;
290
290
 
291
291
  if (HAS_MEDIUM) {
292
292
  let d = distance((*si).position, (*aa).ray.o);
293
- let ne = (*aa).ray.o;
293
+ let nh = (*aa).ray.o;
294
294
  let extinction = (*si).mediumExtinction;
295
295
  let scattering = min((*si).mediumScattering, extinction);
296
- let sl = max(max(extinction.x, extinction.y), extinction.z);
297
- if (mediumType > 0 && sl > 0.0) {
296
+ let sr = max(max(extinction.x, extinction.y), extinction.z);
297
+ if (mediumType > 0 && sr > 0.0) {
298
298
 
299
299
 
300
- let mT = min(i32(dz(cv(MEDIUM_CHANNEL)) * 3.0), 2);
301
- let fA = extinction[mT];
302
- let ic = select(
300
+ let mW = min(i32(dz(cw(MEDIUM_CHANNEL)) * 3.0), 2);
301
+ let fA = extinction[mW];
302
+ let ib = select(
303
303
  d,
304
- min(-log(max(dz(cv(MEDIUM_DISTANCE)), 1e-7)) / fA, d),
304
+ min(-log(max(dz(cw(MEDIUM_DISTANCE)), 1e-7)) / fA, d),
305
305
  fA > 0.0
306
306
  );
307
- bl = ic < d;
308
- let ew = exp(-extinction * ic);
309
- let nM = select(
307
+ bl = ib < d;
308
+ let ew = exp(-extinction * ib);
309
+ let nP = select(
310
310
  ew,
311
311
  extinction * ew,
312
312
  bl
313
313
  );
314
- let nt = max((nM.x + nM.y + nM.z) / 3.0, 1e-8);
314
+ let nA = max((nP.x + nP.y + nP.z) / 3.0, 1e-8);
315
315
  if (bl) {
316
- (*aa).beta *= ew * scattering / nt;
316
+ (*aa).beta *= ew * scattering / nA;
317
317
 
318
- (*aa).ray.o = ne + ic * (*aa).ray.d;
318
+ (*aa).ray.o = nh + ib * (*aa).ray.d;
319
319
  (*si).position = (*aa).ray.o;
320
320
  }
321
321
  else {
322
- (*aa).beta *= ew / nt;
322
+ (*aa).beta *= ew / nA;
323
323
  }
324
324
  }
325
325
  }
326
326
 
327
327
  if (!bl) {
328
- (*aa).li += pc(si, aa) * (*ma).emission * (*aa).beta;
328
+ (*aa).li += pg(si, aa) * (*ma).emission * (*aa).beta;
329
329
  }
330
330
  if ((*ma).materialType == UNLIT) {
331
331
  (*aa).abort = true;
@@ -343,16 +343,16 @@ ${hasAnisotropyDirections ? /* wgsl */ `
343
343
  ` : /* wgsl */ ``}
344
344
  prepared = eG((*si).tangent, *ma, -(*aa).ray.d, ffnormal);
345
345
  }
346
- mG(si, *ma, prepared, aa, ffnormal, !bl);
346
+ mJ(si, *ma, prepared, aa, ffnormal, !bl);
347
347
  if (bl) {
348
348
 
349
- cF = fl(
349
+ cG = fl(
350
350
  -(*aa).ray.d,
351
351
  (*si).mediumAnisotropy,
352
- fk(cv(PHASE_DIRECTION))
352
+ fk(cw(PHASE_DIRECTION))
353
353
  );
354
354
  scatteringPdf = bD(
355
- dot(cF, -(*aa).ray.d),
355
+ dot(cG, -(*aa).ray.d),
356
356
  (*si).mediumAnisotropy
357
357
  );
358
358
  }
@@ -363,21 +363,21 @@ var aA = 1.0;
363
363
  var aT = false;
364
364
  var bE = true;
365
365
  var aR = u32(OPENPBR_LOBE_DIFFUSE);
366
- var qw = 0.0;
367
- let ud = vec3f(fk(cv(BSDF_DIRECTION)), dz(cv(BSDF_LOBE)));
368
- var gR = vec3f(0.0);
366
+ var qA = 0.0;
367
+ let uj = vec3f(fk(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
368
+ var gT = vec3f(0.0);
369
369
  let f = dv(
370
370
  prepared,
371
- ud,
372
- &cF,
371
+ uj,
372
+ &cG,
373
373
  &scatteringPdf,
374
374
  &isNextRefraction,
375
375
  &aA,
376
376
  &aT,
377
377
  &bE,
378
378
  &aR,
379
- &qw,
380
- &gR
379
+ &qA,
380
+ &gT
381
381
  );
382
382
 
383
383
 
@@ -385,7 +385,7 @@ ud,
385
385
 
386
386
  if (!(scatteringPdf > 0.0) ||
387
387
  !all(f == f) || !all(abs(f) < vec3f(3.402823e38)) ||
388
- dot(cF, cF) < 0.5) {
388
+ dot(cG, cG) < 0.5) {
389
389
  (*aa).scatteringPdf = 0.0;
390
390
  (*aa).abort = true;
391
391
  return;
@@ -401,13 +401,13 @@ hj = isNextRefraction && !(*ma).thinWalled;
401
401
  (*aa).isNextRefraction = isNextRefraction;
402
402
 
403
403
 
404
- (*aa).ray.o = (*si).position + EPS * cF;
404
+ (*aa).ray.o = (*si).position + EPS * cG;
405
405
  ${hasCoatNormals ? /* wgsl */ `
406
- if ((*ma).coatNormalEnabled) { (*aa).ray.o = (*si).position + EPS * select(-bC, bC, dot(bC, cF) >= 0.0); }
406
+ if ((*ma).coatNormalEnabled) { (*aa).ray.o = (*si).position + EPS * select(-bC, bC, dot(bC, cG) >= 0.0); }
407
407
  ` : ''}
408
408
  }
409
409
  (*aa).scatteringPdf = scatteringPdf;
410
- (*aa).ray.d = cF;
410
+ (*aa).ray.d = cG;
411
411
  if (bl) {
412
412
  (*aa).isNextRefraction = false;
413
413
  }
@@ -418,7 +418,7 @@ if (HAS_MEDIUM) {
418
418
 
419
419
 
420
420
  if (!bl && hj && (*ma).mediumType > 0) {
421
- if (rA >= 0.0) {
421
+ if (rF >= 0.0) {
422
422
  (*si).mediumType = (*ma).mediumType;
423
423
  (*si).mediumExtinction = (*ma).mediumExtinction;
424
424
  (*si).mediumScattering = (*ma).mediumScattering;
@@ -11,19 +11,19 @@ export default /*wgsl*/ `
11
11
  const SHADOW_CATCHER_LIGHT_SAMPLES = 4u;
12
12
 
13
13
  fn sampleShadowCatcher(si: ad, bounce: i32, aa: ptr<function, Path>) {
14
- let oH = -(*aa).ray.d;
14
+ let oK = -(*aa).ray.d;
15
15
 
16
16
 
17
17
  if (rtUniform.lightChoiceCount > 0) {
18
18
  var shadow = 0.0;
19
19
  for (var candidate = 0u; candidate < SHADOW_CATCHER_LIGHT_SAMPLES; candidate++) {
20
20
  var lightSample: LightSampleRec;
21
- let kZ = vec3f(fk(qR(candidate, 1u)), dz(qR(candidate, 0u)));
22
- sampleLight(si.position, kZ, &lightSample, false);
21
+ let lc = vec3f(fk(qV(candidate, 1u)), dz(qV(candidate, 0u)));
22
+ sampleLight(si.position, lc, &lightSample, false);
23
23
  let lightDir = lightSample.direction;
24
24
  let cosThetaL = dot(si.normal, lightDir);
25
- let pq = dot(si.normal, oH) * cosThetaL;
26
- if (lightSample.pdf > 0.0 && pq >= 0.0) {
25
+ let pv = dot(si.normal, oK) * cosThetaL;
26
+ if (lightSample.pdf > 0.0 && pv >= 0.0) {
27
27
  var ray: Ray;
28
28
  iw(&ray, si.position + EPS * lightDir, lightDir);
29
29
  if (ex(ray, lightSample.dist - EPS, si.triangleIndex)) {