@meimu/mutracer 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +240 -2
  13. package/THIRD_PARTY_NOTICES.md +160 -0
  14. package/dist/assets/bvh.worker.js +1 -0
  15. package/dist/mutracer.umd.js +14360 -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 +160 -0
  24. package/docs/sampling.md +40 -0
  25. package/docs/threejs.md +274 -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 +123 -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 +265 -0
  35. package/lib/Render.js +742 -0
  36. package/lib/Render.js.map +1 -0
  37. package/lib/RenderLoop.d.ts +79 -0
  38. package/lib/RenderLoop.js +236 -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 +1448 -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 +126 -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 +623 -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 +927 -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 +105 -0
  511. package/lib/util/fromTHREE.js +1111 -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,927 @@
1
+ import { MAX_PATH_EVENTS } from '../pathLimits.js';
2
+ import shadowCatcherAccumulationWGSL from './chunks/shadowCatcherAccumulation.wgsl.js';
3
+ import depthQueryWGSL from './depthQuery.wgsl.js';
4
+ // Portions adapted from ray-tracing-renderer@0.10.15
5
+ // (https://github.com/hoverinc/ray-tracing-renderer).
6
+ // Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
7
+ import commonWgsl from './chunks/common.wgsl.js';
8
+ import { WGPU_SCENE_FEATURE_BITS } from '../WGPUSceneFeatures.js';
9
+ import rayTraceCoreWgsl from './chunks/rayTraceCore.wgsl.js';
10
+ import { createMaterialBufferWgsl } from './chunks/materialBuffer.wgsl.js';
11
+ import createIntersectionWgsl from './chunks/intersect.wgsl.js';
12
+ import randomWgsl from './chunks/random.wgsl.js';
13
+ import randWgsl from './chunks/rand.wgsl.js';
14
+ import { createSampleMaterialWgsl } from './chunks/sampleMaterial.wgsl.js';
15
+ import sampleLightWgsl from './chunks/sampleLight.wgsl.js';
16
+ import { createOpenPbrBsdfWgsl } from './chunks/openPbrBsdf.wgsl.js';
17
+ import samplingWgsl from './chunks/sampling.wgsl.js';
18
+ import sampleShadowCatcherWgsl from './chunks/sampleShadowCatcher.wgsl.js';
19
+ import envMapWgsl from './chunks/envMap.wgsl.js';
20
+ import uvProjectionWgsl from './chunks/uvProjection.wgsl.js';
21
+ export const WORKGROUP_SIZE = 8;
22
+ /** Generates the WebGPU megakernel path tracing compute shader. */
23
+ export default function rayTraceCompute({ hasDisplacement, hasAnisotropyDirections = false, hasCoatNormals = false, hasAlpha = true, hasSceneAlpha = true, blasLayoutMask = 1 }) {
24
+ hasAnisotropyDirections ||= hasCoatNormals;
25
+ const deterministicPrimaryAlpha = hasAlpha;
26
+ const source = /* wgsl */ `
27
+
28
+ ${commonWgsl}
29
+
30
+ ${rayTraceCoreWgsl({ hasSceneAlpha, hasAnisotropyDirections, hasCoatNormals })}
31
+
32
+ ${uvProjectionWgsl}
33
+
34
+ ${createMaterialBufferWgsl({ hasSceneAlpha, hasAnisotropyDirections, hasCoatNormals })}
35
+
36
+ ${createIntersectionWgsl({ hasDisplacement, blasLayoutMask, hasAnisotropyDirections, hasCoatNormals })}
37
+ ${randWgsl}
38
+ ${randomWgsl}
39
+ ${envMapWgsl}
40
+
41
+ ${samplingWgsl}
42
+ ${createOpenPbrBsdfWgsl(hasAnisotropyDirections, hasCoatNormals)}
43
+ ${sampleLightWgsl}
44
+
45
+
46
+ var<private> tw: u32 = 0u;
47
+
48
+
49
+
50
+ fn jO() -> u32 {
51
+ return u32(max(rtUniform.directLightCandidates, 1));
52
+ }
53
+
54
+
55
+
56
+
57
+ fn po(wy: u32) -> f32 {
58
+
59
+
60
+
61
+
62
+ if (SAMPLING_PATTERN == 2) { _ = rand(); }
63
+ let jU = bc.x + bc.y * u32(rtUniform.outputSize.x);
64
+ let key = aq(aq(jU, bd), rtUniform.sequenceSeed);
65
+ let dimension = aq(cE, wy) ^ 0xa511e9b3u;
66
+ return f32(eg(key ^ dimension) >> 8u) * (1.0 / 16777216.0);
67
+ }
68
+
69
+
70
+
71
+ fn tk(fd: f32, scatteringPdf: f32) -> f32 {
72
+ let aW = jO();
73
+ if (aW <= 1u) {
74
+ return aF(fd, scatteringPdf);
75
+ }
76
+ let iE = f32(aW) * fd;
77
+ return iE /
78
+ max(iE + scatteringPdf, 1e-20);
79
+ }
80
+
81
+
82
+ fn fS(scatteringPdf: f32, fd: f32) -> f32 {
83
+ let aW = jO();
84
+ if (aW <= 1u) {
85
+ return aF(scatteringPdf, fd);
86
+ }
87
+ let iE = f32(aW) * fd;
88
+ return scatteringPdf /
89
+ max(scatteringPdf + iE, 1e-20);
90
+ }
91
+
92
+ ${createSampleMaterialWgsl(hasAnisotropyDirections, hasCoatNormals)}
93
+ ${sampleShadowCatcherWgsl}
94
+
95
+
96
+ @group(3) @binding(0) var<storage, read_write> outColor: array<vec4f>;
97
+ @group(3) @binding(1) var<storage, read_write> outNormal: array<vec4f>;
98
+ @group(3) @binding(2) var<storage, read_write> outAlbedo: array<vec4f>;
99
+
100
+ ${shadowCatcherAccumulationWGSL}
101
+ @group(3) @binding(3) var<storage, read_write> outShadowCatcher: array<ShadowCatcherAccumulation>;
102
+
103
+
104
+ fn hH(
105
+ gZ: u32,
106
+ vh: vec3f,
107
+ normal: vec3f
108
+ ) {
109
+ if (rtUniform.varianceMoments != 0) {
110
+ let value = dot(vh, luminance);
111
+ outNormal[gZ] += vec4f(value * value, 0.0, 0.0, 1.0);
112
+ }
113
+ else {
114
+ outNormal[gZ] += vec4f(normal, 1.0);
115
+ }
116
+ }
117
+
118
+
119
+
120
+ fn iM(gZ: u32, value: f32) {
121
+ outShadowCatcher[gZ].moments += vec4f(value, value * value, 0.0, 0.0);
122
+ }
123
+
124
+
125
+ struct RayTraceAuxiliary {
126
+
127
+ albedo: vec3f,
128
+ isShadowCatcher: bool,
129
+ normal: vec3f,
130
+ isBlank: bool,
131
+ }
132
+
133
+ fn dq(sA: vec3f, height: f32, radius: f32) -> f32 {
134
+ let fN = length(sA);
135
+ if (fN < 0.00001) {
136
+ return -radius;
137
+ }
138
+
139
+ let iC = radius * sA.y / fN;
140
+ let ik = -1.5 * height;
141
+ var ev: f32;
142
+ if (iC >= 0.0) {
143
+ ev = radius;
144
+ }
145
+ else if (iC < ik) {
146
+ ev = -height * fN / sA.y;
147
+ }
148
+ else {
149
+ let dW = 1.0
150
+ - iC * iC / (3.0 * ik * ik);
151
+ ev = radius * dW;
152
+ }
153
+ return fN - ev;
154
+ }
155
+
156
+ fn eQ(origin: vec3f, direction: vec3f) -> vec3f {
157
+ if (!USE_GROUNDED_BACKGROUND) {
158
+ return direction;
159
+ }
160
+ let params = rtUniform.groundedBackgroundParams;
161
+ let bY = normalize(direction);
162
+ let center = vec3f(
163
+ rtUniform.groundedBackgroundCenter.x,
164
+ params.z + params.x,
165
+ rtUniform.groundedBackgroundCenter.y
166
+ );
167
+ let bB = origin - center;
168
+ let eI = dot(bB, bY);
169
+ let ej = eI * eI
170
+ - dot(bB, bB) + params.y * params.y;
171
+ if (
172
+ ej <= 0.0
173
+ || dq(bB, params.x, params.y) > 0.0
174
+ ) {
175
+ return direction;
176
+ }
177
+
178
+ var cB = -eI + sqrt(ej);
179
+ if (cB <= 0.0) {
180
+ return direction;
181
+ }
182
+
183
+ let nB = bB + bY * cB;
184
+ if (nB.y >= 0.0) {
185
+ return normalize(nB);
186
+ }
187
+
188
+ if (bY.y < -0.00001 && params.y > 1.5 * params.x) {
189
+ let hQ = (-params.x - bB.y) / bY.y;
190
+ let nk = bB + bY * hQ;
191
+ let nZ = (2.0 / 3.0)
192
+ * sqrt(params.y * params.y - 2.25 * params.x * params.x);
193
+ if (hQ > 0.0 && length(nk.xz) <= nZ) {
194
+ return normalize(nk);
195
+ }
196
+ }
197
+
198
+ var cN = 0.0;
199
+ for (var i = 0; i < 14; i++) {
200
+ let fe = (cN + cB) * 0.5;
201
+ let pp = bB + bY * fe;
202
+ if (dq(pp, params.x, params.y) > 0.0) {
203
+ cB = fe;
204
+ }
205
+ else {
206
+ cN = fe;
207
+ }
208
+ }
209
+ let hit = bB + bY * ((cN + cB) * 0.5);
210
+ return normalize(hit);
211
+ }
212
+
213
+ fn hE(ray: Ray) -> vec4f {
214
+ var bg = vec4f(0.0);
215
+ if (USE_BACKGROUND_MAP) {
216
+ let pP = eQ(ray.o, ray.d);
217
+ bg = textureLinear(backgroundMap, aS(pP));
218
+ }
219
+ else if (USE_BACKGROUND) {
220
+ bg = rtUniform.backgroundColor;
221
+ }
222
+ else if (USE_ENVMAP) {
223
+ bg = textureLinear(envMap, aS(ray.d));
224
+ }
225
+ return bg;
226
+ }
227
+
228
+ fn cW(ray: Ray, wavelength: f32) -> vec4f {
229
+ let bg = hE(ray);
230
+ if (SPECTRAL) {
231
+ return vec4f(ai(bg.rgb, wavelength), bg.a);
232
+ }
233
+ return bg;
234
+ }
235
+
236
+ fn bounce(uv: vec2f, aa: ptr<function, Path>, depth: ptr<function, i32>, si: ptr<function, ad>, ma: ptr<function, J>, outAux: ptr<function, RayTraceAuxiliary>) {
237
+ cE = u32(max(*depth, 0));
238
+ let matType = (*ma).materialType;
239
+ let isShadowCatcher = matType == SHADOW_CATCHER;
240
+ if (isShadowCatcher) {
241
+ if ((*aa).fromEye) {
242
+ (*si).hit = false;
243
+ }
244
+ else {
245
+
246
+
247
+
248
+ if (USE_ENVMAP) {
249
+ if ((*aa).isNextRefraction) {
250
+
251
+
252
+ let bg = cW(
253
+ (*aa).ray,
254
+ (*si).wavelength
255
+ );
256
+ let cT = select(fS((*aa).scatteringPdf,
257
+ iv(aS((*aa).ray.d)) * rtUniform.envLightPmf),
258
+ 1.0, (*aa).scatteringIsDelta);
259
+ (*aa).li += cT * (*aa).beta * bg.rgb * bg.a;
260
+ (*aa).alpha = max((*aa).alpha, bg.a);
261
+ }
262
+ else {
263
+ let tE = aS((*aa).ray.d);
264
+ var emission = textureLinear(envMap, tE).rgb;
265
+ if (SPECTRAL) {
266
+ emission = ai(emission, (*si).wavelength);
267
+ }
268
+ (*aa).li += (*aa).beta * emission *
269
+ fS((*aa).scatteringPdf, iv(tE));
270
+ }
271
+ }
272
+ else {
273
+ let bg = cW(
274
+ (*aa).ray,
275
+ (*si).wavelength
276
+ );
277
+ (*aa).li += (*aa).beta * bg.rgb * bg.a;
278
+ }
279
+ (*aa).abort = true;
280
+ return;
281
+ }
282
+ }
283
+ if (!(*si).hit) {
284
+
285
+
286
+
287
+ let bg = cW(
288
+ (*aa).ray,
289
+ (*si).wavelength
290
+ );
291
+ if ((*aa).fromEye) {
292
+
293
+ (*aa).li = (*aa).beta * bg.rgb * bg.a;
294
+ (*aa).alpha = bg.a;
295
+
296
+ (*outAux).isBlank = bg.a < 0.001 ||
297
+ (USE_BACKGROUND && !USE_BACKGROUND_MAP);
298
+ }
299
+ else {
300
+ let cam = hz(uv);
301
+ let mz = dot(cam.d, (*aa).ray.d) > 0.0;
302
+ if (rtUniform.transmissiveOutputAlphaMin < 1.0) {
303
+ if (mz) {
304
+ (*aa).alpha = max((*aa).alpha, bg.a);
305
+ } else {
306
+ (*aa).alpha = 1.0;
307
+ }
308
+ }
309
+ if (!USE_ENVMAP) {
310
+
311
+
312
+ if (mz) {
313
+
314
+
315
+ (*aa).li += (*aa).beta *
316
+ fS((*aa).scatteringPdf, 1.0) * bg.rgb;
317
+ }
318
+ }
319
+ }
320
+ (*aa).abort = true;
321
+ return;
322
+ }
323
+
324
+ var cG = false;
325
+ if ((matType == STANDARD || matType == UNLIT)) {
326
+ let alpha = clamp((*ma).alpha, 0.0, 1.0);
327
+
328
+ if (alpha < 1.0) {
329
+
330
+
331
+ if (alpha <= 0.0 || eo(3u) > alpha) {
332
+ cG = true;
333
+ }
334
+ }
335
+ if (!cG && rtUniform.transmissiveOutputAlphaMin < 1.0) {
336
+
337
+
338
+ let tK = max(1.0 - (*ma).transmissionWeight, 1.0 - pow(1.0 - rtUniform.transmissiveOutputAlphaMin, f32(*depth)));
339
+ (*aa).alpha = max(tK, (*aa).alpha);
340
+ }
341
+ if (!cG) {
342
+ tw = u32(max(*depth, 0));
343
+ lO(si, ma, aa);
344
+ }
345
+ else {
346
+
347
+
348
+ (*aa).ray.o = (*si).position + (*aa).ray.d * EPS;
349
+ }
350
+ }
351
+
352
+ if (!(*si).albedoSampled && !cG) {
353
+
354
+ if ((matType == STANDARD || matType == UNLIT)) {
355
+ if (!((*ma).transmissionWeight > 0.5 ||
356
+ ((*ma).specularRoughness <= 0.02 && (*ma).baseMetalness > 0.98))) {
357
+ (*outAux).albedo = (*ma).baseColor;
358
+ (*outAux).normal = select(
359
+ (*si).normal,
360
+ -(*si).normal,
361
+ dot(
362
+ (*si).normal,
363
+ (*si).position - cameraUniform.viewInv[3].xyz
364
+ ) > 0.0
365
+ );
366
+ (*si).albedoSampled = true;
367
+ }
368
+
369
+ if (*depth > 4) {
370
+ (*si).albedoSampled = true;
371
+ }
372
+ }
373
+ }
374
+
375
+
376
+ if (USE_RR) {
377
+ if (*depth >= RR_MAX && !cG) {
378
+ let ow = (*aa).beta;
379
+
380
+ let oj = max(max(ow.x, ow.y), ow.z);
381
+ let q: f32 = max(0.0, 1.0 - oj);
382
+ if (dz(cv(RUSSIAN_ROULETTE)) < q) {
383
+
384
+
385
+ (*aa).alpha = 1.0;
386
+ (*aa).abort = true;
387
+ }
388
+ else {
389
+ (*aa).beta /= 1.0 - q;
390
+ }
391
+ }
392
+ }
393
+ if ((*aa).abort) {
394
+ return;
395
+ }
396
+
397
+ cY((*aa).ray, si, *depth, true, (*aa).isNextRefraction);
398
+ eT(ma, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex);
399
+
400
+ if (SPECTRAL) {
401
+
402
+ if ((*ma).transmissionWeight > 0.001) {
403
+ (*ma).specularIor = eK(
404
+ (*si).wavelength,
405
+ (*ma).specularIor,
406
+ (*ma).transmissionDispersionScale,
407
+ (*ma).dispersionAbbeNumber
408
+ );
409
+ }
410
+ }
411
+
412
+ if (cG) {
413
+ return;
414
+ }
415
+
416
+
417
+ var lightSample: LightSampleRec;
418
+ let hu = eo(3u) < (*ma).alpha;
419
+ for (var i = 0; i < rtUniform.lightsCount; i++) {
420
+
421
+ let light: Light = analyticLights[i];
422
+ let d = mk((*aa).ray, light, &lightSample);
423
+ lightSample.pdf *= light.selectionPmf;
424
+ let mp = (*si).hit && d > distance((*si).position, (*aa).ray.o);
425
+ if (d != INF && !(mp && hu)) {
426
+ let eW = fS((*aa).scatteringPdf, lightSample.pdf);
427
+ if (SPECTRAL) {
428
+ lightSample.emission = ai(lightSample.emission, (*si).wavelength);
429
+ }
430
+ (*aa).li += eW * (*aa).beta * lightSample.emission;
431
+ (*aa).alpha = 1.0;
432
+ (*aa).abort = true;
433
+ }
434
+ }
435
+
436
+ if (USE_ENVMAP) {
437
+ if (!((*si).hit && hu)) {
438
+ if ((*aa).isNextRefraction) {
439
+
440
+
441
+
442
+ let bg = cW(
443
+ (*aa).ray,
444
+ (*si).wavelength
445
+ );
446
+ let cT = select(fS((*aa).scatteringPdf,
447
+ iv(aS((*aa).ray.d)) * rtUniform.envLightPmf),
448
+ 1.0, (*aa).scatteringIsDelta);
449
+ (*aa).li += cT * (*aa).beta * bg.rgb * bg.a;
450
+ (*aa).alpha = max((*aa).alpha, bg.a);
451
+ (*aa).abort = true;
452
+ return;
453
+ }
454
+ let _uv = aS((*aa).ray.d);
455
+ var emission = textureLinear(envMap, _uv).rgb;
456
+ let eW = fS(
457
+ (*aa).scatteringPdf,
458
+ iv(_uv) * rtUniform.envLightPmf
459
+ );
460
+ if (SPECTRAL) {
461
+ emission = ai(emission, (*si).wavelength);
462
+ }
463
+
464
+ if (!USE_BACKGROUND) {
465
+ (*aa).alpha = 1.0;
466
+ }
467
+ (*aa).li += (*aa).beta * emission * eW;
468
+ (*aa).abort = true;
469
+ }
470
+ }
471
+
472
+ *depth = *depth + 1;
473
+ }
474
+
475
+ fn hz(fD: vec2f) -> Ray {
476
+ let origin = cameraUniform.viewProjectionInv * vec4f(fD * 2.0 - 1.0, -1.0, 1.0);
477
+ let center = cameraUniform.viewProjectionInv * vec4f(fD * 2.0 - 1.0, 1.0, 1.0);
478
+ var cam: Ray;
479
+ iw(&cam, origin.xyz / origin.w, normalize(center.xyz * origin.w - origin.xyz * center.w));
480
+
481
+ return cam;
482
+ }
483
+
484
+
485
+ fn kn(radius: f32, xi: f32) -> vec2f {
486
+ var x = 0.25;
487
+ for (var np = 0; np < 10; np++) {
488
+ let x2 = x * x;
489
+ let x3 = x2 * x;
490
+ let kD = 1.0 - x;
491
+ let value = 10.0 * x2 - 20.0 * x3 + 15.0 * x2 * x2 -
492
+ 4.0 * x2 * x3 - xi;
493
+ let lV = 20.0 * x * kD * kD * kD;
494
+ if (abs(value) < 1e-6 || lV == 0.0) { break; }
495
+ x = clamp(x - value / lV, 0.0, 1.0);
496
+ }
497
+ let jh = x * radius;
498
+ return vec2f(jh, sqrt(max(radius * radius - jh * jh, 0.0)));
499
+ }
500
+
501
+ fn iN(radius: f32, gr: f32) -> f32 {
502
+ if (gr >= radius) { return 0.0; }
503
+ let nS = radius - gr;
504
+ return nS * nS * nS;
505
+ }
506
+
507
+
508
+ fn mf(source: ad, radius: f32) -> vec3f {
509
+ var geometricNormal = source.faceNormal;
510
+ if (dot(geometricNormal, source.vertexNormal) < 0.0) {
511
+ geometricNormal = -geometricNormal;
512
+ }
513
+ var tangent: vec3f;
514
+ var bitangent: vec3f;
515
+ aK(geometricNormal, &tangent, &bitangent);
516
+ var iB = vec3f(0.0);
517
+
518
+ for (var ib = 0; ib < BEVEL_SAMPLES; ib++) {
519
+ let oU = fk(CAMERA_BEVEL_BASE + u32(ib));
520
+ var cz = oU.x;
521
+ let ou = oU.y;
522
+ var di = geometricNormal;
523
+ var fE = tangent;
524
+ var ek = bitangent;
525
+ var fZ = 0.5;
526
+ var hV = 0.25;
527
+ var gy = 0.25;
528
+ if (cz < 0.5) {
529
+ cz *= 2.0;
530
+ }
531
+ else if (cz < 0.75) {
532
+ let mx = di;
533
+ di = fE;
534
+ fE = mx;
535
+ fZ = 0.25;
536
+ hV = 0.5;
537
+ cz = (cz - 0.5) * 4.0;
538
+ }
539
+ else {
540
+ let mx = di;
541
+ di = ek;
542
+ ek = mx;
543
+ fZ = 0.25;
544
+ gy = 0.5;
545
+ cz = (cz - 0.75) * 4.0;
546
+ }
547
+
548
+ let gO = kn(radius, ou);
549
+ let phi = TWOPI * cz;
550
+ let qj = gO.x *
551
+ (cos(phi) * fE + sin(phi) * ek);
552
+ var ray: Ray;
553
+ iw(
554
+ &ray,
555
+ source.position + di * gO.y + qj,
556
+ -di
557
+ );
558
+ var hit: ad;
559
+ iG(
560
+ ray,
561
+ &hit,
562
+ source.instanceIndex,
563
+ max(2.0 * gO.y, EPS)
564
+ );
565
+ if (!hit.hit) { continue; }
566
+
567
+ let kE = fZ * abs(dot(di, hit.faceNormal));
568
+ let mt = hV * abs(dot(fE, hit.faceNormal));
569
+ let jS = gy * abs(dot(ek, hit.faceNormal));
570
+ var weight = kE / max(
571
+ kE * kE + mt * mt +
572
+ jS * jS,
573
+ 1e-8
574
+ );
575
+ weight *= iN(radius, distance(hit.position, source.position)) /
576
+ max(iN(radius, gO.x), 1e-8);
577
+ iB += weight * hit.vertexNormal;
578
+ }
579
+
580
+ if (dot(iB, iB) <= 1e-12) { return source.normal; }
581
+ let jA = normalize(iB);
582
+ let result = source.normal + jA - source.vertexNormal;
583
+ if (dot(result, result) > 1e-12) { return normalize(result); }
584
+ return source.normal;
585
+ }
586
+
587
+ fn bw(uv: vec2f, si: ptr<function, ad>, ray: Ray, ma: ptr<function, J>, outAux: ptr<function, RayTraceAuxiliary>) -> vec4f {
588
+ var aa: Path;
589
+ aa.ray = ray;
590
+ aa.li = vec3f(0.0);
591
+ aa.alpha = select(1.0, 0.0, rtUniform.transmissiveOutputAlphaMin < 1.0);
592
+ aa.beta = vec3f(1.0);
593
+ aa.fromEye = true;
594
+ aa.scatteringPdf = 0.0;
595
+ aa.scatteringIsDelta = false;
596
+ aa.isNextRefraction = false;
597
+ aa.abort = false;
598
+
599
+ let rt = (*ma).transmissionWeight < 0.001 && (*ma).subsurfaceWeight < 0.001 && (*ma).alpha > 0.99;
600
+ let bounceLimit = max(rtUniform.bounces, 0);
601
+ var depth = 0;
602
+
603
+ for (var idx: i32 = 0; idx < min(bounceLimit * 3, ${MAX_PATH_EVENTS}); idx = idx + 1) {
604
+ if (rt && idx > bounceLimit) {
605
+ aa.abort = true;
606
+ }
607
+ if (aa.abort) {
608
+ break;
609
+ }
610
+ bounce(uv, &aa, &depth, si, ma, outAux);
611
+ }
612
+
613
+ return vec4f(aa.li, aa.alpha);
614
+ }
615
+
616
+ fn iz(uv: vec2f, si: ptr<function, ad>, ray: Ray, ma: ptr<function, J>, outAux: ptr<function, RayTraceAuxiliary>) -> vec4f {
617
+ ${deterministicPrimaryAlpha ? /* wgsl */ `let coverage = clamp((*ma).alpha, 0.0, 1.0);
618
+ if (!(*si).hit || ((*ma).materialType != STANDARD && (*ma).materialType != UNLIT) || coverage >= 1.0) {
619
+ return bw(uv, si, ray, ma, outAux);
620
+ }
621
+
622
+
623
+
624
+
625
+
626
+ var nK = ray;
627
+ nK.o = (*si).position + ray.d * (EPS * 0.02);
628
+ var dU = *si;
629
+ dU.albedoSampled = false;
630
+ cY(nK, &dU, 0, false, false);
631
+ var rd: J;
632
+ eT(&rd, dU.materialIndex, dU.uv, dU.uv1, dU.instanceIndex);
633
+ var gg = *outAux;
634
+ if (dU.hit && rd.materialType == STANDARD) {
635
+ gg.albedo = select(
636
+ rd.baseColor,
637
+ vec3f(1.0),
638
+ rd.transmissionWeight > 0.5
639
+ );
640
+ gg.normal = select(
641
+ dU.normal,
642
+ -dU.normal,
643
+ dot(
644
+ dU.normal,
645
+ dU.position - cameraUniform.viewInv[3].xyz
646
+ ) > 0.0
647
+ );
648
+ dU.albedoSampled = rd.transmissionWeight > 0.5;
649
+ }
650
+ let back = bw(
651
+ uv, &dU, nK, &rd, &gg
652
+ );
653
+ if (coverage <= 0.0) {
654
+ *outAux = gg;
655
+ return back;
656
+ }
657
+
658
+ var te = *si;
659
+ var ut = *ma;
660
+ ut.alpha = 1.0;
661
+ var iQ = *outAux;
662
+ let qL = bw(
663
+ uv, &te, ray, &ut, &iQ
664
+ );
665
+ (*outAux).albedo = mix(gg.albedo, iQ.albedo, coverage);
666
+ let fR = mix(gg.normal, iQ.normal, coverage);
667
+ (*outAux).normal = select(
668
+ vec3f(0.0),
669
+ normalize(fR),
670
+ dot(fR, fR) > 1e-12
671
+ );
672
+ (*outAux).isBlank = gg.isBlank && iQ.isBlank;
673
+ (*outAux).isShadowCatcher = gg.isShadowCatcher && iQ.isShadowCatcher;
674
+ return mix(back, qL, coverage);` : /* wgsl */ `return bw(uv, si, ray, ma, outAux);`}
675
+ }
676
+
677
+
678
+
679
+ fn mj(uv: vec2f, ray: Ray, outAux: ptr<function, RayTraceAuxiliary>) -> vec4f {
680
+ var si: ad;
681
+ var ma: J;
682
+ si.albedoSampled = false;
683
+ si.mediumType = 0;
684
+ si.mediumExtinction = vec3f(0.0);
685
+ si.mediumScattering = vec3f(0.0);
686
+ si.mediumAnisotropy = 0.0;
687
+ si.barycentrics = vec2f(0.0);
688
+
689
+
690
+ cY(ray, &si, 0, false, false);
691
+ eT(&ma, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
692
+
693
+ if (ma.materialType == SHADOW_CATCHER) {
694
+ (*outAux).isShadowCatcher = true;
695
+
696
+
697
+ (*outAux).albedo = vec3f(1.0);
698
+ (*outAux).normal = select(si.normal, -si.normal, dot(si.normal, ray.d) > 0.0);
699
+ var aa: Path;
700
+ aa.ray = ray;
701
+ aa.fromEye = true;
702
+ sampleShadowCatcher(si, 0, &aa);
703
+
704
+
705
+
706
+ return vec4f(vec3f(1.0), aa.alpha);
707
+ }
708
+ else {
709
+ if (HAS_BEVEL && rtUniform.bevel != 0) {
710
+ if (ma.bevel > 0.0) {
711
+ si.normal = mf(si, ma.bevel);
712
+ }
713
+ }
714
+
715
+
716
+
717
+ if (si.hit && (ma.materialType == STANDARD || ma.materialType == UNLIT)) {
718
+ (*outAux).albedo = select(ma.baseColor, vec3f(1.0), ma.transmissionWeight > 0.5);
719
+ (*outAux).normal = select(
720
+ si.normal,
721
+ -si.normal,
722
+ dot(si.normal, si.position - cameraUniform.viewInv[3].xyz) > 0.0
723
+ );
724
+
725
+
726
+
727
+ si.albedoSampled = ma.transmissionWeight > 0.5;
728
+ }
729
+
730
+ (*outAux).isShadowCatcher = false;
731
+
732
+ if (SPECTRAL) {
733
+
734
+
735
+
736
+
737
+ let sD = array<f32, 3>(650.0, 510.0, 475.0);
738
+ var tC = vec3f(0.0);
739
+ var alpha = 0.0;
740
+ var jw = vec3f(0.0);
741
+ var jx = vec3f(0.0);
742
+ var rS = true;
743
+ var si2 = si;
744
+ var ma2 = ma;
745
+ let qz = s0;
746
+ let nG = em;
747
+ let eh = rtUniform.dispersionWavelengths == 1;
748
+ let jF = si.hit &&
749
+ ma.transmissionWeight > 0.001 &&
750
+ ma.transmissionDispersionScale > 0.001;
751
+ let rR = select(3, 1, eh);
752
+ var lC = 0;
753
+ if (eh && jF) {
754
+
755
+
756
+ lC = min(i32(floor(dz(CAMERA_WAVELENGTH) * 3.0)), 2);
757
+ }
758
+ for (var i = 0; i < rR; i++) {
759
+
760
+
761
+
762
+ if (!eh) {
763
+ s0 = qz;
764
+ em = nG;
765
+ cE = 0u;
766
+ }
767
+ si.wavelength = 0.0;
768
+ if (!eh || jF) {
769
+ si.wavelength = sD[select(i, lC, eh)];
770
+ ma.specularIor = eK(
771
+ si.wavelength,
772
+ ma.specularIor,
773
+ ma.transmissionDispersionScale,
774
+ ma.dispersionAbbeNumber
775
+ );
776
+ }
777
+ var dD: RayTraceAuxiliary;
778
+ if (eh) {
779
+ dD = *outAux;
780
+ } else {
781
+ dD.albedo = (*outAux).albedo;
782
+ dD.normal = (*outAux).normal;
783
+ dD.isBlank = false;
784
+ dD.isShadowCatcher = false;
785
+ }
786
+ let res = iz(uv, &si, ray, &ma, &dD);
787
+ if (eh) {
788
+ *outAux = dD;
789
+ let scale = select(1.0, 3.0, jF);
790
+ return vec4f(res.rgb * scale, res.a);
791
+ }
792
+ tC += res.rgb;
793
+ alpha = max(alpha, res.a);
794
+ jw += dD.albedo;
795
+ jx += dD.normal;
796
+ rS = rS && dD.isBlank;
797
+ si = si2;
798
+ ma = ma2;
799
+ }
800
+ (*outAux).albedo = jw / 3.0;
801
+ (*outAux).normal = jx / 3.0;
802
+ (*outAux).isBlank = rS;
803
+ return vec4f(tC, alpha);
804
+ }
805
+ else {
806
+ return iz(uv, &si, ray, &ma, outAux);
807
+ }
808
+ }
809
+ }
810
+
811
+ fn oz(ip: vec2f) -> vec2f {
812
+ let p = 2.0 * ip - 1.0;
813
+ let greater = abs(p.x) > abs(p.y);
814
+ let r = select(p.y, p.x, greater);
815
+ let theta = select(PI * (0.5 - 0.25 * p.x / p.y), 0.25 * PI * p.y / p.x, greater);
816
+ return r * vec2f(cos(theta), sin(theta));
817
+ }
818
+
819
+
820
+ @compute @workgroup_size(${WORKGROUP_SIZE}, ${WORKGROUP_SIZE}, 1)
821
+ fn main(@builtin(global_invocation_id) globalId: vec3u) {
822
+ let outputSize = rtUniform.outputSize;
823
+ let scaleOffset = rtUniform.scaleOffset;
824
+ var jitter = rtUniform.jitter;
825
+
826
+ let fD = globalId.xy * vec2u(scaleOffset.xy) + vec2u(scaleOffset.zw);
827
+ if (fD.x >= u32(outputSize.x) || fD.y >= u32(outputSize.y)) {
828
+ return;
829
+ }
830
+ let idx = fD.x + fD.y * u32(outputSize.x);
831
+
832
+ if (
833
+ rtUniform.adaptiveSampling != 0 &&
834
+ outNormal[idx].a >= textureLoad(
835
+ adaptiveSampleTargets,
836
+ vec2i(fD),
837
+ 0
838
+ ).r
839
+ ) {
840
+ return;
841
+ }
842
+
843
+
844
+
845
+
846
+ let uv = (vec2<f32>(f32(fD.x), f32(fD.y)) + vec2f(0.5)) / outputSize;
847
+
848
+ bc = fD;
849
+ bd = u32(outNormal[idx].a) + rtUniform.sampleSequenceOffset;
850
+ cE = 0u; em = 0u;
851
+ if (SAMPLING_PATTERN == 0 || SAMPLING_PATTERN == 1) {
852
+ jitter = (fk(CAMERA_PIXEL) - 0.5) / outputSize;
853
+ }
854
+ jY(fD, i32(bd ^ eg(rtUniform.sequenceSeed)));
855
+ var cam = hz(uv + jitter);
856
+
857
+ if (cameraUniform.apertureRadius > 0.0) {
858
+
859
+ let eye = cameraUniform.viewInv[3].xyz;
860
+ let nV = -normalize(cameraUniform.viewInv[2].xyz);
861
+ let qm = eye + cam.d * (cameraUniform.focusDistance / dot(cam.d, nV));
862
+ let ru = cameraUniform.apertureRadius * oz(fk(CAMERA_LENS));
863
+ let origin = (cameraUniform.viewInv * vec4f(ru, 0.0, 1.0)).xyz;
864
+ let dir = normalize(qm - origin);
865
+ iw(&cam, origin, dir);
866
+ }
867
+
868
+ var outAux: RayTraceAuxiliary;
869
+ outAux.albedo = vec3f(0.0);
870
+ outAux.normal = vec3f(0.0);
871
+ outAux.isBlank = false;
872
+ outAux.isShadowCatcher = false;
873
+ var aN = mj(uv + jitter, cam, &outAux);
874
+
875
+
876
+
877
+ if (rtUniform.clamping > 0.0) {
878
+ let clamping = rtUniform.clamping;
879
+ aN = vec4(clamp(aN.rgb, -vec3f(clamping), vec3f(clamping)), aN.a);
880
+ }
881
+ if (!(aN.x < INF && aN.x > -EPS)) {
882
+ aN = vec4f(0.0, 0.0, 0.0, 1.0);
883
+ }
884
+
885
+ if (outAux.isShadowCatcher) {
886
+
887
+
888
+ let dn = hE(cam);
889
+ let pU = select(0.0, 1.0, dn.a >= 0.01);
890
+ let jo = vec4f(dn.rgb * dn.a, dn.a);
891
+
892
+
893
+ outShadowCatcher[idx].mask += vec4f(1.0, dn.a, pU, aN.a);
894
+ outShadowCatcher[idx].background += jo;
895
+ outColor[idx] += jo;
896
+ outAlbedo[idx] += vec4f(outAux.albedo, pU);
897
+ hH(idx, dn.rgb, outAux.normal);
898
+
899
+
900
+ let visibility = 1.0 - aN.a;
901
+ iM(idx, visibility * select(
902
+ 1.0, dot(dn.rgb, luminance), dn.a >= 0.01
903
+ ));
904
+ }
905
+ else {
906
+ outColor[idx] += aN;
907
+ outAlbedo[idx] += vec4f(outAux.albedo, select(1.0, 0.0, outAux.isBlank));
908
+ hH(idx, aN.rgb, outAux.normal);
909
+ iM(idx, dot(aN.rgb, luminance));
910
+ }
911
+ }
912
+ `;
913
+ // The query entry point shares the exact BVH and material implementation.
914
+ // It has no effect on the beauty entry point or its bindings.
915
+ // Gate optional material layers on scene-level feature flags so drivers can
916
+ // skip the unused BSDF lobes.
917
+ let specializedSource = source + depthQueryWGSL;
918
+ const backgroundBits = {
919
+ USE_BACKGROUND: 1,
920
+ USE_BACKGROUND_MAP: 2,
921
+ USE_GROUNDED_BACKGROUND: 4
922
+ };
923
+ specializedSource = specializedSource.replace(/\b(?:USE_BACKGROUND|USE_BACKGROUND_MAP|USE_GROUNDED_BACKGROUND)\b/g, (name) => `((rtUniform.backgroundFlags & ${backgroundBits[name]}) != 0)`);
924
+ specializedSource = specializedSource.replace(new RegExp(`\\b(?:${Object.keys(WGPU_SCENE_FEATURE_BITS).join('|')})\\b`, 'g'), name => `((rtUniform.sceneFeatureFlags & ${WGPU_SCENE_FEATURE_BITS[name]}u) != 0u)`);
925
+ return specializedSource;
926
+ }
927
+ //# sourceMappingURL=rayTrace.compute.js.map