@meimu/mutracer 0.2.0 → 0.3.0

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 (211) hide show
  1. package/README.md +3 -0
  2. package/dist/assets/bvh.worker.js +1 -1
  3. package/dist/mutracer.umd.js +8949 -7915
  4. package/docs/api.md +42 -21
  5. package/docs/caustics.md +80 -0
  6. package/docs/materials.md +5 -4
  7. package/docs/progressive-rendering.md +50 -9
  8. package/docs/technical/continuous-spectrum.md +93 -0
  9. package/docs/updates.md +3 -1
  10. package/docs/viewer-checklist.md +65 -0
  11. package/docs/viewer.md +7 -5
  12. package/lib/Display.js +1 -1
  13. package/lib/Display.js.map +1 -1
  14. package/lib/Engine.d.ts +2 -0
  15. package/lib/Engine.js +47 -12
  16. package/lib/Engine.js.map +1 -1
  17. package/lib/Render.d.ts +61 -13
  18. package/lib/Render.js +169 -19
  19. package/lib/Render.js.map +1 -1
  20. package/lib/RenderLoop.d.ts +7 -3
  21. package/lib/RenderLoop.js +68 -44
  22. package/lib/RenderLoop.js.map +1 -1
  23. package/lib/main.d.ts +1 -1
  24. package/lib/main.js.map +1 -1
  25. package/lib/oidn.d.ts +1 -1
  26. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  27. package/lib/renderer/GPUTraceQueue.d.ts +2 -1
  28. package/lib/renderer/GPUTraceQueue.js +3 -1
  29. package/lib/renderer/GPUTraceQueue.js.map +1 -1
  30. package/lib/renderer/RenderingPipeline.d.ts +4 -0
  31. package/lib/renderer/RenderingPipeline.js.map +1 -1
  32. package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
  33. package/lib/renderer/WGPUCausticLightPass.js +217 -0
  34. package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
  35. package/lib/renderer/WGPUEnvMapDistribution.js +18 -18
  36. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  37. package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
  38. package/lib/renderer/WGPUPhotonMap.js +191 -0
  39. package/lib/renderer/WGPUPhotonMap.js.map +1 -0
  40. package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
  41. package/lib/renderer/WGPURayTraceOutput.js +122 -28
  42. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  43. package/lib/renderer/WGPURayTracePass.d.ts +48 -17
  44. package/lib/renderer/WGPURayTracePass.js +538 -340
  45. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  46. package/lib/renderer/WGPURenderingPipeline.js +83 -47
  47. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  48. package/lib/renderer/WebGLFullQuadPass.d.ts +2 -1
  49. package/lib/renderer/WebGLFullQuadPass.js +4 -0
  50. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  51. package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
  52. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  53. package/lib/renderer/WebGLRayTracePass.d.ts +6 -1
  54. package/lib/renderer/WebGLRayTracePass.js +43 -6
  55. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  56. package/lib/renderer/WebGLRenderingPipeline.js +10 -14
  57. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  58. package/lib/renderer/WebGLSkyBaker.js +60 -60
  59. package/lib/renderer/accumulationTarget.d.ts +2 -1
  60. package/lib/renderer/accumulationTarget.js.map +1 -1
  61. package/lib/renderer/causticDiagnostics.d.ts +31 -0
  62. package/lib/renderer/causticDiagnostics.js +5 -0
  63. package/lib/renderer/causticDiagnostics.js.map +1 -0
  64. package/lib/renderer/causticEmission.d.ts +10 -0
  65. package/lib/renderer/causticEmission.js +40 -0
  66. package/lib/renderer/causticEmission.js.map +1 -0
  67. package/lib/renderer/causticUniform.d.ts +12 -0
  68. package/lib/renderer/causticUniform.js +22 -0
  69. package/lib/renderer/causticUniform.js.map +1 -0
  70. package/lib/renderer/caustics.d.ts +16 -0
  71. package/lib/renderer/caustics.js +93 -0
  72. package/lib/renderer/caustics.js.map +1 -0
  73. package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
  74. package/lib/renderer/glsl/aovReflectance.glsl.js +53 -53
  75. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
  76. package/lib/renderer/glsl/aovTrace.frag.js +33 -33
  77. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
  78. package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
  79. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
  80. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
  81. package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -73
  82. package/lib/renderer/glsl/chunks/intersect.glsl.js +426 -428
  83. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  84. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
  85. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +156 -153
  86. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  87. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +771 -771
  88. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  89. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  90. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
  91. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +68 -63
  92. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  93. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
  94. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  95. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
  96. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +140 -117
  97. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  98. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +14 -14
  99. package/lib/renderer/glsl/chunks/sampling.glsl.js +89 -92
  100. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
  101. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  102. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  103. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  104. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  105. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
  106. package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
  107. package/lib/renderer/glsl/rayTrace.frag.js +260 -237
  108. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  109. package/lib/renderer/glsl/shadowCatcher.frag.js +26 -26
  110. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  111. package/lib/renderer/glsl/webglPipeline.frag.js +59 -59
  112. package/lib/renderer/lightSampling.d.ts +3 -2
  113. package/lib/renderer/lightSampling.js +14 -8
  114. package/lib/renderer/lightSampling.js.map +1 -1
  115. package/lib/renderer/progressiveScheduler.js +4 -3
  116. package/lib/renderer/progressiveScheduler.js.map +1 -1
  117. package/lib/renderer/renderPipeline.d.ts +1 -0
  118. package/lib/renderer/renderPipeline.js.map +1 -1
  119. package/lib/renderer/researchTransport.d.ts +31 -0
  120. package/lib/renderer/researchTransport.js +5 -0
  121. package/lib/renderer/researchTransport.js.map +1 -0
  122. package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
  123. package/lib/renderer/sceneLayoutSchema.js +2 -2
  124. package/lib/renderer/sceneLayoutSchema.js.map +1 -1
  125. package/lib/renderer/scratchSampling.js +6 -6
  126. package/lib/renderer/spectrum.d.ts +21 -0
  127. package/lib/renderer/spectrum.js +154 -0
  128. package/lib/renderer/spectrum.js.map +1 -0
  129. package/lib/renderer/webglLightSampling.d.ts +39 -0
  130. package/lib/renderer/webglLightSampling.js +15 -0
  131. package/lib/renderer/webglLightSampling.js.map +1 -0
  132. package/lib/renderer/wgpuBindlessSource.js +3 -3
  133. package/lib/renderer/wgpuShaderSource.d.ts +7 -0
  134. package/lib/renderer/wgpuShaderSource.js +2 -0
  135. package/lib/renderer/wgpuShaderSource.js.map +1 -1
  136. package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
  137. package/lib/renderer/wgsl/aovReflectance.wgsl.js +55 -55
  138. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
  139. package/lib/renderer/wgsl/aovResolve.wgsl.js +2 -2
  140. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +1 -1
  141. package/lib/renderer/wgsl/aovTrace.wgsl.js +33 -33
  142. package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
  143. package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
  144. package/lib/renderer/wgsl/causticLight.compute.js +537 -0
  145. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
  146. package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
  147. package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
  148. package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
  149. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
  150. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
  151. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
  152. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
  153. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
  154. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
  155. package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
  156. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
  157. package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
  158. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  159. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +37 -37
  160. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +598 -592
  161. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  162. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +14 -14
  163. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
  164. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +75 -73
  165. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  166. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +794 -794
  167. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  168. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  169. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  170. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +35 -25
  171. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  172. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  173. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +142 -138
  174. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  175. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  176. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +204 -187
  177. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  178. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  179. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +11 -11
  180. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  181. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
  182. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +89 -93
  183. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
  184. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  185. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  186. package/lib/renderer/wgsl/compose.frag.wgsl.js +98 -98
  187. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  188. package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
  189. package/lib/renderer/wgsl/jnlm.compute.js +74 -74
  190. package/lib/renderer/wgsl/offlineAdaptive.compute.js +25 -25
  191. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
  192. package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
  193. package/lib/renderer/wgsl/photonMap.compute.js +352 -0
  194. package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
  195. package/lib/renderer/wgsl/proceduralSky.compute.js +64 -64
  196. package/lib/renderer/wgsl/rayTrace.compute.d.ts +9 -1
  197. package/lib/renderer/wgsl/rayTrace.compute.js +448 -522
  198. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  199. package/lib/scene/MaterialState.d.ts +2 -2
  200. package/lib/scene/MaterialState.js +2 -2
  201. package/lib/scene/MaterialState.js.map +1 -1
  202. package/lib/settings/render.d.ts +11 -0
  203. package/lib/settings/render.js +1 -0
  204. package/lib/settings/render.js.map +1 -1
  205. package/lib/util/fromTHREE.js +2 -2
  206. package/lib/util/fromTHREE.js.map +1 -1
  207. package/lib/version.d.ts +1 -1
  208. package/lib/version.js +1 -1
  209. package/lib/version.js.map +1 -1
  210. package/llms.txt +2 -1
  211. package/package.json +3 -3
