@meimu/mutracer 0.0.0-stage → 0.1.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 (536) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/GLSL-PathTracer-MIT.txt +21 -0
  4. package/LICENSES/GlMatrix-MIT.txt +19 -0
  5. package/LICENSES/KinoBloom-MIT.txt +21 -0
  6. package/LICENSES/OIDNWeb-MIT.txt +21 -0
  7. package/LICENSES/Octicons-MIT.txt +21 -0
  8. package/LICENSES/RayTracingRenderer-MIT.txt +21 -0
  9. package/LICENSES/TinyBVH-MIT.txt +21 -0
  10. package/LICENSES/WebGPUUtils-MIT.txt +21 -0
  11. package/LICENSES/ZetaRay-MIT.txt +21 -0
  12. package/README.md +195 -2
  13. package/THIRD_PARTY_NOTICES.md +160 -0
  14. package/dist/assets/bvh.worker.js +1 -0
  15. package/dist/mutracer.umd.js +14352 -0
  16. package/docs/api.md +394 -0
  17. package/docs/bvh.md +141 -0
  18. package/docs/denoising.md +301 -0
  19. package/docs/getting-started.md +308 -0
  20. package/docs/materials.md +281 -0
  21. package/docs/performance.md +85 -0
  22. package/docs/post-processing.md +87 -0
  23. package/docs/progressive-rendering.md +144 -0
  24. package/docs/sampling.md +40 -0
  25. package/docs/threejs.md +273 -0
  26. package/docs/todo.md +61 -0
  27. package/docs/updates.md +208 -0
  28. package/lib/Display.d.ts +72 -0
  29. package/lib/Display.js +121 -0
  30. package/lib/Display.js.map +1 -0
  31. package/lib/Engine.d.ts +161 -0
  32. package/lib/Engine.js +681 -0
  33. package/lib/Engine.js.map +1 -0
  34. package/lib/Render.d.ts +256 -0
  35. package/lib/Render.js +671 -0
  36. package/lib/Render.js.map +1 -0
  37. package/lib/RenderLoop.d.ts +76 -0
  38. package/lib/RenderLoop.js +204 -0
  39. package/lib/RenderLoop.js.map +1 -0
  40. package/lib/Sync.d.ts +19 -0
  41. package/lib/Sync.js +19 -0
  42. package/lib/Sync.js.map +1 -0
  43. package/lib/constants.d.ts +2 -0
  44. package/lib/constants.js +3 -0
  45. package/lib/constants.js.map +1 -0
  46. package/lib/main.d.ts +56 -0
  47. package/lib/main.js +43 -0
  48. package/lib/main.js.map +1 -0
  49. package/lib/math.d.ts +23 -0
  50. package/lib/math.js +56 -0
  51. package/lib/math.js.map +1 -0
  52. package/lib/oidn.d.ts +45 -0
  53. package/lib/oidn.js +42 -0
  54. package/lib/oidn.js.map +1 -0
  55. package/lib/oidnBundledWeights.cdn.d.ts +2 -0
  56. package/lib/oidnBundledWeights.cdn.js +5 -0
  57. package/lib/oidnBundledWeights.cdn.js.map +1 -0
  58. package/lib/oidnBundledWeights.d.ts +2 -0
  59. package/lib/oidnBundledWeights.js +4 -0
  60. package/lib/oidnBundledWeights.js.map +1 -0
  61. package/lib/renderer/DisplayPostProcess.d.ts +14 -0
  62. package/lib/renderer/DisplayPostProcess.js +41 -0
  63. package/lib/renderer/DisplayPostProcess.js.map +1 -0
  64. package/lib/renderer/MaterialTable.d.ts +119 -0
  65. package/lib/renderer/MaterialTable.js +550 -0
  66. package/lib/renderer/MaterialTable.js.map +1 -0
  67. package/lib/renderer/OfflineAdaptiveSampling.d.ts +47 -0
  68. package/lib/renderer/OfflineAdaptiveSampling.js +36 -0
  69. package/lib/renderer/OfflineAdaptiveSampling.js.map +1 -0
  70. package/lib/renderer/RenderingPipeline.d.ts +232 -0
  71. package/lib/renderer/RenderingPipeline.js +18 -0
  72. package/lib/renderer/RenderingPipeline.js.map +1 -0
  73. package/lib/renderer/ScratchPool.d.ts +13 -0
  74. package/lib/renderer/ScratchPool.js +21 -0
  75. package/lib/renderer/ScratchPool.js.map +1 -0
  76. package/lib/renderer/TileRender.d.ts +44 -0
  77. package/lib/renderer/TileRender.js +283 -0
  78. package/lib/renderer/TileRender.js.map +1 -0
  79. package/lib/renderer/WGPUBloomPass.d.ts +17 -0
  80. package/lib/renderer/WGPUBloomPass.js +243 -0
  81. package/lib/renderer/WGPUBloomPass.js.map +1 -0
  82. package/lib/renderer/WGPUCanvasSurface.d.ts +21 -0
  83. package/lib/renderer/WGPUCanvasSurface.js +48 -0
  84. package/lib/renderer/WGPUCanvasSurface.js.map +1 -0
  85. package/lib/renderer/WGPUComputePass.d.ts +73 -0
  86. package/lib/renderer/WGPUComputePass.js +317 -0
  87. package/lib/renderer/WGPUComputePass.js.map +1 -0
  88. package/lib/renderer/WGPUFullQuadPass.d.ts +73 -0
  89. package/lib/renderer/WGPUFullQuadPass.js +389 -0
  90. package/lib/renderer/WGPUFullQuadPass.js.map +1 -0
  91. package/lib/renderer/WGPUHDRPeakMeter.d.ts +19 -0
  92. package/lib/renderer/WGPUHDRPeakMeter.js +112 -0
  93. package/lib/renderer/WGPUHDRPeakMeter.js.map +1 -0
  94. package/lib/renderer/WGPUJNLMDenoiser.d.ts +61 -0
  95. package/lib/renderer/WGPUJNLMDenoiser.js +412 -0
  96. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -0
  97. package/lib/renderer/WGPURayTraceOutput.d.ts +44 -0
  98. package/lib/renderer/WGPURayTraceOutput.js +368 -0
  99. package/lib/renderer/WGPURayTraceOutput.js.map +1 -0
  100. package/lib/renderer/WGPURayTracePass.d.ts +284 -0
  101. package/lib/renderer/WGPURayTracePass.js +2323 -0
  102. package/lib/renderer/WGPURayTracePass.js.map +1 -0
  103. package/lib/renderer/WGPURenderingPipeline.d.ts +9 -0
  104. package/lib/renderer/WGPURenderingPipeline.js +1446 -0
  105. package/lib/renderer/WGPURenderingPipeline.js.map +1 -0
  106. package/lib/renderer/WGPUSceneFeatures.d.ts +3 -0
  107. package/lib/renderer/WGPUSceneFeatures.js +20 -0
  108. package/lib/renderer/WGPUSceneFeatures.js.map +1 -0
  109. package/lib/renderer/WGPUScratchBuffer.d.ts +9 -0
  110. package/lib/renderer/WGPUScratchBuffer.js +21 -0
  111. package/lib/renderer/WGPUScratchBuffer.js.map +1 -0
  112. package/lib/renderer/WGPUScratchTexture.d.ts +10 -0
  113. package/lib/renderer/WGPUScratchTexture.js +27 -0
  114. package/lib/renderer/WGPUScratchTexture.js.map +1 -0
  115. package/lib/renderer/WGPUShaderCache.d.ts +26 -0
  116. package/lib/renderer/WGPUShaderCache.js +103 -0
  117. package/lib/renderer/WGPUShaderCache.js.map +1 -0
  118. package/lib/renderer/WebGLBloomPass.d.ts +18 -0
  119. package/lib/renderer/WebGLBloomPass.js +113 -0
  120. package/lib/renderer/WebGLBloomPass.js.map +1 -0
  121. package/lib/renderer/WebGLFullQuadPass.d.ts +65 -0
  122. package/lib/renderer/WebGLFullQuadPass.js +208 -0
  123. package/lib/renderer/WebGLFullQuadPass.js.map +1 -0
  124. package/lib/renderer/WebGLJNLMDenoiser.d.ts +32 -0
  125. package/lib/renderer/WebGLJNLMDenoiser.js +328 -0
  126. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -0
  127. package/lib/renderer/WebGLRayTraceOutputPass.d.ts +20 -0
  128. package/lib/renderer/WebGLRayTraceOutputPass.js +106 -0
  129. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -0
  130. package/lib/renderer/WebGLRayTracePass.d.ts +142 -0
  131. package/lib/renderer/WebGLRayTracePass.js +845 -0
  132. package/lib/renderer/WebGLRayTracePass.js.map +1 -0
  133. package/lib/renderer/WebGLReadback.d.ts +4 -0
  134. package/lib/renderer/WebGLReadback.js +75 -0
  135. package/lib/renderer/WebGLReadback.js.map +1 -0
  136. package/lib/renderer/WebGLRenderingPipeline.d.ts +4 -0
  137. package/lib/renderer/WebGLRenderingPipeline.js +510 -0
  138. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -0
  139. package/lib/renderer/WebGLScratchCopy.d.ts +10 -0
  140. package/lib/renderer/WebGLScratchCopy.js +27 -0
  141. package/lib/renderer/WebGLScratchCopy.js.map +1 -0
  142. package/lib/renderer/accumulationTarget.d.ts +26 -0
  143. package/lib/renderer/accumulationTarget.js +2 -0
  144. package/lib/renderer/accumulationTarget.js.map +1 -0
  145. package/lib/renderer/binnedSahBvh.d.ts +31 -0
  146. package/lib/renderer/binnedSahBvh.js +263 -0
  147. package/lib/renderer/binnedSahBvh.js.map +1 -0
  148. package/lib/renderer/bvh.worker.d.ts +1 -0
  149. package/lib/renderer/bvh.worker.js +16 -0
  150. package/lib/renderer/bvh.worker.js.map +1 -0
  151. package/lib/renderer/bvhAccel.d.ts +81 -0
  152. package/lib/renderer/bvhAccel.js +621 -0
  153. package/lib/renderer/bvhAccel.js.map +1 -0
  154. package/lib/renderer/bvhWorkerBuild.d.ts +12 -0
  155. package/lib/renderer/bvhWorkerBuild.js +17 -0
  156. package/lib/renderer/bvhWorkerBuild.js.map +1 -0
  157. package/lib/renderer/bvhWorkerClient.d.ts +57 -0
  158. package/lib/renderer/bvhWorkerClient.js +166 -0
  159. package/lib/renderer/bvhWorkerClient.js.map +1 -0
  160. package/lib/renderer/cameraLens.d.ts +5 -0
  161. package/lib/renderer/cameraLens.js +15 -0
  162. package/lib/renderer/cameraLens.js.map +1 -0
  163. package/lib/renderer/cameraSnapshot.d.ts +3 -0
  164. package/lib/renderer/cameraSnapshot.js +7 -0
  165. package/lib/renderer/cameraSnapshot.js.map +1 -0
  166. package/lib/renderer/committedScene.d.ts +13 -0
  167. package/lib/renderer/committedScene.js +121 -0
  168. package/lib/renderer/committedScene.js.map +1 -0
  169. package/lib/renderer/dataTextureUtil.d.ts +32 -0
  170. package/lib/renderer/dataTextureUtil.js +46 -0
  171. package/lib/renderer/dataTextureUtil.js.map +1 -0
  172. package/lib/renderer/denoiser.d.ts +65 -0
  173. package/lib/renderer/denoiser.js +2 -0
  174. package/lib/renderer/denoiser.js.map +1 -0
  175. package/lib/renderer/depthQuery.d.ts +14 -0
  176. package/lib/renderer/depthQuery.js +14 -0
  177. package/lib/renderer/depthQuery.js.map +1 -0
  178. package/lib/renderer/deviceRequirements.d.ts +23 -0
  179. package/lib/renderer/deviceRequirements.js +50 -0
  180. package/lib/renderer/deviceRequirements.js.map +1 -0
  181. package/lib/renderer/envMapCreation.d.ts +10 -0
  182. package/lib/renderer/envMapCreation.js +96 -0
  183. package/lib/renderer/envMapCreation.js.map +1 -0
  184. package/lib/renderer/envMapDistribution.d.ts +9 -0
  185. package/lib/renderer/envMapDistribution.js +107 -0
  186. package/lib/renderer/envMapDistribution.js.map +1 -0
  187. package/lib/renderer/float16.d.ts +1 -0
  188. package/lib/renderer/float16.js +19 -0
  189. package/lib/renderer/float16.js.map +1 -0
  190. package/lib/renderer/geometryBvh.d.ts +11 -0
  191. package/lib/renderer/geometryBvh.js +24 -0
  192. package/lib/renderer/geometryBvh.js.map +1 -0
  193. package/lib/renderer/geometryUpdates.d.ts +28 -0
  194. package/lib/renderer/geometryUpdates.js +131 -0
  195. package/lib/renderer/geometryUpdates.js.map +1 -0
  196. package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +37 -0
  198. package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/chunks/common.glsl.d.ts +2 -0
  200. package/lib/renderer/glsl/chunks/common.glsl.js +17 -0
  201. package/lib/renderer/glsl/chunks/common.glsl.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/envMap.glsl.d.ts +2 -0
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +192 -0
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -0
  205. package/lib/renderer/glsl/chunks/intersect.glsl.d.ts +2 -0
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js +1091 -0
  207. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -0
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +2 -0
  209. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +371 -0
  210. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -0
  211. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.d.ts +2 -0
  212. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +1767 -0
  213. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -0
  214. package/lib/renderer/glsl/chunks/rand.glsl.d.ts +2 -0
  215. package/lib/renderer/glsl/chunks/rand.glsl.js +26 -0
  216. package/lib/renderer/glsl/chunks/rand.glsl.js.map +1 -0
  217. package/lib/renderer/glsl/chunks/random.glsl.d.ts +2 -0
  218. package/lib/renderer/glsl/chunks/random.glsl.js +27 -0
  219. package/lib/renderer/glsl/chunks/random.glsl.js.map +1 -0
  220. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +2 -0
  221. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +287 -0
  222. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -0
  223. package/lib/renderer/glsl/chunks/sampleLight.glsl.d.ts +2 -0
  224. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +254 -0
  225. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -0
  226. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +2 -0
  227. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +279 -0
  228. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -0
  229. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.d.ts +2 -0
  230. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +48 -0
  231. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -0
  232. package/lib/renderer/glsl/chunks/sampling.glsl.d.ts +2 -0
  233. package/lib/renderer/glsl/chunks/sampling.glsl.js +194 -0
  234. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -0
  235. package/lib/renderer/glsl/chunks/sobol.glsl.d.ts +2 -0
  236. package/lib/renderer/glsl/chunks/sobol.glsl.js +170 -0
  237. package/lib/renderer/glsl/chunks/sobol.glsl.js.map +1 -0
  238. package/lib/renderer/glsl/chunks/textureLinear.glsl.d.ts +2 -0
  239. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +27 -0
  240. package/lib/renderer/glsl/chunks/textureLinear.glsl.js.map +1 -0
  241. package/lib/renderer/glsl/chunks/uvProjection.glsl.d.ts +2 -0
  242. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +72 -0
  243. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -0
  244. package/lib/renderer/glsl/depthQuery.frag.d.ts +3 -0
  245. package/lib/renderer/glsl/depthQuery.frag.js +55 -0
  246. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -0
  247. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.d.ts +6 -0
  248. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +46 -0
  249. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -0
  250. package/lib/renderer/glsl/rayTrace.frag.d.ts +2 -0
  251. package/lib/renderer/glsl/rayTrace.frag.js +619 -0
  252. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -0
  253. package/lib/renderer/glsl/shadowCatcher.frag.d.ts +3 -0
  254. package/lib/renderer/glsl/shadowCatcher.frag.js +119 -0
  255. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -0
  256. package/lib/renderer/glsl/webglPipeline.frag.d.ts +4 -0
  257. package/lib/renderer/glsl/webglPipeline.frag.js +208 -0
  258. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -0
  259. package/lib/renderer/gpuMemory.d.ts +2 -0
  260. package/lib/renderer/gpuMemory.js +10 -0
  261. package/lib/renderer/gpuMemory.js.map +1 -0
  262. package/lib/renderer/halton.d.ts +1 -0
  263. package/lib/renderer/halton.js +15 -0
  264. package/lib/renderer/halton.js.map +1 -0
  265. package/lib/renderer/jnlm.d.ts +85 -0
  266. package/lib/renderer/jnlm.js +87 -0
  267. package/lib/renderer/jnlm.js.map +1 -0
  268. package/lib/renderer/lightSampling.d.ts +75 -0
  269. package/lib/renderer/lightSampling.js +305 -0
  270. package/lib/renderer/lightSampling.js.map +1 -0
  271. package/lib/renderer/lightsUtil.d.ts +26 -0
  272. package/lib/renderer/lightsUtil.js +154 -0
  273. package/lib/renderer/lightsUtil.js.map +1 -0
  274. package/lib/renderer/materialChanges.d.ts +13 -0
  275. package/lib/renderer/materialChanges.js +59 -0
  276. package/lib/renderer/materialChanges.js.map +1 -0
  277. package/lib/renderer/materialComparison.generated.d.ts +5 -0
  278. package/lib/renderer/materialComparison.generated.js +655 -0
  279. package/lib/renderer/materialComparison.generated.js.map +1 -0
  280. package/lib/renderer/materialConstants.d.ts +6 -0
  281. package/lib/renderer/materialConstants.js +3 -0
  282. package/lib/renderer/materialConstants.js.map +1 -0
  283. package/lib/renderer/materialEmission.d.ts +9 -0
  284. package/lib/renderer/materialEmission.js +21 -0
  285. package/lib/renderer/materialEmission.js.map +1 -0
  286. package/lib/renderer/materialIndices.d.ts +7 -0
  287. package/lib/renderer/materialIndices.js +34 -0
  288. package/lib/renderer/materialIndices.js.map +1 -0
  289. package/lib/renderer/materialLayout.d.ts +102 -0
  290. package/lib/renderer/materialLayout.js +189 -0
  291. package/lib/renderer/materialLayout.js.map +1 -0
  292. package/lib/renderer/materialTextureSlots.d.ts +537 -0
  293. package/lib/renderer/materialTextureSlots.js +219 -0
  294. package/lib/renderer/materialTextureSlots.js.map +1 -0
  295. package/lib/renderer/mergeMeshesToGeometry.d.ts +8 -0
  296. package/lib/renderer/mergeMeshesToGeometry.js +236 -0
  297. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -0
  298. package/lib/renderer/meshInstances.d.ts +23 -0
  299. package/lib/renderer/meshInstances.js +66 -0
  300. package/lib/renderer/meshInstances.js.map +1 -0
  301. package/lib/renderer/meshMembership.d.ts +10 -0
  302. package/lib/renderer/meshMembership.js +72 -0
  303. package/lib/renderer/meshMembership.js.map +1 -0
  304. package/lib/renderer/oidnNetwork.d.ts +20 -0
  305. package/lib/renderer/oidnNetwork.js +123 -0
  306. package/lib/renderer/oidnNetwork.js.map +1 -0
  307. package/lib/renderer/openPbrEnergyLut.d.ts +32 -0
  308. package/lib/renderer/openPbrEnergyLut.js +965 -0
  309. package/lib/renderer/openPbrEnergyLut.js.map +1 -0
  310. package/lib/renderer/pathLimits.d.ts +4 -0
  311. package/lib/renderer/pathLimits.js +7 -0
  312. package/lib/renderer/pathLimits.js.map +1 -0
  313. package/lib/renderer/prepareMeshBVH.d.ts +110 -0
  314. package/lib/renderer/prepareMeshBVH.js +857 -0
  315. package/lib/renderer/prepareMeshBVH.js.map +1 -0
  316. package/lib/renderer/progressiveScheduler.d.ts +11 -0
  317. package/lib/renderer/progressiveScheduler.js +19 -0
  318. package/lib/renderer/progressiveScheduler.js.map +1 -0
  319. package/lib/renderer/renderPipeline.d.ts +57 -0
  320. package/lib/renderer/renderPipeline.js +49 -0
  321. package/lib/renderer/renderPipeline.js.map +1 -0
  322. package/lib/renderer/sampling.d.ts +10 -0
  323. package/lib/renderer/sampling.js +28 -0
  324. package/lib/renderer/sampling.js.map +1 -0
  325. package/lib/renderer/sceneChangeDetector.d.ts +29 -0
  326. package/lib/renderer/sceneChangeDetector.js +232 -0
  327. package/lib/renderer/sceneChangeDetector.js.map +1 -0
  328. package/lib/renderer/sceneLightChanges.d.ts +14 -0
  329. package/lib/renderer/sceneLightChanges.js +34 -0
  330. package/lib/renderer/sceneLightChanges.js.map +1 -0
  331. package/lib/renderer/scratchSampling.d.ts +3 -0
  332. package/lib/renderer/scratchSampling.js +39 -0
  333. package/lib/renderer/scratchSampling.js.map +1 -0
  334. package/lib/renderer/shader.d.ts +37 -0
  335. package/lib/renderer/shader.js +41 -0
  336. package/lib/renderer/shader.js.map +1 -0
  337. package/lib/renderer/staticBvhPreparation.d.ts +24 -0
  338. package/lib/renderer/staticBvhPreparation.js +116 -0
  339. package/lib/renderer/staticBvhPreparation.js.map +1 -0
  340. package/lib/renderer/textureRegion.d.ts +8 -0
  341. package/lib/renderer/textureRegion.js +9 -0
  342. package/lib/renderer/textureRegion.js.map +1 -0
  343. package/lib/renderer/texturesFromMaterials.d.ts +6 -0
  344. package/lib/renderer/texturesFromMaterials.js +37 -0
  345. package/lib/renderer/texturesFromMaterials.js.map +1 -0
  346. package/lib/renderer/util.d.ts +17 -0
  347. package/lib/renderer/util.js +56 -0
  348. package/lib/renderer/util.js.map +1 -0
  349. package/lib/renderer/webgl.d.ts +131 -0
  350. package/lib/renderer/webgl.js +586 -0
  351. package/lib/renderer/webgl.js.map +1 -0
  352. package/lib/renderer/webglShaders.d.ts +4 -0
  353. package/lib/renderer/webglShaders.js +41 -0
  354. package/lib/renderer/webglShaders.js.map +1 -0
  355. package/lib/renderer/wgsl/chunks/common.wgsl.d.ts +2 -0
  356. package/lib/renderer/wgsl/chunks/common.wgsl.js +23 -0
  357. package/lib/renderer/wgsl/chunks/common.wgsl.js.map +1 -0
  358. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +2 -0
  359. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +128 -0
  360. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -0
  361. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -0
  362. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +1441 -0
  363. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -0
  364. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +8 -0
  365. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +85 -0
  366. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -0
  367. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +7 -0
  368. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +315 -0
  369. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -0
  370. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.d.ts +3 -0
  371. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +1737 -0
  372. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -0
  373. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +4 -0
  374. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +352 -0
  375. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -0
  376. package/lib/renderer/wgsl/chunks/rand.wgsl.d.ts +2 -0
  377. package/lib/renderer/wgsl/chunks/rand.wgsl.js +25 -0
  378. package/lib/renderer/wgsl/chunks/rand.wgsl.js.map +1 -0
  379. package/lib/renderer/wgsl/chunks/random.wgsl.d.ts +1 -0
  380. package/lib/renderer/wgsl/chunks/random.wgsl.js +2 -0
  381. package/lib/renderer/wgsl/chunks/random.wgsl.js.map +1 -0
  382. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -0
  383. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +328 -0
  384. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -0
  385. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +2 -0
  386. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +400 -0
  387. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -0
  388. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +3 -0
  389. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +439 -0
  390. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -0
  391. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +2 -0
  392. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +40 -0
  393. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -0
  394. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +2 -0
  395. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +198 -0
  396. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -0
  397. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +8 -0
  398. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +16 -0
  399. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -0
  400. package/lib/renderer/wgsl/chunks/sobol.wgsl.d.ts +2 -0
  401. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +170 -0
  402. package/lib/renderer/wgsl/chunks/sobol.wgsl.js.map +1 -0
  403. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.d.ts +2 -0
  404. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +42 -0
  405. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -0
  406. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +5 -0
  407. package/lib/renderer/wgsl/compose.frag.wgsl.js +218 -0
  408. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -0
  409. package/lib/renderer/wgsl/customDenoise.wgsl.d.ts +4 -0
  410. package/lib/renderer/wgsl/customDenoise.wgsl.js +28 -0
  411. package/lib/renderer/wgsl/customDenoise.wgsl.js.map +1 -0
  412. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +3 -0
  413. package/lib/renderer/wgsl/depthQuery.wgsl.js +34 -0
  414. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -0
  415. package/lib/renderer/wgsl/offlineAdaptive.compute.d.ts +2 -0
  416. package/lib/renderer/wgsl/offlineAdaptive.compute.js +108 -0
  417. package/lib/renderer/wgsl/offlineAdaptive.compute.js.map +1 -0
  418. package/lib/renderer/wgsl/rayTrace.compute.d.ts +16 -0
  419. package/lib/renderer/wgsl/rayTrace.compute.js +923 -0
  420. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -0
  421. package/lib/scene/AmbientLight.d.ts +17 -0
  422. package/lib/scene/AmbientLight.js +15 -0
  423. package/lib/scene/AmbientLight.js.map +1 -0
  424. package/lib/scene/Camera.d.ts +78 -0
  425. package/lib/scene/Camera.js +111 -0
  426. package/lib/scene/Camera.js.map +1 -0
  427. package/lib/scene/DirectionalLight.d.ts +18 -0
  428. package/lib/scene/DirectionalLight.js +17 -0
  429. package/lib/scene/DirectionalLight.js.map +1 -0
  430. package/lib/scene/EnvironmentLight.d.ts +14 -0
  431. package/lib/scene/EnvironmentLight.js +14 -0
  432. package/lib/scene/EnvironmentLight.js.map +1 -0
  433. package/lib/scene/Geometry.d.ts +87 -0
  434. package/lib/scene/Geometry.js +108 -0
  435. package/lib/scene/Geometry.js.map +1 -0
  436. package/lib/scene/IESProfile.d.ts +19 -0
  437. package/lib/scene/IESProfile.js +165 -0
  438. package/lib/scene/IESProfile.js.map +1 -0
  439. package/lib/scene/InstancedMesh.d.ts +43 -0
  440. package/lib/scene/InstancedMesh.js +79 -0
  441. package/lib/scene/InstancedMesh.js.map +1 -0
  442. package/lib/scene/Mesh.d.ts +14 -0
  443. package/lib/scene/Mesh.js +17 -0
  444. package/lib/scene/Mesh.js.map +1 -0
  445. package/lib/scene/OpenPBRMaterial.d.ts +224 -0
  446. package/lib/scene/OpenPBRMaterial.js +240 -0
  447. package/lib/scene/OpenPBRMaterial.js.map +1 -0
  448. package/lib/scene/RectLight.d.ts +31 -0
  449. package/lib/scene/RectLight.js +26 -0
  450. package/lib/scene/RectLight.js.map +1 -0
  451. package/lib/scene/Scene.d.ts +55 -0
  452. package/lib/scene/Scene.js +2 -0
  453. package/lib/scene/Scene.js.map +1 -0
  454. package/lib/scene/SceneNode.d.ts +16 -0
  455. package/lib/scene/SceneNode.js +33 -0
  456. package/lib/scene/SceneNode.js.map +1 -0
  457. package/lib/scene/SphereLight.d.ts +22 -0
  458. package/lib/scene/SphereLight.js +20 -0
  459. package/lib/scene/SphereLight.js.map +1 -0
  460. package/lib/scene/SpotLight.d.ts +35 -0
  461. package/lib/scene/SpotLight.js +29 -0
  462. package/lib/scene/SpotLight.js.map +1 -0
  463. package/lib/scene/Texture.d.ts +38 -0
  464. package/lib/scene/Texture.js +37 -0
  465. package/lib/scene/Texture.js.map +1 -0
  466. package/lib/scene/anisotropyParameters.d.ts +1 -0
  467. package/lib/scene/anisotropyParameters.js +13 -0
  468. package/lib/scene/anisotropyParameters.js.map +1 -0
  469. package/lib/scene/geometryChanges.d.ts +5 -0
  470. package/lib/scene/geometryChanges.js +18 -0
  471. package/lib/scene/geometryChanges.js.map +1 -0
  472. package/lib/scene/materialTextureNames.d.ts +2 -0
  473. package/lib/scene/materialTextureNames.js +9 -0
  474. package/lib/scene/materialTextureNames.js.map +1 -0
  475. package/lib/scene/openPbrSchema.d.ts +400 -0
  476. package/lib/scene/openPbrSchema.js +149 -0
  477. package/lib/scene/openPbrSchema.js.map +1 -0
  478. package/lib/scene/thinFilmParameters.d.ts +4 -0
  479. package/lib/scene/thinFilmParameters.js +12 -0
  480. package/lib/scene/thinFilmParameters.js.map +1 -0
  481. package/lib/settings/display.d.ts +118 -0
  482. package/lib/settings/display.js +34 -0
  483. package/lib/settings/display.js.map +1 -0
  484. package/lib/settings/engine.d.ts +37 -0
  485. package/lib/settings/engine.js +26 -0
  486. package/lib/settings/engine.js.map +1 -0
  487. package/lib/settings/render.d.ts +178 -0
  488. package/lib/settings/render.js +36 -0
  489. package/lib/settings/render.js.map +1 -0
  490. package/lib/tinybvh/LICENSE +21 -0
  491. package/lib/tinybvh/TinyBvhBuilder.d.ts +17 -0
  492. package/lib/tinybvh/TinyBvhBuilder.js +211 -0
  493. package/lib/tinybvh/TinyBvhBuilder.js.map +1 -0
  494. package/lib/tinybvh/tinybvh.wasm +0 -0
  495. package/lib/types.d.ts +13 -0
  496. package/lib/types.js +2 -0
  497. package/lib/types.js.map +1 -0
  498. package/lib/util/canvas.d.ts +2 -0
  499. package/lib/util/canvas.js +13 -0
  500. package/lib/util/canvas.js.map +1 -0
  501. package/lib/util/commonGeometry.d.ts +15 -0
  502. package/lib/util/commonGeometry.js +240 -0
  503. package/lib/util/commonGeometry.js.map +1 -0
  504. package/lib/util/events.d.ts +7 -0
  505. package/lib/util/events.js +23 -0
  506. package/lib/util/events.js.map +1 -0
  507. package/lib/util/frame.d.ts +2 -0
  508. package/lib/util/frame.js +10 -0
  509. package/lib/util/frame.js.map +1 -0
  510. package/lib/util/fromTHREE.d.ts +100 -0
  511. package/lib/util/fromTHREE.js +1063 -0
  512. package/lib/util/fromTHREE.js.map +1 -0
  513. package/lib/util/geometry.d.ts +13 -0
  514. package/lib/util/geometry.js +292 -0
  515. package/lib/util/geometry.js.map +1 -0
  516. package/lib/util/loadRGBE.d.ts +7 -0
  517. package/lib/util/loadRGBE.js +168 -0
  518. package/lib/util/loadRGBE.js.map +1 -0
  519. package/lib/util/math.d.ts +8 -0
  520. package/lib/util/math.js +64 -0
  521. package/lib/util/math.js.map +1 -0
  522. package/lib/util/mesh.d.ts +7 -0
  523. package/lib/util/mesh.js +20 -0
  524. package/lib/util/mesh.js.map +1 -0
  525. package/lib/util/threeDeformation.d.ts +20 -0
  526. package/lib/util/threeDeformation.js +218 -0
  527. package/lib/util/threeDeformation.js.map +1 -0
  528. package/lib/version.d.ts +2 -0
  529. package/lib/version.js +3 -0
  530. package/lib/version.js.map +1 -0
  531. package/llms.txt +62 -0
  532. package/oidn/weights/LICENSE.txt +202 -0
  533. package/oidn/weights/README.md +43 -0
  534. package/oidn/weights/rt_hdr_alb_nrm.tza +0 -0
  535. package/oidn/weights/rt_hdr_alb_nrm_small.tza +0 -0
  536. package/package.json +124 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WGPURayTracePass.js","sourceRoot":"","sources":["../../src/renderer/WGPURayTracePass.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from './webgl.js';\nimport { MATERIAL_FLOAT_COUNT } from './materialLayout.js';\nimport { normalizeBounces } from './pathLimits.js';\nimport { MATERIAL_TEXTURE_DEFINES, materialTextureFeatures } from './materialTextureSlots.js';\nimport { updateMeshInstanceColors } from './prepareMeshBVH.js';\nimport { updateTLASInstanceColors } from './bvhAccel.js';\nimport { getMaterialHashKey } from '../scene/openPbrSchema.js';\nimport { sameInstanceMembership } from './meshInstances.js';\nimport InstancedMesh from '../scene/InstancedMesh.js';\nimport { dirtyMeshInstanceIndices } from './prepareMeshBVH.js';\nimport { cameraApertureRadius } from './cameraLens.js';\nimport { getRectLightUOrV, getRectLightArea, getSphereLightArea, getSpotLightArea, getSpotLightRadiance, getLightDirection, getRigidLightFrame, validateSceneLights } from './lightsUtil.js';\nimport { getGeometryBvh, setGeometryBvh } from './geometryBvh.js';\nimport { SHADOW_CATCHER_ACCUMULATION_BYTES } from './wgsl/chunks/shadowCatcherAccumulation.wgsl.js';\nimport { samplingPatternCode, zSobolLog2SPP, type SamplingPattern } from './sampling.js';\nimport { DEPTH_SAMPLE_COUNT, packDepthSampleArea, unpackDepthSamples, type DepthSampleArea } from './depthQuery.js';\nimport { MeshMembershipCache } from './meshMembership.js';\nimport { mergeRefitRanges } from './bvhAccel.js';\nimport { updatePreparedGeometries, canUpdateGeometries, geometryTopologyChanged, packVertexAttributes } from './geometryUpdates.js';\nimport { SceneEnvironmentCache, RectLightTextureTracker } from './sceneLightChanges.js';\nimport { MaterialChangeTracker, materialIsEmissive, type MaterialUpdateLevel } from './materialChanges.js';\nimport { WGPUShaderCache, retainedShaderCapacity } from './WGPUShaderCache.js';\nimport { WGPU_SCENE_FEATURE_BITS, wgpuSceneFeatureFlags } from './WGPUSceneFeatures.js';\nimport { TexturePixelSource as TexturePixelSource, mat4 } from '../math.js';\nimport Mesh from '../scene/Mesh.js';\nimport DirectionalLight from '../scene/DirectionalLight.js';\nimport SphereLight from '../scene/SphereLight.js';\nimport RectLight from '../scene/RectLight.js';\nimport SpotLight from '../scene/SpotLight.js';\nimport MaterialTable, {\n DEFAULT_MAX_TEXTURE_ARRAY_BYTES,\n materialUsesMedium\n} from './MaterialTable.js';\nimport { SceneBackground, SceneLight } from '../scene/Scene.js';\nimport { numberArraysEqual } from './util.js';\nimport Camera from '../scene/Camera.js';\nimport {\n generateBackgroundMapFromSceneBackground\n} from './envMapCreation.js';\nimport rayTraceCompute, { WORKGROUP_SIZE } from './wgsl/rayTrace.compute.js';\nimport Geometry from '../scene/Geometry.js';\nimport {\n CONSTANT_DIRECTIONAL_LIGHT,\n CONSTANT_RECT_LIGHT,\n CONSTANT_SPHERE_LIGHT,\n CONSTANT_SPOT_LIGHT\n} from './lightsUtil.js';\nimport {\n envMapDistribution,\n environmentMapSourcesMatch,\n type EnvironmentMapSource\n} from './envMapDistribution.js';\nimport {\n updateMeshInstances,\n updateMeshInstanceTransforms\n} from './prepareMeshBVH.js';\nimport {\n buildTLAS,\n concatBLASBuffers,\n FlattendBVH,\n getTraversalStackSizes,\n refitBLAS,\n refitTLAS\n} from './bvhAccel.js';\nimport { isTextureDataSource } from '../scene/Texture.js';\nimport OpenPBRMaterial, {\n resolveMaterialAlphaMode\n} from '../scene/OpenPBRMaterial.js';\nimport {\n DEFAULT_BEVEL_SAMPLES,\n DEFAULT_DIRECT_LIGHT_CANDIDATES,\n normalizeBevelSamples,\n normalizeDirectLightCandidates,\n type AlphaBlendStrategy,\n type ShaderCompilationDiagnostics\n} from './RenderingPipeline.js';\nimport {\n buildLightAliasTable,\n EmissiveTriangleCache,\n LightChoiceBuffer,\n EmissiveTriangle,\n estimateAnalyticLightPower,\n estimateEnvironmentPower,\n LIGHT_CHOICE_ANALYTIC,\n LIGHT_CHOICE_EMISSIVE_TRIANGLE,\n LIGHT_CHOICE_ENVIRONMENT,\n LIGHT_DOMAIN_ENVIRONMENT,\n LIGHT_DOMAIN_INFINITE,\n LIGHT_DOMAIN_LOCAL_AND_EMISSIVE,\n packEmissiveTriangles,\n packIESProfiles\n} from './lightSampling.js';\nimport {\n getOpenPbrEnergyLutData,\n OPENPBR_ENERGY_LUT_HEIGHT,\n OPENPBR_ENERGY_LUT_WIDTH\n} from './openPbrEnergyLut.js';\nimport { offlineAdaptiveCompute } from './wgsl/offlineAdaptive.compute.js';\nimport {\n normalizeOfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingOptions,\n type OfflineAdaptiveSamplingResult,\n type OfflineVarianceHistory\n} from './OfflineAdaptiveSampling.js';\ntype AnalyticLight = DirectionalLight | SphereLight | SpotLight | RectLight;\nconst F32 = Float32Array;\n\nconst FIXED_LIGHT_COUNT = 64;\nconst PIXELS_PER_LIGHT = 6;\n\nexport interface WGPURayTraceTimingCapture {\n querySet: GPUQuerySet;\n}\n\n/**\n * WebGPU errors are Web IDL objects and are not required to inherit from the\n * JavaScript Error class. In particular, GPUValidationError exposes a useful\n * `message` while String(error) may only return \"[object GPUValidationError]\".\n */\nexport function getWebGPUErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n if (error && typeof error === 'object' && 'message' in error) {\n const message = (error as { message?: unknown }).message;\n if (typeof message === 'string' && message.length > 0) return message;\n }\n return String(error);\n}\n\nfunction joinWebGPUErrors(...errors: unknown[]) {\n return [\n ...new Set(\n errors\n .filter((error) => error != null)\n .map(getWebGPUErrorMessage)\n .filter(Boolean)\n )\n ].join('\\n');\n}\n\nfunction shaderCompilationNow() {\n return typeof performance === 'undefined' ? Date.now() : performance.now();\n}\n\nfunction shaderSourceLineCount(source: string) {\n let lines = 1;\n for (let offset = source.indexOf('\\n'); offset >= 0;\n offset = source.indexOf('\\n', offset + 1)) {\n lines++;\n }\n return lines;\n}\n\n/** Fast diagnostic fingerprint; cache implementations use their own hashes. */\nexport function shaderSourceFingerprint(source: string) {\n let hash = 0x811c9dc5;\n for (let index = 0; index < source.length; index++) {\n hash = Math.imul(hash ^ source.charCodeAt(index), 0x01000193);\n }\n return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\nexport function isWebGPUPipelineSpecializationFailure(...errors: unknown[]) {\n return errors.some((error) =>\n /(?:compute )?library failed creation/i.test(\n getWebGPUErrorMessage(error)\n )\n );\n}\n\n/** CPU-side views over the `RayTraceUniform` WGSL struct. */\nexport function makeRayTraceUniform() {\n // Created from https://webgpufundamentals.org/webgpu/lessons/resources/wgsl-offset-computer.html\n const RayTraceUniformValues = new ArrayBuffer(176);\n const RayTraceUniformViews = {\n outputSize: new Float32Array(RayTraceUniformValues, 0, 2),\n sampleCount: new Float32Array(RayTraceUniformValues, 8, 1),\n scaleOffset: new Float32Array(RayTraceUniformValues, 16, 4),\n lightsCount: new Int32Array(RayTraceUniformValues, 32, 1),\n transmissiveOutputAlphaMin: new Float32Array(RayTraceUniformValues, 36, 1),\n jitter: new Float32Array(RayTraceUniformValues, 40, 2),\n backgroundColor: new Float32Array(RayTraceUniformValues, 48, 4),\n groundedBackgroundParams: new Float32Array(RayTraceUniformValues, 64, 4),\n groundedBackgroundCenter: new Float32Array(RayTraceUniformValues, 80, 2),\n blasOffset: new Int32Array(RayTraceUniformValues, 88, 1),\n isEmpty: new Int32Array(RayTraceUniformValues, 92, 1),\n bevel: new Int32Array(RayTraceUniformValues, 96, 1),\n dispersionWavelengths: new Int32Array(RayTraceUniformValues, 100, 1),\n envLightPmf: new Float32Array(RayTraceUniformValues, 104, 1),\n lightChoiceCount: new Int32Array(RayTraceUniformValues, 108, 1),\n lightWeightTotal: new Float32Array(RayTraceUniformValues, 112, 1),\n lightSamplingTextureWidth: new Int32Array(RayTraceUniformValues, 116, 1),\n lightChoiceTexelOffset: new Int32Array(RayTraceUniformValues, 120, 1),\n bounces: new Int32Array(RayTraceUniformValues, 124, 1),\n varianceMoments: new Int32Array(RayTraceUniformValues, 128, 1),\n adaptiveSampling: new Int32Array(RayTraceUniformValues, 132, 1),\n clamping: new Float32Array(RayTraceUniformValues, 136, 1),\n directLightCandidates: new Int32Array(RayTraceUniformValues, 140, 1),\n backgroundFlags: new Int32Array(RayTraceUniformValues, 144, 1),\n loopUnrollGuard: new Uint32Array(RayTraceUniformValues, 148, 1),\n sceneFeatureFlags: new Uint32Array(RayTraceUniformValues, 152, 1),\n sequenceSeed: new Uint32Array(RayTraceUniformValues, 156, 1),\n zSobolLogSPP: new Uint32Array(RayTraceUniformValues, 160, 1),\n sampleSequenceOffset: new Uint32Array(RayTraceUniformValues, 164, 1)\n };\n // Fixed runtime trip bounds discourage thin-film loop unrolling. Keep 4 for\n // 2 polarizations/substrates and 3 channels, independent of BSDF budgets.\n RayTraceUniformViews.loopUnrollGuard[0] = 4;\n RayTraceUniformViews.bevel[0] = 1;\n RayTraceUniformViews.dispersionWavelengths[0] = 3;\n return {\n buffer: RayTraceUniformValues,\n views: RayTraceUniformViews\n };\n}\nexport function packAnalyticsLightsToBuffer(\n lights: AnalyticLight[],\n texturesIndices: number[],\n selectionPmfs: number[],\n iesProfileTexelOffsets: ArrayLike<number> = []\n) {\n validateSceneLights(lights);\n const numLights = lights.length;\n if (numLights > FIXED_LIGHT_COUNT) {\n console.warn(\n `Too many lights, only the first ${FIXED_LIGHT_COUNT} lights will be used.`\n );\n }\n const data = new Float32Array(numLights * PIXELS_PER_LIGHT * 4);\n\n function packVec3(idx: number, v: number[] | Float32Array) {\n for (let i = 0; i < 3; i++) {\n data[i + idx * 4] = v[i];\n }\n }\n\n const lightTypeConstants = {\n DirectionalLight: CONSTANT_DIRECTIONAL_LIGHT,\n SphereLight: CONSTANT_SPHERE_LIGHT,\n RectLight: CONSTANT_RECT_LIGHT,\n SpotLight: CONSTANT_SPOT_LIGHT\n };\n\n for (let i = 0; i < numLights; i++) {\n const light = lights[i];\n const color = light.color;\n const intensity = light.intensity;\n const off = i * PIXELS_PER_LIGHT;\n packVec3(\n off,\n light.position\n );\n data[off * 4 + 3] = lightTypeConstants[light.type];\n // emission\n const emissionScale =\n light.type === 'SpotLight' ? getSpotLightRadiance(light) : intensity;\n packVec3(off + 1, [\n color[0] * emissionScale,\n color[1] * emissionScale,\n color[2] * emissionScale\n ]);\n if (light.type === 'RectLight') {\n data[(off + 1) * 4 + 3] = getRectLightArea(light);\n packVec3(off + 2, getRectLightUOrV(light, 0));\n data[(off + 2) * 4 + 3] = light.spread;\n packVec3(off + 3, getRectLightUOrV(light, 1));\n } else if (light.type === 'SphereLight') {\n data[(off + 1) * 4 + 3] = getSphereLightArea(light);\n data[(off + 2) * 4 + 3] = light.radius;\n } else if (light.type === 'SpotLight') {\n data[(off + 1) * 4 + 3] = getSpotLightArea(light);\n packVec3(off + 2, getLightDirection(light));\n data[(off + 2) * 4 + 3] = light.radius;\n packVec3(off + 3, [\n Math.cos((light.outerAngle * Math.PI) / 180),\n Math.min(1, Math.max(0, 1 - light.innerAngle / light.outerAngle)),\n 0\n ]);\n } else if (light.type === 'DirectionalLight') {\n packVec3(off + 2, getLightDirection(light));\n }\n data[(off + 3) * 4 + 3] = light.type === 'SpotLight'\n ? iesProfileTexelOffsets[i] ?? -1\n : texturesIndices[i];\n data[(off + 4) * 4] = selectionPmfs[i] ?? 0;\n packVec3(off + 5, getRigidLightFrame(light).x);\n }\n\n return data;\n}\n\nclass WGPURayTracePass {\n private _device!: GPUDevice;\n private _rayTracePipeline?: GPUComputePipeline;\n private _targetAspect = 1;\n private _width: number = 0;\n private _height: number = 0;\n\n private _meshes: Mesh[] = [];\n private _sceneEnvironment = new SceneEnvironmentCache();\n private _rectLightTextures = new RectLightTextureTracker();\n private _analyticLights: AnalyticLight[] = [];\n private _iesProfileTexelOffsets = new Int32Array(0);\n private _materialChanges = new MaterialChangeTracker();\n private _pendingMaterialUpdate?: { level: MaterialUpdateLevel; emission: boolean; emissiveMap: boolean; materials: Set<OpenPBRMaterial> };\n private _materialData: MaterialTable | undefined;\n private _maxTextureArrayBytes = DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n private _pendingGeometryUpdates = new Set<Geometry>();\n private _needsUpdateMeshData = true;\n private _needsUpdateMeshMembership = false;\n private _needsRefitTLAS = false;\n private _preparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _membershipCache = new MeshMembershipCache();\n private _pendingMembershipData?: ReturnType<typeof updateMeshInstances>;\n private _residentPreparedMeshData?: ReturnType<typeof updateMeshInstances>;\n private _tlas?: FlattendBVH;\n private _meshSnapshot: {\n mesh: Mesh;\n instanceCount: number;\n instanceVersion: number;\n instanceTransforms?: Float32Array;\n instanceColors?: Float32Array;\n colorVersion: number;\n geometry: Geometry;\n bvh?: FlattendBVH;\n materials: OpenPBRMaterial[];\n materialKeys: string[];\n geometryVersion: number;\n positionArray: Float32Array;\n positionItemSize: number;\n indexArray: Uint16Array | Uint32Array;\n indexItemSize: number;\n materialIndexArray?: Int32Array;\n materialIndexItemSize?: number;\n matrix: number[];\n }[] = [];\n private _snapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _residentSnapshotByMesh = new WeakMap<\n Mesh,\n (typeof this._meshSnapshot)[number]\n >();\n private _dirtyTransformMeshes = new Set<Mesh>();\n private _dirtyColorMeshes = new Set<Mesh>();\n private _geometriesNeedRefit = new Set<Geometry>();\n private _needsUpdateAnalyticLightsBuffer = true;\n\n private _activeTarget: object = {};\n private _targetOutputs = new Map<object, { buffers: GPUBuffer[]; bindGroup?: GPUBindGroup; pipeline?: GPUComputePipeline }>();\n\n releaseTarget(target: object) {\n const output = this._targetOutputs.get(target);\n if (!output) return;\n this._targetOutputs.delete(target);\n for (const buffer of output.buffers) buffer.destroy();\n if (this._activeTarget === target) { this._rayTraceBindGroups = undefined; this._needsUpdateBindGroups = true; }\n }\n\n getTargetMemoryBytes(target: object) {\n return this._targetOutputs.get(target)?.buffers.reduce((sum, buffer) => sum + buffer.size, 0) ?? 0;\n }\n\n useTarget(target: object) {\n this._activeTarget = target;\n const output = this._targetOutputs.get(target);\n [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] = output?.buffers ?? [];\n if (output?.bindGroup && output.pipeline === this._rayTracePipeline && this._rayTraceBindGroups) {\n this._rayTraceBindGroups[3] = output.bindGroup;\n } else {\n this._needsUpdateBindGroups = true;\n }\n }\n\n private _outColorBuffer!: GPUBuffer;\n private _outNormalBuffer!: GPUBuffer;\n private _outAlbedoBuffer!: GPUBuffer;\n private _outShadowCatcherBuffer!: GPUBuffer;\n\n private _uniforms!: {\n cameraUniform: GPUBuffer;\n rtUniform: GPUBuffer;\n analyticLights: GPUBuffer;\n };\n private _rtUniform = makeRayTraceUniform();\n private _mapInfoUniform!: GPUBuffer;\n private _attributeData?: Float32Array;\n private _attributeStride = 0;\n private _attributeOffsets: number[] = [];\n private _attrBuffers?: GPUBuffer;\n private _materialsBuffer?: GPUBuffer;\n private _lightSamplingTexture?: GPUTexture;\n private _lightSamplingTextureSize: [number, number] = [0, 0];\n private _lightDomainDiagnostics = {\n environment: { count: 0, weight: 0, pmf: 0 },\n infinite: { count: 0, weight: 0, pmf: 0 },\n localAndEmissive: { count: 0, weight: 0, pmf: 0 }\n };\n private _openPbrEnergyLut: GPUTexture;\n\n private _bvhBuffer?: GPUBuffer;\n private _instancesBuffer?: GPUBuffer;\n private _emissiveCache = new EmissiveTriangleCache();\n private _lightChoices = new LightChoiceBuffer();\n private _lightSamplingData?: Float32Array;\n private _lightSamplingScratch?: Float32Array;\n private _lightSamplingTriangleCount = -1;\n private _emissiveTriangles: EmissiveTriangle[] = [];\n private _analyticLightSelectionPmfs: number[] = [];\n private _needsUpdateLightSamplingData = true;\n\n private _adaptiveSamplingTexture: GPUTexture;\n private _adaptiveSamplingTextureSize: [number, number] = [1, 1];\n private _offlineAdaptivePipeline?: GPUComputePipeline;\n private _offlineAdaptiveHistory?: {\n history: OfflineVarianceHistory;\n varianceBuffer: GPUBuffer;\n };\n private _mapsSampler: GPUSampler;\n private _maps?: GPUTexture;\n\n private _envImageSource: EnvironmentMapSource | undefined;\n private _envTex?: GPUTexture;\n private _envDistributionTex?: GPUTexture;\n private _backgroundImageSource: TexturePixelSource | undefined;\n private _backgroundTex?: GPUTexture;\n\n private _rayTracePipelineLayout?: GPUPipelineLayout;\n private _rayTraceBindGroups?: GPUBindGroup[];\n private _blasLayoutMask = 1;\n private _compiledBlasLayoutMask = 0;\n private _compiledAnisotropyDirections = false;\n private _compiledCoatNormals = false;\n private _compiledHasAlpha = true;\n private _compiledSceneHasAlpha = true;\n private _alphaBlendStrategy: AlphaBlendStrategy = 'stochastic';\n private _constants: Record<string, boolean | number> = {\n USE_BACKGROUND: false,\n USE_BACKGROUND_MAP: false,\n USE_GROUNDED_BACKGROUND: false,\n SAMPLING_PATTERN: 0,\n BEVEL_SAMPLES: DEFAULT_BEVEL_SAMPLES\n };\n private _prevPipelineConstants: Record<string, boolean | number> = {};\n private _prevDefinesCode = '';\n\n private _hasTransmission = false;\n private _hasShadowCatcher = false;\n private _hasDisplacement = false;\n\n // User set params\n private _bounces = -1;\n private _bevelSamples = DEFAULT_BEVEL_SAMPLES;\n private _directLightCandidates = DEFAULT_DIRECT_LIGHT_CANDIDATES;\n private _clamping?: number;\n private _transmissiveAlphaMin = 1;\n\n private _viewProjInv = mat4.create();\n private _cameraWorld = mat4.create();\n private _apertureRadius = 0;\n private _focusDistance = 10;\n\n private _needsUpdateBindGroups = true;\n\n private _computeShaderModule?: GPUShaderModule;\n private _depthCompute?: GPUProgrammableStage;\n private _depthTracePipeline?: GPUComputePipeline;\n private _depthPipeline?: Promise<GPUComputePipeline>;\n private _shaderCache: WGPUShaderCache;\n private _debugBVHBuffer?: ArrayBuffer;\n\n private _isCompilingShader = false;\n private _shaderCompilationDiagnostics?: ShaderCompilationDiagnostics;\n private _pipelineError: unknown;\n // Fold scene invariants before backend inlining; runtime edits use uniforms.\n private _bakePipelineConstants = true;\n private _failedPipelineSignature?: string;\n\n\n\n constructor(device: GPUDevice) {\n this._device = device;\n this._shaderCache = new WGPUShaderCache(device);\n\n this._uniforms = {\n cameraUniform: this._uniformBuffer(36 * 4),\n rtUniform: this._uniformBuffer(this._rtUniform.buffer.byteLength),\n analyticLights: this._uniformBuffer(\n FIXED_LIGHT_COUNT * PIXELS_PER_LIGHT * 4 * 4\n )\n };\n this._mapInfoUniform = this._uniformBuffer(4 * 4);\n\n this._openPbrEnergyLut = device.createTexture({\n format: 'r32float',\n label: 'OpenPBR opaque dielectric energy compensation',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n size: {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n });\n device.queue.writeTexture(\n { texture: this._openPbrEnergyLut },\n getOpenPbrEnergyLutData(),\n { bytesPerRow: OPENPBR_ENERGY_LUT_WIDTH * Float32Array.BYTES_PER_ELEMENT },\n {\n width: OPENPBR_ENERGY_LUT_WIDTH,\n height: OPENPBR_ENERGY_LUT_HEIGHT\n }\n );\n\n this._mapsSampler = device.createSampler({\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n });\n\n this._setBackgroundMap(undefined);\n this._adaptiveSamplingTexture = device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets placeholder',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [1, 1]\n });\n device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n new Float32Array([Number.MAX_SAFE_INTEGER]),\n { bytesPerRow: 4 },\n [1, 1]\n );\n }\n\n getOutputBuffer() {\n return {\n color: this._outColorBuffer,\n normal: this._outNormalBuffer,\n albedo: this._outAlbedoBuffer,\n shadowCatcher: this._outShadowCatcherBuffer\n };\n }\n\n private _ensureAdaptiveSamplingTexture(width: number, height: number) {\n if (\n this._adaptiveSamplingTextureSize[0] === width &&\n this._adaptiveSamplingTextureSize[1] === height\n ) {\n return;\n }\n this._adaptiveSamplingTexture.destroy();\n this._adaptiveSamplingTexture = this._device.createTexture({\n format: 'r32float',\n label: 'Adaptive sample targets',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING,\n size: [width, height]\n });\n this._adaptiveSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n\n /**\n * Reduces pilot moments and expands final sample targets without transferring\n * full-resolution buffers through JavaScript. Only compact per-tile history\n * is read back for diagnostics and animation-frame reuse.\n */\n async prepareOfflineAdaptiveSampling(\n options: OfflineAdaptiveSamplingOptions\n ): Promise<OfflineAdaptiveSamplingResult | undefined> {\n const width = this._width;\n const height = this._height;\n if (!width || !height || !this._outColorBuffer || !this._outNormalBuffer) {\n return undefined;\n }\n\n const normalized = normalizeOfflineAdaptiveSamplingOptions(\n options,\n width,\n height\n );\n const {\n maxSamples,\n minSamples,\n tileSize,\n columns,\n rows,\n absoluteError,\n relativeError,\n confidence,\n previous\n } = normalized;\n const tileCount = columns * rows;\n const tileByteLength = tileCount * Float32Array.BYTES_PER_ELEMENT;\n const oldResidentHistory = this._offlineAdaptiveHistory;\n\n let ownsPreviousBuffer = false;\n let previousBuffer: GPUBuffer;\n if (previous && oldResidentHistory?.history === previous) {\n previousBuffer = oldResidentHistory.varianceBuffer;\n } else {\n previousBuffer = this._device.createBuffer({\n label: previous\n ? 'Offline previous tile variance upload'\n : 'Offline empty tile variance',\n size: previous ? tileByteLength : Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n });\n this._device.queue.writeBuffer(\n previousBuffer,\n 0,\n previous?.variance ?? new Float32Array(1)\n );\n ownsPreviousBuffer = true;\n }\n\n const uniformBuffer = this._device.createBuffer({\n label: 'Offline adaptive sampling parameters',\n size: 48,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n const uniformData = new ArrayBuffer(48);\n new Uint32Array(uniformData, 0, 8).set([\n width,\n height,\n tileSize,\n columns,\n rows,\n maxSamples,\n minSamples,\n previous ? 1 : 0\n ]);\n new Float32Array(uniformData, 32, 4).set([\n absoluteError,\n relativeError,\n confidence,\n 0\n ]);\n this._device.queue.writeBuffer(uniformBuffer, 0, uniformData);\n\n const meanBuffer = this._device.createBuffer({\n label: 'Offline tile mean luminance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const varianceBuffer = this._device.createBuffer({\n label: 'Offline current tile variance',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const targetBuffer = this._device.createBuffer({\n label: 'Offline tile sample targets',\n size: tileByteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n });\n const readbackBuffer = this._device.createBuffer({\n label: 'Offline compact tile history readback',\n size: tileByteLength * 3,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n });\n\n this._ensureAdaptiveSamplingTexture(width, height);\n this._offlineAdaptivePipeline ??=\n await this._device.createComputePipelineAsync({\n label: 'Offline adaptive sampling planner',\n layout: 'auto',\n compute: {\n module: this._device.createShaderModule({\n label: 'Offline adaptive sampling planner',\n code: offlineAdaptiveCompute\n }),\n entryPoint: 'main'\n }\n });\n\n const bindGroup = this._device.createBindGroup({\n label: 'Offline adaptive sampling planner',\n layout: this._offlineAdaptivePipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: { buffer: uniformBuffer } },\n { binding: 1, resource: { buffer: this._outColorBuffer } },\n { binding: 2, resource: { buffer: this._outNormalBuffer } },\n { binding: 3, resource: { buffer: previousBuffer } },\n { binding: 4, resource: { buffer: meanBuffer } },\n { binding: 5, resource: { buffer: varianceBuffer } },\n { binding: 6, resource: { buffer: targetBuffer } },\n {\n binding: 7,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ]\n });\n const encoder = this._device.createCommandEncoder({\n label: 'Offline adaptive sampling planner'\n });\n const pass = encoder.beginComputePass({\n label: 'Offline adaptive sampling planner'\n });\n pass.setPipeline(this._offlineAdaptivePipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(Math.ceil(tileCount / 64));\n pass.end();\n encoder.copyBufferToBuffer(\n meanBuffer,\n 0,\n readbackBuffer,\n 0,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n varianceBuffer,\n 0,\n readbackBuffer,\n tileByteLength,\n tileByteLength\n );\n encoder.copyBufferToBuffer(\n targetBuffer,\n 0,\n readbackBuffer,\n tileByteLength * 2,\n tileByteLength\n );\n this._device.queue.submit([encoder.finish()]);\n\n let succeeded = false;\n try {\n await readbackBuffer.mapAsync(GPUMapMode.READ);\n const mapped = readbackBuffer.getMappedRange();\n const meanLuminance = new Float32Array(mapped, 0, tileCount).slice();\n const variance = new Float32Array(\n mapped,\n tileByteLength,\n tileCount\n ).slice();\n const sampleTargets = new Uint32Array(\n mapped,\n tileByteLength * 2,\n tileCount\n ).slice();\n const history: OfflineVarianceHistory = {\n width,\n height,\n tileSize,\n columns,\n rows,\n meanLuminance,\n variance,\n sampleTargets\n };\n\n let maximumTarget = minSamples;\n let totalTargetSamples = 0;\n for (let tile = 0; tile < tileCount; tile++) {\n const target = sampleTargets[tile];\n maximumTarget = Math.max(maximumTarget, target);\n const tileX = tile % columns;\n const tileY = Math.floor(tile / columns);\n const tileWidth = Math.min(tileSize, width - tileX * tileSize);\n const tileHeight = Math.min(tileSize, height - tileY * tileSize);\n totalTargetSamples += target * tileWidth * tileHeight;\n }\n\n this._offlineAdaptiveHistory = { history, varianceBuffer };\n this._rtUniform.views.adaptiveSampling[0] = 1;\n succeeded = true;\n if (oldResidentHistory?.varianceBuffer !== varianceBuffer) {\n oldResidentHistory?.varianceBuffer.destroy();\n }\n return {\n maximumTarget,\n averageTarget: totalTargetSamples / (width * height),\n history\n };\n } finally {\n if (readbackBuffer.mapState === 'mapped') readbackBuffer.unmap();\n readbackBuffer.destroy();\n meanBuffer.destroy();\n targetBuffer.destroy();\n uniformBuffer.destroy();\n if (ownsPreviousBuffer) previousBuffer.destroy();\n if (!succeeded) varianceBuffer.destroy();\n }\n }\n\n private _createPipelineLayout() {\n //Bind group layouts\n const commonBufferLayoutEntries = Array.from(\n { length: 4 },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'read-only-storage' as const\n }\n }) satisfies GPUBindGroupLayoutEntry\n );\n const buffersBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Buffers',\n entries: commonBufferLayoutEntries\n });\n const textureLayoutEntries: GPUBindGroupLayoutEntry[] = [\n {\n binding: 0,\n visibility: GPUShaderStage.COMPUTE,\n sampler: {}\n },\n {\n binding: 1,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d-array'\n }\n },\n // Map size\n {\n binding: 3,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'uniform'\n }\n },\n // Env map\n {\n binding: 4,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n // Env map distribution\n {\n binding: 5,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n // Background map\n {\n binding: 6,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 8,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 9,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n },\n {\n binding: 10,\n visibility: GPUShaderStage.COMPUTE,\n texture: {\n viewDimension: '2d',\n sampleType: 'unfilterable-float'\n }\n }\n ];\n const texturesBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Textures', entries: textureLayoutEntries\n });\n const uniformsBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Uniforms',\n entries: [\n ...Array.from(\n { length: Object.keys(this._uniforms).length },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: {\n type: 'uniform' as const\n }\n }) satisfies GPUBindGroupLayoutEntry\n ),\n ...([])\n ]\n });\n const rayTraceOutBuffersBindGroupLayout = this._shaderCache.createBindGroupLayout({\n label: 'Ray Trace Out Buffers',\n entries: [\n ...Array.from(\n { length: 4 },\n (_, i) => ({\n binding: i,\n visibility: GPUShaderStage.COMPUTE,\n buffer: { type: 'storage' as const }\n })\n ),\n ...([])\n ]\n });\n this._rayTracePipelineLayout = this._shaderCache.createPipelineLayout({\n label: 'Ray Trace Pipeline Layout',\n bindGroupLayouts: [\n buffersBindGroupLayout,\n texturesBindGroupLayout,\n uniformsBindGroupLayout,\n rayTraceOutBuffersBindGroupLayout\n ]\n });\n }\n\n private _updateGPUBuffer(\n label: string,\n gpuBuffer: GPUBuffer | undefined,\n data: Float32Array | Uint32Array,\n minSize = 200\n ) {\n const device = this._device;\n const size = Math.max(data.byteLength, minSize);\n\n if (gpuBuffer == null || gpuBuffer.size < size) {\n this._needsUpdateBindGroups = true;\n if (gpuBuffer) {\n gpuBuffer.destroy();\n }\n gpuBuffer = device.createBuffer({\n label,\n size,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._device.queue.writeBuffer(gpuBuffer, 0, data.buffer);\n return gpuBuffer;\n }\n\n private _uniformBuffer(size: number) {\n this._needsUpdateBindGroups = true;\n return this._device.createBuffer({\n size,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n });\n }\n\n async updatePipeline() {\n if (this._isCompilingShader) {\n return;\n }\n // Set this before any synchronous preparation. updatePipeline is called\n // without awaiting it, so a preparation error must not let createPass run\n // with an undefined pipeline in the same frame.\n this._isCompilingShader = true;\n let attemptedPipelineSignature: string | undefined;\n let compilationStartedAt: number | undefined;\n let pipelineCompilationStartedAt: number | undefined;\n try {\n if (this._needsUpdateMeshData) {\n this._updateMeshData();\n } else if (this._needsUpdateMeshMembership) {\n this._updateMeshMembership();\n }\n if (this._pendingGeometryUpdates.size) this._updateGeometryData();\n if (this._needsRefitTLAS) this._refitMeshInstances();\n if (this._dirtyColorMeshes.size) this._updateMeshColors();\n if (this._pendingMaterialUpdate) this._updateMaterialData();\n if (this._needsUpdateLightSamplingData) {\n this._updateLightSamplingData();\n }\n\n const device = this._device;\n const constants = this._constants;\n this._rtUniform.views.sceneFeatureFlags[0] = wgpuSceneFeatureFlags(constants);\n const hasAlpha = Boolean(constants.HAS_ALPHA_BLEND) &&\n this._alphaBlendStrategy === 'deterministic-source-over';\n const hasSceneAlpha = Boolean(constants.HAS_ALPHA);\n const pipelineSignature = JSON.stringify({\n constants: Object.keys(constants)\n .sort()\n .map((key) => [key, constants[key]]),\n hasDisplacement: this._hasDisplacement,\n hasAlpha,\n hasSceneAlpha,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask: this._blasLayoutMask,\n bakePipelineConstants: this._bakePipelineConstants\n });\n attemptedPipelineSignature = pipelineSignature;\n if (pipelineSignature === this._failedPipelineSignature) {\n return;\n }\n this._pipelineError = undefined;\n // TODO hardcoded defines that will be replaced in the code.\n const definesKeys = [\n 'NUM_MAPS',\n 'TLAS_STACK_SIZE',\n 'BLAS_STACK_SIZE',\n 'NUM_UNIFORM_LIGHTS'\n ];\n // Scene feature flags and background selection are runtime uniforms so\n // interactive edits do not recompile the path tracer.\n const constantsNotUsed = [\n ...Object.keys(WGPU_SCENE_FEATURE_BITS),\n 'USE_BACKGROUND',\n 'USE_BACKGROUND_MAP',\n 'USE_GROUNDED_BACKGROUND',\n ...MATERIAL_TEXTURE_DEFINES,\n 'USE_ANISOTROPY_DIRECTIONS',\n 'USE_COAT_NORMAL_FRAMES',\n 'COLOR_OFF',\n 'USE_VERTEX_COLOR',\n 'HAS_ALPHA_BLEND',\n 'HAS_ALPHA_MASK'\n ];\n const defines = definesKeys.reduce(\n (obj, key) => {\n obj[key] = constants[key] as number;\n return obj;\n },\n {} as Record<string, number>\n );\n const pipelineConstantsKeys = Object.keys(constants)\n .sort()\n .filter(\n (key) =>\n !definesKeys.includes(key) && !constantsNotUsed.includes(key)\n );\n const defineCode = definesKeys\n .map((key) => `const ${key} = ${defines[key]};`)\n .join('\\n');\n const previousPipelineConstantsKeys = Object.keys(\n this._prevPipelineConstants\n )\n .filter(\n (key) =>\n !definesKeys.includes(key) && !constantsNotUsed.includes(key)\n )\n .sort();\n const needsCreateShaderModule =\n !this._rayTracePipelineLayout ||\n !this._computeShaderModule ||\n pipelineConstantsKeys.join(',') !==\n previousPipelineConstantsKeys.join(',') ||\n defineCode !== this._prevDefinesCode ||\n hasAlpha !== this._compiledHasAlpha ||\n hasSceneAlpha !== this._compiledSceneHasAlpha ||\n Boolean(constants.USE_ANISOTROPY_DIRECTIONS) !== this._compiledAnisotropyDirections ||\n Boolean(constants.USE_COAT_NORMAL_FRAMES) !== this._compiledCoatNormals ||\n this._blasLayoutMask !== this._compiledBlasLayoutMask ||\n (this._bakePipelineConstants &&\n pipelineConstantsKeys.some(\n (key) => constants[key] !== this._prevPipelineConstants[key]\n ));\n\n const needsCreatePipeline =\n needsCreateShaderModule ||\n pipelineConstantsKeys.some(\n (key) => constants[key] !== this._prevPipelineConstants[key]\n );\n\n compilationStartedAt = needsCreatePipeline\n ? shaderCompilationNow()\n : undefined;\n let sourceGenerationTimeMs = 0;\n let moduleCreationTimeMs = 0;\n let sourceBytes = this._shaderCompilationDiagnostics?.sourceBytes ?? 0;\n let sourceLines = this._shaderCompilationDiagnostics?.sourceLines ?? 0;\n let sourceFingerprint =\n this._shaderCompilationDiagnostics?.modules[0]?.sourceFingerprint ?? '';\n if (needsCreateShaderModule) {\n const sourceGenerationStartedAt = shaderCompilationNow();\n const constantsCode = pipelineConstantsKeys\n .map(\n (key) =>\n `${this._bakePipelineConstants ? 'const' : 'override'} ${key} = ${constants[key].toString()};`\n )\n .join('\\n');\n const rayTraceShaderCode = /* wgsl */ `\n${defineCode}\n${constantsCode}\n${rayTraceCompute({\n hasDisplacement: this._hasDisplacement,\n hasAlpha,\n hasSceneAlpha,\n hasAnisotropyDirections: Boolean(constants.USE_ANISOTROPY_DIRECTIONS),\n hasCoatNormals: Boolean(constants.USE_COAT_NORMAL_FRAMES),\n blasLayoutMask: this._blasLayoutMask\n})}`;\n\n sourceBytes = rayTraceShaderCode.length;\n sourceLines = shaderSourceLineCount(rayTraceShaderCode);\n sourceFingerprint = shaderSourceFingerprint(rayTraceShaderCode);\n sourceGenerationTimeMs =\n shaderCompilationNow() - sourceGenerationStartedAt;\n const moduleCreationStartedAt = shaderCompilationNow();\n this._computeShaderModule = this._shaderCache.createShaderModule({\n label: 'Ray Trace',\n code: rayTraceShaderCode\n });\n moduleCreationTimeMs =\n shaderCompilationNow() - moduleCreationStartedAt;\n this._compiledHasAlpha = hasAlpha;\n this._compiledSceneHasAlpha = hasSceneAlpha;\n this._compiledAnisotropyDirections = Boolean(constants.USE_ANISOTROPY_DIRECTIONS);\n this._compiledCoatNormals = Boolean(constants.USE_COAT_NORMAL_FRAMES);\n this._compiledBlasLayoutMask = this._blasLayoutMask;\n }\n\n if (needsCreatePipeline) {\n if (!this._rayTracePipelineLayout) {\n device.pushErrorScope('validation');\n let layoutScopeOpen = true;\n try {\n this._createPipelineLayout();\n const layoutError = await device.popErrorScope();\n layoutScopeOpen = false;\n if (layoutError) throw layoutError;\n } catch (error) {\n const scopedError = layoutScopeOpen\n ? await device.popErrorScope().catch(() => null)\n : null;\n this._rayTracePipelineLayout = undefined;\n const detail = joinWebGPUErrors(error, scopedError);\n throw new Error(\n `Unable to create the ray tracing pipeline layout: ${detail}`\n );\n }\n }\n\n // NOTE must before creating pipeline.\n // Because createComputePipelineAsync is async.\n // The constants may be changed after the pipeline is created(in setMesh).\n this._prevPipelineConstants = { ...this._constants };\n this._prevDefinesCode = defineCode;\n this._needsUpdateBindGroups = true;\n\n device.pushErrorScope('validation');\n let pipelineScopeOpen = true;\n try {\n const pipelineConstants = !this._bakePipelineConstants\n ? pipelineConstantsKeys.reduce(\n (obj, key) => {\n obj[key] = +this._constants[key];\n return obj;\n },\n {} as Record<string, number>\n )\n : undefined;\n const diagnostic: ShaderCompilationDiagnostics['pipelines'][number] = {\n label: 'Ray Trace',\n entryPoint: 'main',\n firstFrameRequired: true,\n status: 'compiling'\n };\n pipelineCompilationStartedAt = shaderCompilationNow();\n diagnostic.startedAtMs = 0;\n diagnostic.concurrentCompilationCount = 1;\n this._shaderCompilationDiagnostics = {\n status: 'compiling',\n sourceBytes,\n sourceLines,\n pipelineCount: 1,\n completedPipelineCount: 0,\n sourceGenerationTimeMs,\n moduleCreationTimeMs,\n modules: [\n {\n label: 'Ray Trace',\n sourceBytes,\n sourceLines,\n sourceFingerprint\n }\n ],\n pipelines: [{ ...diagnostic }],\n maximumConcurrentPipelineCount: 1,\n peakConcurrentPipelineCount: 1\n };\n let rayTracePipeline: GPUComputePipeline;\n try {\n rayTracePipeline = await this._shaderCache.createComputePipelineAsync({\n label: 'Ray Trace',\n layout: this._rayTracePipelineLayout!,\n compute: {\n module: this._computeShaderModule!,\n entryPoint: 'main',\n constants: pipelineConstants\n }\n });\n diagnostic.status = 'ready';\n } catch (error) {\n diagnostic.status = 'failed';\n diagnostic.error = getWebGPUErrorMessage(error);\n // Pipeline creation already reports WGSL failures. Pull the much\n // heavier module diagnostics only on that failure path so normal\n // startup does not schedule a second full-module inspection.\n const info = await this._computeShaderModule!\n .getCompilationInfo()\n .catch(() => undefined);\n const shaderErrors = (info?.messages ?? [])\n .filter((message) => message.type === 'error');\n if (shaderErrors.length) {\n throw new Error(\n shaderErrors\n .map((message) =>\n `Ray Trace WGSL ${message.lineNum}:${message.linePos} ${message.message}`\n )\n .join('\\n')\n );\n }\n throw error;\n } finally {\n diagnostic.endedAtMs =\n shaderCompilationNow() - pipelineCompilationStartedAt;\n diagnostic.durationMs = diagnostic.endedAtMs;\n }\n this._rayTracePipeline = rayTracePipeline;\n this._depthCompute = { module: this._computeShaderModule!, constants: pipelineConstants };\n const pipelineError = await device.popErrorScope();\n pipelineScopeOpen = false;\n if (pipelineError) throw pipelineError;\n const compilationCompletedAt = shaderCompilationNow();\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics!,\n status: 'ready',\n completedPipelineCount: 1,\n pipelines: [{ ...diagnostic }],\n pipelineCompilationTimeMs:\n compilationCompletedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationCompletedAt - compilationStartedAt!\n };\n } catch (error) {\n const scopedError = pipelineScopeOpen\n ? await device.popErrorScope().catch(() => null)\n : null;\n const detail = joinWebGPUErrors(error, scopedError);\n if (\n !this._bakePipelineConstants &&\n isWebGPUPipelineSpecializationFailure(error, scopedError)\n ) {\n const failedAt = shaderCompilationNow();\n if (this._shaderCompilationDiagnostics?.status === 'compiling') {\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics,\n status: 'failed',\n pipelineCompilationTimeMs: pipelineCompilationStartedAt == null\n ? undefined\n : failedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationStartedAt == null\n ? undefined\n : failedAt - compilationStartedAt,\n error: detail\n };\n }\n // WebKit can accept a large WGSL module but fail while translating\n // its specialization-constant variant to Metal. Baking the values\n // into WGSL lets its front end eliminate disabled feature branches\n // before creating the Metal library.\n this._bakePipelineConstants = true;\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n this._computeShaderModule = undefined;\n this._prevPipelineConstants = {};\n console.warn(\n 'WebGPU pipeline specialization failed; retrying with constants baked into WGSL.'\n );\n return;\n }\n throw new Error(detail);\n }\n }\n\n // TODO rebind when lights, materials, bvh changed.\n if (this._needsUpdateBindGroups) {\n this._needsUpdateBindGroups = false;\n\n this._updateBindGroups();\n }\n this._failedPipelineSignature = undefined;\n } catch (error) {\n this._pipelineError = error;\n const failedAt = shaderCompilationNow();\n if (this._shaderCompilationDiagnostics?.status === 'compiling') {\n this._shaderCompilationDiagnostics = {\n ...this._shaderCompilationDiagnostics,\n status: 'failed',\n pipelineCompilationTimeMs: pipelineCompilationStartedAt == null\n ? undefined\n : failedAt - pipelineCompilationStartedAt,\n totalTimeMs: compilationStartedAt == null\n ? undefined\n : failedAt - compilationStartedAt,\n error: getWebGPUErrorMessage(error)\n };\n }\n this._failedPipelineSignature = attemptedPipelineSignature;\n // Do not allow the render loop to submit the previous/partial state.\n // The failed signature prevents retrying the same shader every frame;\n // changing a pipeline-affecting setting permits a new attempt.\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n this._prevPipelineConstants = {};\n this._needsUpdateBindGroups = true;\n console.error('Failed to update WebGPU ray tracing pipeline.', error);\n } finally {\n this._isCompilingShader = false;\n }\n }\n\n async readDepthSamples(area: DepthSampleArea, aspect?: number): Promise<Float32Array | undefined> {\n const tracePipeline = this._rayTracePipeline;\n const groups = this._rayTraceBindGroups;\n if (!tracePipeline || !groups || !this._depthCompute || this._isCompilingShader) return;\n const packed = packDepthSampleArea(area, aspect ?? this._width / this._height);\n if (this._depthTracePipeline !== tracePipeline || !this._depthPipeline) {\n const outputLayout = this._shaderCache.createBindGroupLayout({\n label: 'Depth query output',\n entries: [\n { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } },\n { binding: 4, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }\n ]\n });\n const layout = this._shaderCache.createPipelineLayout({\n label: 'Depth query layout',\n bindGroupLayouts: [0, 1, 2].map(i => tracePipeline.getBindGroupLayout(i)).concat(outputLayout)\n });\n this._depthTracePipeline = tracePipeline;\n this._depthPipeline = this._shaderCache.createComputePipelineAsync({\n label: 'Depth query', layout,\n compute: { ...this._depthCompute, entryPoint: 'depthQuery',\n constants: { ...this._depthCompute.constants, DEPTH_QUERY_MODE: 1 } }\n });\n }\n const pipeline = await this._depthPipeline;\n // Scene uploads can replace the buffers while the small query compiles.\n if (tracePipeline !== this._rayTracePipeline || groups !== this._rayTraceBindGroups) return;\n const device = this._device;\n const bytes = DEPTH_SAMPLE_COUNT * 16;\n const output = device.createBuffer({ label: 'Depth samples', size: bytes,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC });\n const readback = device.createBuffer({ label: 'Depth readback', size: bytes,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST });\n const params = device.createBuffer({ label: 'Depth area', size: 16,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });\n try {\n device.queue.writeBuffer(params, 0, packed);\n const outputGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(3), entries: [\n { binding: 0, resource: { buffer: output } },\n { binding: 4, resource: { buffer: params } }\n ] });\n const encoder = device.createCommandEncoder({ label: 'Depth query' });\n const pass = encoder.beginComputePass();\n pass.setPipeline(pipeline);\n for (let i = 0; i < 3; i++) pass.setBindGroup(i, groups[i]);\n pass.setBindGroup(3, outputGroup);\n pass.dispatchWorkgroups(1);\n pass.end();\n encoder.copyBufferToBuffer(output, 0, readback, 0, bytes);\n device.queue.submit([encoder.finish()]);\n await readback.mapAsync(GPUMapMode.READ);\n return unpackDepthSamples(new Float32Array(readback.getMappedRange()));\n } finally {\n if (readback.mapState === 'mapped') readback.unmap();\n readback.destroy(); output.destroy(); params.destroy();\n }\n }\n\n isCompilingShader() {\n return this._isCompilingShader;\n }\n\n isPipelineReady() {\n return (\n (!!this._rayTracePipeline) &&\n !!this._rayTraceBindGroups\n );\n }\n\n getPipelineError() {\n return this._pipelineError;\n }\n\n private _updateBindGroups() {\n const { _device } = this;\n const bindGroupPipeline = this._rayTracePipeline;\n if (!bindGroupPipeline) {\n throw new Error('WebGPU ray tracing bind-group pipeline is not ready.');\n }\n if (!this._bvhBuffer || !this._instancesBuffer) {\n throw new Error('WebGPU BVH buffers are not ready.');\n }\n const bufferBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(0),\n entries: [\n this._bvhBuffer,\n this._instancesBuffer,\n this._attrBuffers,\n this._materialsBuffer\n ].map(\n (buffer, i) =>\n ({\n binding: i,\n resource: {\n buffer: buffer!\n }\n }) satisfies GPUBindGroupEntry\n )\n });\n const texturesBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(1),\n entries: [\n {\n binding: 0,\n resource: this._mapsSampler\n },\n {\n binding: 1,\n resource: this._maps!.createView()\n },\n {\n binding: 3,\n resource: {\n buffer: this._mapInfoUniform\n }\n },\n { binding: 4, resource: this._envTex!.createView() },\n { binding: 5, resource: this._envDistributionTex!.createView() },\n { binding: 6, resource: this._backgroundTex!.createView() },\n { binding: 8, resource: this._lightSamplingTexture!.createView() },\n { binding: 9, resource: this._openPbrEnergyLut.createView() },\n {\n binding: 10,\n resource: this._adaptiveSamplingTexture.createView()\n }\n ]\n });\n const uniformBindGroup = _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(2),\n entries: Object.keys(this._uniforms).map(\n (key, i) =>\n ({\n binding: i,\n resource: {\n buffer: this._uniforms[key as keyof typeof this._uniforms]\n }\n }) satisfies GPUBindGroupEntry\n )\n });\n const target = this._targetOutputs.get(this._activeTarget)!;\n const outputBindGroup = target.pipeline === bindGroupPipeline && target.bindGroup || _device.createBindGroup({\n layout: bindGroupPipeline.getBindGroupLayout(3),\n entries: [\n this._outColorBuffer,\n this._outNormalBuffer,\n this._outAlbedoBuffer,\n this._outShadowCatcherBuffer\n ].map(\n (buffer, i) => ({\n binding: i,\n resource: { buffer }\n }) satisfies GPUBindGroupEntry\n )\n });\n\n target.bindGroup = outputBindGroup;\n target.pipeline = bindGroupPipeline;\n this._rayTraceBindGroups = [\n bufferBindGroup,\n texturesBindGroup,\n uniformBindGroup,\n outputBindGroup\n ];\n }\n\n\n\n\n createPass(\n encoder: GPUCommandEncoder,\n clear: boolean,\n tiles: [number, number],\n timing?: WGPURayTraceTimingCapture\n ) {\n // Update light buffer.\n if (this._needsUpdateAnalyticLightsBuffer) {\n const lightsBufferData = packAnalyticsLightsToBuffer(\n this._analyticLights,\n this._materialData!.getLightTexturesIndices(),\n this._analyticLightSelectionPmfs,\n this._iesProfileTexelOffsets\n );\n\n this._device.queue.writeBuffer(\n this._uniforms.analyticLights,\n 0,\n lightsBufferData.buffer,\n 0,\n lightsBufferData.buffer.byteLength\n );\n this._needsUpdateAnalyticLightsBuffer = false;\n }\n\n const dispatchWidth = Math.ceil(this._width / tiles[0]);\n const dispatchHeight = Math.ceil(this._height / tiles[1]);\n\n // Update other uniforms\n this._device.queue.writeBuffer(\n this._uniforms.rtUniform,\n 0,\n this._rtUniform.buffer\n );\n\n if (clear) {\n encoder.clearBuffer(this._outColorBuffer);\n encoder.clearBuffer(this._outNormalBuffer);\n encoder.clearBuffer(this._outAlbedoBuffer);\n encoder.clearBuffer(this._outShadowCatcherBuffer);\n }\n\n const descriptor: GPUComputePassDescriptor = {};\n const querySet = timing?.querySet;\n if (querySet) {\n descriptor.timestampWrites = {\n querySet,\n beginningOfPassWriteIndex: 0,\n endOfPassWriteIndex: 1\n };\n }\n\n const pass = encoder.beginComputePass(descriptor);\n if (!this._rayTracePipeline || !this._rayTraceBindGroups) {\n throw new Error('WebGPU ray tracing pass was submitted before it was ready.');\n }\n pass.setPipeline(this._rayTracePipeline);\n this._rayTraceBindGroups!.forEach((bindGroup, idx) => {\n pass.setBindGroup(idx, bindGroup);\n });\n\n pass.dispatchWorkgroups(\n Math.ceil(dispatchWidth / WORKGROUP_SIZE),\n Math.ceil(dispatchHeight / WORKGROUP_SIZE),\n 1\n );\n pass.end();\n }\n\n async getDebugBVHData() {\n if (!this._debugBVHBuffer) {\n throw new Error(\n `software-bvh exposes no CPU-readable BVH debug buffer`\n );\n }\n return {\n buffer: this._debugBVHBuffer\n };\n }\n\n getDiagnostics() {\n return {\n textureAtlas: this._materialData?.textureAtlasStats,\n shaderCompilation: this._shaderCompilationDiagnostics,\n lightSampling: {\n emissiveTriangles: this._emissiveTriangles.length,\n activeChoices: this._rtUniform.views.lightChoiceCount[0],\n totalWeight: this._rtUniform.views.lightWeightTotal[0],\n domains: this._lightDomainDiagnostics\n },\n bvh: {\n tlasTraversalStackSize:\n this._constants.TLAS_STACK_SIZE as number | undefined,\n blasTraversalStackSize:\n this._constants.BLAS_STACK_SIZE as number | undefined\n }\n };\n }\n\n setAlphaBlendStrategy(strategy: AlphaBlendStrategy) {\n const next = strategy === 'deterministic-source-over'\n ? strategy\n : 'stochastic';\n if (next === this._alphaBlendStrategy) return false;\n this._alphaBlendStrategy = next;\n if (this._constants.HAS_ALPHA_BLEND) {\n this._computeShaderModule = undefined;\n this._rayTracePipeline = undefined;\n this._rayTracePipelineLayout = undefined;\n this._rayTraceBindGroups = undefined;\n this._prevPipelineConstants = {};\n this._failedPipelineSignature = undefined;\n this._needsUpdateBindGroups = true;\n }\n return true;\n }\n\n hasDepthOfField() {\n return this._apertureRadius > 0;\n }\n\n\n setBounce(bounce: number) {\n const next = normalizeBounces(bounce);\n const changed = this._bounces !== next;\n this._bounces = next;\n this._rtUniform.views.bounces[0] = next;\n return changed;\n }\n\n setDirectLightCandidates(candidates: number) {\n const next = normalizeDirectLightCandidates(candidates);\n const changed = this._directLightCandidates !== next;\n this._directLightCandidates = next;\n this._rtUniform.views.directLightCandidates[0] = next;\n return changed;\n }\n\n setClamping(clamping?: number) {\n const changed = this._clamping !== clamping;\n this._rtUniform.views.clamping[0] = clamping ?? 0;\n this._clamping = clamping;\n return changed;\n }\n\n setBevelSamples(samples: number) {\n const next = normalizeBevelSamples(samples);\n const changed = this._bevelSamples !== next;\n if (changed) {\n this._bevelSamples = next;\n this._constants.BEVEL_SAMPLES = next;\n }\n return changed;\n }\n\n setSamplingPattern(pattern: SamplingPattern, maxSamples: number, sequenceSeed = 0) {\n const code = samplingPatternCode(pattern);\n const logSPP = zSobolLog2SPP(code === 1 ? maxSamples - 1 : maxSamples);\n const views = this._rtUniform.views;\n const changed = this._constants.SAMPLING_PATTERN !== code ||\n views.sequenceSeed[0] !== (sequenceSeed >>> 0) ||\n (code === 1 && views.zSobolLogSPP[0] !== logSPP);\n this._constants.SAMPLING_PATTERN = code;\n views.sequenceSeed[0] = sequenceSeed;\n views.zSobolLogSPP[0] = logSPP;\n return changed;\n }\n\n setSampleSequenceOffset(offset: number) {\n this._rtUniform.views.sampleSequenceOffset[0] = offset;\n }\n\n setVarianceMoments(enabled: boolean) {\n this._rtUniform.views.varianceMoments[0] = enabled ? 1 : 0;\n }\n\n setAdaptiveSamplingTargets(targets?: {\n width: number;\n height: number;\n data: Float32Array;\n }) {\n this._rtUniform.views.adaptiveSampling[0] = targets ? 1 : 0;\n if (!targets) return;\n const { width, height, data } = targets;\n if (width <= 0 || height <= 0 || data.length !== width * height) {\n throw new Error('Adaptive sample targets do not match their dimensions.');\n }\n this._ensureAdaptiveSamplingTexture(width, height);\n this._device.queue.writeTexture(\n { texture: this._adaptiveSamplingTexture },\n data,\n { bytesPerRow: width * Float32Array.BYTES_PER_ELEMENT },\n [width, height]\n );\n }\n\n setQuality(options: { bounces: number; bevel: boolean; dispersionWavelengths: 1 | 3; directLightCandidates: number }) {\n this._rtUniform.views.bounces[0] = normalizeBounces(options.bounces);\n this._rtUniform.views.bevel[0] = +options.bevel;\n this._rtUniform.views.dispersionWavelengths[0] = options.dispersionWavelengths;\n this._rtUniform.views.directLightCandidates[0] = normalizeDirectLightCandidates(options.directLightCandidates);\n }\n\n private _setEnvMap(envImage: EnvironmentMapSource | undefined) {\n const device = this._device;\n // Always create env tex\n if (\n !environmentMapSourcesMatch(envImage, this._envImageSource) ||\n !this._envTex\n ) {\n this._envImageSource = envImage;\n\n this._envTex?.destroy();\n this._envDistributionTex?.destroy();\n\n const distribution = envImage && envMapDistribution(envImage);\n const usage =\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT;\n this._envTex = device.createTexture({\n format: 'rgba32float',\n usage,\n label: 'Env',\n size: {\n width: envImage ? envImage.width : 1,\n height: envImage ? envImage.height : 1,\n depthOrArrayLayers: 1\n }\n });\n this._envDistributionTex = device.createTexture({\n format: 'rg32float',\n usage,\n label: 'Env Distribution',\n size: {\n width: distribution ? distribution.width : 1,\n height: distribution ? distribution.height : 1,\n depthOrArrayLayers: 1\n }\n });\n if (envImage && distribution) {\n device.queue.writeTexture(\n {\n texture: this._envTex\n },\n envImage.data.buffer,\n {\n bytesPerRow: envImage.width * 4 * 4\n },\n {\n width: envImage.width,\n height: envImage.height,\n depthOrArrayLayers: 1\n }\n );\n device.queue.writeTexture(\n {\n texture: this._envDistributionTex\n },\n distribution.data.buffer,\n {\n bytesPerRow: distribution.width * 4 * 2\n },\n {\n width: distribution.width,\n height: distribution.height,\n depthOrArrayLayers: 1\n }\n );\n }\n\n this._needsUpdateBindGroups = true;\n }\n\n this._constants.USE_ENVMAP = !!envImage;\n }\n\n setMeshes(meshes: Mesh[], update?: { transforms?: readonly Mesh[]; colors?: readonly Mesh[]; geometries?: readonly Geometry[]; materials?: readonly OpenPBRMaterial[] }) {\n for (const mesh of update?.colors ?? []) this._dirtyColorMeshes.add(mesh);\n if (update && this._preparedMeshData && this._materialData &&\n !this._needsUpdateMeshData && !this._needsUpdateMeshMembership && meshes === this._meshes) {\n const materialUpdate = this._materialChanges.classify(update.materials ?? []);\n if (materialUpdate.level !== 'geometry' && canUpdateGeometries(this._preparedMeshData, update.geometries ?? [])) {\n if (update.materials?.length) {\n const pending = this._pendingMaterialUpdate;\n this._pendingMaterialUpdate = {\n level: pending?.level === 'textures' ? 'textures' : materialUpdate.level,\n emission: !!pending?.emission || materialUpdate.emission,\n emissiveMap: !!pending?.emissiveMap || materialUpdate.emissiveMap,\n materials: new Set([...(pending?.materials ?? []), ...update.materials])\n };\n this._meshSnapshot.forEach(item => { item.materialKeys = item.materials.map(getMaterialHashKey); });\n }\n for (const geometry of update.geometries ?? []) this._pendingGeometryUpdates.add(geometry);\n for (const item of this._meshSnapshot) if (this._pendingGeometryUpdates.has(item.geometry)) item.geometryVersion = item.geometry.version;\n for (const mesh of update.transforms ?? []) {\n const item = this._snapshotByMesh.get(mesh);\n if (!item) continue;\n item.matrix = Array.from(mesh.transform);\n this._dirtyTransformMeshes.add(mesh);\n this._needsRefitTLAS = true;\n }\n return !!update.materials?.length || !!update.transforms?.length || !!update.colors?.length || !!update.geometries?.length;\n }\n }\n const transformOnlyMeshes = update?.materials?.length || update?.colors?.length ? undefined : update?.transforms;\n const materialChange = !!update?.materials?.length;\n if (\n transformOnlyMeshes && !transformOnlyMeshes.some(mesh => mesh instanceof InstancedMesh) &&\n meshes === this._meshes &&\n this._meshSnapshot.length === meshes.length &&\n this._meshSnapshot.every(\n (snapshot) =>\n snapshot.geometryVersion === snapshot.geometry.version &&\n snapshot.bvh === getGeometryBvh(snapshot.geometry)\n )\n ) {\n let transformChange = false;\n for (const mesh of transformOnlyMeshes) {\n const snapshot = this._snapshotByMesh.get(mesh);\n if (!snapshot) continue;\n const matrix = mesh.transform;\n if (\n snapshot.matrix.length === matrix.length &&\n snapshot.matrix.every((value, index) => value === matrix[index])\n ) {\n continue;\n }\n snapshot.matrix = Array.from(matrix as ArrayLike<number>);\n this._dirtyTransformMeshes.add(mesh);\n transformChange = true;\n }\n if (transformChange) {\n this._needsRefitTLAS = true;\n }\n return transformChange;\n }\n const previousSnapshot = this._meshSnapshot;\n const nextSnapshot = meshes.map((mesh) => ({\n mesh,\n instanceCount: mesh instanceof InstancedMesh ? mesh.count : 1,\n instanceVersion: mesh instanceof InstancedMesh ? mesh.transformsVersion : 0,\n instanceTransforms: mesh instanceof InstancedMesh ? mesh.transforms : undefined,\n instanceColors: mesh instanceof InstancedMesh ? mesh.colors : undefined,\n colorVersion: mesh instanceof InstancedMesh ? mesh.colorsVersion : 0,\n geometry: mesh.geometry,\n bvh: getGeometryBvh(mesh.geometry),\n materials: mesh.materials.slice(),\n materialKeys: mesh.materials.map(getMaterialHashKey),\n geometryVersion: mesh.geometry.version,\n positionArray: mesh.geometry.position.array,\n positionItemSize: mesh.geometry.position.itemSize,\n indexArray: mesh.geometry.indices.array,\n indexItemSize: mesh.geometry.indices.itemSize,\n materialIndexArray: mesh.geometry.materialIndex?.array,\n materialIndexItemSize: mesh.geometry.materialIndex?.itemSize,\n matrix: Array.from(mesh.transform as ArrayLike<number>)\n }));\n const membershipChanged = nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((item, i) => item.mesh !== previousSnapshot[i]?.mesh || item.instanceCount !== previousSnapshot[i]?.instanceCount ||\n item.materials.some((material, k) => material !== previousSnapshot[i]?.materials[k]));\n const membership = !this._needsUpdateMeshData && membershipChanged && this._preparedMeshData\n ? this._membershipCache.update(this._preparedMeshData, meshes) : undefined;\n if (membership) {\n const versions = new Map(previousSnapshot.flatMap(item => item.materials.map((m, i) => [m, item.materialKeys[i]] as const)));\n const materialsChanged = membership.materials.length !== this._preparedMeshData!.materials.length ||\n membership.materials.some((m, i) => m !== this._preparedMeshData!.materials[i] ||\n versions.has(m) && getMaterialHashKey(m) !== versions.get(m));\n this._pendingMembershipData = membership;\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach(item => this._snapshotByMesh.set(item.mesh, item));\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n if (materialsChanged) this._pendingMaterialUpdate = { level: 'textures', emission: true,\n emissiveMap: true, materials: new Set(membership.materials) };\n return true;\n }\n const membershipOnlyChange =\n !!this._residentPreparedMeshData &&\n (\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some(\n (next, index) => next.mesh !== previousSnapshot[index]?.mesh\n )\n ) &&\n nextSnapshot.every((next) => {\n const resident = this._residentSnapshotByMesh.get(next.mesh);\n return (\n !!resident &&\n next.colorVersion === resident.colorVersion && next.instanceColors === resident.instanceColors &&\n next.geometry === resident.geometry &&\n next.bvh === resident.bvh &&\n next.materials.length === resident.materials.length &&\n next.materials.every(\n (material, index) => material === resident.materials[index]\n ) &&\n next.materialKeys.every(\n (hash, index) => hash === resident.materialKeys[index]\n ) &&\n next.geometryVersion === resident.geometryVersion &&\n this._materialChanges.classify(next.materials).level === 'params' &&\n next.positionArray === resident.positionArray &&\n next.indexArray === resident.indexArray &&\n next.materialIndexArray === resident.materialIndexArray &&\n next.matrix.every(\n (value, index) => value === resident.matrix[index]\n )\n );\n });\n if (membershipOnlyChange) {\n this._meshes = meshes;\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._needsUpdateMeshMembership = true;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n return true;\n }\n const topologyOrMaterialChange =\n nextSnapshot.length !== previousSnapshot.length ||\n nextSnapshot.some((next, i) => {\n const prev = previousSnapshot[i];\n return (\n !prev ||\n next.mesh !== prev.mesh || next.instanceCount !== prev.instanceCount ||\n next.geometry !== prev.geometry ||\n next.bvh !== prev.bvh || next.colorVersion !== prev.colorVersion || next.instanceColors !== prev.instanceColors ||\n next.materials.length !== prev.materials.length ||\n next.materials.some((material, k) => material !== prev.materials[k]) ||\n next.materialKeys.some((hash, k) => hash !== prev.materialKeys[k]) ||\n next.positionArray !== prev.positionArray ||\n next.positionArray.length !== prev.positionArray.length ||\n next.positionItemSize !== prev.positionItemSize ||\n next.indexArray !== prev.indexArray ||\n next.indexArray.length !== prev.indexArray.length ||\n next.indexItemSize !== prev.indexItemSize ||\n next.materialIndexArray !== prev.materialIndexArray ||\n next.materialIndexArray?.length !== prev.materialIndexArray?.length ||\n next.materialIndexItemSize !== prev.materialIndexItemSize\n );\n });\n const geometryChange = !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.geometryVersion !== previousSnapshot[i].geometryVersion\n );\n const structuralChange = topologyOrMaterialChange || geometryChange;\n const transformChange =\n !topologyOrMaterialChange &&\n nextSnapshot.some((next, i) =>\n next.instanceVersion !== previousSnapshot[i].instanceVersion || next.instanceTransforms !== previousSnapshot[i].instanceTransforms || next.matrix.some((value, k) => value !== previousSnapshot[i].matrix[k])\n );\n this._meshes = meshes;\n nextSnapshot.forEach((next, i) => {\n const prev = previousSnapshot[i];\n if (prev?.geometry === next.geometry && (prev.positionArray !== next.positionArray || prev.indexArray !== next.indexArray)) {\n setGeometryBvh(next.geometry, undefined); this._geometriesNeedRefit.add(next.geometry);\n }\n // A mesh can be animated before this renderer sees it for the first\n // time. Its precomputed BLAS may then describe an older pose as well.\n if (next.geometryVersion > 0 && (\n !prev || next.geometry !== prev.geometry ||\n next.geometryVersion !== prev.geometryVersion\n )) {\n this._geometriesNeedRefit.add(next.geometry);\n }\n });\n this._meshSnapshot = nextSnapshot;\n this._snapshotByMesh = new WeakMap();\n nextSnapshot.forEach((snapshot) => {\n this._snapshotByMesh.set(snapshot.mesh, snapshot);\n });\n if (structuralChange) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n this._dirtyTransformMeshes.clear();\n } else if (transformChange) {\n this._needsRefitTLAS = true;\n nextSnapshot.forEach((next, index) => {\n if (\n next.instanceVersion !== previousSnapshot[index].instanceVersion || next.instanceTransforms !== previousSnapshot[index].instanceTransforms || next.matrix.some(\n (value, matrixIndex) =>\n value !== previousSnapshot[index]?.matrix[matrixIndex]\n )\n ) {\n this._dirtyTransformMeshes.add(next.mesh);\n }\n });\n }\n if (materialChange || !update && !structuralChange && !transformChange) {\n this._needsUpdateMeshData = true;\n }\n return structuralChange || transformChange || materialChange || !update;\n }\n\n setTextureAtlasBudget(maxBytes: number) {\n const next = Number.isFinite(maxBytes)\n ? Math.max(4, Math.floor(maxBytes))\n : DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n if (next === this._maxTextureArrayBytes) return false;\n this._maxTextureArrayBytes = next;\n this._needsUpdateMeshData = true;\n return true;\n }\n\n setBackground(background?: SceneBackground) {\n this._constants.USE_BACKGROUND = !!background;\n const backgroundImage =\n background && !Array.isArray(background)\n ? generateBackgroundMapFromSceneBackground(background)\n : undefined;\n this._constants.USE_BACKGROUND_MAP = !!backgroundImage;\n if (Array.isArray(background)) {\n this._rtUniform.views.backgroundColor.set(new F32(background));\n }\n const grounded =\n background &&\n !Array.isArray(background) &&\n 'type' in background &&\n background.type === 'GroundedSkybox'\n ? background\n : undefined;\n this._rtUniform.views.groundedBackgroundParams.set(\n grounded\n ? [\n Math.max(grounded.height, 0.0001),\n Math.max(grounded.radius, 0.0001),\n grounded.groundHeight ?? 0,\n 1\n ]\n : [0, 0, 0, 0]\n );\n this._rtUniform.views.groundedBackgroundCenter.set(grounded?.center ?? [0, 0]);\n this._constants.USE_GROUNDED_BACKGROUND = !!grounded;\n this._rtUniform.views.backgroundFlags[0] =\n ((background ? 1 : 0) | (backgroundImage ? 2 : 0) | (grounded ? 4 : 0)) |\n (this._rtUniform.views.backgroundFlags[0] & 0x80000000);\n this._setBackgroundMap(backgroundImage);\n }\n\n private _setBackgroundMap(\n backgroundImage: TexturePixelSource | undefined\n ) {\n if (backgroundImage === this._backgroundImageSource && this._backgroundTex) {\n return;\n }\n this._backgroundImageSource = backgroundImage;\n this._backgroundTex?.destroy();\n\n const width = backgroundImage?.width ?? 1;\n const height = backgroundImage?.height ?? 1;\n this._backgroundTex = this._device.createTexture({\n format: 'rgba32float',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n label: 'Background',\n size: { width, height, depthOrArrayLayers: 1 }\n });\n\n if (backgroundImage) {\n const source = backgroundImage.data;\n const data =\n source instanceof Float32Array\n ? source\n : Float32Array.from(source, (value) =>\n (source instanceof Uint8Array || source instanceof Uint8ClampedArray) ? value / 255 : value\n );\n this._device.queue.writeTexture(\n { texture: this._backgroundTex },\n data.buffer,\n { bytesPerRow: width * 4 * 4 },\n { width, height, depthOrArrayLayers: 1 }\n );\n }\n this._needsUpdateBindGroups = true;\n }\n\n private _updateLightSamplingData() {\n const choices = this._lightChoices;\n choices.reserve(1 + this._analyticLights.length + this._emissiveTriangles.length);\n choices.push(LIGHT_CHOICE_ENVIRONMENT, 0, estimateEnvironmentPower(this._envImageSource));\n this._analyticLights.forEach((light, i) => choices.push(LIGHT_CHOICE_ANALYTIC, i, estimateAnalyticLightPower(light)));\n this._emissiveTriangles.forEach((triangle, i) => choices.push(LIGHT_CHOICE_EMISSIVE_TRIANGLE, i, triangle.area * triangle.samplingLuminance));\n const distribution = buildLightAliasTable(choices);\n const domainDiagnostics = {\n environment: { count: 0, weight: 0, pmf: 0 },\n infinite: { count: 0, weight: 0, pmf: 0 },\n localAndEmissive: { count: 0, weight: 0, pmf: 0 }\n };\n this._analyticLightSelectionPmfs = new Array(\n this._analyticLights.length\n ).fill(0);\n this._rtUniform.views.envLightPmf[0] = 0;\n const domains = [domainDiagnostics.environment, domainDiagnostics.infinite, domainDiagnostics.localAndEmissive];\n for (let i = 0; i < choices.count; i++) {\n const type = choices.sourceTypes[i], source = choices.sourceIndices[i];\n const pmf = distribution.pmfs[i];\n const domainIndex = type === LIGHT_CHOICE_ENVIRONMENT ? LIGHT_DOMAIN_ENVIRONMENT :\n type === LIGHT_CHOICE_ANALYTIC && this._analyticLights[source]?.type === 'DirectionalLight' ?\n LIGHT_DOMAIN_INFINITE : LIGHT_DOMAIN_LOCAL_AND_EMISSIVE;\n const domain = domains[domainIndex];\n domain.count++; domain.weight += choices.weights[i]; domain.pmf += pmf;\n if (type === LIGHT_CHOICE_ENVIRONMENT) this._rtUniform.views.envLightPmf[0] = pmf;\n else if (type === LIGHT_CHOICE_ANALYTIC) this._analyticLightSelectionPmfs[source] = pmf;\n else this._emissiveTriangles[source].selectionPmf = pmf;\n }\n this._lightDomainDiagnostics = domainDiagnostics;\n this._rtUniform.views.lightChoiceCount[0] = choices.count;\n this._rtUniform.views.lightWeightTotal[0] = distribution.totalWeight;\n\n const emissiveTexels = this._emissiveTriangles.length * 6;\n const choiceTexels = Math.max(choices.count, 1);\n const profileStartTexel = emissiveTexels + choiceTexels;\n const packedIES = packIESProfiles(this._analyticLights, profileStartTexel);\n this._iesProfileTexelOffsets = packedIES.offsets;\n const totalTexels = Math.max(profileStartTexel + packedIES.texelCount, 1);\n const maxDimension = this._device.limits.maxTextureDimension2D;\n const width = Math.min(\n maxDimension,\n Math.max(16, Math.ceil(Math.sqrt(totalTexels) / 16) * 16)\n );\n const height = Math.ceil(totalTexels / width);\n if (height > maxDimension) {\n throw new Error('Too many emissive triangles for the light sampling texture.');\n }\n const resized = !this._lightSamplingTexture || width !== this._lightSamplingTextureSize[0] || height !== this._lightSamplingTextureSize[1];\n if (\n !this._lightSamplingTexture ||\n width !== this._lightSamplingTextureSize[0] ||\n height !== this._lightSamplingTextureSize[1]\n ) {\n this._lightSamplingTexture?.destroy();\n this._lightSamplingTexture = this._device.createTexture({\n label: 'Light sampling data',\n size: [width, height],\n format: 'rgba32float',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n });\n this._lightSamplingTextureSize = [width, height];\n this._needsUpdateBindGroups = true;\n }\n const textureData = this._lightSamplingScratch?.length === width * height * 4\n ? this._lightSamplingScratch : new Float32Array(width * height * 4);\n textureData.fill(0);\n if (this._emissiveTriangles.length) {\n packEmissiveTriangles(this._emissiveTriangles, textureData);\n }\n new Uint32Array(textureData.buffer).set(\n distribution.choices,\n emissiveTexels * 4\n );\n textureData.set(packedIES.data, profileStartTexel * 4);\n const previous = this._lightSamplingData;\n const full = resized || !previous || this._lightSamplingTriangleCount !== this._emissiveTriangles.length;\n const words = new Uint32Array(textureData.buffer);\n const oldWords = previous && new Uint32Array(previous.buffer);\n let startRow = -1;\n for (let row = 0; row <= height; row++) {\n let changed = row < height && full;\n if (row < height && !full) {\n for (let i = row * width * 4; i < (row + 1) * width * 4; i++) {\n if (words[i] !== oldWords![i]) { changed = true; break; }\n }\n }\n if (changed && startRow < 0) startRow = row;\n if (!changed && startRow >= 0) {\n this._device.queue.writeTexture(\n { texture: this._lightSamplingTexture!, origin: [0, startRow] },\n textureData.subarray(startRow * width * 4, row * width * 4),\n { bytesPerRow: width * 16 }, { width, height: row - startRow });\n startRow = -1;\n }\n }\n this._lightSamplingScratch = previous;\n this._lightSamplingData = textureData;\n this._lightSamplingTriangleCount = this._emissiveTriangles.length;\n this._rtUniform.views.lightSamplingTextureWidth[0] = width;\n this._rtUniform.views.lightChoiceTexelOffset[0] = emissiveTexels;\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = false;\n }\n\n /** Uploads the combined TLAS/BLAS buffer and the instance records. */\n private _uploadBVH(tlas: FlattendBVH, blases: Parameters<typeof concatBLASBuffers>[0]) {\n const stacks = getTraversalStackSizes(tlas, blases);\n this._constants.TLAS_STACK_SIZE = retainedShaderCapacity(stacks.tlas, Number(this._constants.TLAS_STACK_SIZE ?? 0));\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n const tlasBuffer = new Float32Array(tlas.buffer);\n const blasBuffer = new Float32Array(concatBLASBuffers(blases));\n const bvhData = new Float32Array(tlasBuffer.length + blasBuffer.length);\n const blasOffset = tlasBuffer.length / 4;\n bvhData.set(tlasBuffer);\n bvhData.set(blasBuffer, blasOffset * 4);\n const bvhBuffer = this._updateGPUBuffer('BVH', this._bvhBuffer, bvhData);\n const instancesBuffer = this._updateGPUBuffer(\n 'Instances',\n this._instancesBuffer,\n new Float32Array(tlas.instancesBuffer!)\n );\n if (bvhBuffer !== this._bvhBuffer || instancesBuffer !== this._instancesBuffer) {\n this._needsUpdateBindGroups = true;\n }\n this._bvhBuffer = bvhBuffer;\n this._instancesBuffer = instancesBuffer;\n this._debugBVHBuffer = bvhData.buffer.slice(0);\n this._rtUniform.views.blasOffset.set([blasOffset]);\n }\n\n private _updateMeshData() {\n this._pendingGeometryUpdates.clear();\n this._emissiveCache = new EmissiveTriangleCache();\n const meshes = this._meshes;\n for (const geometry of this._geometriesNeedRefit) {\n const usesDisplacement = meshes.some(\n (mesh) =>\n mesh.geometry === geometry &&\n !!mesh.materials[0]?.displacementMap &&\n Math.abs(mesh.materials[0].displacementScale) > 1e-6\n );\n if (usesDisplacement || geometryTopologyChanged(this._preparedMeshData, geometry) || !getGeometryBvh(geometry) || !refitBLAS(getGeometryBvh(geometry)!, geometry)) {\n setGeometryBvh(geometry, undefined);\n }\n }\n this._geometriesNeedRefit.clear();\n // TODO check bvh needs to change\n const res = updateMeshInstances(meshes);\n this._preparedMeshData = res;\n this._membershipCache.capture(res);\n this._pendingMembershipData = undefined;\n this._needsUpdateMeshMembership = false;\n const mergedGeometry = res.geometry;\n const materials = res.materials;\n const isEmpty = meshes.length === 0 || res.instances.length === 0;\n const tlas = buildTLAS(res.instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n const materialData = (this._materialData = new MaterialTable(\n materials,\n this._analyticLights,\n {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n }\n ));\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n materials\n );\n this._needsUpdateLightSamplingData = true;\n\n const attrNames = [\n 'position',\n 'normal',\n 'uv',\n 'uv1',\n 'color',\n 'tangent',\n 'materialIndex'\n ] as const;\n const attributes = attrNames.map((a) => mergedGeometry[a]);\n const fixedSize = 4;\n let stride = 0;\n const offsets = attrNames.map((attrName, idx) => {\n const attr = attributes[idx];\n const offset = stride;\n if (attr) {\n stride += fixedSize;\n }\n return offset;\n });\n\n const attrBufferData = new F32(\n mergedGeometry.vertexCount * stride\n );\n packVertexAttributes(mergedGeometry, attrBufferData, stride, offsets, 0, mergedGeometry.vertexCount);\n\n this._attributeData = attrBufferData; this._attributeStride = stride; this._attributeOffsets = offsets;\n this._attrBuffers = this._updateGPUBuffer(\n 'Attributes',\n this._attrBuffers,\n attrBufferData\n );\n\n this._materialsBuffer = this._updateGPUBuffer(\n 'Materials',\n this._materialsBuffer,\n materialData.getBufferArray(),\n // WGSL requires a runtime array binding to contain at least one\n // MaterialBuffer element, including while a\n // scene reload temporarily has no material payload.\n MATERIAL_FLOAT_COUNT * 4\n );\n\n const traversalStackSizes = getTraversalStackSizes(tlas, res.blases);\n const blasLayoutBits = {\n bvh2: 1,\n bvh4: 2,\n 'bvh-gpu': 4,\n cwbvh: 8\n } as const;\n this._blasLayoutMask = res.blases.reduce(\n (mask, blas) => mask | blasLayoutBits[blas.bvh.layout ?? 'bvh2'],\n 0\n );\n\n Object.assign(this._constants, {\n TLAS_STACK_SIZE: retainedShaderCapacity(traversalStackSizes.tlas, Number(this._constants.TLAS_STACK_SIZE ?? 0)),\n BLAS_STACK_SIZE: retainedShaderCapacity(traversalStackSizes.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32),\n USE_UV: mergedGeometry.uv != null,\n USE_VERTEX_COLOR: mergedGeometry.color != null,\n ATTR_STRIDE: stride / fixedSize,\n ...offsets.reduce((obj, off, idx) => {\n obj[attrNames[idx].toUpperCase() + '_OFF'] = off / fixedSize;\n return obj;\n }, {} as Record<string, number>)\n });\n this._updateMaterialConstants(materials, materialData, mergedGeometry);\n this._updateTextures(materialData);\n\n this._needsUpdateBindGroups = true;\n\n this._rtUniform.views.isEmpty[0] = +isEmpty;\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._residentPreparedMeshData = res;\n this._residentSnapshotByMesh = new WeakMap();\n this._meshSnapshot.forEach((snapshot) => {\n this._residentSnapshotByMesh.set(snapshot.mesh, snapshot);\n });\n this._materialChanges.capture(materials);\n this._pendingMaterialUpdate = undefined;\n this._needsUpdateMeshData = false;\n this._needsUpdateMeshMembership = false;\n this._needsRefitTLAS = false;\n }\n\n private _updateMaterialConstants(materials: OpenPBRMaterial[], materialData: MaterialTable, mergedGeometry: Geometry) {\n const hasTransmission = materials.some((m) => m.transmissionWeight > 0);\n if (hasTransmission !== this._hasTransmission) {\n this._hasTransmission = hasTransmission;\n }\n\n this._hasShadowCatcher = materials.some((m) => m.shadowCatcher);\n\n const hasDisplacement = materialData.getDisplacementMaps().length > 0;\n if (hasDisplacement !== this._hasDisplacement) {\n this._hasDisplacement = hasDisplacement;\n // Needs to recreate pipeline layout\n this._rayTracePipelineLayout = undefined;\n }\n\n const HAS_BEVEL = materials.some((m) => m.bevelSize > 0);\n const SPECTRAL =\n materials.some((m) => m.transmissionDispersionScale > 0);\n const HAS_MEDIUM = materials.some(materialUsesMedium);\n // Retain the atlas uniform capacity when a stage/material is removed.\n // Shrinking the array would rebuild every pipeline again on the next edit.\n const NUM_MAPS = Math.max(\n Math.ceil(+materialData.defines.NUM_MAPS / 10) * 10,\n Number(this._constants.NUM_MAPS ?? 0),\n 20\n );\n\n Object.assign(this._constants, {\n // Match the atlas UV selector. Keep the second set when any texture\n // needs it; material/texture edits already rebuild these constants.\n USE_UV1: materialData.bufferData.mapUvChannel.some(channel => channel > 0.5),\n // Isotropic OpenPBR constructs its own basis. Normal mapping uses\n // triangle UV differentials rather than this vertex tangent.\n USE_TANGENT: mergedGeometry.tangent != null &&\n materials.some(material => material.specularAnisotropy > 0 || material.coatAnisotropy > 0 || (!!material.coatNormalMap && material.coatWeight > 0)),\n\n USE_COAT_NORMAL_FRAMES: materials.some(m => !!m.coatNormalMap && m.coatWeight > 0),\n USE_ANISOTROPY_DIRECTIONS: materials.some(m => (!!m.coatNormalMap && m.coatWeight > 0) ||\n m.specularAnisotropy > 0 && (m.specularAnisotropyModel === 'gltf' || !!m.anisotropyMap || m.specularAnisotropyRotation !== 0) ||\n m.coatAnisotropy > 0 && m.coatAnisotropyRotation !== 0),\n HAS_MEDIUM,\n HAS_SHADOW_CATCHER: this._hasShadowCatcher,\n HAS_THIN_FILM: materials.some((material) => material.thinFilmWeight > 0),\n HAS_COAT: materials.some((material) => material.coatWeight > 0),\n HAS_FUZZ: materials.some((material) => material.fuzzWeight > 0),\n HAS_SUBSURFACE: materials.some((material) => material.subsurfaceWeight > 0),\n HAS_BEVEL,\n HAS_ALPHA_MASK: materials.some(\n (m) => resolveMaterialAlphaMode(m) === 'mask'\n ),\n HAS_ALPHA_BLEND: materials.some(\n (m) => resolveMaterialAlphaMode(m) === 'blend'\n ),\n HAS_ALPHA: materials.some(\n (m) => resolveMaterialAlphaMode(m) !== 'opaque'\n ),\n\n SPECTRAL,\n BEVEL_SAMPLES: this._bevelSamples,\n\n USE_RR: true,\n // Match WebGL: defer roulette for multiple-scattering SSS paths.\n RR_MAX: HAS_MEDIUM ? 12 : 2,\n\n NUM_UNIFORM_LIGHTS: FIXED_LIGHT_COUNT,\n\n ...materialData.defines,\n\n NUM_MAPS,\n ...materialTextureFeatures(materialData.defines),\n USE_NORMAL_MAPS: +materialData.defines.NUM_NORMAL_MAPS > 0\n });\n\n }\n\n private _updateGeometryData() {\n const res = this._preparedMeshData!, tlas = this._tlas!;\n const update = updatePreparedGeometries(res, this._pendingGeometryUpdates);\n for (const { first, count, topologyChanged, deformationOnly } of update.vertices) {\n packVertexAttributes(res.geometry, this._attributeData!, this._attributeStride, this._attributeOffsets, first, count, topologyChanged, deformationOnly);\n const offset = first * this._attributeStride * 4, size = count * this._attributeStride * 4;\n this._device.queue.writeBuffer(this._attrBuffers!, offset, this._attributeData!.buffer, offset, size);\n }\n for (const mesh of update.meshes) this._dirtyTransformMeshes.add(mesh);\n if (update.relocated) for (const binding of res.instanceBindings) this._dirtyTransformMeshes.add(binding.mesh);\n // Instance BLAS offsets must be refreshed before uploading a resized BVH.\n if (update.resized) {\n res.instances = updateMeshInstanceTransforms(res.instanceBindings);\n refitTLAS(tlas, res.instances, res.blases);\n this._uploadBVH(tlas, res.blases);\n } else {\n const bytes = new Uint8Array(this._debugBVHBuffer!);\n const ranges = [];\n for (const { blas, offset } of update.blases) {\n const target = tlas.buffer.byteLength + offset;\n bytes.set(new Uint8Array(blas.buffer), target);\n ranges.push({offset: target, size: blas.buffer.byteLength});\n }\n for (const { offset, size } of mergeRefitRanges(ranges)) {\n this._device.queue.writeBuffer(this._bvhBuffer!, offset, this._debugBVHBuffer!, offset, size);\n }\n }\n const bits = { bvh2: 1, bvh4: 2, 'bvh-gpu': 4, cwbvh: 8 };\n this._blasLayoutMask = res.blases.reduce((mask, b) => mask | bits[b.bvh.layout ?? 'bvh2'], 0);\n const stacks = getTraversalStackSizes(tlas, res.blases);\n this._constants.BLAS_STACK_SIZE = retainedShaderCapacity(stacks.blas, Number(this._constants.BLAS_STACK_SIZE ?? 0), 32);\n this._meshSnapshot.forEach(item => { item.bvh = getGeometryBvh(item.geometry); });\n this._needsRefitTLAS = true; this._pendingGeometryUpdates.clear();\n }\n\n private _updateMaterialData() {\n const update = this._pendingMaterialUpdate!;\n const res = this._preparedMeshData!;\n let materialData = this._materialData!;\n if (update.level === 'textures') {\n materialData = this._materialData = new MaterialTable(res.materials, this._analyticLights, {\n maxTextureArrayBytes: this._maxTextureArrayBytes,\n maxTextureArrayLayers: this._device.limits.maxTextureArrayLayers,\n maxTextureDimension2D: this._device.limits.maxTextureDimension2D\n });\n this._updateTextures(materialData);\n } else materialData.repackParams(res.materials);\n this._materialsBuffer = this._updateGPUBuffer('Materials', this._materialsBuffer, materialData.getBufferArray(), MATERIAL_FLOAT_COUNT * 4);\n this._updateMaterialConstants(res.materials, materialData, res.geometry);\n if (update.emission || update.emissiveMap) {\n const resident = this._residentPreparedMeshData!;\n resident.emissiveBindings = resident.instanceBindings.filter(binding =>\n binding.materialIndices.some(index => materialIsEmissive(res.materials[index])));\n const active = new Set(this._meshes);\n res.emissiveBindings = resident.emissiveBindings.filter(binding => active.has(binding.mesh));\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n }\n this._needsUpdateBindGroups = true;\n this._materialChanges.capture([...update.materials]);\n this._pendingMaterialUpdate = undefined;\n }\n\n /** Rebuilds only instance acceleration data for a cached mesh subset. */\n private _updateMeshMembership() {\n const resident = this._pendingMembershipData ?? this._residentPreparedMeshData;\n const pending = this._pendingMembershipData;\n if (!resident) {\n this._needsUpdateMeshData = true;\n this._needsUpdateMeshMembership = false;\n return;\n }\n const activeMeshes = new Set(this._meshes);\n const instanceBindings = resident.instanceBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const emissiveBindings = resident.emissiveBindings.filter(({ mesh }) =>\n activeMeshes.has(mesh)\n );\n const instances = updateMeshInstanceTransforms(instanceBindings);\n const res = {\n ...resident,\n instances,\n instanceBindings,\n emissiveBindings\n };\n this._preparedMeshData = res;\n if (pending) this._residentPreparedMeshData = res;\n this._pendingMembershipData = undefined;\n const tlas = buildTLAS(instances, res.blases);\n this._tlas = tlas;\n this._uploadBVH(tlas, res.blases);\n\n this._emissiveTriangles = this._emissiveCache.collect(\n emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(instances.length === 0);\n this._meshSnapshot.forEach((snapshot) => {\n snapshot.bvh = getGeometryBvh(snapshot.geometry);\n });\n this._needsUpdateMeshMembership = false;\n }\n\n private _updateMeshColors() {\n const res = this._preparedMeshData, tlas = this._tlas;\n if (res && tlas) {\n const dirty = updateMeshInstanceColors(res.instanceBindings, res.instances, this._dirtyColorMeshes);\n const ranges = updateTLASInstanceColors(tlas, res.instances, dirty);\n if (this._instancesBuffer) for (const {offset, size} of ranges) {\n this._device.queue.writeBuffer(this._instancesBuffer, offset, tlas.instancesBuffer!, offset, size);\n }\n }\n this._dirtyColorMeshes.clear();\n }\n\n private _refitMeshInstances() {\n const res = this._preparedMeshData;\n const tlas = this._tlas;\n if (!res || !tlas || !this._bvhBuffer || !this._instancesBuffer) {\n this._needsUpdateMeshData = true;\n this._needsRefitTLAS = false;\n return;\n }\n\n const dirtyIndices = dirtyMeshInstanceIndices(res.instanceBindings, this._dirtyTransformMeshes, res.instances);\n const incremental = dirtyIndices.size > 0;\n const previousInstances = res.instances;\n res.instances = updateMeshInstanceTransforms(\n res.instanceBindings,\n incremental ? res.instances : undefined,\n incremental ? dirtyIndices : undefined\n );\n if (!sameInstanceMembership(previousInstances, res.instances)) {\n this._tlas = buildTLAS(res.instances, res.blases);\n this._uploadBVH(this._tlas, res.blases);\n this._emissiveTriangles = this._emissiveCache.collect(res.emissiveBindings, res.materials);\n this._needsUpdateLightSamplingData = true;\n this._rtUniform.views.isEmpty[0] = +(res.instances.length === 0);\n this._dirtyTransformMeshes.clear(); this._needsRefitTLAS = false;\n return;\n }\n const ranges = refitTLAS(\n tlas,\n res.instances,\n res.blases,\n incremental ? dirtyIndices : undefined\n );\n const tlasData = new Float32Array(tlas.buffer);\n for (const { offset, size } of ranges.tlasRanges) {\n this._device.queue.writeBuffer(\n this._bvhBuffer,\n offset,\n tlas.buffer,\n offset,\n size\n );\n }\n for (const { offset, size } of ranges.instanceRanges) {\n this._device.queue.writeBuffer(\n this._instancesBuffer,\n offset,\n tlas.instancesBuffer!,\n offset,\n size\n );\n }\n if (this._debugBVHBuffer) {\n new Float32Array(this._debugBVHBuffer).set(tlasData);\n }\n\n if (\n !incremental ||\n res.emissiveBindings.some(({ mesh }) =>\n this._dirtyTransformMeshes.has(mesh)\n )\n ) {\n this._emissiveTriangles = this._emissiveCache.collect(\n res.emissiveBindings,\n res.materials\n );\n this._needsUpdateLightSamplingData = true;\n }\n this._dirtyTransformMeshes.clear();\n this._needsRefitTLAS = false;\n }\n\n private _updateTextures(materialData: MaterialTable) {\n // Textures\n // TODO Avoid zero length array.\n const mapInfo = materialData.bufferData.mapInfo ?? [0, 0, 0, 0];\n const mapTransform = materialData.bufferData.mapTransform ?? [1, 1, 0, 0];\n const mapUvChannel = materialData.bufferData.mapUvChannel ?? [0];\n const mapColorLinear = materialData.bufferData.mapColorLinear;\n const numMaps = +this._constants.NUM_MAPS;\n const mapInfoData = new F32(numMaps * 12);\n for (let i = 0; i < mapInfo.length; i++) {\n mapInfoData[i] = mapInfo[i];\n }\n for (let i = 0; i < mapTransform.length; i++) {\n mapInfoData[numMaps * 4 + i] = mapTransform[i];\n }\n for (let i = 0; i < mapUvChannel.length; i++) {\n mapInfoData[numMaps * 8 + i * 4] = mapUvChannel[i];\n mapInfoData[numMaps * 8 + i * 4 + 1] = mapColorLinear[i];\n }\n let mapInfoUniform = this._mapInfoUniform;\n if (!mapInfoUniform || mapInfoUniform.size !== mapInfoData.byteLength) {\n mapInfoUniform?.destroy();\n mapInfoUniform = this._uniformBuffer(mapInfoData.byteLength);\n this._mapInfoUniform = mapInfoUniform;\n }\n this._device.queue.writeBuffer(mapInfoUniform, 0, mapInfoData);\n const texture = materialData.texture;\n const maps = this._maps;\n const textureFormat = texture?.storageType === constants.HALF_FLOAT ? 'rgba16float' : 'rgba8unorm';\n const bytesPerPixel = textureFormat === 'rgba16float' ? 8 : 4;\n const textureWidth = Math.max(texture?.width ?? 1, 1);\n const textureHeight = Math.max(texture?.height ?? 1, 1);\n // TODO Must at least 2 layers.\n const textureDepth = Math.max(texture?.source!.length ?? 1, 2);\n const maxTextureArrayLayers = this._device.limits.maxTextureArrayLayers;\n\n if (textureDepth > maxTextureArrayLayers) {\n throw new Error(\n `The scene needs ${textureDepth} texture-array layers, but this GPU device supports ${maxTextureArrayLayers}.`\n );\n }\n\n if (\n !maps ||\n textureFormat !== maps.format ||\n textureWidth !== maps.width ||\n textureHeight !== maps.height ||\n textureDepth !== maps.depthOrArrayLayers\n ) {\n maps && maps.destroy();\n this._maps = this._device.createTexture({\n format: textureFormat,\n label: 'Maps',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n size: {\n width: textureWidth,\n height: textureHeight,\n depthOrArrayLayers: textureDepth\n }\n });\n\n this._needsUpdateBindGroups = true;\n }\n // Upload the textures\n texture?.source!.forEach((img: TexImageSource & { width: number; height: number }, idx: number) => {\n if (isTextureDataSource(img)) {\n if (!(img.data instanceof Uint8Array) && !(img.data instanceof Uint16Array)) {\n throw new Error('Material texture atlas GPU upload requires RGBA8 or RGBA16F data.');\n }\n this._device.queue.writeTexture(\n { texture: this._maps!, origin: [0, 0, idx] },\n img.data,\n { bytesPerRow: img.width * bytesPerPixel, rowsPerImage: img.height },\n { width: img.width, height: img.height, depthOrArrayLayers: 1 }\n );\n return;\n }\n this._device.queue.copyExternalImageToTexture(\n {\n source: img as HTMLImageElement | HTMLCanvasElement | OffscreenCanvas | ImageBitmap,\n // @ts-ignore WebGPU support different flipY for each layer.\n flipY: texture.flipYArray[idx]\n },\n { texture: this._maps!, origin: [0, 0, idx] },\n [img.width, img.height]\n );\n });\n }\n\n setLights(lights: SceneLight[]) {\n const allAnalyticLights = lights.filter(\n (light) =>\n light.type === 'DirectionalLight' ||\n light.type === 'SphereLight' ||\n light.type === 'SpotLight' ||\n light.type === 'RectLight'\n );\n if (allAnalyticLights.length > FIXED_LIGHT_COUNT) {\n console.warn(\n `Too many lights, only the first ${FIXED_LIGHT_COUNT} lights will be used.`\n );\n }\n const analyticLights = allAnalyticLights.slice(0, FIXED_LIGHT_COUNT);\n const numAnalyticLights = analyticLights.length;\n\n const envImage = this._sceneEnvironment.update(lights);\n\n this._rtUniform.views.lightsCount[0] = numAnalyticLights;\n\n this._setEnvMap(envImage);\n\n const lightTexturesChanged = this._rectLightTextures.update(analyticLights);\n this._analyticLights = analyticLights;\n if (lightTexturesChanged) this._needsUpdateMeshData = true;\n\n this._needsUpdateAnalyticLightsBuffer = true;\n this._needsUpdateLightSamplingData = true;\n }\n\n private _updateViewProjInv(camera: Camera, viewProjInv: mat4.Mat4Array) {\n mat4.invert(viewProjInv, camera.getProjectionMatrix(this._targetAspect));\n mat4.mul(viewProjInv, camera.transform, viewProjInv);\n }\n\n // TODO reuse the code of RayTraceNode\n setCamera(camera: Camera) {\n const viewProjectionInvMat = this._viewProjInv;\n this._apertureRadius = cameraApertureRadius(camera);\n this._focusDistance = camera.focusDistance;\n this._updateViewProjInv(camera, viewProjectionInvMat);\n mat4.copy(this._cameraWorld, camera.transform);\n }\n\n cameraChanged(camera: Camera) {\n const tmp = mat4.create();\n this._updateViewProjInv(camera, tmp);\n return (\n !numberArraysEqual(this._viewProjInv, tmp) ||\n cameraApertureRadius(camera) !== this._apertureRadius ||\n camera.focusDistance !== this._focusDistance\n );\n }\n\n setSize(width: number, height: number, targetAspect = width / height) {\n this._targetAspect = targetAspect;\n this._width = width;\n this._height = height;\n\n const arr = this._rtUniform.views.outputSize;\n arr[0] = width;\n arr[1] = height;\n\n const outColorBuffer = this._outColorBuffer;\n const bufferSize = width * height * 4 * 4;\n if (outColorBuffer && outColorBuffer.size === bufferSize) {\n return;\n }\n\n this._needsUpdateBindGroups = true;\n const previousBuffers: GPUBuffer[] = [];\n for (let target of [\n 'Color',\n 'Normal',\n 'Albedo',\n 'ShadowCatcher'\n ] as const) {\n const previous = this[`_out${target}Buffer`];\n if (previous) previousBuffers.push(previous);\n this[`_out${target}Buffer`] = this._device.createBuffer({\n label: 'Ray Trace ' + target,\n // The catcher stores its mask and its primary background contribution.\n size: target === 'ShadowCatcher' ? width * height * SHADOW_CATCHER_ACCUMULATION_BYTES : bufferSize,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_DST |\n GPUBufferUsage.COPY_SRC\n });\n }\n this._targetOutputs.set(this._activeTarget, { buffers: [this._outColorBuffer, this._outNormalBuffer, this._outAlbedoBuffer, this._outShadowCatcherBuffer] });\n // A preview-resolution update can replace these buffers immediately after\n // an encoded ray-trace or output command was submitted. Retire every old\n // output only after the queue has completed work already submitted\n // against it.\n void this._device.queue\n .onSubmittedWorkDone()\n .catch(() => undefined)\n .then(() => previousBuffers.forEach((buffer) => buffer.destroy()));\n }\n\n setJitter(x: number, y: number) {\n const arr = this._rtUniform.views.jitter;\n arr[0] = x;\n arr[1] = y;\n\n this._device.queue.writeBuffer(\n this._uniforms.cameraUniform,\n 0,\n new F32([\n ...this._viewProjInv,\n ...this._cameraWorld,\n this._apertureRadius,\n this._focusDistance,\n 0,\n 0\n ])\n );\n }\n\n setSampleTiles(columns: number, rows: number, tileX: number, tileY: number) {\n const arr = this._rtUniform.views.scaleOffset;\n arr[0] = columns;\n arr[1] = rows;\n arr[2] = tileX;\n arr[3] = tileY;\n }\n\n setSampleCount(sampleCount: number) {\n this._rtUniform.views.sampleCount[0] = sampleCount;\n }\n setTransmissiveOutputAlphaMin(transmissiveAlphaMin: number) {\n this._rtUniform.views.transmissiveOutputAlphaMin[0] = transmissiveAlphaMin;\n const changed = this._transmissiveAlphaMin !== transmissiveAlphaMin;\n this._transmissiveAlphaMin = transmissiveAlphaMin;\n return changed;\n }\n\n needsDenoiseAlpha() {\n return (\n this._hasShadowCatcher ||\n (this._transmissiveAlphaMin < 1 && this._hasTransmission)\n );\n }\n\n hasShadowCatcher() {\n return this._hasShadowCatcher;\n }\n\n dispose() {\n this._shaderCache.clear();\n const buffers = new Set<GPUBuffer | undefined>([\n ...Array.from(this._targetOutputs.values()).flatMap(target => target.buffers),\n this._mapInfoUniform,\n this._attrBuffers,\n this._materialsBuffer,\n this._bvhBuffer,\n this._instancesBuffer,\n this._offlineAdaptiveHistory?.varianceBuffer,\n ...Object.values(this._uniforms)\n ]);\n buffers.forEach((buffer) => buffer?.destroy());\n const textures = new Set<GPUTexture | undefined>([\n this._maps,\n this._lightSamplingTexture,\n this._openPbrEnergyLut,\n this._envTex,\n this._envDistributionTex,\n this._backgroundTex,\n this._adaptiveSamplingTexture\n ]);\n textures.forEach((texture) => texture?.destroy());\n this._rayTracePipeline = undefined;\n this._rayTraceBindGroups = undefined;\n }\n\n}\n\nexport default WGPURayTracePass;\n"]}
@@ -0,0 +1,9 @@
1
+ import { type RenderPipeline } from './renderPipeline.js';
2
+ export declare const oidnAlbedoSrgbEncodeMain = "\nif (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }\nlet index = globalId.x + globalId.y * u32(imageSize.x);\nlet raw = textureLoad(in_albedo, vec2u(globalId.xy), 0);\nlet linear = clamp(raw.rgb, vec3f(0.0), vec3f(1.0));\nlet encoded = select(\n 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055,\n 12.92 * linear,\n linear <= vec3f(0.0031308)\n);\nout_albedo[index] = vec4f(encoded, raw.a);\n";
3
+ export declare const oidnAlbedoSrgbDecodeMain = "\nif (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }\nlet index = globalId.x + globalId.y * u32(imageSize.x);\nlet filtered = in_albedo[index];\nlet encoded = clamp(filtered.rgb, vec3f(0.0), vec3f(1.0));\nlet linear = select(\n pow((encoded + 0.055) / 1.055, vec3f(2.4)),\n encoded / 12.92,\n encoded <= vec3f(0.04045)\n);\nvar result = linear;\nlet surfaceCoverage = textureLoad(in_rawAlbedo, vec2i(globalId.xy), 0).a;\nif (preserveSurfaceTexture != 0u) {\n // Primary albedo retains the accumulated surface texture. Do not ask the\n // auxiliary network to reconstruct its high-frequency texture.\n // Retain its filtered result across normal/coverage discontinuities.\n let pixel = vec2i(globalId.xy);\n let center = textureLoad(in_rawNormal, pixel, 0);\n let n = normalize(center.rgb * 2.0 - 1.0 + vec3f(1e-8));\n var discontinuity = 0.0;\n for (var y = -1; y <= 1; y++) {\n for (var x = -1; x <= 1; x++) {\n let neighbor = textureLoad(in_rawNormal,\n clamp(pixel + vec2i(x, y), vec2i(0), imageSize - 1), 0);\n let nn = normalize(neighbor.rgb * 2.0 - 1.0 + vec3f(1e-8));\n discontinuity = max(discontinuity,\n max(1.0 - dot(n, nn), abs(center.a - neighbor.a)));\n }\n }\n let edgeWeight = smoothstep(0.02, 0.1, discontinuity);\n let raw = clamp(textureLoad(in_rawAlbedo, pixel, 0).rgb,\n vec3f(0.0), vec3f(1.0));\n result = mix(raw, linear, edgeWeight);\n}\nout_albedo[index] = vec4f(result, surfaceCoverage);\n";
4
+ export declare const oidnNormalSanitizeMain = "\nif (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }\nlet index = globalId.x + globalId.y * u32(imageSize.x);\nout_normal[index] = vec4f(clamp(in_normal[index].rgb, vec3f(0.0), vec3f(1.0)), 1.0);\n";
5
+ export interface WGPURenderingPipelineOptions {
6
+ presentationFormat?: GPUTextureFormat;
7
+ }
8
+ /** Independent render targets, without preview or presentation policy. */
9
+ export declare function makeWGPURenderTargets(canvas: HTMLCanvasElement | OffscreenCanvas, device: GPUDevice, options?: WGPURenderingPipelineOptions): RenderPipeline;