@meimu/mutracer 0.2.0 → 0.3.1

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 (372) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSES/FidelityFX-FSR.txt +19 -0
  3. package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
  4. package/README.md +3 -0
  5. package/THIRD_PARTY_NOTICES.md +18 -4
  6. package/dist/assets/bvh.worker.js +1 -1
  7. package/dist/mutracer.umd.js +9328 -7614
  8. package/docs/api.md +83 -35
  9. package/docs/caustics.md +80 -0
  10. package/docs/materials.md +9 -6
  11. package/docs/performance.md +7 -0
  12. package/docs/post-processing.md +62 -9
  13. package/docs/progressive-rendering.md +53 -9
  14. package/docs/sampling.md +4 -0
  15. package/docs/technical/acceleration.md +52 -0
  16. package/docs/technical/aovs.md +79 -0
  17. package/docs/technical/caustics.md +109 -0
  18. package/docs/technical/continuous-spectrum.md +122 -0
  19. package/docs/technical/display-upscale.md +82 -0
  20. package/docs/technical/openpbr.md +99 -0
  21. package/docs/technical/pbrt-import.md +168 -0
  22. package/docs/technical/tiling.md +74 -0
  23. package/docs/technical/webgl.md +53 -0
  24. package/docs/updates.md +3 -1
  25. package/docs/viewer-checklist.md +65 -0
  26. package/docs/viewer.md +18 -6
  27. package/lib/Display.d.ts +19 -5
  28. package/lib/Display.js +10 -7
  29. package/lib/Display.js.map +1 -1
  30. package/lib/Engine.d.ts +4 -1
  31. package/lib/Engine.js +77 -14
  32. package/lib/Engine.js.map +1 -1
  33. package/lib/Render.d.ts +81 -24
  34. package/lib/Render.js +201 -26
  35. package/lib/Render.js.map +1 -1
  36. package/lib/RenderLoop.d.ts +7 -3
  37. package/lib/RenderLoop.js +68 -44
  38. package/lib/RenderLoop.js.map +1 -1
  39. package/lib/main.d.ts +4 -2
  40. package/lib/main.js +1 -0
  41. package/lib/main.js.map +1 -1
  42. package/lib/oidn.d.ts +1 -1
  43. package/lib/renderer/AovPrimitiveCache.js +39 -8
  44. package/lib/renderer/AovPrimitiveCache.js.map +1 -1
  45. package/lib/renderer/DisplayPostProcess.d.ts +8 -3
  46. package/lib/renderer/DisplayPostProcess.js +51 -18
  47. package/lib/renderer/DisplayPostProcess.js.map +1 -1
  48. package/lib/renderer/GPUTraceQueue.d.ts +2 -1
  49. package/lib/renderer/GPUTraceQueue.js +3 -1
  50. package/lib/renderer/GPUTraceQueue.js.map +1 -1
  51. package/lib/renderer/MaterialData.js +7 -2
  52. package/lib/renderer/MaterialData.js.map +1 -1
  53. package/lib/renderer/RenderingPipeline.d.ts +11 -1
  54. package/lib/renderer/RenderingPipeline.js.map +1 -1
  55. package/lib/renderer/TileRender.d.ts +2 -2
  56. package/lib/renderer/TileRender.js +128 -7
  57. package/lib/renderer/TileRender.js.map +1 -1
  58. package/lib/renderer/WGPUAov.d.ts +6 -1
  59. package/lib/renderer/WGPUAov.js +108 -14
  60. package/lib/renderer/WGPUAov.js.map +1 -1
  61. package/lib/renderer/WGPUCanvasSurface.js +12 -1
  62. package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
  63. package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
  64. package/lib/renderer/WGPUCausticLightPass.js +217 -0
  65. package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
  66. package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
  67. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  68. package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
  69. package/lib/renderer/WGPUPhotonMap.js +191 -0
  70. package/lib/renderer/WGPUPhotonMap.js.map +1 -0
  71. package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
  72. package/lib/renderer/WGPURayTraceOutput.js +122 -28
  73. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  74. package/lib/renderer/WGPURayTracePass.d.ts +65 -21
  75. package/lib/renderer/WGPURayTracePass.js +730 -409
  76. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  77. package/lib/renderer/WGPURenderingPipeline.js +110 -68
  78. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  79. package/lib/renderer/WebGLAov.js +3 -3
  80. package/lib/renderer/WebGLAov.js.map +1 -1
  81. package/lib/renderer/WebGLFullQuadPass.d.ts +2 -1
  82. package/lib/renderer/WebGLFullQuadPass.js +10 -0
  83. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  84. package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
  85. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  86. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  87. package/lib/renderer/WebGLRayTracePass.d.ts +20 -11
  88. package/lib/renderer/WebGLRayTracePass.js +157 -116
  89. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  90. package/lib/renderer/WebGLRenderingPipeline.js +17 -14
  91. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  92. package/lib/renderer/WebGLSkyBaker.js +60 -60
  93. package/lib/renderer/accumulationTarget.d.ts +2 -1
  94. package/lib/renderer/accumulationTarget.js.map +1 -1
  95. package/lib/renderer/aov.d.ts +13 -1
  96. package/lib/renderer/aov.js +21 -2
  97. package/lib/renderer/aov.js.map +1 -1
  98. package/lib/renderer/aovDisplay.js +2 -2
  99. package/lib/renderer/aovDisplay.js.map +1 -1
  100. package/lib/renderer/binnedSahBvh.d.ts +2 -1
  101. package/lib/renderer/binnedSahBvh.js +24 -17
  102. package/lib/renderer/binnedSahBvh.js.map +1 -1
  103. package/lib/renderer/bvhAccel.d.ts +3 -1
  104. package/lib/renderer/bvhAccel.js +36 -6
  105. package/lib/renderer/bvhAccel.js.map +1 -1
  106. package/lib/renderer/cameraUniform.d.ts +1 -1
  107. package/lib/renderer/cameraUniform.js +6 -2
  108. package/lib/renderer/cameraUniform.js.map +1 -1
  109. package/lib/renderer/causticDiagnostics.d.ts +31 -0
  110. package/lib/renderer/causticDiagnostics.js +5 -0
  111. package/lib/renderer/causticDiagnostics.js.map +1 -0
  112. package/lib/renderer/causticEmission.d.ts +10 -0
  113. package/lib/renderer/causticEmission.js +40 -0
  114. package/lib/renderer/causticEmission.js.map +1 -0
  115. package/lib/renderer/causticUniform.d.ts +12 -0
  116. package/lib/renderer/causticUniform.js +22 -0
  117. package/lib/renderer/causticUniform.js.map +1 -0
  118. package/lib/renderer/caustics.d.ts +16 -0
  119. package/lib/renderer/caustics.js +93 -0
  120. package/lib/renderer/caustics.js.map +1 -0
  121. package/lib/renderer/compactVertices.d.ts +14 -0
  122. package/lib/renderer/compactVertices.js +124 -0
  123. package/lib/renderer/compactVertices.js.map +1 -0
  124. package/lib/renderer/easu.d.ts +11 -0
  125. package/lib/renderer/easu.js +156 -0
  126. package/lib/renderer/easu.js.map +1 -0
  127. package/lib/renderer/geometryUpdateState.d.ts +1 -0
  128. package/lib/renderer/geometryUpdateState.js.map +1 -1
  129. package/lib/renderer/geometryUpdates.js +3 -2
  130. package/lib/renderer/geometryUpdates.js.map +1 -1
  131. package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
  132. package/lib/renderer/glsl/aovReflectance.glsl.js +53 -53
  133. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
  134. package/lib/renderer/glsl/aovTrace.frag.js +45 -37
  135. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
  136. package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
  137. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
  138. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
  139. package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
  140. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
  141. package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
  142. package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
  143. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
  144. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
  145. package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -73
  146. package/lib/renderer/glsl/chunks/intersect.glsl.js +478 -465
  147. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  148. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
  149. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +156 -153
  150. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  151. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +771 -771
  152. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  153. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  154. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
  155. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +70 -63
  156. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  157. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +89 -75
  158. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  159. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
  160. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +160 -118
  161. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  162. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +14 -14
  163. package/lib/renderer/glsl/chunks/sampling.glsl.js +88 -91
  164. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
  165. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  166. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
  167. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
  168. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
  169. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  170. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  171. package/lib/renderer/glsl/depthQuery.frag.js +13 -7
  172. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  173. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
  174. package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
  175. package/lib/renderer/glsl/rayTrace.frag.js +338 -252
  176. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  177. package/lib/renderer/glsl/shadowCatcher.frag.js +27 -26
  178. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  179. package/lib/renderer/glsl/webglPipeline.frag.js +59 -59
  180. package/lib/renderer/gpuMemory.js +1 -1
  181. package/lib/renderer/gpuMemory.js.map +1 -1
  182. package/lib/renderer/lightSampling.d.ts +3 -2
  183. package/lib/renderer/lightSampling.js +14 -8
  184. package/lib/renderer/lightSampling.js.map +1 -1
  185. package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
  186. package/lib/renderer/openPbrEnergyLut.js +18 -1
  187. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  188. package/lib/renderer/pathLimits.d.ts +5 -4
  189. package/lib/renderer/pathLimits.js +6 -5
  190. package/lib/renderer/pathLimits.js.map +1 -1
  191. package/lib/renderer/prepareMeshBVH.d.ts +2 -0
  192. package/lib/renderer/prepareMeshBVH.js +5 -3
  193. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  194. package/lib/renderer/progressiveScheduler.js +5 -4
  195. package/lib/renderer/progressiveScheduler.js.map +1 -1
  196. package/lib/renderer/renderPipeline.d.ts +5 -0
  197. package/lib/renderer/renderPipeline.js +1 -0
  198. package/lib/renderer/renderPipeline.js.map +1 -1
  199. package/lib/renderer/researchTransport.d.ts +31 -0
  200. package/lib/renderer/researchTransport.js +5 -0
  201. package/lib/renderer/researchTransport.js.map +1 -0
  202. package/lib/renderer/sceneAssembly.d.ts +1 -1
  203. package/lib/renderer/sceneAssembly.js +4 -3
  204. package/lib/renderer/sceneAssembly.js.map +1 -1
  205. package/lib/renderer/sceneChangeDetector.d.ts +1 -1
  206. package/lib/renderer/sceneChangeDetector.js +3 -1
  207. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  208. package/lib/renderer/sceneLayoutSchema.d.ts +2 -0
  209. package/lib/renderer/sceneLayoutSchema.js +3 -3
  210. package/lib/renderer/sceneLayoutSchema.js.map +1 -1
  211. package/lib/renderer/scenePreparation.d.ts +3 -2
  212. package/lib/renderer/scenePreparation.js +18 -2
  213. package/lib/renderer/scenePreparation.js.map +1 -1
  214. package/lib/renderer/scratchSampling.js +6 -6
  215. package/lib/renderer/spectrum.d.ts +21 -0
  216. package/lib/renderer/spectrum.js +154 -0
  217. package/lib/renderer/spectrum.js.map +1 -0
  218. package/lib/renderer/staticBvhPreparation.d.ts +9 -0
  219. package/lib/renderer/staticBvhPreparation.js +8 -2
  220. package/lib/renderer/staticBvhPreparation.js.map +1 -1
  221. package/lib/renderer/surfaceHit.d.ts +10 -0
  222. package/lib/renderer/surfaceHit.js +22 -0
  223. package/lib/renderer/surfaceHit.js.map +1 -0
  224. package/lib/renderer/tangentRequirements.d.ts +2 -0
  225. package/lib/renderer/tangentRequirements.js +7 -0
  226. package/lib/renderer/tangentRequirements.js.map +1 -0
  227. package/lib/renderer/textureAtlas.d.ts +4 -0
  228. package/lib/renderer/textureAtlas.js +48 -2
  229. package/lib/renderer/textureAtlas.js.map +1 -1
  230. package/lib/renderer/webgl.js +4 -0
  231. package/lib/renderer/webgl.js.map +1 -1
  232. package/lib/renderer/webglLightSampling.d.ts +39 -0
  233. package/lib/renderer/webglLightSampling.js +15 -0
  234. package/lib/renderer/webglLightSampling.js.map +1 -0
  235. package/lib/renderer/webglVertexAttributes.d.ts +17 -0
  236. package/lib/renderer/webglVertexAttributes.js +44 -0
  237. package/lib/renderer/webglVertexAttributes.js.map +1 -0
  238. package/lib/renderer/wgpuBindlessSource.js +3 -3
  239. package/lib/renderer/wgpuMaterialConstants.js +4 -3
  240. package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
  241. package/lib/renderer/wgpuSceneUniform.js +2 -2
  242. package/lib/renderer/wgpuSceneUniform.js.map +1 -1
  243. package/lib/renderer/wgpuShaderSource.d.ts +22 -0
  244. package/lib/renderer/wgpuShaderSource.js +3 -1
  245. package/lib/renderer/wgpuShaderSource.js.map +1 -1
  246. package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
  247. package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
  248. package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
  249. package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
  250. package/lib/renderer/wgsl/aovReflectance.wgsl.js +55 -55
  251. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
  252. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
  253. package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
  254. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
  255. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
  256. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
  257. package/lib/renderer/wgsl/aovTrace.wgsl.js +33 -33
  258. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
  259. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
  260. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
  261. package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
  262. package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
  263. package/lib/renderer/wgsl/causticLight.compute.js +539 -0
  264. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
  265. package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
  266. package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
  267. package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
  268. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
  269. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
  270. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
  271. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
  272. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
  273. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
  274. package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
  275. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
  276. package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
  277. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  278. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +37 -37
  279. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
  280. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +634 -620
  281. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  282. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
  283. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +23 -21
  284. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  285. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  286. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +77 -74
  287. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  288. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +795 -795
  289. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  290. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  291. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -1
  292. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +45 -29
  293. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  294. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  295. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +142 -138
  296. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  297. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  298. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +228 -189
  299. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  300. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  301. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +11 -11
  302. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  303. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
  304. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +88 -92
  305. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
  306. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  307. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
  308. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
  309. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
  310. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  311. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
  312. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
  313. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
  314. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
  315. package/lib/renderer/wgsl/compose.frag.wgsl.js +100 -98
  316. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  317. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  318. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  319. package/lib/renderer/wgsl/depthQuery.wgsl.js +12 -3
  320. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  321. package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
  322. package/lib/renderer/wgsl/easu.wgsl.js +80 -0
  323. package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
  324. package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
  325. package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
  326. package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
  327. package/lib/renderer/wgsl/jnlm.compute.js +74 -74
  328. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
  329. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  330. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
  331. package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
  332. package/lib/renderer/wgsl/photonMap.compute.js +352 -0
  333. package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
  334. package/lib/renderer/wgsl/proceduralSky.compute.js +64 -64
  335. package/lib/renderer/wgsl/rayTrace.compute.d.ts +23 -1
  336. package/lib/renderer/wgsl/rayTrace.compute.js +531 -543
  337. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  338. package/lib/scene/MaterialState.d.ts +2 -2
  339. package/lib/scene/MaterialState.js +2 -2
  340. package/lib/scene/MaterialState.js.map +1 -1
  341. package/lib/scene/Scene.js.map +1 -1
  342. package/lib/settings/render.d.ts +22 -0
  343. package/lib/settings/render.js +2 -0
  344. package/lib/settings/render.js.map +1 -1
  345. package/lib/util/fromTHREE.js +23 -16
  346. package/lib/util/fromTHREE.js.map +1 -1
  347. package/lib/version.d.ts +1 -1
  348. package/lib/version.js +1 -1
  349. package/lib/version.js.map +1 -1
  350. package/llms.txt +2 -1
  351. package/package.json +7 -4
  352. package/lib/oidnBundledWeights.cdn.d.ts +0 -2
  353. package/lib/oidnBundledWeights.cdn.js +0 -5
  354. package/lib/oidnBundledWeights.cdn.js.map +0 -1
  355. package/lib/renderer/bvh.worker.d.ts +0 -1
  356. package/lib/renderer/bvh.worker.js +0 -16
  357. package/lib/renderer/bvh.worker.js.map +0 -1
  358. package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
  359. package/lib/renderer/bvhWorkerBuild.js +0 -17
  360. package/lib/renderer/bvhWorkerBuild.js.map +0 -1
  361. package/lib/renderer/lightCore.d.ts +0 -12
  362. package/lib/renderer/lightCore.js +0 -13
  363. package/lib/renderer/lightCore.js.map +0 -1
  364. package/lib/renderer/materialCore.d.ts +0 -8
  365. package/lib/renderer/materialCore.js +0 -9
  366. package/lib/renderer/materialCore.js.map +0 -1
  367. package/lib/scene/PixelTexture.d.ts +0 -6
  368. package/lib/scene/PixelTexture.js +0 -10
  369. package/lib/scene/PixelTexture.js.map +0 -1
  370. package/lib/util/studioLighting.d.ts +0 -18
  371. package/lib/util/studioLighting.js +0 -36
  372. package/lib/util/studioLighting.js.map +0 -1