@@ -16,41 +16,41 @@ const BOUNCE_STRIDE = 64u;
16
16
 
17
17
 
18
18
 
19
- var<private> aZ: vec2u;
20
- var<private> aQ: u32;
21
- var<private> bT: u32 = 0u;
22
- var<private> cP: u32 = 0u;
23
- fn dG(kW: u32) -> u32 {
24
- var x = kW;
19
+ var<private> aI: vec2u;
20
+ var<private> aC: u32;
21
+ var<private> samplingBounce: u32 = 0u;
22
+ var<private> ca: u32 = 0u;
23
+ fn cB(kC: u32) -> u32 {
24
+ var x = kC;
25
25
  x ^= x >> 16u; x *= 0x7feb352du;
26
26
  x ^= x >> 15u; x *= 0x846ca68bu;
27
27
  return x ^ (x >> 16u);
28
28
  }
29
- fn ar(a: u32, b: u32) -> u32 {
30
- return dG(a ^ dG(b + 0x9e3779b9u));
29
+ fn ak(a: u32, b: u32) -> u32 {
30
+ return cB(a ^ cB(b + 0x9e3779b9u));
31
31
  }
32
- fn iV(kW: u32, seed: u32) -> u32 {
33
- var x = kW + seed;
32
+ fn iD(kC: u32, seed: u32) -> u32 {
33
+ var x = kC + seed;
34
34
  x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
35
35
  x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
36
36
  return x;
37
37
  }
38
- fn ua(x: u32, seed: u32) -> u32 {
39
- return reverseBits(iV(reverseBits(x), seed));
38
+ fn ud(x: u32, seed: u32) -> u32 {
39
+ return reverseBits(iD(reverseBits(x), seed));
40
40
  }
41
41
 
42
- fn su(kW: u32) -> u32 {
43
- var r = reverseBits(kW);
42
+ fn sm(kC: u32) -> u32 {
43
+ var r = reverseBits(kC);
44
44
  ${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
45
45
  return r;
46
46
  }
47
- fn xE(index: u32, seed: u32) -> vec2f {
48
- let i = ua(index, ar(seed, 0u));
49
- let x = reverseBits(iV(i, ar(seed, 1u)));
50
- let y = ua(su(i), ar(seed, 2u));
47
+ fn yf(index: u32, seed: u32) -> vec2f {
48
+ let i = ud(index, ak(seed, 0u));
49
+ let x = reverseBits(iD(i, ak(seed, 1u)));
50
+ let y = ud(sm(i), ak(seed, 2u));
51
51
  return vec2f(f32(x >> 8u), f32(y >> 8u)) * (1.0 / 16777216.0);
52
52
  }
53
- fn uR(p: vec2u) -> u32 {
53
+ fn uX(p: vec2u) -> u32 {
54
54
  var v = p & vec2u(255u);
55
55
  v = (v | (v << vec2u(4u))) & vec2u(0x0f0fu);
56
56
  v = (v | (v << vec2u(2u))) & vec2u(0x3333u);
@@ -58,112 +58,112 @@ v = (v | (v << vec2u(1u))) & vec2u(0x5555u);
58
58
  return v.x | (v.y << 1u);
59
59
  }
60
60
  ${zSobolPackedPermutations.map((v, i) => `const Z_PERM_${i} = ${v}u;`).join("\n")}
61
- fn la(uU: u32) -> u32 {
62
- let group = uU >> 2u;
61
+ fn kG(va: u32) -> u32 {
62
+ let group = va >> 2u;
63
63
  var word = Z_PERM_5;
64
64
  ${[0, 1, 2, 3, 4].map(i => `word = select(word, Z_PERM_${i}, group == ${i}u);`).join("\n ")}
65
- return (word >> ((uU & 3u) * 8u)) & 255u;
65
+ return (word >> ((va & 3u) * 8u)) & 255u;
66
66
  }
67
- fn qS(lu: u32, dim: u32, logSPP: u32) -> u32 {
67
+ fn qJ(kY: u32, dim: u32, logSPP: u32) -> u32 {
68
68
  let odd = logSPP & 1u;
69
- let vN = 8u + ((logSPP + 1u) >> 1u);
69
+ let wb = 8u + ((logSPP + 1u) >> 1u);
70
70
  var result = 0u;
71
- for (var digit = i32(vN) - 1; digit >= i32(odd); digit--) {
71
+ for (var digit = i32(wb) - 1; digit >= i32(odd); digit--) {
72
72
  let shift = 2u*u32(digit) - odd;
73
73
 
74
- var tL = 0u;
75
- if (shift < 30u) { tL = lu >> (shift + 2u); }
76
- let uU = (dG(tL ^ (0x55555555u * dim)) >> 24u) % 24u;
77
- let d = (lu >> shift) & 3u;
78
- result |= ((la(uU) >> (2u*d)) & 3u) << shift;
74
+ var tN = 0u;
75
+ if (shift < 30u) { tN = kY >> (shift + 2u); }
76
+ let va = (cB(tN ^ (0x55555555u * dim)) >> 24u) % 24u;
77
+ let d = (kY >> shift) & 3u;
78
+ result |= ((kG(va) >> (2u*d)) & 3u) << shift;
79
79
  }
80
80
  if (odd != 0u) {
81
- result |= (lu & 1u) ^ (dG((lu >> 1u) ^ (0x55555555u * dim)) & 1u);
81
+ result |= (kY & 1u) ^ (cB((kY >> 1u) ^ (0x55555555u * dim)) & 1u);
82
82
  }
83
83
  return result;
84
84
  }
85
85
 
86
86
 
87
87
 
88
- fn cE(slot: u32) -> u32 {
89
- return CAMERA_BEVEL_BASE + u32(BEVEL_SAMPLES) + bT * BOUNCE_STRIDE + slot;
88
+ fn bE(slot: u32) -> u32 {
89
+ return CAMERA_BEVEL_BASE + u32(BEVEL_SAMPLES) + samplingBounce * BOUNCE_STRIDE + slot;
90
90
  }
91
- fn sl(candidate: u32, slot: u32) -> u32 {
91
+ fn sf(candidate: u32, slot: u32) -> u32 {
92
92
  if (candidate == 0u) {
93
- if (slot == 2u) { return cE(8u); }
94
- return cE(slot);
93
+ if (slot == 2u) { return bE(8u); }
94
+ return bE(slot);
95
95
  }
96
- return cE(9u + (candidate - 1u) * 3u + slot);
96
+ return bE(9u + (candidate - 1u) * 3u + slot);
97
97
  }
98
98
 
99
99
 
100
- var<private> hA: vec4u;
101
- var<private> hB: u32;
102
- var<private> fQ: bool = false;
103
- var<private> dv: bool = false;
104
- var<private> dQ: u32;
105
- var<private> gK: u32;
106
- var<private> fa: vec2f;
107
- fn dN(dim: u32) {
100
+ var<private> hg: vec4u;
101
+ var<private> hh: u32;
102
+ var<private> fA: bool = false;
103
+ var<private> cX: bool = false;
104
+ var<private> dD: u32;
105
+ var<private> gt: u32;
106
+ var<private> eJ: vec2f;
107
+ fn dm(dim: u32) {
108
108
 
109
- let kI = aZ.x + aZ.y * u32(rtUniform.outputSize.x);
110
- let key = vec4u(dim, aQ, kI, rtUniform.sequenceSeed);
111
- if (fQ && all(hA == key) && hB == rtUniform.zSobolLogSPP) { return; }
112
- hA = key; hB = rtUniform.zSobolLogSPP;
113
- fQ = true; dv = false;
114
- var seed = ar(ar(kI, dim), rtUniform.sequenceSeed);
115
- var index = aQ;
109
+ let kl = aI.x + aI.y * u32(rtUniform.outputSize.x);
110
+ let key = vec4u(dim, aC, kl, rtUniform.sequenceSeed);
111
+ if (fA && all(hg == key) && hh == rtUniform.zSobolLogSPP) { return; }
112
+ hg = key; hh = rtUniform.zSobolLogSPP;
113
+ fA = true; cX = false;
114
+ var seed = ak(ak(kl, dim), rtUniform.sequenceSeed);
115
+ var index = aC;
116
116
  if (SAMPLING_PATTERN == 1) {
117
117
  var logSPP = rtUniform.zSobolLogSPP;
118
118
  if (index == 0u) { logSPP = 0u; }
119
119
  else { index -= 1u; }
120
120
 
121
- var jw = index >> logSPP;
121
+ var jd = index >> logSPP;
122
122
  let mask = (1u << logSPP) - 1u;
123
- let lu = (uR(aZ) << logSPP) | (index & mask);
124
- index = qS(lu, dim, logSPP);
125
- let tile = aZ >> vec2u(8u);
126
- seed = ar(ar(dim, rtUniform.sequenceSeed), ar(tile.x, tile.y));
123
+ let kY = (uX(aI) << logSPP) | (index & mask);
124
+ index = qJ(kY, dim, logSPP);
125
+ let tile = aI >> vec2u(8u);
126
+ seed = ak(ak(dim, rtUniform.sequenceSeed), ak(tile.x, tile.y));
127
127
 
128
- if (aQ != 0u) { jw += 1u; }
129
- seed = ar(seed, jw);
128
+ if (aC != 0u) { jd += 1u; }
129
+ seed = ak(seed, jd);
130
130
  }
131
- dQ = ua(index, ar(seed, 0u));
132
- gK = seed;
133
- let x = reverseBits(iV(dQ, ar(seed, 1u)));
134
- fa.x = f32(x >> 8u) * (1.0 / 16777216.0);
131
+ dD = ud(index, ak(seed, 0u));
132
+ gt = seed;
133
+ let x = reverseBits(iD(dD, ak(seed, 1u)));
134
+ eJ.x = f32(x >> 8u) * (1.0 / 16777216.0);
135
135
  }
136
- fn lC(dim: u32) -> vec2f {
137
- dN(dim);
138
- if (!dv) {
139
- let y = ua(su(dQ), ar(gK, 2u));
140
- fa.y = f32(y >> 8u) * (1.0 / 16777216.0);
141
- dv = true;
136
+ fn le(dim: u32) -> vec2f {
137
+ dm(dim);
138
+ if (!cX) {
139
+ let y = ud(sm(dD), ak(gt, 2u));
140
+ eJ.y = f32(y >> 8u) * (1.0 / 16777216.0);
141
+ cX = true;
142
142
  }
143
- return EPS + (1.0 - 2.0*EPS) * fa;
143
+ return EPS + (1.0 - 2.0*EPS) * eJ;
144
144
  }
145
- fn dp(dim: u32) -> f32 {
145
+ fn sample1D(dim: u32) -> f32 {
146
146
  if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
147
- dN(dim);
148
- return EPS + (1.0 - 2.0*EPS) * fa.x;
147
+ dm(dim);
148
+ return EPS + (1.0 - 2.0*EPS) * eJ.x;
149
149
  }
150
- fn dZ(dim: u32) -> vec2f {
150
+ fn sample2D(dim: u32) -> vec2f {
151
151
  if (SAMPLING_PATTERN == 2) {
152
- let x = dp(dim); let y = dp(dim);
152
+ let x = sample1D(dim); let y = sample1D(dim);
153
153
  return vec2f(x,y);
154
154
  }
155
- return lC(dim);
155
+ return le(dim);
156
156
  }
157
157
 
158
- fn eC(slot: u32) -> f32 {
159
- let dim = ar(ar(bT, slot), cP) | 0x80000000u;
160
- cP += 1u;
158
+ fn ek(slot: u32) -> f32 {
159
+ let dim = ak(ak(samplingBounce, slot), ca) | 0x80000000u;
160
+ ca += 1u;
161
161
  if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
162
162
 
163
- let kI = aZ.x + aZ.y * u32(rtUniform.outputSize.x);
164
- let seed = ar(ar(kI, dim), rtUniform.sequenceSeed);
165
- let i = ua(aQ, ar(seed, 0u));
166
- let x = reverseBits(iV(i, ar(seed, 1u)));
163
+ let kl = aI.x + aI.y * u32(rtUniform.outputSize.x);
164
+ let seed = ak(ak(kl, dim), rtUniform.sequenceSeed);
165
+ let i = ud(aC, ak(seed, 0u));
166
+ let x = reverseBits(iD(i, ak(seed, 1u)));
167
167
  return EPS + (1.0 - 2.0*EPS) * (f32(x >> 8u) * (1.0 / 16777216.0));
168
168
  }
169
169
  `;
@@ -7,12 +7,12 @@ let theta = atan2(n.x, n.z) / (2.0 * PI) + 0.5;
7
7
  let phi = acos(n.y) / PI;
8
8
  return vec2f(theta, 1.0 - phi);
9
9
  }
10
- fn jh(pos: vec3f, normal: vec3f) -> vec2f {
11
- let dI = abs(normal);
10
+ fn iO(pos: vec3f, normal: vec3f) -> vec2f {
11
+ let dg = abs(normal);
12
12
  var uv = vec2f(0.0);
13
- if (dI.x > dI.y && dI.x > dI.z) {
13
+ if (dg.x > dg.y && dg.x > dg.z) {
14
14
  uv = pos.yz;
15
- } else if (dI.y > dI.x && dI.y > dI.z) {
15
+ } else if (dg.y > dg.x && dg.y > dg.z) {
16
16
  uv = pos.xz;
17
17
  } else {
18
18
  uv = pos.xy;
@@ -23,18 +23,18 @@ return uv;
23
23
 
24
24
 
25
25
 
26
- fn hT(pos: vec3f, normal: vec3f) -> vec2f {
26
+ fn hA(pos: vec3f, normal: vec3f) -> vec2f {
27
27
  let theta = atan2(pos.z, pos.x) / (2.0 * PI) + 0.5;
28
28
  return vec2f(theta, pos.y);
29
29
  }
30
30
 
31
- fn gU(fE: i32, pos: vec3f, normal: vec3f) -> vec2f {
32
- if (fE == ${uvProjectionConstants.triplanar}) {
33
- return jh(pos, normal);
34
- } else if (fE == ${uvProjectionConstants.spherical}) {
31
+ fn gE(fg: i32, pos: vec3f, normal: vec3f) -> vec2f {
32
+ if (fg == ${uvProjectionConstants.triplanar}) {
33
+ return iO(pos, normal);
34
+ } else if (fg == ${uvProjectionConstants.spherical}) {
35
35
  return sphericalProjection(pos);
36
- } else if (fE == ${uvProjectionConstants.cylindrical}) {
37
- return hT(pos, normal);
36
+ } else if (fg == ${uvProjectionConstants.cylindrical}) {
37
+ return hA(pos, normal);
38
38
  }
39
39
  return vec2f(0.0);
40
40
  }
@@ -8,24 +8,24 @@ return select(high, low, linear <= vec3f(0.0031308));
8
8
  `;
9
9
  export const composeDefine = /* wgsl */ `
10
10
 
11
- fn ky(color: vec3f) -> vec3f {
11
+ fn kb(color: vec3f) -> vec3f {
12
12
  return clamp(color, vec3f(0.0), vec3f(1.0));
13
13
  }
14
- fn jf(color: vec3f) -> vec3f {
14
+ fn iN(color: vec3f) -> vec3f {
15
15
  return clamp(color / (vec3f(1.0) + color), vec3f(0.0), vec3f(1.0));
16
16
  }
17
- fn kj(jR: vec3f) -> vec3f {
18
- let color = max(vec3f(0.0), jR - 0.004);
17
+ fn jP(jz: vec3f) -> vec3f {
18
+ let color = max(vec3f(0.0), jz - 0.004);
19
19
  return pow((color * (6.2 * color + 0.5)) /
20
20
  (color * (6.2 * color + 1.7) + 0.06), vec3f(2.2));
21
21
  }
22
- fn pH(value: vec3f) -> vec3f {
23
- let lv = value * (value + 0.0245786) - 0.000090537;
24
- let aq = value * (0.983729 * value + 0.4329510) + 0.238081;
25
- return lv / aq;
22
+ fn pm(value: vec3f) -> vec3f {
23
+ let iF = value * (value + 0.0245786) - 0.000090537;
24
+ let ah = value * (0.983729 * value + 0.4329510) + 0.238081;
25
+ return iF / ah;
26
26
  }
27
- fn mh(jR: vec3f) -> vec3f {
28
- let qs = mat3x3f(
27
+ fn lO(jz: vec3f) -> vec3f {
28
+ let qk = mat3x3f(
29
29
  vec3f(0.59719, 0.07600, 0.02840),
30
30
  vec3f(0.35458, 0.90834, 0.13383),
31
31
  vec3f(0.04823, 0.01566, 0.83777)
@@ -35,63 +35,63 @@ vec3f(1.60475, -0.10208, -0.00327),
35
35
  vec3f(-0.53108, 1.10813, -0.07276),
36
36
  vec3f(-0.07367, -0.00605, 1.07602)
37
37
  );
38
- let color = qs * (jR / 0.6);
39
- return clamp(outputMatrix * pH(color), vec3f(0.0), vec3f(1.0));
38
+ let color = qk * (jz / 0.6);
39
+ return clamp(outputMatrix * pm(color), vec3f(0.0), vec3f(1.0));
40
40
  }
41
- fn gh(value: vec3f) -> vec3f {
42
- let nM = value * value;
43
- let rR = nM * nM;
44
- return 15.5 * rR * nM - 40.14 * rR * value
45
- + 31.96 * rR - 6.868 * nM * value
46
- + 0.4298 * nM + 0.1191 * value - 0.00232;
41
+ fn fT(value: vec3f) -> vec3f {
42
+ let nB = value * value;
43
+ let rO = nB * nB;
44
+ return 15.5 * rO * nB - 40.14 * rO * value
45
+ + 31.96 * rO - 6.868 * nB * value
46
+ + 0.4298 * nB + 0.1191 * value - 0.00232;
47
47
  }
48
- fn mM(jR: vec3f) -> vec3f {
49
- let nP = mat3x3f(
48
+ fn my(jz: vec3f) -> vec3f {
49
+ let nE = mat3x3f(
50
50
  vec3f(1.6605, -0.1246, -0.0182),
51
51
  vec3f(-0.5876, 1.1329, -0.1006),
52
52
  vec3f(-0.0728, -0.0083, 1.1187)
53
53
  );
54
- let nQ = mat3x3f(
54
+ let nF = mat3x3f(
55
55
  vec3f(0.6274, 0.0691, 0.0164),
56
56
  vec3f(0.3293, 0.9195, 0.0880),
57
57
  vec3f(0.0433, 0.0113, 0.8956)
58
58
  );
59
- let qu = mat3x3f(
59
+ let qm = mat3x3f(
60
60
  vec3f(0.856627153315983, 0.137318972929847, 0.11189821299995),
61
61
  vec3f(0.0951212405381588, 0.761241990602591, 0.0767994186031903),
62
62
  vec3f(0.0482516061458583, 0.101439036467562, 0.811302368396859)
63
63
  );
64
- let pt = mat3x3f(
64
+ let ph = mat3x3f(
65
65
  vec3f(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),
66
66
  vec3f(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),
67
67
  vec3f(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)
68
68
  );
69
- var color = qu * (nQ * jR);
69
+ var color = qm * (nF * jz);
70
70
  color = clamp((log2(max(color, vec3f(1e-10))) + 12.47393) / 16.5, vec3f(0.0), vec3f(1.0));
71
- color = pt * gh(color);
71
+ color = ph * fT(color);
72
72
  color = pow(max(color, vec3f(0.0)), vec3f(2.2));
73
- return clamp(nP * color, vec3f(0.0), vec3f(1.0));
73
+ return clamp(nE * color, vec3f(0.0), vec3f(1.0));
74
74
  }
75
- fn cp(color: vec3f) -> vec3f {
75
+ fn bZ(color: vec3f) -> vec3f {
76
76
  let toneMappingMode = i32(toneMappingParams.x);
77
- if (toneMappingMode == 1) { return mh(color); }
78
- if (toneMappingMode == 2) { return kj(color); }
79
- if (toneMappingMode == 3) { return jf(color); }
80
- if (toneMappingMode == 4) { return ky(color); }
81
- return mM(color);
77
+ if (toneMappingMode == 1) { return lO(color); }
78
+ if (toneMappingMode == 2) { return jP(color); }
79
+ if (toneMappingMode == 3) { return iN(color); }
80
+ if (toneMappingMode == 4) { return kb(color); }
81
+ return my(color);
82
82
  }
83
83
  ${linearToSrgbDefine}
84
- fn gq(jR: vec3f) -> vec3f {
84
+ fn ga(jz: vec3f) -> vec3f {
85
85
  let contrast = colorGradingParams.x;
86
86
  let saturation = colorGradingParams.y;
87
87
  let temperature = colorGradingParams.z;
88
88
  let tint = colorGradingParams.w;
89
- let uH = vec3f(
89
+ let uL = vec3f(
90
90
  1.0 + temperature * 0.16 + tint * 0.04,
91
91
  1.0 - tint * 0.12,
92
92
  1.0 - temperature * 0.16 + tint * 0.04
93
93
  );
94
- var color = max(jR * uH, vec3f(0.0));
94
+ var color = max(jz * uL, vec3f(0.0));
95
95
  color = max((color - 0.18) * contrast + 0.18, vec3f(0.0));
96
96
  let luminance = dot(color, vec3f(0.2126, 0.7152, 0.0722));
97
97
  return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));
@@ -101,54 +101,54 @@ export function createComposeMain(sdrEncoding = 'srgb') {
101
101
  return /* wgsl */ `
102
102
 
103
103
  var finalColor = load_colorTex(uv, 0);
104
- var jI = vec4(0.0);
104
+ var jp = vec4(0.0);
105
105
  if (bloomIntensity > 0.0) {
106
- jI = load_bloomTex(uv, 0) * bloomIntensity;
107
- finalColor = vec4f(finalColor.rgb + jI.rgb, finalColor.a);
106
+ jp = load_bloomTex(uv, 0) * bloomIntensity;
107
+ finalColor = vec4f(finalColor.rgb + jp.rgb, finalColor.a);
108
108
  }
109
109
 
110
- var gradedColor = gq(finalColor.rgb * exposure);
111
- let ja = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));
112
- gradedColor *= 1.0 - toneMappingParams.y * ja;
113
- let gQ = hdrOutputEnabled > 0.5;
114
- if (!gQ) {
115
- gradedColor = cp(gradedColor);
110
+ var gradedColor = ga(finalColor.rgb * exposure);
111
+ let iJ = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));
112
+ gradedColor *= 1.0 - toneMappingParams.y * iJ;
113
+ let gy = hdrOutputEnabled > 0.5;
114
+ if (!gy) {
115
+ gradedColor = bZ(gradedColor);
116
116
  }
117
- let mZ = select(
117
+ let mN = select(
118
118
  ${sdrEncoding === 'srgb' ? 'linearToSrgb(gradedColor)' : 'pow(max(gradedColor, vec3f(0.0)), vec3f(1.0 / 2.2))'},
119
119
  linearToSrgb(gradedColor),
120
- gQ
120
+ gy
121
121
  );
122
- var oV = mZ;
122
+ var oL = mN;
123
123
  if (flatBackgroundColor.a > 0.5) {
124
- let jD = clamp(
124
+ let jj = clamp(
125
125
  load_flatBackgroundMaskTex(uv, 0).a,
126
126
  0.0,
127
127
  1.0
128
128
  );
129
- let pX = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0)));
130
- oV = mix(pX, mZ, jD);
129
+ let pR = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0)));
130
+ oL = mix(pR, mN, jj);
131
131
  if (bloomIntensity > 0.0) {
132
- var unbloomedColor = gq(
133
- max(finalColor.rgb - jI.rgb, vec3f(0.0))
132
+ var unbloomedColor = ga(
133
+ max(finalColor.rgb - jp.rgb, vec3f(0.0))
134
134
  * exposure
135
135
  );
136
- unbloomedColor *= 1.0 - toneMappingParams.y * ja;
137
- if (!gQ) {
138
- unbloomedColor = cp(unbloomedColor);
136
+ unbloomedColor *= 1.0 - toneMappingParams.y * iJ;
137
+ if (!gy) {
138
+ unbloomedColor = bZ(unbloomedColor);
139
139
  }
140
- let sG = select(
140
+ let sC = select(
141
141
  ${sdrEncoding === 'srgb' ? 'linearToSrgb(unbloomedColor)' : 'pow(max(unbloomedColor, vec3f(0.0)), vec3f(1.0 / 2.2))'},
142
142
  linearToSrgb(unbloomedColor),
143
- gQ
143
+ gy
144
144
  );
145
- oV += max(mZ - sG, vec3f(0.0))
146
- * (1.0 - jD);
145
+ oL += max(mN - sC, vec3f(0.0))
146
+ * (1.0 - jj);
147
147
  }
148
148
  }
149
- finalColor = vec4f(oV, finalColor.a);
149
+ finalColor = vec4f(oL, finalColor.a);
150
150
  if (bloomIntensity > 0.0) {
151
- finalColor.a = max(finalColor.a, min(dot(jI.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));
151
+ finalColor.a = max(finalColor.a, min(dot(jp.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));
152
152
  }
153
153
 
154
154
  if (shadowCatcherEnabled > 0.5) {
@@ -162,36 +162,36 @@ let background = load_catcherBackgroundTex(uv, 0);
162
162
 
163
163
 
164
164
 
165
- let ln = select(0.0, clamp(background.a - coverage, 0.0, 1.0 - coverage), flatBackgroundColor.a > 0.5);
166
- var foregroundColor = gq((foreground.rgb + jI.rgb) * exposure);
167
- var backgroundColor = gq((background.rgb / max(background.a, 0.000001) + jI.rgb) * exposure);
168
- foregroundColor *= 1.0 - toneMappingParams.y * ja;
169
- backgroundColor *= 1.0 - toneMappingParams.y * ja;
170
- if (!gQ) {
171
- foregroundColor = cp(foregroundColor);
172
- backgroundColor = cp(backgroundColor);
165
+ let kU = select(0.0, clamp(background.a - coverage, 0.0, 1.0 - coverage), flatBackgroundColor.a > 0.5);
166
+ var foregroundColor = ga((foreground.rgb + jp.rgb) * exposure);
167
+ var backgroundColor = ga((background.rgb / max(background.a, 0.000001) + jp.rgb) * exposure);
168
+ foregroundColor *= 1.0 - toneMappingParams.y * iJ;
169
+ backgroundColor *= 1.0 - toneMappingParams.y * iJ;
170
+ if (!gy) {
171
+ foregroundColor = bZ(foregroundColor);
172
+ backgroundColor = bZ(backgroundColor);
173
173
  }
174
- foregroundColor = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(foregroundColor)' : 'pow(max(foregroundColor, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(foregroundColor), gQ);
175
- backgroundColor = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(backgroundColor)' : 'pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(backgroundColor), gQ);
174
+ foregroundColor = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(foregroundColor)' : 'pow(max(foregroundColor, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(foregroundColor), gy);
175
+ backgroundColor = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(backgroundColor)' : 'pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(backgroundColor), gy);
176
176
  if (flatBackgroundColor.a > 0.5) {
177
- var unbloomedBackground = gq(background.rgb / max(background.a, 0.000001) * exposure);
178
- unbloomedBackground *= 1.0 - toneMappingParams.y * ja;
179
- if (!gQ) { unbloomedBackground = cp(unbloomedBackground); }
180
- let nd = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(unbloomedBackground)' : 'pow(max(unbloomedBackground, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(unbloomedBackground), gQ);
181
- let vL = select(vec3f(0.0), max(backgroundColor - nd, vec3f(0.0)), bloomIntensity > 0.0);
182
- backgroundColor = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0))) + vL;
177
+ var unbloomedBackground = ga(background.rgb / max(background.a, 0.000001) * exposure);
178
+ unbloomedBackground *= 1.0 - toneMappingParams.y * iJ;
179
+ if (!gy) { unbloomedBackground = bZ(unbloomedBackground); }
180
+ let mO = select(${sdrEncoding === 'srgb' ? 'linearToSrgb(unbloomedBackground)' : 'pow(max(unbloomedBackground, vec3f(0.0)), vec3f(1.0 / 2.2))'}, linearToSrgb(unbloomedBackground), gy);
181
+ let vY = select(vec3f(0.0), max(backgroundColor - mO, vec3f(0.0)), bloomIntensity > 0.0);
182
+ backgroundColor = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0))) + vY;
183
183
  }
184
184
 
185
185
 
186
- let gf = coverage * opacity;
187
- let mR = clamp(dot(jI.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
188
- let hJ = max(foreground.a, mR * (1.0 - coverage - ln));
189
- let jz = max(background.a, mR * coverage);
190
- let kX = (jz - ln) * (1.0 - opacity) + ln;
191
- let alpha = hJ + kX + gf;
192
- let premultiplied = foregroundColor * hJ
193
- + backgroundColor * kX
194
- + shadowCatcherColor * gf;
186
+ let fR = coverage * opacity;
187
+ let mD = clamp(dot(jp.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
188
+ let hq = max(foreground.a, mD * (1.0 - coverage - kU));
189
+ let jf = max(background.a, mD * coverage);
190
+ let kD = (jf - kU) * (1.0 - opacity) + kU;
191
+ let alpha = hq + kD + fR;
192
+ let premultiplied = foregroundColor * hq
193
+ + backgroundColor * kD
194
+ + shadowCatcherColor * fR;
195
195
  finalColor = vec4f(premultiplied / max(alpha, 0.000001), alpha);
196
196
  }
197
197
  }
@@ -208,8 +208,8 @@ export function createCompositeDenoiseColorMain(output = 'output.denoiseColor',
208
208
  const srgbDecode = 'select(pow((encoded + 0.055) / 1.055, vec3f(2.4)), encoded / 12.92, encoded <= vec3f(0.04045))';
209
209
  return /* wgsl */ `
210
210
  let encoded = max(${input}.rgb, vec3f(0.0));
211
- let um = ${sdrEncoding === 'srgb' ? srgbDecode : `select(pow(encoded, vec3f(2.2)), ${srgbDecode}, gQ)`};
212
- ${output} = vec4f(um, ${input}.a);
211
+ let uq = ${sdrEncoding === 'srgb' ? srgbDecode : `select(pow(encoded, vec3f(2.2)), ${srgbDecode}, gy)`};
212
+ ${output} = vec4f(uq, ${input}.a);
213
213
 
214
214
  `;
215
215
  }
@@ -219,22 +219,22 @@ export function createCompositeDenoiseAlbedoMain(output = 'output.denoiseAlbedo'
219
219
 
220
220
 
221
221
  let rawAlbedo = load_flatBackgroundMaskTex(uv, 0);
222
- var pS = rawAlbedo.rgb;
222
+ var pJ = rawAlbedo.rgb;
223
223
  if (shadowCatcherEnabled > 0.5 && flatBackgroundColor.a < 0.5) {
224
224
  let coverage = clamp(load_shadowCatcherTex(uv, 0).r, 0.0, 1.0);
225
225
  let background = load_catcherBackgroundTex(uv, 0);
226
226
  if (coverage > 0.0 && background.a > 0.0) {
227
- var iO = gq(background.rgb / background.a * exposure);
228
- iO *= 1.0 - toneMappingParams.y * ja;
229
- if (!gQ) { iO = cp(iO); }
227
+ var iv = ga(background.rgb / background.a * exposure);
228
+ iv *= 1.0 - toneMappingParams.y * iJ;
229
+ if (!gy) { iv = bZ(iv); }
230
230
 
231
231
 
232
232
 
233
- let sA = clamp(background.a, 0.0, coverage);
234
- pS += sA * (clamp(iO, vec3f(0.0), vec3f(1.0)) - vec3f(1.0));
233
+ let sr = clamp(background.a, 0.0, coverage);
234
+ pJ += sr * (clamp(iv, vec3f(0.0), vec3f(1.0)) - vec3f(1.0));
235
235
  }
236
236
  }
237
- ${output} = vec4f(clamp(pS, vec3f(0.0), vec3f(1.0)), rawAlbedo.a);
237
+ ${output} = vec4f(clamp(pJ, vec3f(0.0), vec3f(1.0)), rawAlbedo.a);
238
238
  `;
239
239
  }
240
240
  export const compositeDenoiseOutputMain = createCompositeDenoiseColorMain() + createCompositeDenoiseAlbedoMain();
@@ -253,15 +253,15 @@ output.color = vec4f(select(vec3f(0.0), encoded, alpha > 0.0), alpha);
253
253
  export const compositeDenoiseDisplayMain = createCompositeDenoiseDisplayMain();
254
254
  // Shared hit normalization; CPU readback retains its f32 reference path.
255
255
  export const hdrResolveWGSL = /* wgsl */ `
256
- fn fK(color: f32, count: f32, hit: f32, ur: f32, rgb: bool) -> f32 {
256
+ fn fo(color: f32, count: f32, hit: f32, uw: f32, rgb: bool) -> f32 {
257
257
  if (count <= 0.0) {
258
258
  return 0.0;
259
259
  }
260
- let total = max(count, ur);
260
+ let total = max(count, uw);
261
261
  let divisor = select(total, hit, (rgb && (hit > 0.0)));
262
262
  return (color / divisor);
263
263
  }
264
- fn jQ(color: f32, coverage: f32, flat: bool, rgb: bool) -> f32 {
264
+ fn jx(color: f32, coverage: f32, flat: bool, rgb: bool) -> f32 {
265
265
  if ((flat && rgb) && (coverage > 0.0)) {
266
266
  return (color * coverage);
267
267
  }
@@ -5,19 +5,19 @@ let filtered = load_filteredTex(uv, 0).rgb;
5
5
  let foreground = load_foregroundTex(uv, 0);
6
6
  let background = load_backgroundTex(uv, 0);
7
7
 
8
- var ni = foreground;
9
- var nh = background;
8
+ var mS = foreground;
9
+ var mR = background;
10
10
  if (any(filtered != original)) {
11
- let wa = abs(original) > vec3f(0.000001);
12
- let aq = select(vec3f(1.0), original, wa);
13
- let scale = select(vec3f(1.0), filtered / aq, wa);
14
- let vD = select(filtered - original, vec3f(0.0), wa);
15
- ni = vec4f(foreground.rgb * scale + vD, foreground.a);
11
+ let wu = abs(original) > vec3f(0.000001);
12
+ let ah = select(vec3f(1.0), original, wu);
13
+ let scale = select(vec3f(1.0), filtered / ah, wu);
14
+ let vO = select(filtered - original, vec3f(0.0), wu);
15
+ mS = vec4f(foreground.rgb * scale + vO, foreground.a);
16
16
 
17
- nh = vec4f(background.rgb * scale + vD * background.a, background.a);
17
+ mR = vec4f(background.rgb * scale + vO * background.a, background.a);
18
18
  }
19
- output.foreground = ni;
20
- output.background = nh;
19
+ output.foreground = mS;
20
+ output.background = mR;
21
21
  `;
22
22
  /** Custom output alpha is ignored; retain the input composition's coverage. */
23
23
  export const customDenoiseCoverageMain = /* wgsl */ `
@@ -10,7 +10,7 @@ let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;
10
10
  let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);
11
11
  outColor[index] = vec4f(0.0);
12
12
  if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }
13
- var ray = fj(uv);
13
+ var ray = eT(uv);
14
14
  let eye = cameraUniform.viewInv[3].xyz;
15
15
  let forward = -normalize(cameraUniform.viewInv[2].xyz);
16
16
  var si: SurfaceInteraction;
@@ -22,7 +22,7 @@ for (var layer = 0; layer < 32; layer++) {
22
22
  intersectScene(ray, &si, 0, false, false);
23
23
  if (!si.hit) { return; }
24
24
  var material: OpenPbrResolvedMaterial;
25
- dg(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
25
+ getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
26
26
  if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
27
27
  outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);
28
28
  return;