@meimu/mutracer 0.1.4 → 0.1.5

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 (67) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +1425 -1421
  3. package/docs/api.md +2 -1
  4. package/docs/materials.md +17 -26
  5. package/docs/threejs.md +5 -5
  6. package/docs/viewer.md +36 -3
  7. package/lib/oidn.d.ts +1 -1
  8. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  9. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  10. package/lib/renderer/WGPUJNLMDenoiser.js +35 -35
  11. package/lib/renderer/WGPURayTraceOutput.js +4 -4
  12. package/lib/renderer/WGPURayTracePass.js +5 -3
  13. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  14. package/lib/renderer/WGPURenderingPipeline.js +7 -7
  15. package/lib/renderer/WebGLJNLMDenoiser.js +36 -36
  16. package/lib/renderer/WebGLRayTracePass.js +1 -0
  17. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  18. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +8 -8
  19. package/lib/renderer/glsl/chunks/envMap.glsl.js +26 -26
  20. package/lib/renderer/glsl/chunks/intersect.glsl.js +141 -139
  21. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  22. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +56 -55
  23. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  24. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +144 -144
  25. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  26. package/lib/renderer/glsl/chunks/random.glsl.js +1 -1
  27. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +14 -14
  28. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  29. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +19 -19
  30. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +46 -46
  31. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  32. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +6 -6
  33. package/lib/renderer/glsl/chunks/sampling.glsl.js +33 -33
  34. package/lib/renderer/glsl/chunks/sobol.glsl.js +7 -7
  35. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +1 -1
  36. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  37. package/lib/renderer/glsl/rayTrace.frag.js +67 -67
  38. package/lib/renderer/glsl/shadowCatcher.frag.js +3 -3
  39. package/lib/renderer/glsl/webglPipeline.frag.js +26 -26
  40. package/lib/renderer/scratchSampling.js +16 -16
  41. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +14 -14
  42. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +178 -178
  43. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  44. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +3 -3
  45. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +24 -23
  46. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  47. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +160 -160
  48. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +12 -12
  49. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +5 -5
  50. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +44 -44
  51. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +69 -69
  52. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +3 -3
  53. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +33 -33
  54. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +7 -7
  55. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +1 -1
  56. package/lib/renderer/wgsl/compose.frag.wgsl.js +54 -54
  57. package/lib/renderer/wgsl/customDenoise.wgsl.js +6 -6
  58. package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
  59. package/lib/renderer/wgsl/offlineAdaptive.compute.js +5 -5
  60. package/lib/renderer/wgsl/rayTrace.compute.js +103 -103
  61. package/lib/scene/OpenPBRMaterial.d.ts +1 -1
  62. package/lib/scene/OpenPBRMaterial.js +1 -1
  63. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  64. package/lib/version.d.ts +1 -1
  65. package/lib/version.js +1 -1
  66. package/lib/version.js.map +1 -1
  67. package/package.json +1 -1
@@ -93,7 +93,7 @@ ${envMap.main}
93
93
  ${samplingGlsl}
94
94
  ${openPbrBsdfGlsl}
95
95
 
96
- float mw;
96
+ float mv;
97
97
  float bf;
98
98
 
99
99
  ${sampleLightGlsl}
@@ -178,9 +178,9 @@ outAux.isBlank = bg.a < 0.01;
178
178
  }
