@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
@@ -15,20 +15,20 @@ struct AovCenter { identity: vec4u, motion: vec4f, }
15
15
  @group(3) @binding(9) var<storage, read> aovPrevious: array<AovCenter>;
16
16
  @group(3) @binding(8) var<uniform> aovParameters: vec4u;
17
17
 
18
- fn ow(offset: u32) -> mat4x4f {
18
+ fn oi(offset: u32) -> mat4x4f {
19
19
  return mat4x4f(bitcast<vec4f>(vec4u(aovScene[offset], aovScene[offset+1u], aovScene[offset+2u], aovScene[offset+3u])),
20
20
  bitcast<vec4f>(vec4u(aovScene[offset+4u], aovScene[offset+5u], aovScene[offset+6u], aovScene[offset+7u])),
21
21
  bitcast<vec4f>(vec4u(aovScene[offset+8u], aovScene[offset+9u], aovScene[offset+10u], aovScene[offset+11u])),
22
22
  bitcast<vec4f>(vec4u(aovScene[offset+12u], aovScene[offset+13u], aovScene[offset+14u], aovScene[offset+15u])));
23
23
  }
24
- fn iN(offset:u32)->vec3f {return bitcast<vec3f>(vec3u(aovScene[offset],aovScene[offset+1u],aovScene[offset+2u]));}
25
- fn mQ(xe: Ray, si: ptr<function, SurfaceInteraction>, material: ptr<function, OpenPbrResolvedMaterial>) -> bool {
26
- var ray = xe;
24
+ fn iu(offset:u32)->vec3f {return bitcast<vec3f>(vec3u(aovScene[offset],aovScene[offset+1u],aovScene[offset+2u]));}
25
+ fn mC(xG: Ray, si: ptr<function, SurfaceInteraction>, material: ptr<function, OpenPbrResolvedMaterial>) -> bool {
26
+ var ray = xG;
27
27
  (*si).triangleIndex = -1;
28
28
  for (var layer = 0; layer < 32; layer++) {
29
29
  intersectScene(ray, si, 0, false, false);
30
30
  if (!(*si).hit) { return false; }
31
- dg(material, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex, (*si).vertexColor);
31
+ getMaterial(material, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex, (*si).vertexColor);
32
32
  if ((*material).materialType != SHADOW_CATCHER && (*material).alpha >= 0.5) { return true; }
33
33
  ray.o = (*si).position + ray.d * (EPS * 0.02);
34
34
  }
@@ -41,21 +41,21 @@ if (any(id.xy >= size)) { return; }
41
41
  let index = id.x + id.y * size.x;
42
42
  let sample = aovParameters.z;
43
43
  if (sample == 0u) { aovAccum[index] = AovAccumulation(); }
44
- aZ = id.xy; aQ = sample + rtUniform.sampleSequenceOffset;
45
- bT = 0u; cP = 0u;
46
- gW(id.xy, i32(aQ ^ dG(rtUniform.sequenceSeed)));
47
- let uv = (vec2f(id.xy) + dZ(CAMERA_PIXEL)) / vec2f(size);
48
- var ray = fj(uv);
44
+ aI = id.xy; aC = sample + rtUniform.sampleSequenceOffset;
45
+ samplingBounce = 0u; ca = 0u;
46
+ fi(id.xy, i32(aC ^ cB(rtUniform.sequenceSeed)));
47
+ let uv = (vec2f(id.xy) + sample2D(CAMERA_PIXEL)) / vec2f(size);
48
+ var ray = eT(uv);
49
49
  if (cameraUniform.apertureRadius > 0.0) {
50
50
  let eye = cameraUniform.viewInv[3].xyz;
51
51
  let forward = -normalize(cameraUniform.viewInv[2].xyz);
52
- let jN = eye + ray.d * (cameraUniform.focusDistance / dot(ray.d, forward));
53
- let xU = cameraUniform.apertureRadius * kN(dZ(CAMERA_LENS));
54
- let origin = (cameraUniform.viewInv * vec4f(xU, 0.0, 1.0)).xyz;
55
- gC(&ray, origin, normalize(jN-origin));
52
+ let ju = eye + ray.d * (cameraUniform.focusDistance / dot(ray.d, forward));
53
+ let uV = cameraUniform.apertureRadius * kq(sample2D(CAMERA_LENS));
54
+ let origin = (cameraUniform.viewInv * vec4f(uV, 0.0, 1.0)).xyz;
55
+ initRay(&ray, origin, normalize(ju-origin));
56
56
  }
57
57
  var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;
58
- if (!mQ(ray, &si, &material)) { return; }
58
+ if (!mC(ray, &si, &material)) { return; }
59
59
  let depth = max(dot(si.position-cameraUniform.viewInv[3].xyz, -normalize(cameraUniform.viewInv[2].xyz)), 0.0);
60
60
  let unsupported = (material.materialType != STANDARD) | (material.alpha < 1.0) |
61
61
  (material.coatWeight > 0.0) | (material.fuzzWeight > 0.0) |
@@ -66,17 +66,17 @@ let unsupported = (material.materialType != STANDARD) | (material.alpha < 1.0) |
66
66
  aovAccum[index].depthRoughness += vec4f(depth, material.specularRoughness, material.baseMetalness, select(0.0,1.0,unsupported));
67
67
  if (AOV_REFLECTANCE && (aovParameters.w & 24u) != 0u && !unsupported) {
68
68
  var normal=si.normal; var face=si.faceNormal;
69
- var cosine=-dot(normal,ray.d); var fu=-dot(face,ray.d);
69
+ var cosine=-dot(normal,ray.d); var fa=-dot(face,ray.d);
70
70
  if (material.thinWalled && (material.transmissionWeight>0.0 || material.subsurfaceWeight>0.0)) {
71
71
  if(cosine<0.0){normal=-normal;cosine=-cosine;}
72
- if(fu<0.0){face=-face;fu=-fu;}
72
+ if(fa<0.0){face=-face;fa=-fa;}
73
73
  }
74
- if(fu>=0.0 && cosine<0.0){normal=face;cosine=fu;}
74
+ if(fa>=0.0 && cosine<0.0){normal=face;cosine=fa;}
75
75
  normal=select(-normal,normal,cosine>=0.0);
76
76
  material.inside=(cosine<=0.0) && !material.thinWalled;
77
77
  material.relativeIor=select(material.specularIor,1.0/material.specularIor,cosine>0.0);
78
- let prepared=ds(si.tangent,material,-ray.d,normal);
79
- let reflectance=hN(prepared, (aovParameters.w & 8u) != 0u, (aovParameters.w & 16u) != 0u);
78
+ let prepared=bV(si.tangent,material,-ray.d,normal);
79
+ let reflectance=hu(prepared, (aovParameters.w & 8u) != 0u, (aovParameters.w & 16u) != 0u);
80
80
  aovAccum[index].diffuse+=vec4f(reflectance.diffuse,1.0);
81
81
  aovAccum[index].specular+=vec4f(reflectance.specular,1.0);
82
82
  }
@@ -89,26 +89,26 @@ if (any(id.xy >= size)) { return; }
89
89
  let index = id.x + id.y * size.x;
90
90
  aovCenter[index] = AovCenter(vec4u(0xffffffffu), vec4f(0.0));
91
91
  let uv = (vec2f(id.xy) + 0.5) / vec2f(size);
92
- let ray = fj(uv);
92
+ let ray = eT(uv);
93
93
  var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;
94
- if (!mQ(ray, &si, &material)) { return; }
94
+ if (!mC(ray, &si, &material)) { return; }
95
95
  let offset = 52u + u32(si.instanceIndex) * 24u;
96
96
  let materialOffset = aovScene[16u];
97
97
  let primitiveOffset = aovScene[17u];
98
98
  aovCenter[index].identity = vec4u(aovScene[offset], aovScene[offset+1u],
99
99
  aovScene[materialOffset + u32(si.materialIndex)], aovScene[primitiveOffset + u32(si.triangleIndex)]);
100
- aovCenter[index].motion.z = dot(si.position-iN(36u),iN(40u));
100
+ aovCenter[index].motion.z = dot(si.position-iu(36u),iu(40u));
101
101
  if (aovScene[offset+2u] == 0u) { return; }
102
- let qA = ow(offset+4u) * vec4f(si.position,1.0);
103
- let ps = ow(0u) * qA;
104
- if (ps.w <= 0.0) { return; }
105
- let tX=ps.xyz/ps.w;
106
- let iz=(tX.xy*0.5+0.5)*vec2f(size);
107
- if (any(iz < vec2f(0.0)) || any(iz >= vec2f(size)) || abs(tX.z)>1.0) { return; }
108
- let previous=aovPrevious[u32(iz.x)+u32(iz.y)*size.x];
109
- let qz=dot(qA.xyz-iN(44u),iN(48u));
110
- if (any(previous.identity.xy != aovCenter[index].identity.xy) || abs(previous.motion.z-qz)>max(1e-4,abs(qz)*1e-3)) { return; }
111
- let motion=(iz-(vec2f(id.xy)+0.5))*vec2f(1.0,-1.0);
102
+ let qs = oi(offset+4u) * vec4f(si.position,1.0);
103
+ let pg = oi(0u) * qs;
104
+ if (pg.w <= 0.0) { return; }
105
+ let ua=pg.xyz/pg.w;
106
+ let hU=(ua.xy*0.5+0.5)*vec2f(size);
107
+ if (any(hU < vec2f(0.0)) || any(hU >= vec2f(size)) || abs(ua.z)>1.0) { return; }
108
+ let previous=aovPrevious[u32(hU.x)+u32(hU.y)*size.x];
109
+ let qr=dot(qs.xyz-iu(44u),iu(48u));
110
+ if (any(previous.identity.xy != aovCenter[index].identity.xy) || abs(previous.motion.z-qr)>max(1e-4,abs(qr)*1e-3)) { return; }
111
+ let motion=(hU-(vec2f(id.xy)+0.5))*vec2f(1.0,-1.0);
112
112
  aovCenter[index].motion=vec4f(motion,aovCenter[index].motion.z,3.0);
113
113
  }
114
114
  `;
@@ -3,7 +3,7 @@
3
3
  // https://github.com/keijiro/KinoBloom/blob/master/Assets/Kino/Bloom/Shader/Bloom.cginc#L96
4
4
  // See THIRD_PARTY_NOTICES.md and LICENSES/KinoBloom-MIT.txt.
5
5
  export const bloomBrightDefine = /* wgsl */ `
6
- fn tS(a: vec4f, b: vec4f, c: vec4f) -> vec4f {
6
+ fn tV(a: vec4f, b: vec4f, c: vec4f) -> vec4f {
7
7
  return a + b + c - min(min(a, b), c) - max(max(a, b), c);
8
8
  }
9
9
  `;
@@ -11,26 +11,26 @@ export const bloomBrightMain = /* wgsl */ `
11
11
 
12
12
  let d = vec3i(1, 1, 0);
13
13
 
14
- var dk = load_colorTex(uv, 0);
14
+ var cR = load_colorTex(uv, 0);
15
15
  let s1 = load_colorTex(uv - d.xz, 0);
16
16
  let s2 = load_colorTex(uv + d.xz, 0);
17
17
  let s3 = load_colorTex(uv - d.zy, 0);
18
18
  let s4 = load_colorTex(uv + d.zy, 0);
19
- dk = tS(tS(dk, s1, s2), s3, s4);
19
+ cR = tV(tV(cR, s1, s2), s3, s4);
20
20
 
21
21
 
22
- let lum = dot(dk.rgb, vec3f(0.2125, 0.7154, 0.0721));
22
+ let lum = dot(cR.rgb, vec3f(0.2125, 0.7154, 0.0721));
23
23
  var color: vec4f;
24
- if (lum > threshold && dk.a > 0.0) {
25
- color = vec4f(dk.rgb * scale, dk.a);
24
+ if (lum > threshold && cR.a > 0.0) {
25
+ color = vec4f(cR.rgb * scale, cR.a);
26
26
  } else {
27
27
 
28
- color = vec4f(vec3(0.0), dk.a);
28
+ color = vec4f(vec3(0.0), cR.a);
29
29
  }
30
30
  output.color = color;
31
31
  `;
32
32
  export const bloomDownDefine = /* wgsl */ `
33
- fn xP(c: vec3f) -> f32 {
33
+ fn yo(c: vec3f) -> f32 {
34
34
  return max(max(c.r, c.g), c.b);
35
35
  }
36
36
  `;
@@ -44,25 +44,25 @@ output.color = sample_colorTex_linearSampler(uv2 + d.xy) * 0.25
44
44
  + sample_colorTex_linearSampler(uv2 + d.zw) * 0.25;
45
45
  `;
46
46
  export const bloomBlurDefine = /* wgsl */ `
47
- const xT = array<f32, 9>(0.07, 0.09, 0.12, 0.14, 0.16, 0.14, 0.12, 0.09, 0.07);
47
+ const yu = array<f32, 9>(0.07, 0.09, 0.12, 0.14, 0.16, 0.14, 0.12, 0.09, 0.07);
48
48
  `;
49
49
  export const bloomBlurMain = /* wgsl */ `
50
- let xG = vec2f(colorTexRegion());
51
- let off = direction / xG * size;
50
+ let yh = vec2f(colorTexRegion());
51
+ let off = direction / yh * size;
52
52
 
53
53
  var sum = vec4f(0.0);
54
- var uE = 0.0;
54
+ var uI = 0.0;
55
55
  for (var i = 0; i < 9; i++) {
56
- let w = xT[i];
56
+ let w = yu[i];
57
57
  sum += sample_colorTex_linearSampler(uv2 + off * f32(i - 4)) * w;
58
- uE += w;
58
+ uI += w;
59
59
  }
60
- output.color = sum / max(uE, 0.01);
60
+ output.color = sum / max(uI, 0.01);
61
61
  `;
62
62
  export const bloomBlendMain = /* wgsl */ `
63
- let xQ = sample_colorTex1_linearSampler(uv2);
64
- let xR = sample_colorTex2_linearSampler(uv2);
65
- output.color = mix(xQ, xR, weight);
63
+ let yq = sample_colorTex1_linearSampler(uv2);
64
+ let yr = sample_colorTex2_linearSampler(uv2);
65
+ output.color = mix(yq, yr, weight);
66
66
  `;
67
67
  export const BLOOM_LEVELS = 6;
68
68
  export function bloomBlurSize(radius) {
@@ -0,0 +1,6 @@
1
+ export declare const CAUSTIC_UNIFORM_BYTES = 112;
2
+ export declare const causticUnitRandomWgsl = "\n fn causticUnitRandom(value:f32)->f32 {\n return clamp((value-EPS)/(1.0-2.0*EPS),0.0,0.99999994);\n }\n";
3
+ export declare function causticLightCompute(constants: Record<string, boolean | number>, blasLayoutMask: number, hasDisplacement: boolean, mode?: 'lightTracing' | 'photonMapping', sceneIntersections?: string, fullEmissionRandom?: boolean): string;
4
+ export declare const causticAccumulateCompute = "\n @group(0) @binding(0) var<storage,read_write> splats:array<atomic<u32>>;\n @group(0) @binding(1) var<storage,read_write> accumulation:array<vec4f>;\n @compute @workgroup_size(64)\n fn main(@builtin(global_invocation_id) id:vec3u, @builtin(num_workgroups) groups:vec3u) {\n // Large images exceed one dispatch row; preserve the linear pixel order.\n let pixel=id.x+id.y*groups.x*64u;\n if(pixel>=arrayLength(&accumulation)) {\n return;\n }\n let i=pixel*3u;\n accumulation[pixel]+=vec4f(vec3f(bitcast<f32>(atomicLoad(&splats[i])),bitcast<f32>(atomicLoad(&splats[i+1u])),bitcast<f32>(atomicLoad(&splats[i+2u]))),1.0);\n }\n";
5
+ /** Native buffer resolve has the same independent batch normalization as web. */
6
+ export declare const causticBufferCompositeCompute = "\n @group(0)@binding(0)var<storage,read>pt:array<vec4f>;\n @group(0)@binding(1)var<storage,read>caustics:array<vec4f>;\n @group(0)@binding(2)var<storage,read>normal:array<vec4f>;\n @group(0)@binding(3)var<storage,read_write>output:array<vec4f>;\n @compute @workgroup_size(64)fn main(@builtin(global_invocation_id)id:vec3u,@builtin(num_workgroups)groups:vec3u) {\n // Large images exceed one dispatch row; preserve the linear pixel order.\n let pixel=id.x+id.y*groups.x*64u;\n if(pixel>=arrayLength(&output)) {\n return;\n }\n let c=caustics[pixel];\n let p=pt[pixel];\n output[pixel]=vec4f(p.rgb+c.rgb/max(c.a,1.0)*normal[pixel].a,p.a);\n }\n";