@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
@@ -32,7 +32,7 @@ return;
32
32
  // So here the code are injected separately.
33
33
  const bounceCodeOnIntelMac = glsl `
34
34
 
35
- for(int vI = 0; vI < BOUNCES; vI++) {{
35
+ for(int vU = 0; vU < BOUNCES; vU++) {{
36
36
  if (aa.abort) {
37
37
  return vec4(aa.li, aa.alpha);
38
38
  }
@@ -40,10 +40,10 @@ bounce(aa, depth, si, mat, outAux);
40
40
  }}
41
41
  `;
42
42
  const bounceCodeOnOther = glsl `
43
- bool uT = !si.isTransparency;
44
- int qB = min(BOUNCES, bounceLimit);
43
+ bool vg = !si.isTransparency;
44
+ int qO = min(BOUNCES, bounceLimit);
45
45
  for(int idx = 0; idx < min(BOUNCES * 3, ${MAX_PATH_EVENTS}); idx++) {
46
- if (uT && idx > qB) {
46
+ if (vg && idx > qO) {
47
47
  aa.abort = true;
48
48
  }
49
49
  if (aa.abort) {
@@ -93,7 +93,7 @@ ${envMap.main}
93
93
  ${samplingGlsl}
94
94
  ${openPbrBsdfGlsl}
95
95
 
96
- float mh;
96
+ float mw;
97
97
  float bf;
98
98
 
99
99
  ${sampleLightGlsl}
@@ -110,7 +110,7 @@ bool isShadowCatcher;
110
110
  };
111
111
 
112
112
  void bounce(inout Path aa, inout int depth, inout ad si, inout J mat, inout RayTraceAuxiliary outAux) {
113
- cE = uint(max(depth, 0));
113
+ cF = uint(max(depth, 0));
114
114
 
115
115
 
116
116
 
@@ -135,26 +135,26 @@ if (aa.isNextRefraction) {
135
135
 
136
136
 
137
137
 
138
- vec4 bg = cw(aa.ray.o, aa.ray.d);
138
+ vec4 bg = cx(aa.ray.o, aa.ray.d);
139
139
  bg.rgb = ai(bg.rgb, bf);
140
140
  float cT = aa.scatteringIsDelta ? 1.0
141
- : aF(aa.scatteringPdf,
142
- iv(aS(aa.ray.d)) * envLightSelectionPmf);
141
+ : aG(aa.scatteringPdf,
142
+ iB(cY(aa.ray.d)) * envLightSelectionPmf);
143
143
  aa.li += cT * aa.beta * bg.rgb * bg.a;
144
144
  aa.alpha = max(aa.alpha, bg.a);
145
145
  }
146
146
  else {
147
- vec2 tE = aS(aa.ray.d);
148
- vec3 emission = textureLinear(envMap, tE).rgb;
147
+ vec2 tQ = cY(aa.ray.d);
148
+ vec3 emission = textureLinear(envMap, tQ).rgb;
149
149
  emission = ai(emission, bf);
150
150
  aa.li += aa.beta * emission *
151
- aF(
151
+ aG(
152
152
  aa.scatteringPdf,
153
- iv(tE) * envLightSelectionPmf
153
+ iB(tQ) * envLightSelectionPmf
154
154
  );
155
155
  }
156
156
  #else
157
- vec4 bg = cw(aa.ray.o, aa.ray.d);
157
+ vec4 bg = cx(aa.ray.o, aa.ray.d);
158
158
  bg.rgb = ai(bg.rgb, bf);
159
159
  aa.li += aa.beta * bg.rgb * bg.a;
160
160
  #endif
@@ -165,7 +165,7 @@ return;
165
165
 
166
166
  if (!si.hit) {
167
167
 
168
- vec4 bg = cw(aa.ray.o, aa.ray.d);
168
+ vec4 bg = cx(aa.ray.o, aa.ray.d);
169
169
 
170
170
 
171
171
 
@@ -177,10 +177,10 @@ aa.alpha = bg.a;
177
177
  outAux.isBlank = bg.a < 0.01;
178
178
  }
179
179
  else {
180
- Ray cam = hz(v_Texcoord + rN());
181
- bool mz = dot(cam.d, aa.ray.d) > 0.0;
180
+ Ray cam = hC(v_Texcoord + sa());
181
+ bool mM = dot(cam.d, aa.ray.d) > 0.0;
182
182
  if (transmissiveOutputAlphaMin < 1.0) {
183
- if (mz) {
183
+ if (mM) {
184
184
  aa.alpha = max(aa.alpha, bg.a);
185
185
  } else {
186
186
  aa.alpha = 1.0;
@@ -188,8 +188,8 @@ aa.alpha = 1.0;
188
188
  }
189
189
  #if !defined(USE_ENVMAP)
190
190
 
191
- if (mz) {
192
- aa.li = aa.beta * aF(aa.scatteringPdf, 1.0) * bg.rgb;
191
+ if (mM) {
192
+ aa.li = aa.beta * aG(aa.scatteringPdf, 1.0) * bg.rgb;
193
193
  }
194
194
  #endif
195
195
  }
@@ -197,7 +197,7 @@ aa.abort = true;
197
197
  return;
198
198
  }
199
199
 
200
- bool cG = false;
200
+ bool cH = false;
201
201
  if ((mat.materialType == STANDARD || mat.materialType == UNLIT)) {
202
202
  if (transmissiveOutputAlphaMin < 1.0) {
203
203
 
@@ -210,18 +210,18 @@ if (alpha < 1.0) {
210
210
 
211
211
  aa.alpha = max(aa.alpha, alpha);
212
212
  if (eo(3u) > alpha) {
213
- cG = true;
213
+ cH = true;
214
214
  }
215
215
  }
216
- if (!cG) {
217
- lO(si, mat, aa);
216
+ if (!cH) {
217
+ mc(si, mat, aa);
218
218
  }
219
219
  else {
220
220
  aa.ray.o = si.position + aa.ray.d * EPS;
221
221
  }
222
222
  }
223
223
 
224
- if (!si.albedoSampled && !cG) {
224
+ if (!si.albedoSampled && !cH) {
225
225
 
226
226
  if ((mat.materialType == STANDARD || mat.materialType == UNLIT) &&
227
227
  !(mat.transmissionWeight > 0.5 ||
@@ -243,11 +243,11 @@ si.albedoSampled = true;
243
243
 
244
244
 
245
245
  #ifdef USE_RR
246
- if (depth >= RR_MAX && !cG) {
246
+ if (depth >= RR_MAX && !cH) {
247
247
 
248
- float oj = max(max(aa.beta.x, aa.beta.y), aa.beta.z);
249
- float q = max(0.0, 1.0 - oj);
250
- if (dz(cv(RUSSIAN_ROULETTE)) < q) {
248
+ float oz = max(max(aa.beta.x, aa.beta.y), aa.beta.z);
249
+ float q = max(0.0, 1.0 - oz);
250
+ if (dz(cw(RUSSIAN_ROULETTE)) < q) {
251
251
 
252
252
 
253
253
  aa.alpha = 1.0;
@@ -264,18 +264,18 @@ return;
264
264
  }
265
265
 
266
266
 
267
- cY(aa.ray, si, true);
268
- eT(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
267
+ cZ(aa.ray, si, true);
268
+ eX(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
269
269
  si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
270
270
 
271
271
 
272
272
 
273
273
 
274
274
  if (dispersionWavelengths == 1 && si.hit && mat.transmissionWeight > 0.001 && mat.transmissionDispersionScale > 0.001) {
275
- bf = mh;
275
+ bf = mw;
276
276
  }
277
277
  if (mat.transmissionWeight > 0.001 && bf > 0.0) {
278
- mat.specularIor = eK(
278
+ mat.specularIor = eN(
279
279
  bf,
280
280
  mat.specularIor,
281
281
  mat.transmissionDispersionScale,
@@ -283,24 +283,24 @@ mat.dispersionAbbeNumber
283
283
  );
284
284
  }
285
285
 
286
- if (cG) {
286
+ if (cH) {
287
287
  return;
288
288
  }
289
289
 
290
- bool hu = eo(3u) < mat.alpha;
290
+ bool hy = eo(3u) < mat.alpha;
291
291
  #ifdef NUM_LIGHTS
292
292
 
293
293
  LightSampleRec lightSample;
294
294
  for (int i = 0; i < NUM_LIGHTS; i++) {
295
295
 
296
- Light light = ql(i);
297
- float d = mk(aa.ray, light, lightSample);
298
- bool mp = si.hit && d > distance(si.position, aa.ray.o);
299
- if (d != INF && !(mp && hu)) {
296
+ Light light = qx(i);
297
+ float d = mz(aa.ray, light, lightSample);
298
+ bool mD = si.hit && d > distance(si.position, aa.ray.o);
299
+ if (d != INF && !(mD && hy)) {
300
300
  lightSample.pdf *= light.selectionPmf;
301
- float eW = aF(aa.scatteringPdf, lightSample.pdf);
301
+ float fa = aG(aa.scatteringPdf, lightSample.pdf);
302
302
  lightSample.emission = ai(lightSample.emission, bf);
303
- aa.li += eW * aa.beta * lightSample.emission;
303
+ aa.li += fa * aa.beta * lightSample.emission;
304
304
 
305
305
  aa.alpha = 1.0;
306
306
  aa.abort = true;
@@ -309,28 +309,28 @@ aa.abort = true;
309
309
  #endif
310
310
 
311
311
  #ifdef USE_ENVMAP
312
- if (!(si.hit && hu)) {
312
+ if (!(si.hit && hy)) {
313
313
  if (aa.isNextRefraction) {
314
314
 
315
315
 
316
- vec4 bg = cw(aa.ray.o, aa.ray.d);
316
+ vec4 bg = cx(aa.ray.o, aa.ray.d);
317
317
  bg.rgb = ai(bg.rgb, bf);
318
318
  float cT = aa.scatteringIsDelta ? 1.0
319
- : aF(aa.scatteringPdf,
320
- iv(aS(aa.ray.d)) * envLightSelectionPmf);
319
+ : aG(aa.scatteringPdf,
320
+ iB(cY(aa.ray.d)) * envLightSelectionPmf);
321
321
  aa.li += cT * aa.beta * bg.rgb * bg.a;
322
322
  aa.alpha = max(aa.alpha, bg.a);
323
323
  aa.abort = true;
324
324
  return;
325
325
  }
326
- vec2 uv = aS(aa.ray.d);
326
+ vec2 uv = cY(aa.ray.d);
327
327
  vec3 emission = textureLinear(envMap, uv).rgb;
328
- float eW = aF(
328
+ float fa = aG(
329
329
  aa.scatteringPdf,
330
- iv(uv) * envLightSelectionPmf
330
+ iB(uv) * envLightSelectionPmf
331
331
  );
332
332
  emission = ai(emission, bf);
333
- aa.li += aa.beta * emission * eW;
333
+ aa.li += aa.beta * emission * fa;
334
334
 
335
335
 
336
336
  #if !defined(USE_BACKGROUND)
@@ -345,105 +345,105 @@ depth++;
345
345
  }
346
346
 
347
347
 
348
- vec2 kn(float radius, float xi) {
348
+ vec2 kz(float radius, float xi) {
349
349
  float x = 0.25;
350
- for (int np = 0; np < 10; np++) {
350
+ for (int nH = 0; nH < 10; nH++) {
351
351
  float x2 = x * x;
352
352
  float x3 = x2 * x;
353
- float kD = 1.0 - x;
353
+ float kP = 1.0 - x;
354
354
  float value = 10.0 * x2 - 20.0 * x3 + 15.0 * x2 * x2 -
355
355
  4.0 * x2 * x3 - xi;
356
- float lV = 20.0 * x * kD * kD * kD;
357
- if (abs(value) < 1e-6 || lV == 0.0) break;
358
- x = clamp(x - value / lV, 0.0, 1.0);
356
+ float mk = 20.0 * x * kP * kP * kP;
357
+ if (abs(value) < 1e-6 || mk == 0.0) break;
358
+ x = clamp(x - value / mk, 0.0, 1.0);
359
359
  }
360
- float jh = x * radius;
360
+ float jo = x * radius;
361
361
  return vec2(
362
- jh,
363
- sqrt(max(radius * radius - jh * jh, 0.0))
362
+ jo,
363
+ sqrt(max(radius * radius - jo * jo, 0.0))
364
364
  );
365
365
  }
366
366
 
367
- float iN(float radius, float gr) {
368
- if (gr >= radius) return 0.0;
369
- float nS = radius - gr;
370
- return nS * nS * nS;
367
+ float iT(float radius, float gw) {
368
+ if (gw >= radius) return 0.0;
369
+ float oh = radius - gw;
370
+ return oh * oh * oh;
371
371
  }
372
372
 
373
373
 
374
- vec3 mf(ad source, float radius) {
374
+ vec3 mu(ad source, float radius) {
375
375
  vec3 geometricNormal = source.faceNormal;
376
376
  if (dot(geometricNormal, source.vertexNormal) < 0.0) geometricNormal = -geometricNormal;
377
377
  vec3 tangent;
378
378
  vec3 bitangent;
379
- aK(geometricNormal, tangent, bitangent);
380
- vec3 iB = vec3(0.0);
381
-
382
- for (int ib = 0; ib < BEVEL_SAMPLES; ib++) {
383
- vec2 oU = fk(CAMERA_BEVEL_BASE + uint(ib));
384
- float cz = oU.x;
385
- float ou = oU.y;
386
- vec3 di = geometricNormal;
387
- vec3 fE = tangent;
379
+ aL(geometricNormal, tangent, bitangent);
380
+ vec3 iF = vec3(0.0);
381
+
382
+ for (int ig = 0; ig < BEVEL_SAMPLES; ig++) {
383
+ vec2 ph = fo(CAMERA_BEVEL_BASE + uint(ig));
384
+ float cA = ph.x;
385
+ float oG = ph.y;
386
+ vec3 dj = geometricNormal;
387
+ vec3 fH = tangent;
388
388
  vec3 ek = bitangent;
389
- float fZ = 0.5;
390
- float hV = 0.25;
391
- float gy = 0.25;
392
- if (cz < 0.5) {
393
- cz *= 2.0;
394
- }
395
- else if (cz < 0.75) {
396
- vec3 mx = di;
397
- di = fE;
398
- fE = mx;
399
- fZ = 0.25;
400
- hV = 0.5;
401
- cz = (cz - 0.5) * 4.0;
389
+ float ge = 0.5;
390
+ float hY = 0.25;
391
+ float gG = 0.25;
392
+ if (cA < 0.5) {
393
+ cA *= 2.0;
394
+ }
395
+ else if (cA < 0.75) {
396
+ vec3 mK = dj;
397
+ dj = fH;
398
+ fH = mK;
399
+ ge = 0.25;
400
+ hY = 0.5;
401
+ cA = (cA - 0.5) * 4.0;
402
402
  }
403
403
  else {
404
- vec3 mx = di;
405
- di = ek;
406
- ek = mx;
407
- fZ = 0.25;
408
- gy = 0.5;
409
- cz = (cz - 0.75) * 4.0;
410
- }
411
-
412
- vec2 gO = kn(radius, ou);
413
- float phi = TWOPI * cz;
414
- vec3 qj = gO.x *
415
- (cos(phi) * fE + sin(phi) * ek);
404
+ vec3 mK = dj;
405
+ dj = ek;
406
+ ek = mK;
407
+ ge = 0.25;
408
+ gG = 0.5;
409
+ cA = (cA - 0.75) * 4.0;
410
+ }
411
+
412
+ vec2 gU = kz(radius, oG);
413
+ float phi = TWOPI * cA;
414
+ vec3 qv = gU.x *
415
+ (cos(phi) * fH + sin(phi) * ek);
416
416
  Ray ray;
417
- iw(
417
+ iC(
418
418
  ray,
419
- source.position + di * gO.y + qj,
420
- -di
419
+ source.position + dj * gU.y + qv,
420
+ -dj
421
421
  );
422
422
  ad hit;
423
- iG(
423
+ iM(
424
424
  ray,
425
425
  hit,
426
426
  source.instanceIndex,
427
- max(2.0 * gO.y, EPS)
427
+ max(2.0 * gU.y, EPS)
428
428
  );
429
429
  if (!hit.hit) continue;
430
430
 
431
- float kE = fZ * abs(dot(di, hit.faceNormal));
432
- float mt = hV * abs(dot(fE, hit.faceNormal));
433
- float jS = gy * abs(dot(ek, hit.faceNormal));
434
- float weight = kE / max(
435
- kE * kE + mt * mt +
436
- jS * jS,
431
+ float kQ = ge * abs(dot(dj, hit.faceNormal));
432
+ float mG = hY * abs(dot(fH, hit.faceNormal));
433
+ float kb = gG * abs(dot(ek, hit.faceNormal));
434
+ float weight = kQ / max(
435
+ kQ * kQ + mG * mG +
436
+ kb * kb,
437
437
  1e-8
438
438
  );
439
- weight *= iN(radius, distance(hit.position, source.position)) /
440
- max(iN(radius, gO.x), 1e-8);
441
- iB += weight * hit.vertexNormal;
439
+ weight *= iT(radius, distance(hit.position, source.position)) /
440
+ max(iT(radius, gU.x), 1e-8);
441
+ iF += weight * hit.vertexNormal;
442
442
  }
443
443
 
444
- if (dot(iB, iB) <= 1e-12) return source.normal;
445
- vec3 jA = normalize(iB);
446
- vec3 result = source.normal + jA - source.vertexNormal;
444
+ if (dot(iF, iF) <= 1e-12) return source.normal;
445
+ vec3 jH = normalize(iF);
446
+ vec3 result = source.normal + jH - source.vertexNormal;
447
447
  return dot(result, result) > 1e-12 ? normalize(result) : source.normal;
448
448
  }
449
449
 
@@ -463,7 +463,7 @@ ${intelMac ? bounceCodeOnIntelMac : bounceCodeOnOther}
463
463
  return vec4(aa.li, aa.alpha);
464
464
  }
465
465
 
466
- vec4 iz(ad si, Ray ray, J mat, inout RayTraceAuxiliary outAux) {
466
+ vec4 iD(ad si, Ray ray, J mat, inout RayTraceAuxiliary outAux) {
467
467
  float coverage = clamp(mat.alpha, 0.0, 1.0);
468
468
  if (!si.hit || (mat.materialType != STANDARD && mat.materialType != UNLIT) || coverage >= 1.0) {
469
469
  return bw(si, ray, mat, outAux);
@@ -473,49 +473,49 @@ return bw(si, ray, mat, outAux);
473
473
 
474
474
 
475
475
 
476
- Ray nK = ray;
477
- nK.o = si.position + ray.d * (EPS * 0.02);
478
- ad dU = si;
479
- dU.albedoSampled = false;
480
- cY(nK, dU, false);
481
- J nJ;
482
- eT(nJ, dU.materialIndex, dU.uv, dU.uv1, dU.instanceIndex);
483
- RayTraceAuxiliary gg = outAux;
484
- if (dU.hit && (nJ.materialType == STANDARD || nJ.materialType == UNLIT)) {
485
- gg.albedo = nJ.transmissionWeight > 0.5
476
+ Ray nY = ray;
477
+ nY.o = si.position + ray.d * (EPS * 0.02);
478
+ ad dE = si;
479
+ dE.albedoSampled = false;
480
+ cZ(nY, dE, false);
481
+ J nX;
482
+ eX(nX, dE.materialIndex, dE.uv, dE.uv1, dE.instanceIndex, dE.vertexColor);
483
+ RayTraceAuxiliary gm = outAux;
484
+ if (dE.hit && (nX.materialType == STANDARD || nX.materialType == UNLIT)) {
485
+ gm.albedo = nX.transmissionWeight > 0.5
486
486
  ? vec3(1.0)
487
- : nJ.baseColor;
488
- gg.normal = dot(
489
- dU.normal,
490
- dU.position - vec3(viewInv[3])
487
+ : nX.baseColor;
488
+ gm.normal = dot(
489
+ dE.normal,
490
+ dE.position - vec3(viewInv[3])
491
491
  ) > 0.0
492
- ? -dU.normal
493
- : dU.normal;
494
- dU.albedoSampled = nJ.transmissionWeight > 0.5;
492
+ ? -dE.normal
493
+ : dE.normal;
494
+ dE.albedoSampled = nX.transmissionWeight > 0.5;
495
495
  }
496
- vec4 back = bw(dU, nK, nJ, gg);
496
+ vec4 back = bw(dE, nY, nX, gm);
497
497
  if (coverage <= 0.0) {
498
- outAux = gg;
498
+ outAux = gm;
499
499
  return back;
500
500
  }
501
501
 
502
- ad te = si;
503
- J tF = mat;
504
- tF.alpha = 1.0;
505
- RayTraceAuxiliary iQ = outAux;
506
- vec4 qL = bw(te, ray, tF, iQ);
507
- outAux.albedo = mix(gg.albedo, iQ.albedo, coverage);
508
- vec3 fR = mix(gg.normal, iQ.normal, coverage);
509
- outAux.normal = dot(fR, fR) > 1e-12
510
- ? normalize(fR)
502
+ ad tu = si;
503
+ J tR = mat;
504
+ tR.alpha = 1.0;
505
+ RayTraceAuxiliary iW = outAux;
506
+ vec4 qY = bw(tu, ray, tR, iW);
507
+ outAux.albedo = mix(gm.albedo, iW.albedo, coverage);
508
+ vec3 fV = mix(gm.normal, iW.normal, coverage);
509
+ outAux.normal = dot(fV, fV) > 1e-12
510
+ ? normalize(fV)
511
511
  : vec3(0.0);
512
- outAux.isBlank = gg.isBlank && iQ.isBlank;
513
- return mix(back, qL, coverage);
512
+ outAux.isBlank = gm.isBlank && iW.isBlank;
513
+ return mix(back, qY, coverage);
514
514
  }
515
515
 
516
516
 
517
517
 
518
- vec4 mj(Ray ray, out RayTraceAuxiliary outAux) {
518
+ vec4 my(Ray ray, out RayTraceAuxiliary outAux) {
519
519
 
520
520
  ad si;
521
521
  J mat;
@@ -528,13 +528,13 @@ si.mediumScattering = vec3(0.0);
528
528
  si.mediumAnisotropy = 0.0;
529
529
  #endif
530
530
 
531
- cY(ray, si, false);
532
- eT(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
531
+ cZ(ray, si, false);
532
+ eX(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
533
533
  si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
534
534
 
535
535
  #ifdef HAS_BEVEL
536
536
  if (bevelEnabled && mat.bevel > 0.0) {
537
- si.normal = mf(si, mat.bevel);
537
+ si.normal = mu(si, mat.bevel);
538
538
  }
539
539
  #endif
540
540
 
@@ -551,32 +551,32 @@ si.albedoSampled = mat.transmissionWeight > 0.5;
551
551
  }
552
552
 
553
553
  if (mat.transmissionDispersionScale > 0.001) {
554
- mat.specularIor = eK(
554
+ mat.specularIor = eN(
555
555
  bf,
556
556
  mat.specularIor,
557
557
  mat.transmissionDispersionScale,
558
558
  mat.dispersionAbbeNumber
559
559
  );
560
560
  }
561
- return iz(si, ray, mat, outAux);
561
+ return iD(si, ray, mat, outAux);
562
562
  }
563
563
 
564
564
  void main() {
565
565
 
566
- se();
567
- jY(v_Texcoord * viewportSize, int(uint(sampleCount) ^ eg(uint(sequenceSeed))));
566
+ su();
567
+ kh(v_Texcoord * viewportSize, int(uint(sampleCount) ^ eg(uint(sequenceSeed))));
568
568
 
569
569
 
570
570
  bf = dispersionWavelengths == 1 ? 0.0 : wavelength;
571
- mh = wavelength;
571
+ mw = wavelength;
572
572
  if (dispersionWavelengths == 1 && wavelength > 0.0) {
573
573
  float channel = floor(dz(CAMERA_WAVELENGTH) * 3.0);
574
- mh = channel < 1.0 ? 650.0 : channel < 2.0 ? 510.0 : 475.0;
574
+ mw = channel < 1.0 ? 650.0 : channel < 2.0 ? 510.0 : 475.0;
575
575
  }
576
576
 
577
577
 
578
578
 
579
- Ray cam = nv();
579
+ Ray cam = nN();
580
580
 
581
581
  RayTraceAuxiliary outAux;
582
582
  outAux.albedo = vec3(0.0);
@@ -584,38 +584,38 @@ outAux.normal = vec3(0.0);
584
584
  outAux.isBlank = false;
585
585
  outAux.isShadowCatcher = false;
586
586
 
587
- vec4 aN = mj(cam, outAux);
587
+ vec4 aF = my(cam, outAux);
588
588
 
589
589
 
590
590
 
591
591
  #ifdef CLAMPING
592
592
  float clamping = float(CLAMPING);
593
- aN.rgb = clamp(aN.rgb, -clamping, clamping);
593
+ aF.rgb = clamp(aF.rgb, -clamping, clamping);
594
594
  #endif
595
595
 
596
596
 
597
597
  if (bf > 0.0) {
598
598
 
599
- aN.rgb *= 3.0;
599
+ aF.rgb *= 3.0;
600
600
  if (dispersionWavelengths != 1) {
601
601
 
602
602
 
603
- aN.a /= 3.0;
603
+ aF.a /= 3.0;
604
604
  }
605
605
  }
606
- if (!(aN.x < INF && aN.x > -EPS)) {
607
- aN = vec4(0, 0, 0, 1);
606
+ if (!(aF.x < INF && aF.x > -EPS)) {
607
+ aF = vec4(0, 0, 0, 1);
608
608
  }
609
609
 
610
- out_color = aN;
610
+ out_color = aF;
611
611
  out_albedo = vec4(outAux.albedo, outAux.isBlank ? 0.0 : 1.0);
612
612
  out_normal = vec4(outAux.normal, 1.0);
613
613
 
614
614
 
615
- float jj = dot(aN.rgb, vec3(0.2126, 0.7152, 0.0722));
615
+ float jq = dot(aF.rgb, vec3(0.2126, 0.7152, 0.0722));
616
616
  out_moments = outAux.isShadowCatcher
617
617
  ? vec4(0.0)
618
- : vec4(jj, jj * jj, 1.0, 0.0);
618
+ : vec4(jq, jq * jq, 1.0, 0.0);
619
619
 
620
620
  }`
621
621
  });