@meimu/mutracer 0.1.2 → 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 (125) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +4475 -4337
  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 +68 -68
  17. package/lib/renderer/WGPURayTraceOutput.js +16 -14
  18. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  19. package/lib/renderer/WGPURayTracePass.d.ts +2 -0
  20. package/lib/renderer/WGPURayTracePass.js +13 -7
  21. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  22. package/lib/renderer/WGPURenderingPipeline.js +24 -22
  23. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  24. package/lib/renderer/WebGLJNLMDenoiser.js +68 -68
  25. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  26. package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
  27. package/lib/renderer/WebGLRayTracePass.js +7 -1
  28. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  29. package/lib/renderer/envMapCreation.d.ts +5 -1
  30. package/lib/renderer/envMapCreation.js +42 -5
  31. package/lib/renderer/envMapCreation.js.map +1 -1
  32. package/lib/renderer/geometryUpdates.js +1 -1
  33. package/lib/renderer/geometryUpdates.js.map +1 -1
  34. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  35. package/lib/renderer/glsl/chunks/envMap.glsl.js +69 -57
  36. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  37. package/lib/renderer/glsl/chunks/intersect.glsl.js +316 -310
  38. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  39. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +153 -121
  40. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  41. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +540 -540
  42. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  43. package/lib/renderer/glsl/chunks/random.glsl.js +4 -4
  44. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +40 -39
  45. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  46. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +71 -71
  47. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +84 -84
  48. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +13 -13
  49. package/lib/renderer/glsl/chunks/sampling.glsl.js +77 -77
  50. package/lib/renderer/glsl/chunks/sobol.glsl.js +65 -65
  51. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  52. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  53. package/lib/renderer/glsl/depthQuery.frag.js +5 -5
  54. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  55. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  56. package/lib/renderer/glsl/rayTrace.frag.js +165 -165
  57. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  58. package/lib/renderer/glsl/shadowCatcher.frag.js +14 -14
  59. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  60. package/lib/renderer/glsl/webglPipeline.frag.js +56 -56
  61. package/lib/renderer/lightsUtil.js +7 -5
  62. package/lib/renderer/lightsUtil.js.map +1 -1
  63. package/lib/renderer/materialChanges.js +1 -1
  64. package/lib/renderer/materialChanges.js.map +1 -1
  65. package/lib/renderer/materialComparison.generated.js +36 -18
  66. package/lib/renderer/materialComparison.generated.js.map +1 -1
  67. package/lib/renderer/prepareMeshBVH.js +2 -2
  68. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  69. package/lib/renderer/sceneChangeDetector.js +4 -1
  70. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  71. package/lib/renderer/sceneLightChanges.js +3 -2
  72. package/lib/renderer/sceneLightChanges.js.map +1 -1
  73. package/lib/renderer/scratchSampling.js +18 -18
  74. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  75. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  76. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
  77. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  78. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +475 -469
  79. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  80. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
  81. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +95 -61
  82. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  83. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +562 -562
  84. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  85. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
  86. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  87. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  88. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
  89. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  90. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +128 -128
  91. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +143 -143
  92. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
  93. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +75 -75
  94. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
  95. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
  96. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  97. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +69 -69
  98. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  99. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
  100. package/lib/renderer/wgsl/compose.frag.wgsl.js +130 -102
  101. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  102. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  103. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  104. package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
  105. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  106. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  107. package/lib/renderer/wgsl/rayTrace.compute.js +289 -277
  108. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  109. package/lib/scene/EnvironmentLight.d.ts +9 -3
  110. package/lib/scene/EnvironmentLight.js +9 -2
  111. package/lib/scene/EnvironmentLight.js.map +1 -1
  112. package/lib/scene/Scene.d.ts +4 -0
  113. package/lib/scene/Scene.js.map +1 -1
  114. package/lib/scene/SpotLight.d.ts +2 -2
  115. package/lib/scene/SpotLight.js +1 -1
  116. package/lib/scene/SpotLight.js.map +1 -1
  117. package/lib/scene/Texture.d.ts +17 -6
  118. package/lib/scene/Texture.js +13 -4
  119. package/lib/scene/Texture.js.map +1 -1
  120. package/lib/util/fromTHREE.js +151 -29
  121. package/lib/util/fromTHREE.js.map +1 -1
  122. package/lib/version.d.ts +1 -1
  123. package/lib/version.js +1 -1
  124. package/lib/version.js.map +1 -1
  125. package/package.json +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 nf {
8
8
  ray: Ray,
9
9
  maxDistance: f32,
10
10
  triangleIndex: i32,
@@ -16,49 +16,49 @@ lightSelectionPmf: f32,
16
16
  valid: bool,
17
17
  }