@@ -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> aJ: vec2u;
20
+ var<private> aC: u32;
21
+ var<private> samplingBounce: u32 = 0u;
22
+ var<private> hashedCounter: u32 = 0u;
23
+ fn cD(lm: u32) -> u32 {
24
+ var x = lm;
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 cD(a ^ cD(b + 0x9e3779b9u));
31
31
  }
32
- fn iV(kW: u32, seed: u32) -> u32 {
33
- var x = kW + seed;
32
+ fn jc(lm: u32, seed: u32) -> u32 {
33
+ var x = lm + 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 vN(x: u32, seed: u32) -> u32 {
39
+ return reverseBits(jc(reverseBits(x), seed));
40
40
  }
41
41
 
42
- fn su(kW: u32) -> u32 {
43
- var r = reverseBits(kW);
42
+ fn tP(lm: u32) -> u32 {
43
+ var r = reverseBits(lm);
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 Ac(index: u32, seed: u32) -> vec2f {
48
+ let i = vN(index, ak(seed, 0u));
49
+ let x = reverseBits(jc(i, ak(seed, 1u)));
50
+ let y = vN(tP(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 wL(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 lq(wO: u32) -> u32 {
62
+ let group = wO >> 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 >> ((wO & 3u) * 8u)) & 255u;
66
66
  }
67
- fn qS(lu: u32, dim: u32, logSPP: u32) -> u32 {
67
+ fn rX(lS: u32, dim: u32, logSPP: u32) -> u32 {
68
68
  let odd = logSPP & 1u;
69
- let vN = 8u + ((logSPP + 1u) >> 1u);
69
+ let xX = 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(xX) - 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 vs = 0u;
75
+ if (shift < 30u) { vs = lS >> (shift + 2u); }
76
+ let wO = (cD(vs ^ (0x55555555u * dim)) >> 24u) % 24u;
77
+ let d = (lS >> shift) & 3u;
78
+ result |= ((lq(wO) >> (2u*d)) & 3u) << shift;
79
79
  }
80
80
  if (odd != 0u) {
81
- result |= (lu & 1u) ^ (dG((lu >> 1u) ^ (0x55555555u * dim)) & 1u);
81
+ result |= (lS & 1u) ^ (cD((lS >> 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 aX(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 tF(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 aX(8u); }
94
+ return aX(slot);
95
95
  }
96
- return cE(9u + (candidate - 1u) * 3u + slot);
96
+ return aX(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> hC: vec4u;
101
+ var<private> hD: u32;
102
+ var<private> fM: bool = false;
103
+ var<private> cZ: bool = false;
104
+ var<private> dF: u32;
105
+ var<private> gM: u32;
106
+ var<private> eT: vec2f;
107
+ fn ds(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 kT = aJ.x + aJ.y * u32(rtUniform.outputSize.x);
110
+ let key = vec4u(dim, aC, kT, rtUniform.sequenceSeed);
111
+ if (fM && all(hC == key) && hD == rtUniform.zSobolLogSPP) { return; }
112
+ hC = key; hD = rtUniform.zSobolLogSPP;
113
+ fM = true; cZ = false;
114
+ var seed = ak(ak(kT, 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 jH = 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 lS = (wL(aJ) << logSPP) | (index & mask);
124
+ index = rX(lS, dim, logSPP);
125
+ let tile = aJ >> 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) { jH += 1u; }
129
+ seed = ak(seed, jH);
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
+ dF = vN(index, ak(seed, 0u));
132
+ gM = seed;
133
+ let x = reverseBits(jc(dF, ak(seed, 1u)));
134
+ eT.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 lZ(dim: u32) -> vec2f {
137
+ ds(dim);
138
+ if (!cZ) {
139
+ let y = vN(tP(dF), ak(gM, 2u));
140
+ eT.y = f32(y >> 8u) * (1.0 / 16777216.0);
141
+ cZ = true;
142
142
  }
143
- return EPS + (1.0 - 2.0*EPS) * fa;
143
+ return EPS + (1.0 - 2.0*EPS) * eT;
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
+ ds(dim);
148
+ return EPS + (1.0 - 2.0*EPS) * eT.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 lZ(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 cm(slot: u32) -> f32 {
159
+ let dim = ak(ak(samplingBounce, slot), hashedCounter) | 0x80000000u;
160
+ hashedCounter += 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 kT = aJ.x + aJ.y * u32(rtUniform.outputSize.x);
164
+ let seed = ak(ak(kT, dim), rtUniform.sequenceSeed);
165
+ let i = vN(aC, ak(seed, 0u));
166
+ let x = reverseBits(jc(i, ak(seed, 1u)));
167
167
  return EPS + (1.0 - 2.0*EPS) * (f32(x >> 8u) * (1.0 / 16777216.0));
168
168
  }
169
169
  `;
@@ -0,0 +1,6 @@
1
+ export declare function spectralPrefixWgsl(shareSecondary?: boolean): string;
2
+ export type PrefixBindings = Record<string, [type: string, expression: string]>;
3
+ export declare const prefixRandomBindings: PrefixBindings;
4
+ export declare function prefixCheckpoint(name: string, bindings: PrefixBindings): string;
5
+ export declare function prefixSave(name: string, bindings: PrefixBindings): string;
6
+ export declare function prefixRestore(name: string, bindings: PrefixBindings): string;
@@ -0,0 +1,66 @@
1
+ // Browser-only checkpoint source. Native and nonspectral generation omit it.
2
+ // Structured-sample caches are pure dimension lookups; only PCG, hashed draws
3
+ // and the two current-bounce indices need restoring.
4
+ export function spectralPrefixWgsl(shareSecondary = true) {
5
+ return /* wgsl */ `
6
+ struct eE {
7
+ ready: bool,
8
+ result: vec4f,
9
+ aux: RayTraceAuxiliary,
10
+ rng: vec4u,
11
+ counter: u32,
12
+ bounce: u32,
13
+ vertex: u32,
14
+ }
15
+ var<private> eB: array<eE, 2>;
16
+ var<private> spActive: bool;
17
+ var<private> sd: bool;
18
+ var<private> spChannel: i32;
19
+ var<private> lg: f32;
20
+ var<private> qz: i32;
21
+ var<private> fC: i32 = -1;
22
+
23
+ fn wY(channel: i32, wavelength: f32, xF: bool) {
24
+ sd = SPECTRAL && rtUniform.dispersionWavelengths != 1${shareSecondary ? '' : ' && false'};
25
+ spChannel = channel; lg = wavelength;
26
+ spActive = sd && !xF;
27
+ qz = 0;
28
+ }
29
+ fn gf(ma: OpenPbrResolvedMaterial) -> bool {
30
+ return ma.transmissionDispersionScale > 0.0 && ma.specularIor != 1.0;
31
+ }
32
+ fn qA(path: ptr<function, Path>, si: ptr<function, SurfaceInteraction>) {
33
+ spActive = false;
34
+ (*path).li = sampling_spectral_rgb_filter((*path).li, spChannel);
35
+ (*si).spectralChannel = spChannel; (*si).wavelength = lg;
36
+ }
37
+ fn rN(slot: i32, aux: ptr<function, RayTraceAuxiliary>) -> vec4f {
38
+ let oM = eB[slot];
39
+ *aux = oM.aux;
40
+ s0 = oM.rng; hashedCounter = oM.counter;
41
+ samplingBounce = oM.bounce; bounceIndex = oM.vertex;
42
+ return vec4f(sampling_spectral_rgb_filter(oM.result.rgb, spChannel), oM.result.a);
43
+ }
44
+ fn spFinish(slot: i32, result: vec4f, aux: RayTraceAuxiliary) -> vec4f {
45
+ if (!spActive) { return result; }
46
+ if (spChannel == 1) {
47
+ eB[slot] = eE(true, result, aux, s0, hashedCounter, samplingBounce, bounceIndex);
48
+ }
49
+ return vec4f(sampling_spectral_rgb_filter(result.rgb, spChannel), result.a);
50
+ }
51
+ `;
52
+ }
53
+ export const prefixRandomBindings = {
54
+ rng: ['vec4u', 's0'], counter: ['u32', 'hashedCounter'],
55
+ bounce: ['u32', 'samplingBounce'], vertex: ['u32', 'bounceIndex']
56
+ };
57
+ export function prefixCheckpoint(name, bindings) {
58
+ return `struct ${name}State {\n${Object.entries(bindings).map(([key, [type]]) => ` ${key}: ${type},`).join('\n')}\n}\nvar<private> ${name}: ${name}State;\n`;
59
+ }
60
+ export function prefixSave(name, bindings) {
61
+ return Object.entries(bindings).map(([key, [, value]]) => `${name}.${key} = ${value};`).join('\n');
62
+ }
63
+ export function prefixRestore(name, bindings) {
64
+ return Object.entries(bindings).map(([key, [, value]]) => `${value} = ${name}.${key};`).join('\n');
65
+ }
66
+ //# sourceMappingURL=spectralPrefix.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectralPrefix.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/spectralPrefix.wgsl.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,qDAAqD;AACrD,MAAM,UAAU,kBAAkB,CAAC,cAAc,GAAG,IAAI;IAAI,OAAO,UAAU,CAAC;;;;;;;;;;;;;;;;;;;uDAmBd,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhG,CAAC;AAAC,CAAC;AAGJ,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC;IACvD,MAAM,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;CAClE,CAAC;AACF,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAwB;IACrE,OAAO,UAAU,IAAI,YAAY,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,KAAK,IAAI,UAAU,CAAC;AAChK,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAwB;IAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrG,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAwB;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrG,CAAC","sourcesContent":["// Browser-only checkpoint source. Native and nonspectral generation omit it.\n// Structured-sample caches are pure dimension lookups; only PCG, hashed draws\n// and the two current-bounce indices need restoring.\nexport function spectralPrefixWgsl(shareSecondary = true) { return /* wgsl */ `\nstruct SpectralCompleted {\n ready: bool,\n result: vec4f,\n aux: RayTraceAuxiliary,\n rng: vec4u,\n counter: u32,\n bounce: u32,\n vertex: u32,\n}\nvar<private> spCompleted: array<SpectralCompleted, 2>;\nvar<private> spActive: bool;\nvar<private> spEnabled: bool;\nvar<private> spChannel: i32;\nvar<private> spWavelength: f32;\nvar<private> spCall: i32;\nvar<private> spForkCall: i32 = -1;\n\nfn spBegin(channel: i32, wavelength: f32, primaryFork: bool) {\n spEnabled = SPECTRAL && rtUniform.dispersionWavelengths != 1${shareSecondary ? '' : ' && false'};\n spChannel = channel; spWavelength = wavelength;\n spActive = spEnabled && !primaryFork;\n spCall = 0;\n}\nfn spDisperses(ma: OpenPbrResolvedMaterial) -> bool {\n return ma.transmissionDispersionScale > 0.0 && ma.specularIor != 1.0;\n}\nfn spFork(path: ptr<function, Path>, si: ptr<function, SurfaceInteraction>) {\n spActive = false;\n (*path).li = sampling_spectral_rgb_filter((*path).li, spChannel);\n (*si).spectralChannel = spChannel; (*si).wavelength = spWavelength;\n}\nfn spReplay(slot: i32, aux: ptr<function, RayTraceAuxiliary>) -> vec4f {\n let saved = spCompleted[slot];\n *aux = saved.aux;\n s0 = saved.rng; hashedCounter = saved.counter;\n samplingBounce = saved.bounce; bounceIndex = saved.vertex;\n return vec4f(sampling_spectral_rgb_filter(saved.result.rgb, spChannel), saved.result.a);\n}\nfn spFinish(slot: i32, result: vec4f, aux: RayTraceAuxiliary) -> vec4f {\n if (!spActive) { return result; }\n if (spChannel == 1) {\n spCompleted[slot] = SpectralCompleted(true, result, aux, s0, hashedCounter, samplingBounce, bounceIndex);\n }\n return vec4f(sampling_spectral_rgb_filter(result.rgb, spChannel), result.a);\n}\n`; }\n\nexport type PrefixBindings = Record<string, [type: string, expression: string]>;\nexport const prefixRandomBindings: PrefixBindings = {\n rng: ['vec4u', 's0'], counter: ['u32', 'hashedCounter'],\n bounce: ['u32', 'samplingBounce'], vertex: ['u32', 'bounceIndex']\n};\nexport function prefixCheckpoint(name: string, bindings: PrefixBindings) {\n return `struct ${name}State {\\n${Object.entries(bindings).map(([key, [type]]) => ` ${key}: ${type},`).join('\\n')}\\n}\\nvar<private> ${name}: ${name}State;\\n`;\n}\nexport function prefixSave(name: string, bindings: PrefixBindings) {\n return Object.entries(bindings).map(([key, [, value]]) => `${name}.${key} = ${value};`).join('\\n');\n}\nexport function prefixRestore(name: string, bindings: PrefixBindings) {\n return Object.entries(bindings).map(([key, [, value]]) => `${value} = ${name}.${key};`).join('\\n');\n}\n"]}
@@ -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 jq(pos: vec3f, normal: vec3f) -> vec2f {
11
+ let dj = abs(normal);
12
12
  var uv = vec2f(0.0);
13
- if (dI.x > dI.y && dI.x > dI.z) {
13
+ if (dj.x > dj.y && dj.x > dj.z) {
14
14
  uv = pos.yz;
15
- } else if (dI.y > dI.x && dI.y > dI.z) {
15
+ } else if (dj.y > dj.x && dj.y > dj.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 hW(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 gW(fu: i32, pos: vec3f, normal: vec3f) -> vec2f {
32
+ if (fu == ${uvProjectionConstants.triplanar}) {
33
+ return jq(pos, normal);
34
+ } else if (fu == ${uvProjectionConstants.spherical}) {
35
35
  return sphericalProjection(pos);
36
- } else if (fE == ${uvProjectionConstants.cylindrical}) {
37
- return hT(pos, normal);
36
+ } else if (fu == ${uvProjectionConstants.cylindrical}) {
37
+ return hW(pos, normal);
38
38
  }
39
39
  return vec2f(0.0);
40
40
  }
@@ -0,0 +1,2 @@
1
+ /** Readers share word offsets with compactVertices; legacy hosts keep vec4-slot offsets. */
2
+ export declare function vertexAttributeReaders(compact: boolean, frames: boolean): string;
@@ -0,0 +1,61 @@
1
+ /** Readers share word offsets with compactVertices; legacy hosts keep vec4-slot offsets. */
2
+ export function vertexAttributeReaders(compact, frames) {
3
+ if (!compact)
4
+ return /* wgsl */ `
5
+ fn vertexPosition(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+POSITION_OFF].xyz;}
6
+ fn vertexNormal(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+NORMAL_OFF].xyz;}
7
+ fn hd(i:i32)->vec2f {return attrBuffers[i*ATTR_STRIDE+UV_OFF].xy;}
8
+ fn hV(i:i32)->vec2f {return attrBuffers[i*ATTR_STRIDE+UV1_OFF].xy;}
9
+ fn vertexColor(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+COLOR_OFF].xyz;}
10
+ fn gC(i:i32)->vec4f {return ${frames ? 'attrBuffers[i*ATTR_STRIDE+TANGENT_OFF]' : 'vec4f(attrBuffers[i*ATTR_STRIDE+TANGENT_OFF],0.0)'};}
11
+ `;
12
+ return /* wgsl */ `
13
+ fn tI(a:i32,b:i32,maximum:f32)->vec3f {
14
+ if (a == -i32(maximum)-1 && b == -i32(maximum)-1) {return vec3f(0.0);}
15
+ var v=vec3f(f32(a)/maximum,f32(b)/maximum,0.0);
16
+ v.z=1.0-abs(v.x)-abs(v.y);
17
+ if(v.z<0.0) {v=vec3f((vec2f(1.0)-abs(v.yx))*select(vec2f(-1.0),vec2f(1.0),v.xy>=vec2f(0.0)),v.z);}
18
+ return normalize(v);
19
+ }
20
+ fn vertexPosition(i:i32)->vec3f {
21
+ let o=i*ATTR_STRIDE+POSITION_OFF;
22
+ return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));
23
+ }
24
+ fn vertexNormal(i:i32)->vec3f {
25
+ let o=i*ATTR_STRIDE+NORMAL_OFF;
26
+ if(NORMAL_FLOAT) {return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));}
27
+ let w=attrBuffers[o];
28
+ return tI(i32(w<<16u)>>16,i32(w)>>16,32767.0);
29
+ }
30
+ fn hd(i:i32)->vec2f {
31
+ if(!HAS_VERTEX_UV) {return vec2f(0.0);}
32
+ let o=i*ATTR_STRIDE+UV_OFF;
33
+ return bitcast<vec2f>(vec2u(attrBuffers[o],attrBuffers[o+1]));
34
+ }
35
+ fn hV(i:i32)->vec2f {
36
+ if(!HAS_VERTEX_UV) {return vec2f(0.0);}
37
+ let o=i*ATTR_STRIDE+UV1_OFF;
38
+ return bitcast<vec2f>(vec2u(attrBuffers[o],attrBuffers[o+1]));
39
+ }
40
+ fn vertexColor(i:i32)->vec3f {
41
+ if(!USE_VERTEX_COLOR) {return vec3f(1.0);}
42
+ let o=i*ATTR_STRIDE+COLOR_OFF;
43
+ if(COLOR_FLOAT) {return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));}
44
+ return unpack4x8unorm(attrBuffers[o]).xyz;
45
+ }
46
+ fn gC(i:i32)->vec4f {
47
+ if(!HAS_VERTEX_TANGENT) {return vec4f(0.0);}
48
+ let w=attrBuffers[i*ATTR_STRIDE+TANGENT_OFF];
49
+ let direction=tI(i32(w<<17u)>>17,i32(w<<2u)>>17,16383.0);
50
+ let AN=array<f32,4>(0.0,1.0,-1.0,2.0);
51
+ return vec4f(direction,AN[w>>30u]);
52
+ }
53
+ fn pJ(fallback:i32,record:i32)->i32 {
54
+ if(!HAS_TRIANGLE_MATERIAL) {return fallback;}
55
+ let material=attrBuffers[MATERIALINDEX_OFF+record];
56
+ if(material==0u) {return fallback;}
57
+ return i32(material-1u);
58
+ }
59
+ `;
60
+ }
61
+ //# sourceMappingURL=vertexAttributes.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertexAttributes.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/vertexAttributes.wgsl.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,MAAe;IACtE,IAAI,CAAC,OAAO;QAAE,OAAO,UAAU,CAAC;;;;;;8BAMO,MAAM,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,mDAAmD;CAC/I,CAAC;IACA,OAAO,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CnB,CAAC;AACF,CAAC","sourcesContent":["/** Readers share word offsets with compactVertices; legacy hosts keep vec4-slot offsets. */\nexport function vertexAttributeReaders(compact: boolean, frames: boolean) {\n if (!compact) return /* wgsl */ `\nfn vertexPosition(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+POSITION_OFF].xyz;}\nfn vertexNormal(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+NORMAL_OFF].xyz;}\nfn vertexUv(i:i32)->vec2f {return attrBuffers[i*ATTR_STRIDE+UV_OFF].xy;}\nfn vertexUv1(i:i32)->vec2f {return attrBuffers[i*ATTR_STRIDE+UV1_OFF].xy;}\nfn vertexColor(i:i32)->vec3f {return attrBuffers[i*ATTR_STRIDE+COLOR_OFF].xyz;}\nfn vertexTangent(i:i32)->vec4f {return ${frames ? 'attrBuffers[i*ATTR_STRIDE+TANGENT_OFF]' : 'vec4f(attrBuffers[i*ATTR_STRIDE+TANGENT_OFF],0.0)'};}\n`;\n return /* wgsl */ `\nfn octDirection(a:i32,b:i32,maximum:f32)->vec3f {\n if (a == -i32(maximum)-1 && b == -i32(maximum)-1) {return vec3f(0.0);}\n var v=vec3f(f32(a)/maximum,f32(b)/maximum,0.0);\n v.z=1.0-abs(v.x)-abs(v.y);\n if(v.z<0.0) {v=vec3f((vec2f(1.0)-abs(v.yx))*select(vec2f(-1.0),vec2f(1.0),v.xy>=vec2f(0.0)),v.z);}\n return normalize(v);\n}\nfn vertexPosition(i:i32)->vec3f {\n let o=i*ATTR_STRIDE+POSITION_OFF;\n return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));\n}\nfn vertexNormal(i:i32)->vec3f {\n let o=i*ATTR_STRIDE+NORMAL_OFF;\n if(NORMAL_FLOAT) {return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));}\n let w=attrBuffers[o];\n return octDirection(i32(w<<16u)>>16,i32(w)>>16,32767.0);\n}\nfn vertexUv(i:i32)->vec2f {\n if(!HAS_VERTEX_UV) {return vec2f(0.0);}\n let o=i*ATTR_STRIDE+UV_OFF;\n return bitcast<vec2f>(vec2u(attrBuffers[o],attrBuffers[o+1]));\n}\nfn vertexUv1(i:i32)->vec2f {\n if(!HAS_VERTEX_UV) {return vec2f(0.0);}\n let o=i*ATTR_STRIDE+UV1_OFF;\n return bitcast<vec2f>(vec2u(attrBuffers[o],attrBuffers[o+1]));\n}\nfn vertexColor(i:i32)->vec3f {\n if(!USE_VERTEX_COLOR) {return vec3f(1.0);}\n let o=i*ATTR_STRIDE+COLOR_OFF;\n if(COLOR_FLOAT) {return bitcast<vec3f>(vec3u(attrBuffers[o],attrBuffers[o+1],attrBuffers[o+2]));}\n return unpack4x8unorm(attrBuffers[o]).xyz;\n}\nfn vertexTangent(i:i32)->vec4f {\n if(!HAS_VERTEX_TANGENT) {return vec4f(0.0);}\n let w=attrBuffers[i*ATTR_STRIDE+TANGENT_OFF];\n let direction=octDirection(i32(w<<17u)>>17,i32(w<<2u)>>17,16383.0);\n let signs=array<f32,4>(0.0,1.0,-1.0,2.0);\n return vec4f(direction,signs[w>>30u]);\n}\nfn triangleMaterial(fallback:i32,record:i32)->i32 {\n if(!HAS_TRIANGLE_MATERIAL) {return fallback;}\n let material=attrBuffers[MATERIALINDEX_OFF+record];\n if(material==0u) {return fallback;}\n return i32(material-1u);\n}\n`;\n}\n"]}
@@ -1,3 +1,5 @@
1
+ /** Mode indices understood by applyToneMapping. */
2
+ export declare const TONE_MAPPING_MODES: Readonly<Record<string, number>>;
1
3
  export declare const linearToSrgbDefine = "\nfn linearToSrgb(color: vec3f) -> vec3f {\n let linear = max(color, vec3f(0.0));\n let low = linear * 12.92;\n let high = 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055;\n return select(high, low, linear <= vec3f(0.0031308));\n}\n";
2
4
  export declare const composeDefine = "\n\nfn linearToneMapping(color: vec3f) -> vec3f {\n return clamp(color, vec3f(0.0), vec3f(1.0));\n}\nfn reinhardToneMapping(color: vec3f) -> vec3f {\n return clamp(color / (vec3f(1.0) + color), vec3f(0.0), vec3f(1.0));\n}\nfn cineonToneMapping(inputColor: vec3f) -> vec3f {\n let color = max(vec3f(0.0), inputColor - 0.004);\n return pow((color * (6.2 * color + 0.5)) /\n (color * (6.2 * color + 1.7) + 0.06), vec3f(2.2));\n}\nfn rrtAndOdtFit(value: vec3f) -> vec3f {\n let numerator = value * (value + 0.0245786) - 0.000090537;\n let denominator = value * (0.983729 * value + 0.4329510) + 0.238081;\n return numerator / denominator;\n}\nfn acesToneMapping(inputColor: vec3f) -> vec3f {\n let inputMatrix = mat3x3f(\n vec3f(0.59719, 0.07600, 0.02840),\n vec3f(0.35458, 0.90834, 0.13383),\n vec3f(0.04823, 0.01566, 0.83777)\n );\n let outputMatrix = mat3x3f(\n vec3f(1.60475, -0.10208, -0.00327),\n vec3f(-0.53108, 1.10813, -0.07276),\n vec3f(-0.07367, -0.00605, 1.07602)\n );\n let color = inputMatrix * (inputColor / 0.6);\n return clamp(outputMatrix * rrtAndOdtFit(color), vec3f(0.0), vec3f(1.0));\n}\nfn agxDefaultContrastApprox(value: vec3f) -> vec3f {\n let value2 = value * value;\n let value4 = value2 * value2;\n return 15.5 * value4 * value2 - 40.14 * value4 * value\n + 31.96 * value4 - 6.868 * value2 * value\n + 0.4298 * value2 + 0.1191 * value - 0.00232;\n}\nfn agxToneMapping(inputColor: vec3f) -> vec3f {\n let linearRec2020ToLinearSrgb = mat3x3f(\n vec3f(1.6605, -0.1246, -0.0182),\n vec3f(-0.5876, 1.1329, -0.1006),\n vec3f(-0.0728, -0.0083, 1.1187)\n );\n let linearSrgbToLinearRec2020 = mat3x3f(\n vec3f(0.6274, 0.0691, 0.0164),\n vec3f(0.3293, 0.9195, 0.0880),\n vec3f(0.0433, 0.0113, 0.8956)\n );\n let insetMatrix = mat3x3f(\n vec3f(0.856627153315983, 0.137318972929847, 0.11189821299995),\n vec3f(0.0951212405381588, 0.761241990602591, 0.0767994186031903),\n vec3f(0.0482516061458583, 0.101439036467562, 0.811302368396859)\n );\n let outsetMatrix = mat3x3f(\n vec3f(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),\n vec3f(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),\n vec3f(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)\n );\n var color = insetMatrix * (linearSrgbToLinearRec2020 * inputColor);\n color = clamp((log2(max(color, vec3f(1e-10))) + 12.47393) / 16.5, vec3f(0.0), vec3f(1.0));\n color = outsetMatrix * agxDefaultContrastApprox(color);\n color = pow(max(color, vec3f(0.0)), vec3f(2.2));\n return clamp(linearRec2020ToLinearSrgb * color, vec3f(0.0), vec3f(1.0));\n}\nfn applyToneMapping(color: vec3f) -> vec3f {\n let toneMappingMode = i32(toneMappingParams.x);\n if (toneMappingMode == 1) { return acesToneMapping(color); }\n if (toneMappingMode == 2) { return cineonToneMapping(color); }\n if (toneMappingMode == 3) { return reinhardToneMapping(color); }\n if (toneMappingMode == 4) { return linearToneMapping(color); }\n return agxToneMapping(color);\n}\n\nfn linearToSrgb(color: vec3f) -> vec3f {\n let linear = max(color, vec3f(0.0));\n let low = linear * 12.92;\n let high = 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055;\n return select(high, low, linear <= vec3f(0.0031308));\n}\n\nfn gradeColor(inputColor: vec3f) -> vec3f {\n let contrast = colorGradingParams.x;\n let saturation = colorGradingParams.y;\n let temperature = colorGradingParams.z;\n let tint = colorGradingParams.w;\n let balance = vec3f(\n 1.0 + temperature * 0.16 + tint * 0.04,\n 1.0 - tint * 0.12,\n 1.0 - temperature * 0.16 + tint * 0.04\n );\n var color = max(inputColor * balance, vec3f(0.0));\n color = max((color - 0.18) * contrast + 0.18, vec3f(0.0));\n let luminance = dot(color, vec3f(0.2126, 0.7152, 0.0722));\n return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));\n}\n";
3
5
  export declare function createComposeMain(sdrEncoding?: 'gamma22' | 'srgb'): string;