179
179
  else {
180
180
  Ray cam = hC(v_Texcoord + sa());
181
- bool mM = dot(cam.d, aa.ray.d) > 0.0;
181
+ bool mL = dot(cam.d, aa.ray.d) > 0.0;
182
182
  if (transmissiveOutputAlphaMin < 1.0) {
183
- if (mM) {
183
+ if (mL) {
184
184
  aa.alpha = max(aa.alpha, bg.a);
185
185
  } else {
186
186
  aa.alpha = 1.0;
@@ -188,7 +188,7 @@ aa.alpha = 1.0;
188
188
  }
189
189
  #if !defined(USE_ENVMAP)
190
190
 
191
- if (mM) {
191
+ if (mL) {
192
192
  aa.li = aa.beta * aG(aa.scatteringPdf, 1.0) * bg.rgb;
193
193
  }
194
194
  #endif
@@ -214,7 +214,7 @@ cH = true;
214
214
  }
215
215
  }
216
216
  if (!cH) {
217
- mc(si, mat, aa);
217
+ mb(si, mat, aa);
218
218
  }
219
219
  else {
220
220
  aa.ray.o = si.position + aa.ray.d * EPS;
@@ -245,8 +245,8 @@ si.albedoSampled = true;
245
245
  #ifdef USE_RR
246
246
  if (depth >= RR_MAX && !cH) {
247
247
 
248
- float oz = max(max(aa.beta.x, aa.beta.y), aa.beta.z);
249
- float q = max(0.0, 1.0 - oz);
248
+ float oy = max(max(aa.beta.x, aa.beta.y), aa.beta.z);
249
+ float q = max(0.0, 1.0 - oy);
250
250
  if (dz(cw(RUSSIAN_ROULETTE)) < q) {
251
251
 
252
252
 
@@ -272,7 +272,7 @@ si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.0
272
272
 
273
273
 
274
274
  if (dispersionWavelengths == 1 && si.hit && mat.transmissionWeight > 0.001 && mat.transmissionDispersionScale > 0.001) {
275
- bf = mw;
275
+ bf = mv;
276
276
  }
277
277
  if (mat.transmissionWeight > 0.001 && bf > 0.0) {
278
278
  mat.specularIor = eN(
@@ -294,9 +294,9 @@ LightSampleRec lightSample;
294
294
  for (int i = 0; i < NUM_LIGHTS; i++) {
295
295
 
296
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)) {
297
+ float d = my(aa.ray, light, lightSample);
298
+ bool mC = si.hit && d > distance(si.position, aa.ray.o);
299
+ if (d != INF && !(mC && hy)) {
300
300
  lightSample.pdf *= light.selectionPmf;
301
301
  float fa = aG(aa.scatteringPdf, lightSample.pdf);
302
302
  lightSample.emission = ai(lightSample.emission, bf);
@@ -347,15 +347,15 @@ depth++;
347
347
 
348
348
  vec2 kz(float radius, float xi) {
349
349
  float x = 0.25;
350
- for (int nH = 0; nH < 10; nH++) {
350
+ for (int nG = 0; nG < 10; nG++) {
351
351
  float x2 = x * x;
352
352
  float x3 = x2 * x;
353
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 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);
356
+ float mj = 20.0 * x * kP * kP * kP;
357
+ if (abs(value) < 1e-6 || mj == 0.0) break;
358
+ x = clamp(x - value / mj, 0.0, 1.0);
359
359
  }
360
360
  float jo = x * radius;
361
361
  return vec2(
@@ -364,14 +364,14 @@ sqrt(max(radius * radius - jo * jo, 0.0))
364
364
  );
365
365
  }
366
366
 
367
- float iT(float radius, float gw) {
368
- if (gw >= radius) return 0.0;
369
- float oh = radius - gw;
370
- return oh * oh * oh;
367
+ float iT(float radius, float gx) {
368
+ if (gx >= radius) return 0.0;
369
+ float og = radius - gx;
370
+ return og * og * og;
371
371
  }
372
372
 
373
373
 
374
- vec3 mu(ad source, float radius) {
374
+ vec3 mt(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;
@@ -380,43 +380,43 @@ aL(geometricNormal, tangent, bitangent);
380
380
  vec3 iF = vec3(0.0);
381
381
 
382
382
  for (int ig = 0; ig < BEVEL_SAMPLES; ig++) {
383
- vec2 ph = fo(CAMERA_BEVEL_BASE + uint(ig));
383
+ vec2 ph = fp(CAMERA_BEVEL_BASE + uint(ig));
384
384
  float cA = ph.x;
385
- float oG = ph.y;
385
+ float oF = ph.y;
386
386
  vec3 dj = geometricNormal;
387
- vec3 fH = tangent;
387
+ vec3 fI = tangent;
388
388
  vec3 ek = bitangent;
389
- float ge = 0.5;
389
+ float gf = 0.5;
390
390
  float hY = 0.25;
391
- float gG = 0.25;
391
+ float gH = 0.25;
392
392
  if (cA < 0.5) {
393
393
  cA *= 2.0;
394
394
  }
395
395
  else if (cA < 0.75) {
396
- vec3 mK = dj;
397
- dj = fH;
398
- fH = mK;
399
- ge = 0.25;
396
+ vec3 mJ = dj;
397
+ dj = fI;
398
+ fI = mJ;
399
+ gf = 0.25;
400
400
  hY = 0.5;
401
401
  cA = (cA - 0.5) * 4.0;
402
402
  }
403
403
  else {
404
- vec3 mK = dj;
404
+ vec3 mJ = dj;
405
405
  dj = ek;
406
- ek = mK;
407
- ge = 0.25;
408
- gG = 0.5;
406
+ ek = mJ;
407
+ gf = 0.25;
408
+ gH = 0.5;
409
409
  cA = (cA - 0.75) * 4.0;
410
410
  }
411
411
 
412
- vec2 gU = kz(radius, oG);
412
+ vec2 gV = kz(radius, oF);
413
413
  float phi = TWOPI * cA;
414
- vec3 qv = gU.x *
415
- (cos(phi) * fH + sin(phi) * ek);
414
+ vec3 qv = gV.x *
415
+ (cos(phi) * fI + sin(phi) * ek);
416
416
  Ray ray;
417
417
  iC(
418
418
  ray,
419
- source.position + dj * gU.y + qv,
419
+ source.position + dj * gV.y + qv,
420
420
  -dj
421
421
  );
422
422
  ad hit;
@@ -424,20 +424,20 @@ iM(
424
424
  ray,
425
425
  hit,
426
426
  source.instanceIndex,
427
- max(2.0 * gU.y, EPS)
427
+ max(2.0 * gV.y, EPS)
428
428
  );
429
429
  if (!hit.hit) continue;
430
430
 
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));
431
+ float kQ = gf * abs(dot(dj, hit.faceNormal));
432
+ float mF = hY * abs(dot(fI, hit.faceNormal));
433
+ float kb = gH * abs(dot(ek, hit.faceNormal));
434
434
  float weight = kQ / max(
435
- kQ * kQ + mG * mG +
435
+ kQ * kQ + mF * mF +
436
436
  kb * kb,
437
437
  1e-8
438
438
  );
439
439
  weight *= iT(radius, distance(hit.position, source.position)) /
440
- max(iT(radius, gU.x), 1e-8);
440
+ max(iT(radius, gV.x), 1e-8);
441
441
  iF += weight * hit.vertexNormal;
442
442
  }
443
443
 
@@ -473,29 +473,29 @@ return bw(si, ray, mat, outAux);
473
473
 
474
474
 
475
475
 
476
- Ray nY = ray;
477
- nY.o = si.position + ray.d * (EPS * 0.02);
476
+ Ray nX = ray;
477
+ nX.o = si.position + ray.d * (EPS * 0.02);
478
478
  ad dE = si;
479
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
480
+ cZ(nX, dE, false);
481
+ J nW;
482
+ eX(nW, dE.materialIndex, dE.uv, dE.uv1, dE.instanceIndex, dE.vertexColor);
483
+ RayTraceAuxiliary gn = outAux;
484
+ if (dE.hit && (nW.materialType == STANDARD || nW.materialType == UNLIT)) {
485
+ gn.albedo = nW.transmissionWeight > 0.5
486
486
  ? vec3(1.0)
487
- : nX.baseColor;
488
- gm.normal = dot(
487
+ : nW.baseColor;
488
+ gn.normal = dot(
489
489
  dE.normal,
490
490
  dE.position - vec3(viewInv[3])
491
491
  ) > 0.0
492
492
  ? -dE.normal
493
493
  : dE.normal;
494
- dE.albedoSampled = nX.transmissionWeight > 0.5;
494
+ dE.albedoSampled = nW.transmissionWeight > 0.5;
495
495
  }
496
- vec4 back = bw(dE, nY, nX, gm);
496
+ vec4 back = bw(dE, nX, nW, gn);
497
497
  if (coverage <= 0.0) {
498
- outAux = gm;
498
+ outAux = gn;
499
499
  return back;
500
500
  }
501
501
 
@@ -504,18 +504,18 @@ J tR = mat;
504
504
  tR.alpha = 1.0;
505
505
  RayTraceAuxiliary iW = outAux;
506
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)
507
+ outAux.albedo = mix(gn.albedo, iW.albedo, coverage);
508
+ vec3 fW = mix(gn.normal, iW.normal, coverage);
509
+ outAux.normal = dot(fW, fW) > 1e-12
510
+ ? normalize(fW)
511
511
  : vec3(0.0);
512
- outAux.isBlank = gm.isBlank && iW.isBlank;
512
+ outAux.isBlank = gn.isBlank && iW.isBlank;
513
513
  return mix(back, qY, coverage);
514
514
  }
515
515
 
516
516
 
517
517
 
518
- vec4 my(Ray ray, out RayTraceAuxiliary outAux) {
518
+ vec4 mx(Ray ray, out RayTraceAuxiliary outAux) {
519
519
 
520
520
  ad si;
521
521
  J mat;
@@ -534,7 +534,7 @@ si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.0
534
534
 
535
535
  #ifdef HAS_BEVEL
536
536
  if (bevelEnabled && mat.bevel > 0.0) {
537
- si.normal = mu(si, mat.bevel);
537
+ si.normal = mt(si, mat.bevel);
538
538
  }
539
539
  #endif
540
540
 
@@ -568,15 +568,15 @@ kh(v_Texcoord * viewportSize, int(uint(sampleCount) ^ eg(uint(sequenceSeed))));
568
568
 
569
569
 
570
570
  bf = dispersionWavelengths == 1 ? 0.0 : wavelength;
571
- mw = wavelength;
571
+ mv = wavelength;
572
572
  if (dispersionWavelengths == 1 && wavelength > 0.0) {
573
573
  float channel = floor(dz(CAMERA_WAVELENGTH) * 3.0);
574
- mw = channel < 1.0 ? 650.0 : channel < 2.0 ? 510.0 : 475.0;
574
+ mv = channel < 1.0 ? 650.0 : channel < 2.0 ? 510.0 : 475.0;
575
575
  }
576
576
 
577
577
 
578
578
 
579
- Ray cam = nN();
579
+ Ray cam = nM();
580
580
 
581
581
  RayTraceAuxiliary outAux;
582
582
  outAux.albedo = vec3(0.0);
@@ -584,7 +584,7 @@ outAux.normal = vec3(0.0);
584
584
  outAux.isBlank = false;
585
585
  outAux.isShadowCatcher = false;
586
586
 
587
- vec4 aF = my(cam, outAux);
587
+ vec4 aF = mx(cam, outAux);
588
588
 
589
589
 
590
590
 
@@ -52,7 +52,7 @@ ${cameraRayGlsl}
52
52
 
53
53
 
54
54
 
55
- vec4 my(inout Ray ray, out vec4 background) {
55
+ vec4 mx(inout Ray ray, out vec4 background) {
56
56
  background = vec4(0.0);
57
57
  Path aa;
58
58
  aa.ray = ray;
@@ -94,9 +94,9 @@ su();
94
94
  kh(v_Texcoord * viewportSize, int(uint(sampleCount) ^ eg(uint(sequenceSeed))));
95
95
 
96
96
  if (dispersionWavelengths == 1 && wavelength > 0.0) { dz(CAMERA_WAVELENGTH); }
97
- Ray cam = nN();
97
+ Ray cam = nM();
98
98
  vec4 background;
99
- vec4 aF = my(cam, background);
99
+ vec4 aF = mx(cam, background);
100
100
 
101
101
  if (!(aF.x < INF && aF.x > -EPS)) {
102
102
  aF = vec4(0, 0, 0, 1);
@@ -59,7 +59,7 @@ color = max(vec3(0.0), color - 0.004);
59
59
  return pow((color * (6.2 * color + 0.5)) /
60
60
  (color * (6.2 * color + 1.7) + 0.06), vec3(2.2));
61
61
  }
62
- vec3 oJ(vec3 value) {
62
+ vec3 oI(vec3 value) {
63
63
  vec3 kO = value * (value + 0.0245786) - 0.000090537;
64
64
  vec3 ap = value * (0.983729 * value + 0.4329510) + 0.238081;
65
65
  return kO / ap;
@@ -70,13 +70,13 @@ vec3(0.59719, 0.07600, 0.02840),
70
70
  vec3(0.35458, 0.90834, 0.13383),
71
71
  vec3(0.04823, 0.01566, 0.83777)
72
72
  );
73
- const mat3 oE = mat3(
73
+ const mat3 oD = mat3(
74
74
  vec3(1.60475, -0.10208, -0.00327),
75
75
  vec3(-0.53108, 1.10813, -0.07276),
76
76
  vec3(-0.07367, -0.00605, 1.07602)
77
77
  );
78
78
  color = pw * (color / 0.6);
79
- return clamp(oE * oJ(color), 0.0, 1.0);
79
+ return clamp(oD * oI(color), 0.0, 1.0);
80
80
  }
81
81
  const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(
82
82
  vec3(1.6605, -0.1246, -0.0182),
@@ -88,27 +88,27 @@ vec3(0.6274, 0.0691, 0.0164),
88
88
  vec3(0.3293, 0.9195, 0.0880),
89
89
  vec3(0.0433, 0.0113, 0.8956)
90
90
  );
91
- vec3 fT(vec3 value) {
92
- vec3 mO = value * value;
93
- vec3 qK = mO * mO;
94
- return 15.5 * qK * mO - 40.14 * qK * value
95
- + 31.96 * qK - 6.868 * mO * value
96
- + 0.4298 * mO + 0.1191 * value - 0.00232;
91
+ vec3 fU(vec3 value) {
92
+ vec3 mN = value * value;
93
+ vec3 qK = mN * mN;
94
+ return 15.5 * qK * mN - 40.14 * qK * value
95
+ + 31.96 * qK - 6.868 * mN * value
96
+ + 0.4298 * mN + 0.1191 * value - 0.00232;
97
97
  }
98
- vec3 me(vec3 color) {
98
+ vec3 mc(vec3 color) {
99
99
  const mat3 pH = mat3(
100
100
  vec3(0.856627153315983, 0.137318972929847, 0.11189821299995),
101
101
  vec3(0.0951212405381588, 0.761241990602591, 0.0767994186031903),
102
102
  vec3(0.0482516061458583, 0.101439036467562, 0.811302368396859)
103
103
  );
104
- const mat3 oF = mat3(
104
+ const mat3 oE = mat3(
105
105
  vec3(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),
106
106
  vec3(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),
107
107
  vec3(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)
108
108
  );
109
109
  color = pH * (LINEAR_SRGB_TO_LINEAR_REC2020 * color);
110
110
  color = clamp((log2(max(color, 1e-10)) + 12.47393) / 16.5, 0.0, 1.0);
111
- color = oF * fT(color);
111
+ color = oE * fU(color);
112
112
  color = pow(max(color, 0.0), vec3(2.2));
113
113
  return clamp(LINEAR_REC2020_TO_LINEAR_SRGB * color, 0.0, 1.0);
114
114
  }
@@ -117,9 +117,9 @@ if (toneMappingMode == 1) return lv(color);
117
117
  if (toneMappingMode == 2) return jJ(color);
118
118
  if (toneMappingMode == 3) return iP(color);
119
119
  if (toneMappingMode == 4) return jU(color);
120
- return me(color);
120
+ return mc(color);
121
121
  }
122
- vec3 gb(vec3 color) {
122
+ vec3 gc(vec3 color) {
123
123
  vec3 tj = vec3(
124
124
  1.0 + temperature * 0.16 + tint * 0.04,
125
125
  1.0 - tint * 0.12,
@@ -141,7 +141,7 @@ return;
141
141
  vec4 color = sample_colorTex(uv);
142
142
  vec4 bloom = sample_bloomTex(uv) * bloomIntensity;
143
143
  color.rgb += bloom.rgb;
144
- color.rgb = gb(color.rgb * exposure);
144
+ color.rgb = gc(color.rgb * exposure);
145
145
  if (sRGBOutput) {
146
146
  float edge = smoothstep(0.2, 0.72, distance(uv, vec2(0.5)));
147
147
  color.rgb *= 1.0 - vignette * edge;
@@ -154,15 +154,15 @@ if (shadowCatcherEnabled > 0.5) {
154
154
  float coverage = clamp(shadow.r, 0.0, 1.0);
155
155
 
156
156
 
157
- float fR = clamp(
157
+ float fS = clamp(
158
158
  (1.0 - shadow.a) / max(coverage, 0.000001), 0.0, 1.0
159
159
  );
160
- fR = max(fR - (1.0 - shadowCatcherAlpha), 0.0);
160
+ fS = max(fS - (1.0 - shadowCatcherAlpha), 0.0);
161
161
  if (coverage > 0.0) {
162
162
  vec4 foreground = sample_foregroundTex(uv);
163
163
  vec4 background = sample_catcherBackgroundTex(uv);
164
- vec3 bK = gb((foreground.rgb + bloom.rgb) * exposure);
165
- vec3 backgroundColor = gb((background.rgb / max(background.a, 0.000001) + bloom.rgb) * exposure);
164
+ vec3 bK = gc((foreground.rgb + bloom.rgb) * exposure);
165
+ vec3 backgroundColor = gc((background.rgb / max(background.a, 0.000001) + bloom.rgb) * exposure);
166
166
  if (sRGBOutput) {
167
167
  float edge = smoothstep(0.2, 0.72, distance(uv, vec2(0.5)));
168
168
  bK *= 1.0 - vignette * edge;
@@ -171,15 +171,15 @@ bK = pow(max(cl(bK), 0.0), vec3(1.0 / 2.2));
171
171
  backgroundColor = pow(max(cl(backgroundColor), 0.0), vec3(1.0 / 2.2));
172
172
  }
173
173
 
174
- float opacity = fR;
175
- fR *= coverage;
176
- float mg = clamp(dot(bloom.rgb, vec3(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
177
- float hv = max(foreground.a, mg * (1.0 - coverage));
178
- float jd = max(background.a, mg * coverage);
179
- float alpha = hv + jd * (1.0 - opacity) + fR;
174
+ float opacity = fS;
175
+ fS *= coverage;
176
+ float mf = clamp(dot(bloom.rgb, vec3(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
177
+ float hv = max(foreground.a, mf * (1.0 - coverage));
178
+ float jd = max(background.a, mf * coverage);
179
+ float alpha = hv + jd * (1.0 - opacity) + fS;
180
180
  vec3 premultiplied = bK * hv
181
181
  + backgroundColor * jd * (1.0 - opacity)
182
- + shadowCatcherColor * fR;
182
+ + shadowCatcherColor * fS;
183
183
  color = vec4(premultiplied / max(alpha, 0.000001), alpha);
184
184
  }
185
185
  }
@@ -4,18 +4,18 @@ export function scratchWGSLFunctions(textures, samplers, scratch = false) {
4
4
  fn ${name}Region() -> vec2u {
5
5
  return ${scratch ? `imageRegions[${index}].xy` : `textureDimensions(${name})`};
6
6
  }
7
- fn load_${name}(fP: vec2i, level: i32) -> vec4f {
8
- ${scratch ? `if (any(fP < vec2i(0)) || any(fP >= vec2i(${name}Region()))) { return vec4f(0.0); }` : ''}
9
- return textureLoad(${name}, fP, level);
7
+ fn load_${name}(fQ: vec2i, level: i32) -> vec4f {
8
+ ${scratch ? `if (any(fQ < vec2i(0)) || any(fQ >= vec2i(${name}Region()))) { return vec4f(0.0); }` : ''}
9
+ return textureLoad(${name}, fQ, level);
10
10
  }
11
11
  ${samplers.map(sampler => /* wgsl */ `
12
- fn sample_${name}_${sampler}(fG: vec2f) -> vec4f {
12
+ fn sample_${name}_${sampler}(fH: vec2f) -> vec4f {
13
13
  ${scratch ? /* wgsl */ `
14
14
  let kc = textureDimensions(${name});
15
- if (all(kc == ${name}Region())) { return textureSampleLevel(${name}, ${sampler}, fG, 0.0); }
16
- let fP = clamp(fG * vec2f(${name}Region()), vec2f(0.5), vec2f(${name}Region()) - vec2f(0.5));
17
- return textureSampleLevel(${name}, ${sampler}, fP / vec2f(kc), 0.0);`
18
- : `return textureSample(${name}, ${sampler}, fG);`}
15
+ if (all(kc == ${name}Region())) { return textureSampleLevel(${name}, ${sampler}, fH, 0.0); }
16
+ let fQ = clamp(fH * vec2f(${name}Region()), vec2f(0.5), vec2f(${name}Region()) - vec2f(0.5));
17
+ return textureSampleLevel(${name}, ${sampler}, fQ / vec2f(kc), 0.0);`
18
+ : `return textureSample(${name}, ${sampler}, fH);`}
19
19
  }`).join('')}`).join('');
20
20
  }
21
21
  export function scratchGLSLFunctions(textures, scratch = false) {
@@ -23,17 +23,17 @@ export function scratchGLSLFunctions(textures, scratch = false) {
23
23
  ivec2 ${name}Region() {
24
24
  return ${scratch ? `${name}RegionSize` : `textureSize(${name}, 0)`};
25
25
  }
26
- vec4 load_${name}(ivec2 fP, int level) {
27
- ${scratch ? `if (any(lessThan(fP, ivec2(0))) || any(greaterThanEqual(fP, ${name}Region()))) return vec4(0.0);` : ''}
28
- return texelFetch(${name}, fP, level);
26
+ vec4 load_${name}(ivec2 fQ, int level) {
27
+ ${scratch ? `if (any(lessThan(fQ, ivec2(0))) || any(greaterThanEqual(fQ, ${name}Region()))) return vec4(0.0);` : ''}
28
+ return texelFetch(${name}, fQ, level);
29
29
  }
30
- vec4 sample_${name}(vec2 fG) {
30
+ vec4 sample_${name}(vec2 fH) {
31
31
  ${scratch ? /* glsl */ `
32
32
  ivec2 kc = textureSize(${name}, 0);
33
- if (all(equal(kc, ${name}Region()))) return texture(${name}, fG);
34
- vec2 fP = clamp(fG * vec2(${name}Region()), vec2(0.5), vec2(${name}Region()) - vec2(0.5));
35
- return texture(${name}, fP / vec2(kc));`
36
- : `return texture(${name}, fG);`}
33
+ if (all(equal(kc, ${name}Region()))) return texture(${name}, fH);
34
+ vec2 fQ = clamp(fH * vec2(${name}Region()), vec2(0.5), vec2(${name}Region()) - vec2(0.5));
35
+ return texture(${name}, fQ / vec2(kc));`
36
+ : `return texture(${name}, fH);`}
37
37
  }`).join('');
38
38
  }
39
39
  //# sourceMappingURL=scratchSampling.js.map
@@ -27,12 +27,12 @@ return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);
27
27
 
28
28
  }
29
29
 
30
- fn eL(gg: vec3f) -> vec2f {
31
- var phi = atan2(-gg.z, -gg.x);
30
+ fn eL(gh: vec3f) -> vec2f {
31
+ var phi = atan2(-gh.z, -gh.x);
32
32
  if (phi < 0.0) {
33
33
  phi += TWOPI;
34
34
  }
35
- let theta = acos(clamp(gg.y, -1.0, 1.0));
35
+ let theta = acos(clamp(gh.y, -1.0, 1.0));
36
36
  return vec2f(phi * 0.5 * INVPI, theta * INVPI);
37
37
  }
38
38
 
@@ -40,8 +40,8 @@ fn jN() -> mat3x3f {
40
40
  return mat3x3f(rtUniform.environmentRotation[0].xyz, rtUniform.environmentRotation[1].xyz, rtUniform.environmentRotation[2].xyz);
41
41
  }
42
42
 
43
- fn cY(mQ: vec3f) -> vec2f {
44
- return eL(transpose(jN()) * mQ);
43
+ fn cY(mP: vec3f) -> vec2f {
44
+ return eL(transpose(jN()) * mP);
45
45
  }
46
46
 
47
47
  fn qB(u: f32, vOffset: ptr<function, i32>, pdf: ptr<function, vec2f>) -> f32 {
@@ -84,25 +84,25 @@ left = mid + 1;
84
84
  right = mid;
85
85
  }
86
86
  }
87
- let oS = left - 1;
87
+ let oR = left - 1;
88
88
 
89
89
 
90
90
 
91
- let s0 = textureLoad(envMapDistribution, vec2i(1 + oS, vOffset), 0).xy;
92
- let s1 = textureLoad(envMapDistribution, vec2i(1 + oS + 1, vOffset), 0).xy;
91
+ let s0 = textureLoad(envMapDistribution, vec2i(1 + oR, vOffset), 0).xy;
92
+ let s1 = textureLoad(envMapDistribution, vec2i(1 + oR + 1, vOffset), 0).xy;
93
93
 
94
94
  (*pdf).x = s0.y;
95
95
 
96
- return (f32(oS) + (u - s0.x) / (s1.x - s0.x)) / f32(size.x);
96
+ return (f32(oR) + (u - s0.x) / (s1.x - s0.x)) / f32(size.x);
97
97
  }
98
98
 
99
99
 
100
- fn oM(random: vec2f, uv: ptr<function, vec2f>, pdf: ptr<function, f32>) -> vec3f {
101
- var hd: vec2f;
100
+ fn oL(random: vec2f, uv: ptr<function, vec2f>, pdf: ptr<function, f32>) -> vec3f {
101
+ var he: vec2f;
102
102
  var vOffset: i32;
103
103
 
104
- (*uv).y = qB(random.x, &vOffset, &hd);
105
- (*uv).x = qA(random.y, vOffset, &hd);
104
+ (*uv).y = qB(random.x, &vOffset, &he);
105
+ (*uv).x = qA(random.y, vOffset, &he);
106
106
 
107
107
  let phi = (*uv).x * TWOPI;
108
108
  let theta = (*uv).y * PI;
@@ -113,7 +113,7 @@ let uw = sin(phi);
113
113
 
114
114
  let dir = vec3f(-sinTheta * ul, cc, -sinTheta * uw);
115
115
 
116
- *pdf = hd.x * hd.y * INVPI2 / (2.0 * sinTheta);
116
+ *pdf = he.x * he.y * INVPI2 / (2.0 * sinTheta);
117
117
 
118
118
  return jN() * dir;
119
119
  }