18
18
 
19
- fn qe(
19
+ fn qq(
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
+ gE: bool,
26
26
  ca: u32,
27
- aW: u32,
28
- gd: ptr<function, mO>
27
+ aV: u32,
28
+ gi: ptr<function, nf>
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
+ (*gi).valid = false;
31
+ (*gi).lightSelectionPmf = 0.0;
32
+ (*gi).risTarget = 0.0;
33
+ let ln = vec3f(fo(rd(ca, 1u)), dz(rd(ca, 0u)));
34
34
 
35
35
  var lightSample: LightSampleRec;
36
- mv(
36
+ mI(
37
37
  (*si).position,
38
- kZ,
38
+ ln,
39
39
  ca,
40
- aW,
40
+ aV,
41
41
  &lightSample
42
42
  );
43
43
  var Li = lightSample.emission;
44
44
 
45
45
  let lightDir = lightSample.direction;
46
- let oH = -(*aa).ray.d;
47
- let fd = lightSample.pdf;
46
+ let oT = -(*aa).ray.d;
47
+ let fg = 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 (gE && ma.coatNormalEnabled) { cosThetaL = dot(ma.geometricNormal, lightDir); }` : 'let cosThetaL = dot(ffnormal, lightDir);'}
53
53
 
54
- if (fd <= 0.0 || lightSelectionPmf <= 0.0 ||
54
+ if (fg <= 0.0 || lightSelectionPmf <= 0.0 ||
55
55
  max(max(Li.x, Li.y), Li.z) <= 0.0) {
56
56
  return false;
57
57
  }
58
58
 
59
59
  var scatteringPdf = 0.0;
60
60
  var f = vec3f(0.0);
61
- if (gw) {
61
+ if (gE) {
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(oT, 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 mA: Ray;
82
+ var hi = (*si).position + EPS * lightDir;
83
+ if (gE) {
84
+ hi = rQ((*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 hS = dot(geometricNormal, lightDir);
95
+ let oC = select(
96
+ clamp(1.0 - hS / bZ, 0.0, 1.0),
97
97
  clamp(
98
- 2.0 - (hP + dr) / bZ,
98
+ 2.0 - (hS + dr) / bZ,
99
99
  0.0,
100
100
  1.0
101
101
  ),
102
102
  dr < bZ
103
103
  );
104
- hc += (*si).shadowOffset * oo;
104
+ hi += (*si).shadowOffset * oC;
105
105
  }
106
106
 
107
107
 
108
108
 
109
109
 
110
- var lE = lightDir;
111
- var mC = lightSample.dist - EPS;
110
+ var lR = lightDir;
111
+ var mP = lightSample.dist - EPS;
112
112
  if (lightSample.sourceType == 1u) {
113
- let sM =
113
+ let sY =
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 qe = sY + EPS * lightSample.normal;
116
+ let qp = qe - hi;
117
+ mP = length(qp);
118
+ lR = normalize(qp);
119
119
  }
120
- iw(&ml, hc, lE);
120
+ iC(&mA, hi, lR);
121
121
 
122
122
 
123
123
 
124
124
 
125
- if (gw && cosThetaL < 0.0 && lightSample.sourceType == 0u) {
126
- let background = hE(ml);
125
+ if (gE && cosThetaL < 0.0 && lightSample.sourceType == 0u) {
126
+ let background = hH(mA);
127
127
  Li = background.rgb * background.a;
128
128
  }
129
129
  if (SPECTRAL) {
@@ -132,78 +132,78 @@ Li = ai(Li, (*si).wavelength);
132
132
 
133
133
 
134
134
 
135
- let eW = select(
136
- tk(fd, scatteringPdf),
135
+ let fa = select(
136
+ tC(fg, scatteringPdf),
137
137
  1.0,
138
138
  lightSample.isDelta
139
139
  );
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),
140
+ if (fa > 0.0) {
141
+ let kq = Li * f / fg * (*aa).beta;
142
+ (*gi).risTarget = max(
143
+ dot(max(kq * 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
+ (*gi).ray = mA;
147
+ (*gi).maxDistance = mP;
148
+ (*gi).triangleIndex = (*si).triangleIndex;
149
+ (*gi).contribution = fa * kq;
150
+ (*gi).lightSelectionPmf = lightSelectionPmf;
151
+ (*gi).valid = true;
152
152
  return true;
153
153
  }
154
154
  return false;
155
155
  }
156
156
 
157
- fn mG(
157
+ fn mU(
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
+ gE: bool
164
164
  ) {
165
- let aW = jO();
166
- var selected: mO;
165
+ let aV = jX();
166
+ var selected: nf;
167
167
  selected.valid = false;
168
- var mw = 0.0;
169
- var ls = 0.0;
168
+ var mJ = 0.0;
169
+ var lI = 0.0;
170
170
 
171
171
 
172
- for (var ca = 0u; ca < aW; ca++) {
173
- var candidate: mO;
174
- let oW = qe(
175
- si, ma, prepared, aa, ffnormal, gw,
176
- ca, aW, &candidate);
177
- if (aW == 1u) {
178
- if (!oW) { return; }
172
+ for (var ca = 0u; ca < aV; ca++) {
173
+ var candidate: nf;
174
+ let pj = qq(
175
+ si, ma, prepared, aa, ffnormal, gE,
176
+ ca, aV, &candidate);
177
+ if (aV == 1u) {
178
+ if (!pj) { 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 (!pj) { continue; }
183
+ let kj = candidate.risTarget / max(candidate.lightSelectionPmf, 1e-20);
184
+ if (!(kj > 0.0) || kj != kj) { continue; }
185
+ lI += kj;
186
186
  if (!selected.valid ||
187
- po(ca) * ls <= ka) {
187
+ pK(ca) * lI <= kj) {
188
188
  selected = candidate;
189
- mw = candidate.risTarget;
189
+ mJ = candidate.risTarget;
190
190
  }
191
191
  }
192
- var qC = 1.0;
193
- if (aW > 1u) {
194
- if (!selected.valid || mw <= 0.0) { return; }
192
+ var qP = 1.0;
193
+ if (aV > 1u) {
194
+ if (!selected.valid || mJ <= 0.0) { return; }
195
195
 
196
196
 
197
- qC = selected.lightSelectionPmf * ls /
198
- (f32(aW) * mw);
197
+ qP = selected.lightSelectionPmf * lI /
198
+ (f32(aV) * mJ);
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 * qP;
203
203
  }
204
204
  }
205
205
 
206
- fn pc(
206
+ fn pp(
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 pm = dot((*si).faceNormal, -(*aa).ray.d);
219
+ if (samplingLuminance <= 0.0 || pm <= 0.0) {
220
220
  return 1.0;
221
221
  }
222
- let rL = distance((*si).position, (*aa).ray.o);
223
- let fd = samplingLuminance / rtUniform.lightWeightTotal *
224
- rL * rL / max(oZ, 1e-8);
225
- return fS((*aa).scatteringPdf, fd);
222
+ let rY = distance((*si).position, (*aa).ray.o);
223
+ let fg = samplingLuminance / rtUniform.lightWeightTotal *
224
+ rY * rY / max(pm, 1e-8);
225
+ return fW((*aa).scatteringPdf, fg);
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 uc = select(-tc, tc, qL);
234
- let qK = select(-input, input, qL);
235
- if (dot(input, tc) <= 0.0 || dot(qK, view) <= 1e-6) { return uc; }
236
- return qK;
231
+ fn fE(input: vec3f, tq: vec3f, view: vec3f) -> vec3f {
232
+ let qY = dot(tq, view) >= 0.0;
233
+ let uo = select(-tq, tq, qY);
234
+ let qX = select(-input, input, qY);
235
+ if (dot(input, tq) <= 0.0 || dot(qX, view) <= 1e-6) { return uo; }
236
+ return qX;
237
237
  }
238
238
  ` : ''}
239
- fn lO(
239
+ fn mc(
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 mF = (*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 rN: f32 = -dot((*si).faceNormal, (*aa).ray.d);
249
+ var sG: 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 (rN < 0.0) {
253
253
  (*si).faceNormal = -(*si).faceNormal;
254
- rA = -rA;
254
+ rN = -rN;
255
255
  }
256
- if (sq < 0.0) {
256
+ if (sG < 0.0) {
257
257
  (*si).normal = -(*si).normal;
258
- sq = -sq;
258
+ sG = -sG;
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 pU: bool = rN >= 0.0 && sG < 0.0;
264
+ var ndv: f32 = select(sG, rN, pU);
265
+ var N: vec3f = select((*si).normal, (*si).faceNormal, pU);
266
266
 
267
267
  (*ma).inside = ndv <= 0.0 && !(*ma).thinWalled;
268
268
 
@@ -271,61 +271,61 @@ var ffnormal = select(-N, N, ndv >= 0.0);
271
271
  ${hasCoatNormals ? /* wgsl */ `
272
272
  if ((*ma).coatNormalEnabled) {
273
273
  let view = -(*aa).ray.d;
274
- let fW = dot(bC, view);
275
- (*ma).geometricNormal = select(-bC, bC, fW >= 0.0);
276
- ffnormal = fB(mr, bC, view);
277
- (*ma).coatNormal = fB((*si).coatNormal, bC, view);
278
- (*ma).inside = fW <= 0.0 && !(*ma).thinWalled;
279
- (*ma).relativeIor = select((*ma).specularIor, 1.0 / (*ma).specularIor, fW > 0.0 || (*ma).thinWalled);
274
+ let ga = dot(bC, view);
275
+ (*ma).geometricNormal = select(-bC, bC, ga >= 0.0);
276
+ ffnormal = fE(mF, bC, view);
277
+ (*ma).coatNormal = fE((*si).coatNormal, bC, view);
278
+ (*ma).inside = ga <= 0.0 && !(*ma).thinWalled;
279
+ (*ma).relativeIor = select((*ma).specularIor, 1.0 / (*ma).specularIor, ga > 0.0 || (*ma).thinWalled);
280
280
  }
281
281
  ` : ''}
282
282
 
283
283
  (*aa).scatteringIsDelta = false;
284
284
  var bl = false;
285
- var hj = false;
285
+ var hn = 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 nv = (*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 sC = max(max(extinction.x, extinction.y), extinction.z);
297
+ if (mediumType > 0 && sC > 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 nk = min(i32(dz(cw(MEDIUM_CHANNEL)) * 3.0), 2);
301
+ let fD = extinction[nk];
302
+ let ih = select(
303
303
  d,
304
- min(-log(max(dz(cv(MEDIUM_DISTANCE)), 1e-7)) / fA, d),
305
- fA > 0.0
304
+ min(-log(max(dz(cw(MEDIUM_DISTANCE)), 1e-7)) / fD, d),
305
+ fD > 0.0
306
306
  );
307
- bl = ic < d;
308
- let ew = exp(-extinction * ic);
309
- let nM = select(
307
+ bl = ih < d;
308
+ let ew = exp(-extinction * ih);
309
+ let oa = 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 nL = max((oa.x + oa.y + oa.z) / 3.0, 1e-8);
315
315
  if (bl) {
316
- (*aa).beta *= ew * scattering / nt;
316
+ (*aa).beta *= ew * scattering / nL;
317
317
 
318
- (*aa).ray.o = ne + ic * (*aa).ray.d;
318
+ (*aa).ray.o = nv + ih * (*aa).ray.d;
319
319
  (*si).position = (*aa).ray.o;
320
320
  }
321
321
  else {
322
- (*aa).beta *= ew / nt;
322
+ (*aa).beta *= ew / nL;
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 += pp(si, aa) * (*ma).emission * (*aa).beta;
329
329
  }
330
330
  if ((*ma).materialType == UNLIT) {
331
331
  (*aa).abort = true;
@@ -341,18 +341,18 @@ ${hasAnisotropyDirections ? /* wgsl */ `
341
341
  (*ma).geometryTangent = (*si).geometryTangent;
342
342
  (*ma).geometryBitangent = (*si).geometryBitangent;
343
343
  ` : /* wgsl */ ``}
344
- prepared = eG((*si).tangent, *ma, -(*aa).ray.d, ffnormal);
344
+ prepared = eH((*si).tangent, *ma, -(*aa).ray.d, ffnormal);
345
345
  }
346
- mG(si, *ma, prepared, aa, ffnormal, !bl);
346
+ mU(si, *ma, prepared, aa, ffnormal, !bl);
347
347
  if (bl) {
348
348
 
349
- cF = fl(
349
+ cG = fp(
350
350
  -(*aa).ray.d,
351
351
  (*si).mediumAnisotropy,
352
- fk(cv(PHASE_DIRECTION))
352
+ fo(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
  }
@@ -360,24 +360,24 @@ else {
360
360
 
361
361
  var isNextRefraction: bool;
362
362
  var aA = 1.0;
363
- var aT = false;
363
+ var aS = false;
364
364
  var bE = true;
365
365
  var aR = u32(OPENPBR_LOBE_DIFFUSE);
366
- var qw = 0.0;
367
- let ue = vec3f(fk(cv(BSDF_DIRECTION)), dz(cv(BSDF_LOBE)));
368
- var gR = vec3f(0.0);
366
+ var qI = 0.0;
367
+ let ur = vec3f(fo(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
368
+ var gX = vec3f(0.0);
369
369
  let f = dv(
370
370
  prepared,
371
- ue,
372
- &cF,
371
+ ur,
372
+ &cG,
373
373
  &scatteringPdf,
374
374
  &isNextRefraction,
375
375
  &aA,
376
- &aT,
376
+ &aS,
377
377
  &bE,
378
378
  &aR,
379
- &qw,
380
- &gR
379
+ &qI,
380
+ &gX
381
381
  );
382
382
 
383
383
 
@@ -385,7 +385,7 @@ ue,
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;
@@ -397,17 +397,17 @@ abs(prepared.material.relativeIor - 1.0) <= 1e-6 &&
397
397
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6;
398
398
  (*aa).beta *= f / scatteringPdf;
399
399
 
400
- hj = isNextRefraction && !(*ma).thinWalled;
400
+ hn = 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
  }
@@ -417,8 +417,8 @@ if (bl) {
417
417
  if (HAS_MEDIUM) {
418
418
 
419
419
 
420
- if (!bl && hj && (*ma).mediumType > 0) {
421
- if (rA >= 0.0) {
420
+ if (!bl && hn && (*ma).mediumType > 0) {
421
+ if (rN >= 0.0) {
422
422
  (*si).mediumType = (*ma).mediumType;
423
423
  (*si).mediumExtinction = (*ma).mediumExtinction;
424
424
  (*si).mediumScattering = (*ma).mediumScattering;
@@ -11,21 +11,21 @@ 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 oT = -(*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 ln = vec3f(fo(rd(candidate, 1u)), dz(rd(candidate, 0u)));
22
+ sampleLight(si.position, ln, &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 pM = dot(si.normal, oT) * cosThetaL;
26
+ if (lightSample.pdf > 0.0 && pM >= 0.0) {
27
27
  var ray: Ray;
28
- iw(&ray, si.position + EPS * lightDir, lightDir);
28
+ iC(&ray, si.position + EPS * lightDir, lightDir);
29
29
  if (ex(ray, lightSample.dist - EPS, si.triangleIndex)) {
30
30
  shadow += 1.0;
31
31
  }