@meimu/mutracer 0.1.4 → 0.2.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 (529) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +7 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +10421 -8363
  6. package/docs/api.md +202 -11
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +18 -27
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +19 -10
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +41 -3
  14. package/lib/Display.d.ts +13 -2
  15. package/lib/Display.js +27 -6
  16. package/lib/Display.js.map +1 -1
  17. package/lib/Engine.d.ts +2 -0
  18. package/lib/Engine.js +52 -25
  19. package/lib/Engine.js.map +1 -1
  20. package/lib/Render.d.ts +44 -9
  21. package/lib/Render.js +115 -17
  22. package/lib/Render.js.map +1 -1
  23. package/lib/RenderLoop.d.ts +7 -1
  24. package/lib/RenderLoop.js +94 -13
  25. package/lib/RenderLoop.js.map +1 -1
  26. package/lib/main.d.ts +6 -3
  27. package/lib/main.js +1 -0
  28. package/lib/main.js.map +1 -1
  29. package/lib/math/access.d.ts +4 -0
  30. package/lib/math/access.js +10 -0
  31. package/lib/math/access.js.map +1 -0
  32. package/lib/math/mat3.d.ts +4 -0
  33. package/lib/math/mat3.js +54 -0
  34. package/lib/math/mat3.js.map +1 -0
  35. package/lib/math/mat4.d.ts +19 -0
  36. package/lib/math/mat4.js +413 -0
  37. package/lib/math/mat4.js.map +1 -0
  38. package/lib/math/storage.d.ts +6 -0
  39. package/lib/math/storage.js +22 -0
  40. package/lib/math/storage.js.map +1 -0
  41. package/lib/math/types.d.ts +3 -0
  42. package/lib/math/types.js +2 -0
  43. package/lib/math/types.js.map +1 -0
  44. package/lib/math/vec2.d.ts +13 -0
  45. package/lib/math/vec2.js +52 -0
  46. package/lib/math/vec2.js.map +1 -0
  47. package/lib/math/vec3.d.ts +23 -0
  48. package/lib/math/vec3.js +139 -0
  49. package/lib/math/vec3.js.map +1 -0
  50. package/lib/math.d.ts +5 -17
  51. package/lib/math.js +5 -55
  52. package/lib/math.js.map +1 -1
  53. package/lib/oidn.d.ts +1 -1
  54. package/lib/oidn.js +4 -2
  55. package/lib/oidn.js.map +1 -1
  56. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  57. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  58. package/lib/renderer/AovPrimitiveCache.js +48 -0
  59. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  60. package/lib/renderer/Box3.d.ts +5 -0
  61. package/lib/renderer/Box3.js +9 -0
  62. package/lib/renderer/Box3.js.map +1 -0
  63. package/lib/renderer/GPUTraceQueue.d.ts +10 -0
  64. package/lib/renderer/GPUTraceQueue.js +31 -0
  65. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  66. package/lib/renderer/MaterialData.d.ts +15 -0
  67. package/lib/renderer/MaterialData.js +61 -0
  68. package/lib/renderer/MaterialData.js.map +1 -0
  69. package/lib/renderer/MaterialTable.d.ts +11 -98
  70. package/lib/renderer/MaterialTable.js +34 -412
  71. package/lib/renderer/MaterialTable.js.map +1 -1
  72. package/lib/renderer/RenderingPipeline.d.ts +32 -13
  73. package/lib/renderer/RenderingPipeline.js +1 -17
  74. package/lib/renderer/RenderingPipeline.js.map +1 -1
  75. package/lib/renderer/TileRender.d.ts +0 -1
  76. package/lib/renderer/TileRender.js +14 -1
  77. package/lib/renderer/TileRender.js.map +1 -1
  78. package/lib/renderer/WGPUAov.d.ts +39 -0
  79. package/lib/renderer/WGPUAov.js +239 -0
  80. package/lib/renderer/WGPUAov.js.map +1 -0
  81. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  82. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  83. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  85. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  86. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  87. package/lib/renderer/WGPUBloomPass.js +17 -97
  88. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  89. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  90. package/lib/renderer/WGPUComputePass.js.map +1 -1
  91. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  92. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  93. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  94. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  95. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  96. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  97. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  98. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  99. package/lib/renderer/WGPURayTraceOutput.js +26 -17
  100. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  101. package/lib/renderer/WGPURayTracePass.d.ts +36 -40
  102. package/lib/renderer/WGPURayTracePass.js +399 -548
  103. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  104. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  105. package/lib/renderer/WGPURenderingPipeline.js +239 -60
  106. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  107. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  108. package/lib/renderer/WGPUShaderCache.js +10 -5
  109. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  110. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  111. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  112. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  113. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  114. package/lib/renderer/WGPUSkyBaker.js +85 -0
  115. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  116. package/lib/renderer/WebGLAov.d.ts +41 -0
  117. package/lib/renderer/WebGLAov.js +106 -0
  118. package/lib/renderer/WebGLAov.js.map +1 -0
  119. package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
  120. package/lib/renderer/WebGLFullQuadPass.js +18 -2
  121. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  122. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  123. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  124. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  125. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  126. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  127. package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
  128. package/lib/renderer/WebGLRayTracePass.js +83 -7
  129. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  130. package/lib/renderer/WebGLRenderingPipeline.js +116 -8
  131. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  132. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  133. package/lib/renderer/WebGLSkyBaker.js +422 -0
  134. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  135. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  136. package/lib/renderer/WebGLSkySource.js +28 -0
  137. package/lib/renderer/WebGLSkySource.js.map +1 -0
  138. package/lib/renderer/accumulationTarget.d.ts +5 -0
  139. package/lib/renderer/accumulationTarget.js.map +1 -1
  140. package/lib/renderer/aov.d.ts +42 -0
  141. package/lib/renderer/aov.js +50 -0
  142. package/lib/renderer/aov.js.map +1 -0
  143. package/lib/renderer/aovDisplay.d.ts +14 -0
  144. package/lib/renderer/aovDisplay.js +32 -0
  145. package/lib/renderer/aovDisplay.js.map +1 -0
  146. package/lib/renderer/aovScene.d.ts +21 -0
  147. package/lib/renderer/aovScene.js +139 -0
  148. package/lib/renderer/aovScene.js.map +1 -0
  149. package/lib/renderer/binnedSahBvh.js +2 -1
  150. package/lib/renderer/binnedSahBvh.js.map +1 -1
  151. package/lib/renderer/bvhAccel.d.ts +20 -10
  152. package/lib/renderer/bvhAccel.js +168 -58
  153. package/lib/renderer/bvhAccel.js.map +1 -1
  154. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  155. package/lib/renderer/cameraSnapshot.js +2 -1
  156. package/lib/renderer/cameraSnapshot.js.map +1 -1
  157. package/lib/renderer/cameraUniform.d.ts +2 -0
  158. package/lib/renderer/cameraUniform.js +12 -0
  159. package/lib/renderer/cameraUniform.js.map +1 -0
  160. package/lib/renderer/committedScene.js +4 -0
  161. package/lib/renderer/committedScene.js.map +1 -1
  162. package/lib/renderer/denoiser.d.ts +3 -11
  163. package/lib/renderer/denoiser.js.map +1 -1
  164. package/lib/renderer/depthQuery.js +4 -1
  165. package/lib/renderer/depthQuery.js.map +1 -1
  166. package/lib/renderer/displacementPreparation.d.ts +11 -0
  167. package/lib/renderer/displacementPreparation.js +351 -0
  168. package/lib/renderer/displacementPreparation.js.map +1 -0
  169. package/lib/renderer/displacementRange.d.ts +1 -0
  170. package/lib/renderer/displacementRange.js +9 -0
  171. package/lib/renderer/displacementRange.js.map +1 -0
  172. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  173. package/lib/renderer/displayParityDiagnostics.js +2 -0
  174. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  175. package/lib/renderer/envMapCreation.d.ts +9 -8
  176. package/lib/renderer/envMapCreation.js +36 -12
  177. package/lib/renderer/envMapCreation.js.map +1 -1
  178. package/lib/renderer/envMapDistribution.d.ts +12 -2
  179. package/lib/renderer/envMapDistribution.js +43 -34
  180. package/lib/renderer/envMapDistribution.js.map +1 -1
  181. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  182. package/lib/renderer/geometryBvhBounds.js +82 -0
  183. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  184. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  185. package/lib/renderer/geometryUpdateState.js +2 -0
  186. package/lib/renderer/geometryUpdateState.js.map +1 -0
  187. package/lib/renderer/geometryUpdates.d.ts +17 -9
  188. package/lib/renderer/geometryUpdates.js +92 -33
  189. package/lib/renderer/geometryUpdates.js.map +1 -1
  190. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  191. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  192. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  193. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  194. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  195. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  196. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  198. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  200. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  201. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  205. package/lib/renderer/glsl/chunks/intersect.glsl.js +437 -435
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  209. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
  210. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  211. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  212. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  213. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +51 -51
  214. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  215. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  216. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +108 -108
  217. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  218. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  219. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  220. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  221. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  222. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  223. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  224. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  225. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  226. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  227. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  228. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  229. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  230. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  231. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  232. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  233. package/lib/renderer/lightConstants.d.ts +10 -0
  234. package/lib/renderer/lightConstants.js +11 -0
  235. package/lib/renderer/lightConstants.js.map +1 -0
  236. package/lib/renderer/lightCore.d.ts +12 -0
  237. package/lib/renderer/lightCore.js +13 -0
  238. package/lib/renderer/lightCore.js.map +1 -0
  239. package/lib/renderer/lightSampling.d.ts +20 -17
  240. package/lib/renderer/lightSampling.js +123 -56
  241. package/lib/renderer/lightSampling.js.map +1 -1
  242. package/lib/renderer/lightsData.d.ts +21 -0
  243. package/lib/renderer/lightsData.js +192 -0
  244. package/lib/renderer/lightsData.js.map +1 -0
  245. package/lib/renderer/lightsUtil.d.ts +3 -26
  246. package/lib/renderer/lightsUtil.js +3 -153
  247. package/lib/renderer/lightsUtil.js.map +1 -1
  248. package/lib/renderer/materialBufferData.d.ts +70 -0
  249. package/lib/renderer/materialBufferData.js +2 -0
  250. package/lib/renderer/materialBufferData.js.map +1 -0
  251. package/lib/renderer/materialConstants.d.ts +11 -0
  252. package/lib/renderer/materialConstants.js +11 -0
  253. package/lib/renderer/materialConstants.js.map +1 -1
  254. package/lib/renderer/materialCore.d.ts +8 -0
  255. package/lib/renderer/materialCore.js +9 -0
  256. package/lib/renderer/materialCore.js.map +1 -0
  257. package/lib/renderer/materialEmission.d.ts +2 -2
  258. package/lib/renderer/materialEmission.js +3 -3
  259. package/lib/renderer/materialEmission.js.map +1 -1
  260. package/lib/renderer/materialLayout.d.ts +2 -101
  261. package/lib/renderer/materialLayout.js +110 -172
  262. package/lib/renderer/materialLayout.js.map +1 -1
  263. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  264. package/lib/renderer/materialLayoutSchema.js +172 -0
  265. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  266. package/lib/renderer/materialParams.d.ts +69 -0
  267. package/lib/renderer/materialParams.js +272 -0
  268. package/lib/renderer/materialParams.js.map +1 -0
  269. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  270. package/lib/renderer/materialTextureSlots.js +21 -8
  271. package/lib/renderer/materialTextureSlots.js.map +1 -1
  272. package/lib/renderer/materialTextures.d.ts +6 -0
  273. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  274. package/lib/renderer/materialTextures.js.map +1 -0
  275. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  276. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  277. package/lib/renderer/meshInstances.d.ts +4 -21
  278. package/lib/renderer/meshInstances.js +10 -56
  279. package/lib/renderer/meshInstances.js.map +1 -1
  280. package/lib/renderer/oidnNetwork.d.ts +2 -2
  281. package/lib/renderer/oidnNetwork.js +1 -1
  282. package/lib/renderer/oidnNetwork.js.map +1 -1
  283. package/lib/renderer/openPbrEnergyLut.js +850 -846
  284. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  285. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  286. package/lib/renderer/ownedDenoiser.js +2 -0
  287. package/lib/renderer/ownedDenoiser.js.map +1 -0
  288. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  289. package/lib/renderer/packedMeshInstances.js +80 -0
  290. package/lib/renderer/packedMeshInstances.js.map +1 -0
  291. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  292. package/lib/renderer/prepareMeshBVH.js +21 -642
  293. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  294. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  295. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  296. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  297. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  298. package/lib/renderer/progressiveScheduler.js +3 -0
  299. package/lib/renderer/progressiveScheduler.js.map +1 -1
  300. package/lib/renderer/renderPipeline.d.ts +3 -1
  301. package/lib/renderer/renderPipeline.js.map +1 -1
  302. package/lib/renderer/renderingLimits.d.ts +9 -0
  303. package/lib/renderer/renderingLimits.js +18 -0
  304. package/lib/renderer/renderingLimits.js.map +1 -0
  305. package/lib/renderer/sceneAssembly.d.ts +73 -0
  306. package/lib/renderer/sceneAssembly.js +109 -0
  307. package/lib/renderer/sceneAssembly.js.map +1 -0
  308. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  309. package/lib/renderer/sceneChangeCore.js +307 -0
  310. package/lib/renderer/sceneChangeCore.js.map +1 -0
  311. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  312. package/lib/renderer/sceneChangeDetector.js +24 -150
  313. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  314. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  315. package/lib/renderer/sceneLayoutSchema.js +111 -0
  316. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  317. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  318. package/lib/renderer/sceneLightChanges.js.map +1 -1
  319. package/lib/renderer/scenePreparation.d.ts +55 -0
  320. package/lib/renderer/scenePreparation.js +360 -0
  321. package/lib/renderer/scenePreparation.js.map +1 -0
  322. package/lib/renderer/scratchSampling.js +18 -18
  323. package/lib/renderer/scratchSampling.js.map +1 -1
  324. package/lib/renderer/shader.d.ts +2 -0
  325. package/lib/renderer/shader.js +2 -0
  326. package/lib/renderer/shader.js.map +1 -1
  327. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  328. package/lib/renderer/shaderCapabilities.js +55 -0
  329. package/lib/renderer/shaderCapabilities.js.map +1 -0
  330. package/lib/renderer/shaderCapacity.d.ts +2 -0
  331. package/lib/renderer/shaderCapacity.js +5 -0
  332. package/lib/renderer/shaderCapacity.js.map +1 -0
  333. package/lib/renderer/skyModel.d.ts +9 -0
  334. package/lib/renderer/skyModel.js +10 -0
  335. package/lib/renderer/skyModel.js.map +1 -0
  336. package/lib/renderer/textureAtlas.d.ts +60 -0
  337. package/lib/renderer/textureAtlas.js +145 -0
  338. package/lib/renderer/textureAtlas.js.map +1 -0
  339. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  340. package/lib/renderer/textureAtlasPixels.js +68 -0
  341. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  342. package/lib/renderer/util.d.ts +1 -1
  343. package/lib/renderer/util.js.map +1 -1
  344. package/lib/renderer/webgl.d.ts +9 -2
  345. package/lib/renderer/webgl.js +54 -9
  346. package/lib/renderer/webgl.js.map +1 -1
  347. package/lib/renderer/wgpuBindless.d.ts +26 -0
  348. package/lib/renderer/wgpuBindless.js +95 -0
  349. package/lib/renderer/wgpuBindless.js.map +1 -0
  350. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  351. package/lib/renderer/wgpuBindlessSource.js +51 -0
  352. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  353. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  354. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  355. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  356. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  357. package/lib/renderer/wgpuSceneUniform.js +125 -0
  358. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  359. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  360. package/lib/renderer/wgpuShaderSource.js +31 -0
  361. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  362. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  363. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  364. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  367. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  369. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  370. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  372. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  373. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  375. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  376. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  378. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  379. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  381. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  382. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  383. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  384. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  385. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  386. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  388. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +743 -706
  389. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  390. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  391. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  393. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +86 -83
  394. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  395. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  396. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  397. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  398. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  399. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  400. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  401. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  403. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  404. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  406. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  408. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  409. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  410. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  411. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  412. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  413. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  415. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  416. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  418. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  419. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  420. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  421. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  422. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  423. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  424. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  425. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  426. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  427. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  428. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  430. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  431. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  432. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  433. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  434. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  435. package/lib/scene/Camera.js +7 -3
  436. package/lib/scene/Camera.js.map +1 -1
  437. package/lib/scene/EnvironmentLight.d.ts +5 -9
  438. package/lib/scene/EnvironmentLight.js +4 -14
  439. package/lib/scene/EnvironmentLight.js.map +1 -1
  440. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  441. package/lib/scene/EnvironmentLightState.js +19 -0
  442. package/lib/scene/EnvironmentLightState.js.map +1 -0
  443. package/lib/scene/Geometry.d.ts +12 -6
  444. package/lib/scene/Geometry.js +37 -13
  445. package/lib/scene/Geometry.js.map +1 -1
  446. package/lib/scene/InstanceState.d.ts +39 -0
  447. package/lib/scene/InstanceState.js +77 -0
  448. package/lib/scene/InstanceState.js.map +1 -0
  449. package/lib/scene/InstancedMesh.d.ts +1 -1
  450. package/lib/scene/InstancedMesh.js +3 -0
  451. package/lib/scene/InstancedMesh.js.map +1 -1
  452. package/lib/scene/MaterialState.d.ts +209 -0
  453. package/lib/scene/MaterialState.js +231 -0
  454. package/lib/scene/MaterialState.js.map +1 -0
  455. package/lib/scene/Mesh.d.ts +4 -6
  456. package/lib/scene/Mesh.js +3 -11
  457. package/lib/scene/Mesh.js.map +1 -1
  458. package/lib/scene/MeshState.d.ts +20 -0
  459. package/lib/scene/MeshState.js +35 -0
  460. package/lib/scene/MeshState.js.map +1 -0
  461. package/lib/scene/OpenPBRMaterial.d.ts +7 -169
  462. package/lib/scene/OpenPBRMaterial.js +5 -223
  463. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  464. package/lib/scene/PixelTexture.d.ts +6 -0
  465. package/lib/scene/PixelTexture.js +10 -0
  466. package/lib/scene/PixelTexture.js.map +1 -0
  467. package/lib/scene/ProceduralSky.d.ts +24 -0
  468. package/lib/scene/ProceduralSky.js +40 -0
  469. package/lib/scene/ProceduralSky.js.map +1 -0
  470. package/lib/scene/RectLight.d.ts +2 -13
  471. package/lib/scene/RectLight.js +3 -21
  472. package/lib/scene/RectLight.js.map +1 -1
  473. package/lib/scene/RectLightState.d.ts +31 -0
  474. package/lib/scene/RectLightState.js +26 -0
  475. package/lib/scene/RectLightState.js.map +1 -0
  476. package/lib/scene/Scene.d.ts +15 -4
  477. package/lib/scene/Scene.js.map +1 -1
  478. package/lib/scene/SceneNode.js +7 -6
  479. package/lib/scene/SceneNode.js.map +1 -1
  480. package/lib/scene/Texture.d.ts +10 -41
  481. package/lib/scene/Texture.js +4 -33
  482. package/lib/scene/Texture.js.map +1 -1
  483. package/lib/scene/TextureState.d.ts +35 -0
  484. package/lib/scene/TextureState.js +35 -0
  485. package/lib/scene/TextureState.js.map +1 -0
  486. package/lib/scene/attributeData.d.ts +4 -0
  487. package/lib/scene/attributeData.js +10 -0
  488. package/lib/scene/attributeData.js.map +1 -0
  489. package/lib/scene/lightState.d.ts +8 -0
  490. package/lib/scene/lightState.js +2 -0
  491. package/lib/scene/lightState.js.map +1 -0
  492. package/lib/scene/openPbrSchema.d.ts +7 -12
  493. package/lib/scene/openPbrSchema.js +273 -28
  494. package/lib/scene/openPbrSchema.js.map +1 -1
  495. package/lib/scene/skyParameters.d.ts +20 -0
  496. package/lib/scene/skyParameters.js +28 -0
  497. package/lib/scene/skyParameters.js.map +1 -0
  498. package/lib/scene/textureData.d.ts +9 -0
  499. package/lib/scene/textureData.js +2 -0
  500. package/lib/scene/textureData.js.map +1 -0
  501. package/lib/scene/texturePixels.d.ts +6 -0
  502. package/lib/scene/texturePixels.js +10 -0
  503. package/lib/scene/texturePixels.js.map +1 -0
  504. package/lib/settings/display.d.ts +33 -0
  505. package/lib/settings/display.js +7 -0
  506. package/lib/settings/display.js.map +1 -1
  507. package/lib/settings/render.d.ts +25 -3
  508. package/lib/settings/render.js +3 -1
  509. package/lib/settings/render.js.map +1 -1
  510. package/lib/tinybvh/tinybvh.wasm +0 -0
  511. package/lib/util/commonGeometry.js +7 -7
  512. package/lib/util/commonGeometry.js.map +1 -1
  513. package/lib/util/fromTHREE.d.ts +4 -1
  514. package/lib/util/fromTHREE.js +18 -5
  515. package/lib/util/fromTHREE.js.map +1 -1
  516. package/lib/util/geometry.js +42 -29
  517. package/lib/util/geometry.js.map +1 -1
  518. package/lib/util/loadRGBE.js +3 -4
  519. package/lib/util/loadRGBE.js.map +1 -1
  520. package/lib/util/studioLighting.d.ts +18 -0
  521. package/lib/util/studioLighting.js +36 -0
  522. package/lib/util/studioLighting.js.map +1 -0
  523. package/lib/version.d.ts +1 -1
  524. package/lib/version.js +1 -1
  525. package/lib/version.js.map +1 -1
  526. package/llms.txt +4 -0
  527. package/package.json +31 -5
  528. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  529. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -0,0 +1,135 @@
1
+ // Generated by scripts/generate-aov-reflectance-samples.mjs; do not edit.
2
+ // xy: concentric cosine disk; zw: spherical-cap azimuth cosine/sine.
3
+ export default /* wgsl */ `
4
+ const hp: array<vec4f, 128> = array<vec4f, 128>(
5
+ vec4f(-0.971247852, -0.202764958, 0.999698818, 0.0245412290),
6
+ vec4f(-0.808660269, 0.547487736, 0.997290432, 0.0735645667),
7
+ vec4f(-0.942509234, 0.187289074, 0.992479563, 0.122410677),
8
+ vec4f(-0.763038993, -0.558020830, 0.985277653, 0.170961902),
9
+ vec4f(-0.929654300, -0.00785388052, 0.975702107, 0.219101235),
10
+ vec4f(-0.656618595, 0.740912974, 0.963776052, 0.266712785),
11
+ vec4f(-0.817265987, 0.373183846, 0.949528158, 0.313681751),
12
+ vec4f(-0.793490529, -0.386950523, 0.932992816, 0.359895051),
13
+ vec4f(-0.860713601, -0.105764769, 0.914209723, 0.405241340),
14
+ vec4f(-0.604139447, 0.619064212, 0.893224299, 0.449611336),
15
+ vec4f(-0.787263036, 0.281084418, 0.870086968, 0.492898226),
16
+ vec4f(-0.673318744, -0.468566477, 0.844853580, 0.534997642),
17
+ vec4f(-0.799623907, 0.0901312605, 0.817584813, 0.575808227),
18
+ vec4f(-0.570307195, -0.676738262, 0.788346410, 0.615231633),
19
+ vec4f(-0.627450705, 0.452229142, 0.757208824, 0.653172851),
20
+ vec4f(-0.698281944, -0.294418186, 0.724247098, 0.689540565),
21
+ vec4f(-0.726036906, -0.153989345, 0.689540505, 0.724247098),
22
+ vec4f(-0.523753047, 0.608020604, 0.653172791, 0.757208884),
23
+ vec4f(-0.671607554, 0.233185455, 0.615231574, 0.788346410),
24
+ vec4f(-0.491990626, -0.494420350, 0.575808167, 0.817584813),
25
+ vec4f(-0.678437173, 0.0412081257, 0.534997642, 0.844853580),
26
+ vec4f(-0.495611340, -0.807542920, 0.492898196, 0.870086968),
27
+ vec4f(-0.508582473, 0.402262419, 0.449611306, 0.893224299),
28
+ vec4f(-0.537693322, -0.333672792, 0.405241281, 0.914209783),
29
+ vec4f(-0.614562631, -0.0568606183, 0.359894961, 0.932992816),
30
+ vec4f(-0.452296555, 0.809743226, 0.313681662, 0.949528217),
31
+ vec4f(-0.492342144, 0.317682207, 0.266712755, 0.963776052),
32
+ vec4f(-0.403601944, -0.406031638, 0.219101220, 0.975702107),
33
+ vec4f(-0.537260950, 0.137945175, 0.170961857, 0.985277653),
34
+ vec4f(-0.404928178, -0.715918541, 0.122410625, 0.992479563),
35
+ vec4f(-0.386338592, 0.556550741, 0.0735644922, 0.997290432),
36
+ vec4f(-0.445942074, -0.242918074, 0.0245411359, 0.999698818),
37
+ vec4f(-0.459759980, -0.175696611, -0.0245412234, 0.999698818),
38
+ vec4f(-0.359771132, 0.682195961, -0.0735645741, 0.997290432),
39
+ vec4f(-0.412575692, 0.205535084, -0.122410707, 0.992479503),
40
+ vec4f(-0.336475104, -0.646421731, -0.170961946, 0.985277653),
41
+ vec4f(-0.429363400, 0.0166855231, -0.219101310, 0.975702107),
42
+ vec4f(-0.319253087, -0.925218344, -0.266712844, 0.963776052),
43
+ vec4f(-0.294470191, 0.430103362, -0.313681722, 0.949528158),
44
+ vec4f(-0.281283021, -0.387403429, -0.359895051, 0.932992816),
45
+ vec4f(-0.358183086, -0.0808178857, -0.405241340, 0.914209723),
46
+ vec4f(-0.271769434, 0.854052365, -0.449611366, 0.893224299),
47
+ vec4f(-0.244775921, 0.311606824, -0.492898166, 0.870087028),
48
+ vec4f(-0.244355842, -0.552090824, -0.534997702, 0.844853520),
49
+ vec4f(-0.283291280, 0.112162955, -0.575808167, 0.817584813),
50
+ vec4f(-0.224362880, -0.823741674, -0.615231693, 0.788346350),
51
+ vec4f(-0.210826442, 0.610893846, -0.653172851, 0.757208824),
52
+ vec4f(-0.191608176, -0.297364026, -0.689540684, 0.724246979),
53
+ vec4f(-0.207833603, -0.124338157, -0.724247158, 0.689540505),
54
+ vec4f(-0.176593989, 0.814833522, -0.757208824, 0.653172851),
55
+ vec4f(-0.158949688, 0.293469012, -0.788346469, 0.615231514),
56
+ vec4f(-0.152046368, -0.648668587, -0.817584813, 0.575808167),
57
+ vec4f(-0.167782038, 0.0643178672, -0.844853640, 0.534997463),
58
+ vec4f(-0.128430068, -0.907204390, -0.870087028, 0.492898136),
59
+ vec4f(-0.115809105, 0.572147131, -0.893224299, 0.449611366),
60
+ vec4f(-0.103222348, -0.403248310, -0.914209783, 0.405241221),
61
+ vec4f(-0.112737618, -0.0319865458, -0.932992816, 0.359895051),
62
+ vec4f(-0.0796749964, 0.955433667, -0.949528217, 0.313681602),
63
+ vec4f(-0.0672519580, 0.453793734, -0.963776052, 0.266712725),
64
+ vec4f(-0.0551275201, -0.538435221, -0.975702167, 0.219101071),
65
+ vec4f(-0.0426490456, 0.204346836, -0.985277653, 0.170961812),
66
+ vec4f(-0.0306719355, -0.790655255, -0.992479503, 0.122410700),
67
+ vec4f(-0.0184057076, 0.708510995, -0.997290492, 0.0735644475),
68
+ vec4f(-0.00613544276, -0.291185349, -0.999698818, 0.0245412104),
69
+ vec4f(0.00613530306, -0.244297966, -0.999698818, -0.0245413855),
70
+ vec4f(0.0184059385, 0.755400777, -0.997290432, -0.0735646188),
71
+ vec4f(0.0306059923, 0.253786176, -0.992479503, -0.122410871),
72
+ vec4f(0.0429276451, -0.743136168, -0.985277653, -0.170961991),
73
+ vec4f(0.0701737553, 0.00441496586, -0.975702107, -0.219101235),
74
+ vec4f(0.0674433559, -0.992085159, -0.963776052, -0.266712904),
75
+ vec4f(0.0794365108, 0.499346048, -0.949528158, -0.313681781),
76
+ vec4f(0.0915081054, -0.485832185, -0.932992756, -0.359895200),
77
+ vec4f(0.101071075, -0.0861614645, -0.914209723, -0.405241400),
78
+ vec4f(0.116242222, 0.872919321, -0.893224180, -0.449611515),
79
+ vec4f(0.126407236, 0.359021723, -0.870086908, -0.492898285),
80
+ vec4f(0.139908314, -0.603366435, -0.844853580, -0.534997642),
81
+ vec4f(0.168981716, 0.0979395211, -0.817584693, -0.575808346),
82
+ vec4f(0.164669126, -0.853637457, -0.788346410, -0.615231633),
83
+ vec4f(0.175589874, 0.605686426, -0.757208705, -0.653172970),
84
+ vec4f(0.181917489, -0.321471483, -0.724247038, -0.689540625),
85
+ vec4f(0.219242185, -0.135647133, -0.689540565, -0.724247098),
86
+ vec4f(0.212299466, 0.790099680, -0.653172910, -0.757208765),
87
+ vec4f(0.208243251, 0.240495890, -0.615231574, -0.788346469),
88
+ vec4f(0.234419063, -0.640313387, -0.575808048, -0.817584932),
89
+ vec4f(0.315854102, 0.0532567836, -0.534997344, -0.844853759),
90
+ vec4f(0.260333687, -0.894772291, -0.492898196, -0.870086968),
91
+ vec4f(0.265374005, 0.502337217, -0.449611217, -0.893224359),
92
+ vec4f(0.267429054, -0.339113116, -0.405241072, -0.914209843),
93
+ vec4f(0.380209267, -0.0445682108, -0.359895110, -0.932992756),
94
+ vec4f(0.307221651, 0.891683638, -0.313681692, -0.949528217),
95
+ vec4f(0.296788067, 0.329054117, -0.266712576, -0.963776112),
96
+ vec4f(0.317195147, -0.457708418, -0.219100907, -0.975702226),
97
+ vec4f(0.419729054, 0.148764044, -0.170961887, -0.985277653),
98
+ vec4f(0.349995196, -0.727014899, -0.122410536, -0.992479563),
99
+ vec4f(0.356363803, 0.594497383, -0.0735642835, -0.997290492),
100
+ vec4f(0.434345096, -0.231501341, -0.0245412868, -0.999698818),
101
+ vec4f(0.480473697, -0.164373189, 0.0245413091, -0.999698818),
102
+ vec4f(0.392657876, 0.681903303, 0.0735647827, -0.997290432),
103
+ vec4f(0.492657542, 0.218807966, 0.122411035, -0.992479503),
104
+ vec4f(0.409054011, -0.584142148, 0.170961916, -0.985277653),
105
+ vec4f(0.569577277, 0.0289491210, 0.219101399, -0.975702107),
106
+ vec4f(0.442882210, -0.855257273, 0.266713053, -0.963775992),
107
+ vec4f(0.459734946, 0.387970626, 0.313681692, -0.949528217),
108
+ vec4f(0.513070345, -0.343044043, 0.359895140, -0.932992756),
109
+ vec4f(0.629031241, -0.0690753013, 0.405241549, -0.914209664),
110
+ vec4f(0.483215511, 0.773316741, 0.449611664, -0.893224120),
111
+ vec4f(0.586818159, 0.310843110, 0.492898226, -0.870086968),
112
+ vec4f(0.528679490, -0.427168757, 0.534997761, -0.844853461),
113
+ vec4f(0.683721542, 0.126429096, 0.575808465, -0.817584634),
114
+ vec4f(0.517971814, -0.658907175, 0.615231574, -0.788346410),
115
+ vec4f(0.548397303, 0.476606160, 0.653172910, -0.757208765),
116
+ vec4f(0.695181608, -0.259932309, 0.689540744, -0.724246919),
117
+ vec4f(0.748597383, -0.117820688, 0.724247038, -0.689540625),
118
+ vec4f(0.556980729, 0.641256869, 0.757208884, -0.653172791),
119
+ vec4f(0.741829991, 0.268901259, 0.788346529, -0.615231454),
120
+ vec4f(0.647817433, -0.477341115, 0.817584991, -0.575807929),
121
+ vec4f(0.816602290, 0.0779312477, 0.844853580, -0.534997642),
122
+ vec4f(0.599919200, -0.671730816, 0.870087087, -0.492898077),
123
+ vec4f(0.724726558, 0.447135508, 0.893224418, -0.449611068),
124
+ vec4f(0.810727239, -0.307791352, 0.914209723, -0.405241370),
125
+ vec4f(0.882583082, -0.0201240778, 0.932992816, -0.359894961),
126
+ vec4f(0.645550549, 0.729843259, 0.949528277, -0.313681543),
127
+ vec4f(0.839177251, 0.362342149, 0.963776171, -0.266712397),
128
+ vec4f(0.839526892, -0.399391353, 0.975702107, -0.219101220),
129
+ vec4f(0.928934336, 0.175204813, 0.985277653, -0.170961723),
130
+ vec4f(0.774228692, -0.569184363, 0.992479563, -0.122410372),
131
+ vec4f(0.815476179, 0.537282884, 0.997290432, -0.0735645965),
132
+ vec4f(0.968665719, -0.214761987, 0.999698818, -0.0245411228)
133
+ );
134
+ `;
135
+ //# sourceMappingURL=aovReflectanceSamples.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aovReflectanceSamples.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/aovReflectanceSamples.wgsl.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,eAAe,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmIzB,CAAC","sourcesContent":["// Generated by scripts/generate-aov-reflectance-samples.mjs; do not edit.\n// xy: concentric cosine disk; zw: spherical-cap azimuth cosine/sine.\nexport default /* wgsl */ `\nconst mtReflectanceProposals: array<vec4f, 128> = array<vec4f, 128>(\n vec4f(-0.971247852, -0.202764958, 0.999698818, 0.0245412290),\n vec4f(-0.808660269, 0.547487736, 0.997290432, 0.0735645667),\n vec4f(-0.942509234, 0.187289074, 0.992479563, 0.122410677),\n vec4f(-0.763038993, -0.558020830, 0.985277653, 0.170961902),\n vec4f(-0.929654300, -0.00785388052, 0.975702107, 0.219101235),\n vec4f(-0.656618595, 0.740912974, 0.963776052, 0.266712785),\n vec4f(-0.817265987, 0.373183846, 0.949528158, 0.313681751),\n vec4f(-0.793490529, -0.386950523, 0.932992816, 0.359895051),\n vec4f(-0.860713601, -0.105764769, 0.914209723, 0.405241340),\n vec4f(-0.604139447, 0.619064212, 0.893224299, 0.449611336),\n vec4f(-0.787263036, 0.281084418, 0.870086968, 0.492898226),\n vec4f(-0.673318744, -0.468566477, 0.844853580, 0.534997642),\n vec4f(-0.799623907, 0.0901312605, 0.817584813, 0.575808227),\n vec4f(-0.570307195, -0.676738262, 0.788346410, 0.615231633),\n vec4f(-0.627450705, 0.452229142, 0.757208824, 0.653172851),\n vec4f(-0.698281944, -0.294418186, 0.724247098, 0.689540565),\n vec4f(-0.726036906, -0.153989345, 0.689540505, 0.724247098),\n vec4f(-0.523753047, 0.608020604, 0.653172791, 0.757208884),\n vec4f(-0.671607554, 0.233185455, 0.615231574, 0.788346410),\n vec4f(-0.491990626, -0.494420350, 0.575808167, 0.817584813),\n vec4f(-0.678437173, 0.0412081257, 0.534997642, 0.844853580),\n vec4f(-0.495611340, -0.807542920, 0.492898196, 0.870086968),\n vec4f(-0.508582473, 0.402262419, 0.449611306, 0.893224299),\n vec4f(-0.537693322, -0.333672792, 0.405241281, 0.914209783),\n vec4f(-0.614562631, -0.0568606183, 0.359894961, 0.932992816),\n vec4f(-0.452296555, 0.809743226, 0.313681662, 0.949528217),\n vec4f(-0.492342144, 0.317682207, 0.266712755, 0.963776052),\n vec4f(-0.403601944, -0.406031638, 0.219101220, 0.975702107),\n vec4f(-0.537260950, 0.137945175, 0.170961857, 0.985277653),\n vec4f(-0.404928178, -0.715918541, 0.122410625, 0.992479563),\n vec4f(-0.386338592, 0.556550741, 0.0735644922, 0.997290432),\n vec4f(-0.445942074, -0.242918074, 0.0245411359, 0.999698818),\n vec4f(-0.459759980, -0.175696611, -0.0245412234, 0.999698818),\n vec4f(-0.359771132, 0.682195961, -0.0735645741, 0.997290432),\n vec4f(-0.412575692, 0.205535084, -0.122410707, 0.992479503),\n vec4f(-0.336475104, -0.646421731, -0.170961946, 0.985277653),\n vec4f(-0.429363400, 0.0166855231, -0.219101310, 0.975702107),\n vec4f(-0.319253087, -0.925218344, -0.266712844, 0.963776052),\n vec4f(-0.294470191, 0.430103362, -0.313681722, 0.949528158),\n vec4f(-0.281283021, -0.387403429, -0.359895051, 0.932992816),\n vec4f(-0.358183086, -0.0808178857, -0.405241340, 0.914209723),\n vec4f(-0.271769434, 0.854052365, -0.449611366, 0.893224299),\n vec4f(-0.244775921, 0.311606824, -0.492898166, 0.870087028),\n vec4f(-0.244355842, -0.552090824, -0.534997702, 0.844853520),\n vec4f(-0.283291280, 0.112162955, -0.575808167, 0.817584813),\n vec4f(-0.224362880, -0.823741674, -0.615231693, 0.788346350),\n vec4f(-0.210826442, 0.610893846, -0.653172851, 0.757208824),\n vec4f(-0.191608176, -0.297364026, -0.689540684, 0.724246979),\n vec4f(-0.207833603, -0.124338157, -0.724247158, 0.689540505),\n vec4f(-0.176593989, 0.814833522, -0.757208824, 0.653172851),\n vec4f(-0.158949688, 0.293469012, -0.788346469, 0.615231514),\n vec4f(-0.152046368, -0.648668587, -0.817584813, 0.575808167),\n vec4f(-0.167782038, 0.0643178672, -0.844853640, 0.534997463),\n vec4f(-0.128430068, -0.907204390, -0.870087028, 0.492898136),\n vec4f(-0.115809105, 0.572147131, -0.893224299, 0.449611366),\n vec4f(-0.103222348, -0.403248310, -0.914209783, 0.405241221),\n vec4f(-0.112737618, -0.0319865458, -0.932992816, 0.359895051),\n vec4f(-0.0796749964, 0.955433667, -0.949528217, 0.313681602),\n vec4f(-0.0672519580, 0.453793734, -0.963776052, 0.266712725),\n vec4f(-0.0551275201, -0.538435221, -0.975702167, 0.219101071),\n vec4f(-0.0426490456, 0.204346836, -0.985277653, 0.170961812),\n vec4f(-0.0306719355, -0.790655255, -0.992479503, 0.122410700),\n vec4f(-0.0184057076, 0.708510995, -0.997290492, 0.0735644475),\n vec4f(-0.00613544276, -0.291185349, -0.999698818, 0.0245412104),\n vec4f(0.00613530306, -0.244297966, -0.999698818, -0.0245413855),\n vec4f(0.0184059385, 0.755400777, -0.997290432, -0.0735646188),\n vec4f(0.0306059923, 0.253786176, -0.992479503, -0.122410871),\n vec4f(0.0429276451, -0.743136168, -0.985277653, -0.170961991),\n vec4f(0.0701737553, 0.00441496586, -0.975702107, -0.219101235),\n vec4f(0.0674433559, -0.992085159, -0.963776052, -0.266712904),\n vec4f(0.0794365108, 0.499346048, -0.949528158, -0.313681781),\n vec4f(0.0915081054, -0.485832185, -0.932992756, -0.359895200),\n vec4f(0.101071075, -0.0861614645, -0.914209723, -0.405241400),\n vec4f(0.116242222, 0.872919321, -0.893224180, -0.449611515),\n vec4f(0.126407236, 0.359021723, -0.870086908, -0.492898285),\n vec4f(0.139908314, -0.603366435, -0.844853580, -0.534997642),\n vec4f(0.168981716, 0.0979395211, -0.817584693, -0.575808346),\n vec4f(0.164669126, -0.853637457, -0.788346410, -0.615231633),\n vec4f(0.175589874, 0.605686426, -0.757208705, -0.653172970),\n vec4f(0.181917489, -0.321471483, -0.724247038, -0.689540625),\n vec4f(0.219242185, -0.135647133, -0.689540565, -0.724247098),\n vec4f(0.212299466, 0.790099680, -0.653172910, -0.757208765),\n vec4f(0.208243251, 0.240495890, -0.615231574, -0.788346469),\n vec4f(0.234419063, -0.640313387, -0.575808048, -0.817584932),\n vec4f(0.315854102, 0.0532567836, -0.534997344, -0.844853759),\n vec4f(0.260333687, -0.894772291, -0.492898196, -0.870086968),\n vec4f(0.265374005, 0.502337217, -0.449611217, -0.893224359),\n vec4f(0.267429054, -0.339113116, -0.405241072, -0.914209843),\n vec4f(0.380209267, -0.0445682108, -0.359895110, -0.932992756),\n vec4f(0.307221651, 0.891683638, -0.313681692, -0.949528217),\n vec4f(0.296788067, 0.329054117, -0.266712576, -0.963776112),\n vec4f(0.317195147, -0.457708418, -0.219100907, -0.975702226),\n vec4f(0.419729054, 0.148764044, -0.170961887, -0.985277653),\n vec4f(0.349995196, -0.727014899, -0.122410536, -0.992479563),\n vec4f(0.356363803, 0.594497383, -0.0735642835, -0.997290492),\n vec4f(0.434345096, -0.231501341, -0.0245412868, -0.999698818),\n vec4f(0.480473697, -0.164373189, 0.0245413091, -0.999698818),\n vec4f(0.392657876, 0.681903303, 0.0735647827, -0.997290432),\n vec4f(0.492657542, 0.218807966, 0.122411035, -0.992479503),\n vec4f(0.409054011, -0.584142148, 0.170961916, -0.985277653),\n vec4f(0.569577277, 0.0289491210, 0.219101399, -0.975702107),\n vec4f(0.442882210, -0.855257273, 0.266713053, -0.963775992),\n vec4f(0.459734946, 0.387970626, 0.313681692, -0.949528217),\n vec4f(0.513070345, -0.343044043, 0.359895140, -0.932992756),\n vec4f(0.629031241, -0.0690753013, 0.405241549, -0.914209664),\n vec4f(0.483215511, 0.773316741, 0.449611664, -0.893224120),\n vec4f(0.586818159, 0.310843110, 0.492898226, -0.870086968),\n vec4f(0.528679490, -0.427168757, 0.534997761, -0.844853461),\n vec4f(0.683721542, 0.126429096, 0.575808465, -0.817584634),\n vec4f(0.517971814, -0.658907175, 0.615231574, -0.788346410),\n vec4f(0.548397303, 0.476606160, 0.653172910, -0.757208765),\n vec4f(0.695181608, -0.259932309, 0.689540744, -0.724246919),\n vec4f(0.748597383, -0.117820688, 0.724247038, -0.689540625),\n vec4f(0.556980729, 0.641256869, 0.757208884, -0.653172791),\n vec4f(0.741829991, 0.268901259, 0.788346529, -0.615231454),\n vec4f(0.647817433, -0.477341115, 0.817584991, -0.575807929),\n vec4f(0.816602290, 0.0779312477, 0.844853580, -0.534997642),\n vec4f(0.599919200, -0.671730816, 0.870087087, -0.492898077),\n vec4f(0.724726558, 0.447135508, 0.893224418, -0.449611068),\n vec4f(0.810727239, -0.307791352, 0.914209723, -0.405241370),\n vec4f(0.882583082, -0.0201240778, 0.932992816, -0.359894961),\n vec4f(0.645550549, 0.729843259, 0.949528277, -0.313681543),\n vec4f(0.839177251, 0.362342149, 0.963776171, -0.266712397),\n vec4f(0.839526892, -0.399391353, 0.975702107, -0.219101220),\n vec4f(0.928934336, 0.175204813, 0.985277653, -0.170961723),\n vec4f(0.774228692, -0.569184363, 0.992479563, -0.122410372),\n vec4f(0.815476179, 0.537282884, 0.997290432, -0.0735645965),\n vec4f(0.968665719, -0.214761987, 0.999698818, -0.0245411228)\n);\n`;\n"]}
@@ -0,0 +1,5 @@
1
+ /** Shared normalization for readback and GPU denoiser snapshots. */
2
+ export declare const aovResolveCommon = "\nstruct AovResolvedAccumulation { geometry: vec4f, position: vec4f, diffuse: vec4f, specular: vec4f, }\nstruct AovResolvedCenter { identity: vec4u, motion: vec4f, }\n@group(0) @binding(0) var<storage,read> accumulation: array<AovResolvedAccumulation>;\n@group(0) @binding(1) var<storage,read> center: array<AovResolvedCenter>;\n@group(0) @binding(3) var<uniform> parameters: vec4u;\nfn aovResolvedValue(source: u32, kind: u32) -> vec4u {\n if(kind==5u){return center[source].identity;}\n var value=vec4f(0.0);\n if(kind==6u){let motion=center[source].motion;value=vec4f(motion.xy,0.0,motion.w);}\n else{\n let pixel=accumulation[source];let hits=pixel.position.w;\n let scale=select(0.0,1.0/max(hits,1.0),hits>0.0);let coverage=hits/f32(max(parameters.z,1u));\n if(kind==0u){value=vec4f(pixel.geometry.x*scale,0.0,0.0,coverage);}\n else if(kind==1u){value=vec4f(pixel.position.xyz*scale,coverage);}\n else if(kind==2u){value=vec4f(pixel.geometry.yzw*scale,coverage);}\n else{let reflectance=select(pixel.diffuse,pixel.specular,kind==4u);\n let inv=select(0.0,1.0/max(reflectance.w,1.0),reflectance.w>0.0);\n value=vec4f(reflectance.xyz*inv,reflectance.w/f32(max(parameters.z,1u)));\n }\n }\n return bitcast<vec4u>(value);\n}\n";
3
+ /** Bit 8 of kind requests top row first. Kept for the native single-output pass. */
4
+ declare const _default: string;
5
+ export default _default;
@@ -0,0 +1,38 @@
1
+ /** Shared normalization for readback and GPU denoiser snapshots. */
2
+ export const aovResolveCommon = /* wgsl */ `
3
+ struct AovResolvedAccumulation { geometry: vec4f, position: vec4f, diffuse: vec4f, specular: vec4f, }
4
+ struct AovResolvedCenter { identity: vec4u, motion: vec4f, }
5
+ @group(0) @binding(0) var<storage,read> accumulation: array<AovResolvedAccumulation>;
6
+ @group(0) @binding(1) var<storage,read> center: array<AovResolvedCenter>;
7
+ @group(0) @binding(3) var<uniform> parameters: vec4u;
8
+ fn ox(source: u32, kind: u32) -> vec4u {
9
+ if(kind==5u){return center[source].identity;}
10
+ var value=vec4f(0.0);
11
+ if(kind==6u){let motion=center[source].motion;value=vec4f(motion.xy,0.0,motion.w);}
12
+ else{
13
+ let pixel=accumulation[source];let hits=pixel.position.w;
14
+ let scale=select(0.0,1.0/max(hits,1.0),hits>0.0);let coverage=hits/f32(max(parameters.z,1u));
15
+ if(kind==0u){value=vec4f(pixel.geometry.x*scale,0.0,0.0,coverage);}
16
+ else if(kind==1u){value=vec4f(pixel.position.xyz*scale,coverage);}
17
+ else if(kind==2u){value=vec4f(pixel.geometry.yzw*scale,coverage);}
18
+ else{let reflectance=select(pixel.diffuse,pixel.specular,kind==4u);
19
+ let inv=select(0.0,1.0/max(reflectance.w,1.0),reflectance.w>0.0);
20
+ value=vec4f(reflectance.xyz*inv,reflectance.w/f32(max(parameters.z,1u)));
21
+ }
22
+ }
23
+ return bitcast<vec4u>(value);
24
+ }
25
+ `;
26
+ /** Bit 8 of kind requests top row first. Kept for the native single-output pass. */
27
+ export default aovResolveCommon + /* wgsl */ `
28
+ @group(0) @binding(2) var<storage,read_write> output: array<vec4u>;
29
+ @compute @workgroup_size(8,8)
30
+ fn main(@builtin(global_invocation_id) id: vec3u) {
31
+ let width=parameters.x;let height=parameters.y;
32
+ if(id.x>=width||id.y>=height){return;}
33
+ let index=id.x+id.y*width;
34
+ let source=id.x+select(id.y,height-1u-id.y,(parameters.w&256u)!=0u)*width;
35
+ output[index]=ox(source,parameters.w&255u);
36
+ }
37
+ `;
38
+ //# sourceMappingURL=aovResolve.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aovResolve.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/aovResolve.wgsl.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuB1C,CAAC;AACF,oFAAoF;AACpF,eAAe,gBAAgB,GAAG,UAAU,CAAC;;;;;;;;;;CAU5C,CAAC","sourcesContent":["/** Shared normalization for readback and GPU denoiser snapshots. */\nexport const aovResolveCommon = /* wgsl */ `\nstruct AovResolvedAccumulation { geometry: vec4f, position: vec4f, diffuse: vec4f, specular: vec4f, }\nstruct AovResolvedCenter { identity: vec4u, motion: vec4f, }\n@group(0) @binding(0) var<storage,read> accumulation: array<AovResolvedAccumulation>;\n@group(0) @binding(1) var<storage,read> center: array<AovResolvedCenter>;\n@group(0) @binding(3) var<uniform> parameters: vec4u;\nfn aovResolvedValue(source: u32, kind: u32) -> vec4u {\n if(kind==5u){return center[source].identity;}\n var value=vec4f(0.0);\n if(kind==6u){let motion=center[source].motion;value=vec4f(motion.xy,0.0,motion.w);}\n else{\n let pixel=accumulation[source];let hits=pixel.position.w;\n let scale=select(0.0,1.0/max(hits,1.0),hits>0.0);let coverage=hits/f32(max(parameters.z,1u));\n if(kind==0u){value=vec4f(pixel.geometry.x*scale,0.0,0.0,coverage);}\n else if(kind==1u){value=vec4f(pixel.position.xyz*scale,coverage);}\n else if(kind==2u){value=vec4f(pixel.geometry.yzw*scale,coverage);}\n else{let reflectance=select(pixel.diffuse,pixel.specular,kind==4u);\n let inv=select(0.0,1.0/max(reflectance.w,1.0),reflectance.w>0.0);\n value=vec4f(reflectance.xyz*inv,reflectance.w/f32(max(parameters.z,1u)));\n }\n }\n return bitcast<vec4u>(value);\n}\n`;\n/** Bit 8 of kind requests top row first. Kept for the native single-output pass. */\nexport default aovResolveCommon + /* wgsl */ `\n@group(0) @binding(2) var<storage,read_write> output: array<vec4u>;\n@compute @workgroup_size(8,8)\nfn main(@builtin(global_invocation_id) id: vec3u) {\n let width=parameters.x;let height=parameters.y;\n if(id.x>=width||id.y>=height){return;}\n let index=id.x+id.y*width;\n let source=id.x+select(id.y,height-1u-id.y,(parameters.w&256u)!=0u)*width;\n output[index]=aovResolvedValue(source,parameters.w&255u);\n}\n`;\n"]}
@@ -0,0 +1,4 @@
1
+ import { type AovKind } from '../aov.js';
2
+ export declare const AOV_SNAPSHOT_BATCH_SIZE = 6;
3
+ export declare const aovSnapshotBinding: (index: number) => number;
4
+ export declare function aovSnapshotShader(kinds: readonly AovKind[]): string;
@@ -0,0 +1,21 @@
1
+ import { AOV_KINDS } from '../aov.js';
2
+ import { aovResolveCommon } from './aovResolve.wgsl.js';
3
+ // Two input storage buffers leave six output slots on the baseline WebGPU
4
+ // eight-storage-buffer limit. Binding 3 remains the shared uniform binding.
5
+ export const AOV_SNAPSHOT_BATCH_SIZE = 6;
6
+ export const aovSnapshotBinding = (index) => index === 0 ? 2 : index + 3;
7
+ export function aovSnapshotShader(kinds) {
8
+ if (!kinds.length || kinds.length > AOV_SNAPSHOT_BATCH_SIZE)
9
+ throw new RangeError('Invalid AOV snapshot batch size');
10
+ return aovResolveCommon + kinds.map((_, i) => `@group(0) @binding(${aovSnapshotBinding(i)}) var<storage,read_write> output${i}: array<vec4u>;`).join('\n') + /* wgsl */ `
11
+ @compute @workgroup_size(8,8)
12
+ fn main(@builtin(global_invocation_id) id: vec3u) {
13
+ let width=parameters.x;let height=parameters.y;
14
+ if(id.x>=width||id.y>=height){return;}
15
+ let index=id.x+id.y*width;
16
+ let source=id.x+(height-1u-id.y)*width;
17
+ ${kinds.map((kind, i) => `output${i}[index]=ox(source,${AOV_KINDS.indexOf(kind)}u);`).join('\n ')}
18
+ }
19
+ `;
20
+ }
21
+ //# sourceMappingURL=aovSnapshot.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aovSnapshot.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/aovSnapshot.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAe,MAAM,WAAW,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAEtD,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAEjF,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,uBAAuB;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IACrH,OAAO,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3C,sBAAsB,kBAAkB,CAAC,CAAC,CAAC,mCAAmC,CAAC,iBAAiB,CACjG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;;;;;;;EAOxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,qBAAmC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;CAEjH,CAAC;AACF,CAAC","sourcesContent":["import {AOV_KINDS, type AovKind} from '../aov.js';\nimport {aovResolveCommon} from './aovResolve.wgsl.js';\n\n// Two input storage buffers leave six output slots on the baseline WebGPU\n// eight-storage-buffer limit. Binding 3 remains the shared uniform binding.\nexport const AOV_SNAPSHOT_BATCH_SIZE = 6;\nexport const aovSnapshotBinding = (index: number) => index === 0 ? 2 : index + 3;\n\nexport function aovSnapshotShader(kinds: readonly AovKind[]): string {\n if (!kinds.length || kinds.length > AOV_SNAPSHOT_BATCH_SIZE) throw new RangeError('Invalid AOV snapshot batch size');\n return aovResolveCommon + kinds.map((_, i) =>\n `@group(0) @binding(${aovSnapshotBinding(i)}) var<storage,read_write> output${i}: array<vec4u>;`\n ).join('\\n') + /* wgsl */ `\n@compute @workgroup_size(8,8)\nfn main(@builtin(global_invocation_id) id: vec3u) {\n let width=parameters.x;let height=parameters.y;\n if(id.x>=width||id.y>=height){return;}\n let index=id.x+id.y*width;\n let source=id.x+(height-1u-id.y)*width;\n ${kinds.map((kind, i) => `output${i}[index]=aovResolvedValue(source,${AOV_KINDS.indexOf(kind)}u);`).join('\\n ')}\n}\n`;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: "\noverride AOV_REFLECTANCE: bool = true;\nstruct AovAccumulation {\n depthRoughness: vec4f,\n position: vec4f,\n diffuse: vec4f,\n specular: vec4f,\n}\nstruct AovCenter { identity: vec4u, motion: vec4f, }\n@group(3) @binding(5) var<storage, read_write> aovAccum: array<AovAccumulation>;\n@group(3) @binding(6) var<storage, read_write> aovCenter: array<AovCenter>;\n@group(3) @binding(7) var<storage, read> aovScene: array<u32>;\n@group(3) @binding(9) var<storage, read> aovPrevious: array<AovCenter>;\n@group(3) @binding(8) var<uniform> aovParameters: vec4u;\n\nfn aovMatrix(offset: u32) -> mat4x4f {\n return mat4x4f(bitcast<vec4f>(vec4u(aovScene[offset], aovScene[offset+1u], aovScene[offset+2u], aovScene[offset+3u])),\n bitcast<vec4f>(vec4u(aovScene[offset+4u], aovScene[offset+5u], aovScene[offset+6u], aovScene[offset+7u])),\n bitcast<vec4f>(vec4u(aovScene[offset+8u], aovScene[offset+9u], aovScene[offset+10u], aovScene[offset+11u])),\n bitcast<vec4f>(vec4u(aovScene[offset+12u], aovScene[offset+13u], aovScene[offset+14u], aovScene[offset+15u])));\n}\nfn aovVector(offset:u32)->vec3f {return bitcast<vec3f>(vec3u(aovScene[offset],aovScene[offset+1u],aovScene[offset+2u]));}\nfn aovSurface(rayInput: Ray, si: ptr<function, SurfaceInteraction>, material: ptr<function, OpenPbrResolvedMaterial>) -> bool {\n var ray = rayInput;\n (*si).triangleIndex = -1;\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, si, 0, false, false);\n if (!(*si).hit) { return false; }\n getMaterial(material, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex, (*si).vertexColor);\n if ((*material).materialType != SHADOW_CATCHER && (*material).alpha >= 0.5) { return true; }\n ray.o = (*si).position + ray.d * (EPS * 0.02);\n }\n return false;\n}\n@compute @workgroup_size(8, 8)\nfn aovTrace(@builtin(global_invocation_id) id: vec3u) {\n let size = aovParameters.xy;\n if (any(id.xy >= size)) { return; }\n let index = id.x + id.y * size.x;\n let sample = aovParameters.z;\n if (sample == 0u) { aovAccum[index] = AovAccumulation(); }\n samplingPixel = id.xy; pixelSampleIndex = sample + rtUniform.sampleSequenceOffset;\n samplingBounce = 0u; hashedCounter = 0u;\n rng_initialize(id.xy, i32(pixelSampleIndex ^ sampleHash(rtUniform.sequenceSeed)));\n let uv = (vec2f(id.xy) + sample2D(CAMERA_PIXEL)) / vec2f(size);\n var ray = initCameraRay(uv);\n if (cameraUniform.apertureRadius > 0.0) {\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n let focusPoint = eye + ray.d * (cameraUniform.focusDistance / dot(ray.d, forward));\n let lens = cameraUniform.apertureRadius * sampleCircle(sample2D(CAMERA_LENS));\n let origin = (cameraUniform.viewInv * vec4f(lens, 0.0, 1.0)).xyz;\n initRay(&ray, origin, normalize(focusPoint-origin));\n }\n var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;\n if (!aovSurface(ray, &si, &material)) { return; }\n let depth = max(dot(si.position-cameraUniform.viewInv[3].xyz, -normalize(cameraUniform.viewInv[2].xyz)), 0.0);\n let unsupported = (material.materialType != STANDARD) | (material.alpha < 1.0) |\n (material.coatWeight > 0.0) | (material.fuzzWeight > 0.0) |\n (material.specularAnisotropy > 0.0) | (material.subsurfaceWeight > 0.0) |\n (dot(material.mediumScattering, material.mediumScattering) > 0.0) |\n (material.bevel > 0.0) | (material.thinFilmWeight > 0.0) |\n (material.transmissionDispersionScale > 0.0);\n aovAccum[index].depthRoughness += vec4f(depth, material.specularRoughness, material.baseMetalness, select(0.0,1.0,unsupported));\n if (AOV_REFLECTANCE && (aovParameters.w & 24u) != 0u && !unsupported) {\n var normal=si.normal; var face=si.faceNormal;\n var cosine=-dot(normal,ray.d); var faceCosine=-dot(face,ray.d);\n if (material.thinWalled && (material.transmissionWeight>0.0 || material.subsurfaceWeight>0.0)) {\n if(cosine<0.0){normal=-normal;cosine=-cosine;}\n if(faceCosine<0.0){face=-face;faceCosine=-faceCosine;}\n }\n if(faceCosine>=0.0 && cosine<0.0){normal=face;cosine=faceCosine;}\n normal=select(-normal,normal,cosine>=0.0);\n material.inside=(cosine<=0.0) && !material.thinWalled;\n material.relativeIor=select(material.specularIor,1.0/material.specularIor,cosine>0.0);\n let prepared=openpbr_prepare(si.tangent,material,-ray.d,normal);\n let reflectance=mtFrameReflectanceComponents(prepared, (aovParameters.w & 8u) != 0u, (aovParameters.w & 16u) != 0u);\n aovAccum[index].diffuse+=vec4f(reflectance.diffuse,1.0);\n aovAccum[index].specular+=vec4f(reflectance.specular,1.0);\n }\n aovAccum[index].position += vec4f(si.position, 1.0);\n}\n@compute @workgroup_size(8, 8)\nfn aovTraceCenter(@builtin(global_invocation_id) id: vec3u) {\n let size = aovParameters.xy;\n if (any(id.xy >= size)) { return; }\n let index = id.x + id.y * size.x;\n aovCenter[index] = AovCenter(vec4u(0xffffffffu), vec4f(0.0));\n let uv = (vec2f(id.xy) + 0.5) / vec2f(size);\n let ray = initCameraRay(uv);\n var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;\n if (!aovSurface(ray, &si, &material)) { return; }\n let offset = 52u + u32(si.instanceIndex) * 24u;\n let materialOffset = aovScene[16u];\n let primitiveOffset = aovScene[17u];\n aovCenter[index].identity = vec4u(aovScene[offset], aovScene[offset+1u],\n aovScene[materialOffset + u32(si.materialIndex)], aovScene[primitiveOffset + u32(si.triangleIndex)]);\n aovCenter[index].motion.z = dot(si.position-aovVector(36u),aovVector(40u));\n if (aovScene[offset+2u] == 0u) { return; }\n let oldWorld = aovMatrix(offset+4u) * vec4f(si.position,1.0);\n let oldClip = aovMatrix(0u) * oldWorld;\n if (oldClip.w <= 0.0) { return; }\n let oldNdc=oldClip.xyz/oldClip.w;\n let oldPixel=(oldNdc.xy*0.5+0.5)*vec2f(size);\n if (any(oldPixel < vec2f(0.0)) || any(oldPixel >= vec2f(size)) || abs(oldNdc.z)>1.0) { return; }\n let previous=aovPrevious[u32(oldPixel.x)+u32(oldPixel.y)*size.x];\n let oldDepth=dot(oldWorld.xyz-aovVector(44u),aovVector(48u));\n if (any(previous.identity.xy != aovCenter[index].identity.xy) || abs(previous.motion.z-oldDepth)>max(1e-4,abs(oldDepth)*1e-3)) { return; }\n let motion=(oldPixel-(vec2f(id.xy)+0.5))*vec2f(1.0,-1.0);\n aovCenter[index].motion=vec4f(motion,aovCenter[index].motion.z,3.0);\n}\n";
2
+ export default _default;
@@ -0,0 +1,115 @@
1
+ // These entry points use their own output bindings and never mutate beauty RNG
2
+ // state or accumulation. Storage usage remains four scene + three AOV buffers.
3
+ export default /* wgsl */ `
4
+ override AOV_REFLECTANCE: bool = true;
5
+ struct AovAccumulation {
6
+ depthRoughness: vec4f,
7
+ position: vec4f,
8
+ diffuse: vec4f,
9
+ specular: vec4f,
10
+ }
11
+ struct AovCenter { identity: vec4u, motion: vec4f, }
12
+ @group(3) @binding(5) var<storage, read_write> aovAccum: array<AovAccumulation>;
13
+ @group(3) @binding(6) var<storage, read_write> aovCenter: array<AovCenter>;
14
+ @group(3) @binding(7) var<storage, read> aovScene: array<u32>;
15
+ @group(3) @binding(9) var<storage, read> aovPrevious: array<AovCenter>;
16
+ @group(3) @binding(8) var<uniform> aovParameters: vec4u;
17
+
18
+ fn ow(offset: u32) -> mat4x4f {
19
+ return mat4x4f(bitcast<vec4f>(vec4u(aovScene[offset], aovScene[offset+1u], aovScene[offset+2u], aovScene[offset+3u])),
20
+ bitcast<vec4f>(vec4u(aovScene[offset+4u], aovScene[offset+5u], aovScene[offset+6u], aovScene[offset+7u])),
21
+ bitcast<vec4f>(vec4u(aovScene[offset+8u], aovScene[offset+9u], aovScene[offset+10u], aovScene[offset+11u])),
22
+ bitcast<vec4f>(vec4u(aovScene[offset+12u], aovScene[offset+13u], aovScene[offset+14u], aovScene[offset+15u])));
23
+ }
24
+ fn iN(offset:u32)->vec3f {return bitcast<vec3f>(vec3u(aovScene[offset],aovScene[offset+1u],aovScene[offset+2u]));}
25
+ fn mQ(xe: Ray, si: ptr<function, SurfaceInteraction>, material: ptr<function, OpenPbrResolvedMaterial>) -> bool {
26
+ var ray = xe;
27
+ (*si).triangleIndex = -1;
28
+ for (var layer = 0; layer < 32; layer++) {
29
+ intersectScene(ray, si, 0, false, false);
30
+ if (!(*si).hit) { return false; }
31
+ dg(material, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex, (*si).vertexColor);
32
+ if ((*material).materialType != SHADOW_CATCHER && (*material).alpha >= 0.5) { return true; }
33
+ ray.o = (*si).position + ray.d * (EPS * 0.02);
34
+ }
35
+ return false;
36
+ }
37
+ @compute @workgroup_size(8, 8)
38
+ fn aovTrace(@builtin(global_invocation_id) id: vec3u) {
39
+ let size = aovParameters.xy;
40
+ if (any(id.xy >= size)) { return; }
41
+ let index = id.x + id.y * size.x;
42
+ let sample = aovParameters.z;
43
+ if (sample == 0u) { aovAccum[index] = AovAccumulation(); }
44
+ aZ = id.xy; aQ = sample + rtUniform.sampleSequenceOffset;
45
+ bT = 0u; cP = 0u;
46
+ gW(id.xy, i32(aQ ^ dG(rtUniform.sequenceSeed)));
47
+ let uv = (vec2f(id.xy) + dZ(CAMERA_PIXEL)) / vec2f(size);
48
+ var ray = fj(uv);
49
+ if (cameraUniform.apertureRadius > 0.0) {
50
+ let eye = cameraUniform.viewInv[3].xyz;
51
+ let forward = -normalize(cameraUniform.viewInv[2].xyz);
52
+ let jN = eye + ray.d * (cameraUniform.focusDistance / dot(ray.d, forward));
53
+ let xU = cameraUniform.apertureRadius * kN(dZ(CAMERA_LENS));
54
+ let origin = (cameraUniform.viewInv * vec4f(xU, 0.0, 1.0)).xyz;
55
+ gC(&ray, origin, normalize(jN-origin));
56
+ }
57
+ var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;
58
+ if (!mQ(ray, &si, &material)) { return; }
59
+ let depth = max(dot(si.position-cameraUniform.viewInv[3].xyz, -normalize(cameraUniform.viewInv[2].xyz)), 0.0);
60
+ let unsupported = (material.materialType != STANDARD) | (material.alpha < 1.0) |
61
+ (material.coatWeight > 0.0) | (material.fuzzWeight > 0.0) |
62
+ (material.specularAnisotropy > 0.0) | (material.subsurfaceWeight > 0.0) |
63
+ (dot(material.mediumScattering, material.mediumScattering) > 0.0) |
64
+ (material.bevel > 0.0) | (material.thinFilmWeight > 0.0) |
65
+ (material.transmissionDispersionScale > 0.0);
66
+ aovAccum[index].depthRoughness += vec4f(depth, material.specularRoughness, material.baseMetalness, select(0.0,1.0,unsupported));
67
+ if (AOV_REFLECTANCE && (aovParameters.w & 24u) != 0u && !unsupported) {
68
+ var normal=si.normal; var face=si.faceNormal;
69
+ var cosine=-dot(normal,ray.d); var fu=-dot(face,ray.d);
70
+ if (material.thinWalled && (material.transmissionWeight>0.0 || material.subsurfaceWeight>0.0)) {
71
+ if(cosine<0.0){normal=-normal;cosine=-cosine;}
72
+ if(fu<0.0){face=-face;fu=-fu;}
73
+ }
74
+ if(fu>=0.0 && cosine<0.0){normal=face;cosine=fu;}
75
+ normal=select(-normal,normal,cosine>=0.0);
76
+ material.inside=(cosine<=0.0) && !material.thinWalled;
77
+ material.relativeIor=select(material.specularIor,1.0/material.specularIor,cosine>0.0);
78
+ let prepared=ds(si.tangent,material,-ray.d,normal);
79
+ let reflectance=hN(prepared, (aovParameters.w & 8u) != 0u, (aovParameters.w & 16u) != 0u);
80
+ aovAccum[index].diffuse+=vec4f(reflectance.diffuse,1.0);
81
+ aovAccum[index].specular+=vec4f(reflectance.specular,1.0);
82
+ }
83
+ aovAccum[index].position += vec4f(si.position, 1.0);
84
+ }
85
+ @compute @workgroup_size(8, 8)
86
+ fn aovTraceCenter(@builtin(global_invocation_id) id: vec3u) {
87
+ let size = aovParameters.xy;
88
+ if (any(id.xy >= size)) { return; }
89
+ let index = id.x + id.y * size.x;
90
+ aovCenter[index] = AovCenter(vec4u(0xffffffffu), vec4f(0.0));
91
+ let uv = (vec2f(id.xy) + 0.5) / vec2f(size);
92
+ let ray = fj(uv);
93
+ var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;
94
+ if (!mQ(ray, &si, &material)) { return; }
95
+ let offset = 52u + u32(si.instanceIndex) * 24u;
96
+ let materialOffset = aovScene[16u];
97
+ let primitiveOffset = aovScene[17u];
98
+ aovCenter[index].identity = vec4u(aovScene[offset], aovScene[offset+1u],
99
+ aovScene[materialOffset + u32(si.materialIndex)], aovScene[primitiveOffset + u32(si.triangleIndex)]);
100
+ aovCenter[index].motion.z = dot(si.position-iN(36u),iN(40u));
101
+ if (aovScene[offset+2u] == 0u) { return; }
102
+ let qA = ow(offset+4u) * vec4f(si.position,1.0);
103
+ let ps = ow(0u) * qA;
104
+ if (ps.w <= 0.0) { return; }
105
+ let tX=ps.xyz/ps.w;
106
+ let iz=(tX.xy*0.5+0.5)*vec2f(size);
107
+ if (any(iz < vec2f(0.0)) || any(iz >= vec2f(size)) || abs(tX.z)>1.0) { return; }
108
+ let previous=aovPrevious[u32(iz.x)+u32(iz.y)*size.x];
109
+ let qz=dot(qA.xyz-iN(44u),iN(48u));
110
+ if (any(previous.identity.xy != aovCenter[index].identity.xy) || abs(previous.motion.z-qz)>max(1e-4,abs(qz)*1e-3)) { return; }
111
+ let motion=(iz-(vec2f(id.xy)+0.5))*vec2f(1.0,-1.0);
112
+ aovCenter[index].motion=vec4f(motion,aovCenter[index].motion.z,3.0);
113
+ }
114
+ `;
115
+ //# sourceMappingURL=aovTrace.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aovTrace.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/aovTrace.wgsl.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,eAAe,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GzB,CAAC","sourcesContent":["// These entry points use their own output bindings and never mutate beauty RNG\n// state or accumulation. Storage usage remains four scene + three AOV buffers.\nexport default /* wgsl */ `\noverride AOV_REFLECTANCE: bool = true;\nstruct AovAccumulation {\n depthRoughness: vec4f,\n position: vec4f,\n diffuse: vec4f,\n specular: vec4f,\n}\nstruct AovCenter { identity: vec4u, motion: vec4f, }\n@group(3) @binding(5) var<storage, read_write> aovAccum: array<AovAccumulation>;\n@group(3) @binding(6) var<storage, read_write> aovCenter: array<AovCenter>;\n@group(3) @binding(7) var<storage, read> aovScene: array<u32>;\n@group(3) @binding(9) var<storage, read> aovPrevious: array<AovCenter>;\n@group(3) @binding(8) var<uniform> aovParameters: vec4u;\n\nfn aovMatrix(offset: u32) -> mat4x4f {\n return mat4x4f(bitcast<vec4f>(vec4u(aovScene[offset], aovScene[offset+1u], aovScene[offset+2u], aovScene[offset+3u])),\n bitcast<vec4f>(vec4u(aovScene[offset+4u], aovScene[offset+5u], aovScene[offset+6u], aovScene[offset+7u])),\n bitcast<vec4f>(vec4u(aovScene[offset+8u], aovScene[offset+9u], aovScene[offset+10u], aovScene[offset+11u])),\n bitcast<vec4f>(vec4u(aovScene[offset+12u], aovScene[offset+13u], aovScene[offset+14u], aovScene[offset+15u])));\n}\nfn aovVector(offset:u32)->vec3f {return bitcast<vec3f>(vec3u(aovScene[offset],aovScene[offset+1u],aovScene[offset+2u]));}\nfn aovSurface(rayInput: Ray, si: ptr<function, SurfaceInteraction>, material: ptr<function, OpenPbrResolvedMaterial>) -> bool {\n var ray = rayInput;\n (*si).triangleIndex = -1;\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, si, 0, false, false);\n if (!(*si).hit) { return false; }\n getMaterial(material, (*si).materialIndex, (*si).uv, (*si).uv1, (*si).instanceIndex, (*si).vertexColor);\n if ((*material).materialType != SHADOW_CATCHER && (*material).alpha >= 0.5) { return true; }\n ray.o = (*si).position + ray.d * (EPS * 0.02);\n }\n return false;\n}\n@compute @workgroup_size(8, 8)\nfn aovTrace(@builtin(global_invocation_id) id: vec3u) {\n let size = aovParameters.xy;\n if (any(id.xy >= size)) { return; }\n let index = id.x + id.y * size.x;\n let sample = aovParameters.z;\n if (sample == 0u) { aovAccum[index] = AovAccumulation(); }\n samplingPixel = id.xy; pixelSampleIndex = sample + rtUniform.sampleSequenceOffset;\n samplingBounce = 0u; hashedCounter = 0u;\n rng_initialize(id.xy, i32(pixelSampleIndex ^ sampleHash(rtUniform.sequenceSeed)));\n let uv = (vec2f(id.xy) + sample2D(CAMERA_PIXEL)) / vec2f(size);\n var ray = initCameraRay(uv);\n if (cameraUniform.apertureRadius > 0.0) {\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n let focusPoint = eye + ray.d * (cameraUniform.focusDistance / dot(ray.d, forward));\n let lens = cameraUniform.apertureRadius * sampleCircle(sample2D(CAMERA_LENS));\n let origin = (cameraUniform.viewInv * vec4f(lens, 0.0, 1.0)).xyz;\n initRay(&ray, origin, normalize(focusPoint-origin));\n }\n var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;\n if (!aovSurface(ray, &si, &material)) { return; }\n let depth = max(dot(si.position-cameraUniform.viewInv[3].xyz, -normalize(cameraUniform.viewInv[2].xyz)), 0.0);\n let unsupported = (material.materialType != STANDARD) | (material.alpha < 1.0) |\n (material.coatWeight > 0.0) | (material.fuzzWeight > 0.0) |\n (material.specularAnisotropy > 0.0) | (material.subsurfaceWeight > 0.0) |\n (dot(material.mediumScattering, material.mediumScattering) > 0.0) |\n (material.bevel > 0.0) | (material.thinFilmWeight > 0.0) |\n (material.transmissionDispersionScale > 0.0);\n aovAccum[index].depthRoughness += vec4f(depth, material.specularRoughness, material.baseMetalness, select(0.0,1.0,unsupported));\n if (AOV_REFLECTANCE && (aovParameters.w & 24u) != 0u && !unsupported) {\n var normal=si.normal; var face=si.faceNormal;\n var cosine=-dot(normal,ray.d); var faceCosine=-dot(face,ray.d);\n if (material.thinWalled && (material.transmissionWeight>0.0 || material.subsurfaceWeight>0.0)) {\n if(cosine<0.0){normal=-normal;cosine=-cosine;}\n if(faceCosine<0.0){face=-face;faceCosine=-faceCosine;}\n }\n if(faceCosine>=0.0 && cosine<0.0){normal=face;cosine=faceCosine;}\n normal=select(-normal,normal,cosine>=0.0);\n material.inside=(cosine<=0.0) && !material.thinWalled;\n material.relativeIor=select(material.specularIor,1.0/material.specularIor,cosine>0.0);\n let prepared=openpbr_prepare(si.tangent,material,-ray.d,normal);\n let reflectance=mtFrameReflectanceComponents(prepared, (aovParameters.w & 8u) != 0u, (aovParameters.w & 16u) != 0u);\n aovAccum[index].diffuse+=vec4f(reflectance.diffuse,1.0);\n aovAccum[index].specular+=vec4f(reflectance.specular,1.0);\n }\n aovAccum[index].position += vec4f(si.position, 1.0);\n}\n@compute @workgroup_size(8, 8)\nfn aovTraceCenter(@builtin(global_invocation_id) id: vec3u) {\n let size = aovParameters.xy;\n if (any(id.xy >= size)) { return; }\n let index = id.x + id.y * size.x;\n aovCenter[index] = AovCenter(vec4u(0xffffffffu), vec4f(0.0));\n let uv = (vec2f(id.xy) + 0.5) / vec2f(size);\n let ray = initCameraRay(uv);\n var si: SurfaceInteraction; var material: OpenPbrResolvedMaterial;\n if (!aovSurface(ray, &si, &material)) { return; }\n let offset = 52u + u32(si.instanceIndex) * 24u;\n let materialOffset = aovScene[16u];\n let primitiveOffset = aovScene[17u];\n aovCenter[index].identity = vec4u(aovScene[offset], aovScene[offset+1u],\n aovScene[materialOffset + u32(si.materialIndex)], aovScene[primitiveOffset + u32(si.triangleIndex)]);\n aovCenter[index].motion.z = dot(si.position-aovVector(36u),aovVector(40u));\n if (aovScene[offset+2u] == 0u) { return; }\n let oldWorld = aovMatrix(offset+4u) * vec4f(si.position,1.0);\n let oldClip = aovMatrix(0u) * oldWorld;\n if (oldClip.w <= 0.0) { return; }\n let oldNdc=oldClip.xyz/oldClip.w;\n let oldPixel=(oldNdc.xy*0.5+0.5)*vec2f(size);\n if (any(oldPixel < vec2f(0.0)) || any(oldPixel >= vec2f(size)) || abs(oldNdc.z)>1.0) { return; }\n let previous=aovPrevious[u32(oldPixel.x)+u32(oldPixel.y)*size.x];\n let oldDepth=dot(oldWorld.xyz-aovVector(44u),aovVector(48u));\n if (any(previous.identity.xy != aovCenter[index].identity.xy) || abs(previous.motion.z-oldDepth)>max(1e-4,abs(oldDepth)*1e-3)) { return; }\n let motion=(oldPixel-(vec2f(id.xy)+0.5))*vec2f(1.0,-1.0);\n aovCenter[index].motion=vec4f(motion,aovCenter[index].motion.z,3.0);\n}\n`;\n"]}
@@ -0,0 +1,13 @@
1
+ export declare const bloomBrightDefine = "\nfn median(a: vec4f, b: vec4f, c: vec4f) -> vec4f {\nreturn a + b + c - min(min(a, b), c) - max(max(a, b), c);\n}\n";
2
+ export declare const bloomBrightMain = "\n\nlet d = vec3i(1, 1, 0);\n\nvar texel = load_colorTex(uv, 0);\nlet s1 = load_colorTex(uv - d.xz, 0);\nlet s2 = load_colorTex(uv + d.xz, 0);\nlet s3 = load_colorTex(uv - d.zy, 0);\nlet s4 = load_colorTex(uv + d.zy, 0);\ntexel = median(median(texel, s1, s2), s3, s4);\n\n// Premultiplied Alpha\nlet lum = dot(texel.rgb, vec3f(0.2125, 0.7154, 0.0721));\nvar color: vec4f;\nif (lum > threshold && texel.a > 0.0) {\n color = vec4f(texel.rgb * scale, texel.a);\n} else {\n // Bleed the alpha to avoid sharp edge when using alpha\n color = vec4f(vec3(0.0), texel.a);\n}\noutput.color = color;\n";
3
+ export declare const bloomDownDefine = "\nfn brightness(c: vec3f) -> f32 {\n return max(max(c.r, c.g), c.b);\n}\n";
4
+ export declare const bloomDownMain = "\nlet size = vec2f(colorTexRegion());\nlet d = vec4f(-1.0, -1.0, 1.0, 1.0) / size.xyxy;\n\noutput.color = sample_colorTex_linearSampler(uv2 + d.xy) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.zy) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.xw) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.zw) * 0.25;\n";
5
+ export declare const bloomBlurDefine = "\nconst kernel = array<f32, 9>(0.07, 0.09, 0.12, 0.14, 0.16, 0.14, 0.12, 0.09, 0.07);\n";
6
+ export declare const bloomBlurMain = "\nlet texSize = vec2f(colorTexRegion());\nlet off = direction / texSize * size;\n\nvar sum = vec4f(0.0);\nvar weightAll = 0.0;\nfor (var i = 0; i < 9; i++) {\n let w = kernel[i];\n sum += sample_colorTex_linearSampler(uv2 + off * f32(i - 4)) * w;\n weightAll += w;\n}\noutput.color = sum / max(weightAll, 0.01);\n";
7
+ export declare const bloomBlendMain = "\nlet color1 = sample_colorTex1_linearSampler(uv2);\nlet color2 = sample_colorTex2_linearSampler(uv2);\noutput.color = mix(color1, color2, weight);\n";
8
+ export declare const BLOOM_LEVELS = 6;
9
+ export declare function bloomBlurSize(radius: number): number;
10
+ export declare function bloomBlendWeight(radius: number): number;
11
+ export type BloomStep = readonly [kind: number, a: number, b: number, target: number, dx: number, dy: number];
12
+ export declare function createBloomPlan(levels: number): BloomStep[];
13
+ export declare const BLOOM_PLAN: BloomStep[];
@@ -0,0 +1,92 @@
1
+ // Shared pass bodies; each host supplies texture access and the entry point.
2
+ // Median bright pass adapted from KinoBloom (MIT), Keijiro Takahashi:
3
+ // https://github.com/keijiro/KinoBloom/blob/master/Assets/Kino/Bloom/Shader/Bloom.cginc#L96
4
+ // See THIRD_PARTY_NOTICES.md and LICENSES/KinoBloom-MIT.txt.
5
+ export const bloomBrightDefine = /* wgsl */ `
6
+ fn tS(a: vec4f, b: vec4f, c: vec4f) -> vec4f {
7
+ return a + b + c - min(min(a, b), c) - max(max(a, b), c);
8
+ }
9
+ `;
10
+ export const bloomBrightMain = /* wgsl */ `
11
+
12
+ let d = vec3i(1, 1, 0);
13
+
14
+ var dk = load_colorTex(uv, 0);
15
+ let s1 = load_colorTex(uv - d.xz, 0);
16
+ let s2 = load_colorTex(uv + d.xz, 0);
17
+ let s3 = load_colorTex(uv - d.zy, 0);
18
+ let s4 = load_colorTex(uv + d.zy, 0);
19
+ dk = tS(tS(dk, s1, s2), s3, s4);
20
+
21
+
22
+ let lum = dot(dk.rgb, vec3f(0.2125, 0.7154, 0.0721));
23
+ var color: vec4f;
24
+ if (lum > threshold && dk.a > 0.0) {
25
+ color = vec4f(dk.rgb * scale, dk.a);
26
+ } else {
27
+
28
+ color = vec4f(vec3(0.0), dk.a);
29
+ }
30
+ output.color = color;
31
+ `;
32
+ export const bloomDownDefine = /* wgsl */ `
33
+ fn xP(c: vec3f) -> f32 {
34
+ return max(max(c.r, c.g), c.b);
35
+ }
36
+ `;
37
+ export const bloomDownMain = /* wgsl */ `
38
+ let size = vec2f(colorTexRegion());
39
+ let d = vec4f(-1.0, -1.0, 1.0, 1.0) / size.xyxy;
40
+
41
+ output.color = sample_colorTex_linearSampler(uv2 + d.xy) * 0.25
42
+ + sample_colorTex_linearSampler(uv2 + d.zy) * 0.25
43
+ + sample_colorTex_linearSampler(uv2 + d.xw) * 0.25
44
+ + sample_colorTex_linearSampler(uv2 + d.zw) * 0.25;
45
+ `;
46
+ export const bloomBlurDefine = /* wgsl */ `
47
+ const xT = array<f32, 9>(0.07, 0.09, 0.12, 0.14, 0.16, 0.14, 0.12, 0.09, 0.07);
48
+ `;
49
+ export const bloomBlurMain = /* wgsl */ `
50
+ let xG = vec2f(colorTexRegion());
51
+ let off = direction / xG * size;
52
+
53
+ var sum = vec4f(0.0);
54
+ var uE = 0.0;
55
+ for (var i = 0; i < 9; i++) {
56
+ let w = xT[i];
57
+ sum += sample_colorTex_linearSampler(uv2 + off * f32(i - 4)) * w;
58
+ uE += w;
59
+ }
60
+ output.color = sum / max(uE, 0.01);
61
+ `;
62
+ export const bloomBlendMain = /* wgsl */ `
63
+ let xQ = sample_colorTex1_linearSampler(uv2);
64
+ let xR = sample_colorTex2_linearSampler(uv2);
65
+ output.color = mix(xQ, xR, weight);
66
+ `;
67
+ export const BLOOM_LEVELS = 6;
68
+ export function bloomBlurSize(radius) {
69
+ return Math.max(Math.min(radius * 2, 1), 0.2);
70
+ }
71
+ export function bloomBlendWeight(radius) {
72
+ return 1 - Math.max(Math.min(radius ** 0.3 * 0.8, 0.8), 0);
73
+ }
74
+ export function createBloomPlan(levels) {
75
+ const down = 1, h = down + levels, v = h + levels, blend = v + levels;
76
+ const input = blend + levels - 1;
77
+ const steps = [[0, input, input, 0, 0, 0]];
78
+ for (let i = 0; i < levels; i++) {
79
+ const source = i === 0 ? 0 : down + i - 1;
80
+ steps.push([1, source, source, down + i, 0, 0]);
81
+ }
82
+ for (let i = levels - 1; i >= 0; i--) {
83
+ steps.push([2, down + i, down + i, h + i, 1, 0]);
84
+ steps.push([2, h + i, h + i, v + i, 0, 1]);
85
+ }
86
+ for (let i = levels - 2; i >= 0; i--) {
87
+ steps.push([3, i === levels - 2 ? v + levels - 1 : blend + i + 1, v + i, blend + i, 0, 0]);
88
+ }
89
+ return steps;
90
+ }
91
+ export const BLOOM_PLAN = createBloomPlan(BLOOM_LEVELS);
92
+ //# sourceMappingURL=bloom.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bloom.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/bloom.wgsl.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,4FAA4F;AAC5F,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;;;;CAI3C,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBzC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;CAIzC,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;CAQvC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;CAEzC,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;;;CAYvC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;;;;CAIxC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAKD,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;IACjC,MAAM,KAAK,GAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC","sourcesContent":["// Shared pass bodies; each host supplies texture access and the entry point.\n// Median bright pass adapted from KinoBloom (MIT), Keijiro Takahashi:\n// https://github.com/keijiro/KinoBloom/blob/master/Assets/Kino/Bloom/Shader/Bloom.cginc#L96\n// See THIRD_PARTY_NOTICES.md and LICENSES/KinoBloom-MIT.txt.\nexport const bloomBrightDefine = /* wgsl */ `\nfn median(a: vec4f, b: vec4f, c: vec4f) -> vec4f {\nreturn a + b + c - min(min(a, b), c) - max(max(a, b), c);\n}\n`;\nexport const bloomBrightMain = /* wgsl */ `\n\nlet d = vec3i(1, 1, 0);\n\nvar texel = load_colorTex(uv, 0);\nlet s1 = load_colorTex(uv - d.xz, 0);\nlet s2 = load_colorTex(uv + d.xz, 0);\nlet s3 = load_colorTex(uv - d.zy, 0);\nlet s4 = load_colorTex(uv + d.zy, 0);\ntexel = median(median(texel, s1, s2), s3, s4);\n\n// Premultiplied Alpha\nlet lum = dot(texel.rgb, vec3f(0.2125, 0.7154, 0.0721));\nvar color: vec4f;\nif (lum > threshold && texel.a > 0.0) {\n color = vec4f(texel.rgb * scale, texel.a);\n} else {\n // Bleed the alpha to avoid sharp edge when using alpha\n color = vec4f(vec3(0.0), texel.a);\n}\noutput.color = color;\n`;\nexport const bloomDownDefine = /* wgsl */ `\nfn brightness(c: vec3f) -> f32 {\n return max(max(c.r, c.g), c.b);\n}\n`;\nexport const bloomDownMain = /* wgsl */ `\nlet size = vec2f(colorTexRegion());\nlet d = vec4f(-1.0, -1.0, 1.0, 1.0) / size.xyxy;\n\noutput.color = sample_colorTex_linearSampler(uv2 + d.xy) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.zy) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.xw) * 0.25\n + sample_colorTex_linearSampler(uv2 + d.zw) * 0.25;\n`;\nexport const bloomBlurDefine = /* wgsl */ `\nconst kernel = array<f32, 9>(0.07, 0.09, 0.12, 0.14, 0.16, 0.14, 0.12, 0.09, 0.07);\n`;\nexport const bloomBlurMain = /* wgsl */ `\nlet texSize = vec2f(colorTexRegion());\nlet off = direction / texSize * size;\n\nvar sum = vec4f(0.0);\nvar weightAll = 0.0;\nfor (var i = 0; i < 9; i++) {\n let w = kernel[i];\n sum += sample_colorTex_linearSampler(uv2 + off * f32(i - 4)) * w;\n weightAll += w;\n}\noutput.color = sum / max(weightAll, 0.01);\n`;\nexport const bloomBlendMain = /* wgsl */ `\nlet color1 = sample_colorTex1_linearSampler(uv2);\nlet color2 = sample_colorTex2_linearSampler(uv2);\noutput.color = mix(color1, color2, weight);\n`;\n\nexport const BLOOM_LEVELS = 6;\nexport function bloomBlurSize(radius: number): number {\n return Math.max(Math.min(radius * 2, 1), 0.2);\n}\nexport function bloomBlendWeight(radius: number): number {\n return 1 - Math.max(Math.min(radius ** 0.3 * 0.8, 0.8), 0);\n}\n\n// Slots: bright, down[], horizontal[], vertical[], blend[], external input.\n// Kind selects bright/down/blur/blend. Hosts only bind their own pass resources.\nexport type BloomStep = readonly [kind: number, a: number, b: number, target: number, dx: number, dy: number];\nexport function createBloomPlan(levels: number): BloomStep[] {\n const down = 1, h = down + levels, v = h + levels, blend = v + levels;\n const input = blend + levels - 1;\n const steps: BloomStep[] = [[0, input, input, 0, 0, 0]];\n for (let i = 0; i < levels; i++) {\n const source = i === 0 ? 0 : down + i - 1;\n steps.push([1, source, source, down + i, 0, 0]);\n }\n for (let i = levels - 1; i >= 0; i--) {\n steps.push([2, down + i, down + i, h + i, 1, 0]);\n steps.push([2, h + i, h + i, v + i, 0, 1]);\n }\n for (let i = levels - 2; i >= 0; i--) {\n steps.push([3, i === levels - 2 ? v + levels - 1 : blend + i + 1, v + i, blend + i, 0, 0]);\n }\n return steps;\n}\nexport const BLOOM_PLAN = createBloomPlan(BLOOM_LEVELS);\n"]}
@@ -11,12 +11,12 @@ const ROUGHNESS_MIN = 0.001;
11
11
 
12
12
 
13
13
 
14
- fn rQ(position: vec3f, geometricNormal: vec3f, direction: vec3f) -> vec3f {
14
+ fn sR(position: vec3f, geometricNormal: vec3f, direction: vec3f) -> vec3f {
15
15
  let normal = select(-geometricNormal, geometricNormal, dot(geometricNormal, direction) >= 0.0);
16
- let qk = vec3i(256.0 * normal);
16
+ let rm = vec3i(256.0 * normal);
17
17
  let bits = bitcast<vec3i>(position);
18
- let vO = bitcast<vec3f>(bits + select(qk, -qk, position < vec3f(0.0)));
19
- return select(vO, position + normal / 65536.0, abs(position) < vec3f(1.0 / 32.0));
18
+ let xC = bitcast<vec3f>(bits + select(rm, -rm, position < vec3f(0.0)));
19
+ return select(xC, position + normal / 65536.0, abs(position) < vec3f(1.0 / 32.0));
20
20
  }
21
21
 
22
22
  `;
@@ -1,2 +1,2 @@
1
- declare const _default: "\n\nfn textureLinear(tex: texture_2d<f32>, _uv: vec2f) -> vec4f {\n // #ifdef OES_texture_float_linear\n // return texture(map, uv);\n // #else\n let size = vec2f(textureDimensions(tex, 0));\n\n let uv2f = _uv * size - vec2f(0.5);\n let uvFloor = floor(uv2f);\n let f = fract(uv2f);\n let uv2i = vec2i(uvFloor);\n let maximum = vec2i(size) - vec2i(1);\n\n // TODO use textureGather\n let s1 = textureLoad(tex, clamp(uv2i + vec2i(0, 0), vec2i(0), maximum), 0);\n let s2 = textureLoad(tex, clamp(uv2i + vec2i(1, 0), vec2i(0), maximum), 0);\n let s3 = textureLoad(tex, clamp(uv2i + vec2i(0, 1), vec2i(0), maximum), 0);\n let s4 = textureLoad(tex, clamp(uv2i + vec2i(1, 1), vec2i(0), maximum), 0);\n\n return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);\n // #endif\n}\n\nfn cartesianToEquirect(pointOnSphere: vec3f) -> vec2f {\n var phi = atan2(-pointOnSphere.z, -pointOnSphere.x);\n if (phi < 0.0) {\n phi += TWOPI;\n }\n let theta = acos(clamp(pointOnSphere.y, -1.0, 1.0));\n return vec2f(phi * 0.5 * INVPI, theta * INVPI);\n}\n\nfn environmentOrientation() -> mat3x3f {\n return mat3x3f(rtUniform.environmentRotation[0].xyz, rtUniform.environmentRotation[1].xyz, rtUniform.environmentRotation[2].xyz);\n}\n\nfn environmentUv(worldDirection: vec3f) -> vec2f {\n return cartesianToEquirect(transpose(environmentOrientation()) * worldDirection);\n}\n\nfn getEnvmapV(u: f32, vOffset: ptr<function, i32>, pdf: ptr<function, vec2f>) -> f32 {\n let size = vec2i(textureDimensions(envMap, 0));\n\n var left = 0;\n var right = size.y + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n let mid = (left + right) >> 1;\n let s = textureLoad(envMapDistribution, vec2i(0, mid), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n *vOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n let s0 = textureLoad(envMapDistribution, vec2i(0, *vOffset), 0).xy;\n let s1 = textureLoad(envMapDistribution, vec2i(0, *vOffset + 1), 0).xy;\n\n (*pdf).y = s0.y;\n\n return (f32(*vOffset) + (u - s0.x) / (s1.x - s0.x)) / f32(size.y);\n}\n\nfn getEnvmapU(u: f32, vOffset: i32, pdf: ptr<function, vec2f>) -> f32 {\n let size = vec2i(textureDimensions(envMap, 0));\n\n var left = 0;\n var right = size.x + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n let mid = (left + right) >> 1;\n let s = textureLoad(envMapDistribution, vec2i(1 + mid, vOffset), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n let uOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n let s0 = textureLoad(envMapDistribution, vec2i(1 + uOffset, vOffset), 0).xy;\n let s1 = textureLoad(envMapDistribution, vec2i(1 + uOffset + 1, vOffset), 0).xy;\n\n (*pdf).x = s0.y;\n\n return (f32(uOffset) + (u - s0.x) / (s1.x - s0.x)) / f32(size.x);\n}\n\n// Perform two binary searches to find light direction.\nfn sampleEnvmap(random: vec2f, uv: ptr<function, vec2f>, pdf: ptr<function, f32>) -> vec3f {\n var partialPdf: vec2f;\n var vOffset: i32;\n\n (*uv).y = getEnvmapV(random.x, &vOffset, &partialPdf);\n (*uv).x = getEnvmapU(random.y, vOffset, &partialPdf);\n\n let phi = (*uv).x * TWOPI;\n let theta = (*uv).y * PI;\n let cosTheta = cos(theta);\n let sinTheta = sin(theta);\n let cosPhi = cos(phi);\n let sinPhi = sin(phi);\n\n let dir = vec3f(-sinTheta * cosPhi, cosTheta, -sinTheta * sinPhi);\n\n *pdf = partialPdf.x * partialPdf.y * INVPI2 / (2.0 * sinTheta);\n\n return environmentOrientation() * dir;\n}\n\nfn envMapPdf(_uv: vec2f) -> f32 {\n let size = vec2f(textureDimensions(envMap, 0));\n\n let sinTheta = sin(_uv.y * PI);\n\n let _uv2 = vec2i(_uv * size);\n\n let partialX = textureLoad(envMapDistribution, vec2i(1 + _uv2.x, _uv2.y), 0).y;\n let partialY = textureLoad(envMapDistribution, vec2i(0, _uv2.y), 0).y;\n\n return partialX * partialY * INVPI2 / (2.0 * sinTheta);\n}\n\n\n";
1
+ declare const _default: "\n\nfn textureLinear(tex: texture_2d<f32>, _uv: vec2f) -> vec4f {\n // #ifdef OES_texture_float_linear\n // return texture(map, uv);\n // #else\n let size = vec2f(textureDimensions(tex, 0));\n\n let uv2f = _uv * size - vec2f(0.5);\n let uvFloor = floor(uv2f);\n let f = fract(uv2f);\n let uv2i = vec2i(uvFloor);\n let maximum = vec2i(size) - vec2i(1);\n\n // TODO use textureGather\n let s1 = textureLoad(tex, clamp(uv2i + vec2i(0, 0), vec2i(0), maximum), 0);\n let s2 = textureLoad(tex, clamp(uv2i + vec2i(1, 0), vec2i(0), maximum), 0);\n let s3 = textureLoad(tex, clamp(uv2i + vec2i(0, 1), vec2i(0), maximum), 0);\n let s4 = textureLoad(tex, clamp(uv2i + vec2i(1, 1), vec2i(0), maximum), 0);\n\n return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);\n // #endif\n}\n\nfn cartesianToEquirect(pointOnSphere: vec3f) -> vec2f {\n var phi = atan2(-pointOnSphere.z, -pointOnSphere.x);\n if (phi < 0.0) {\n phi += TWOPI;\n }\n let theta = acos(clamp(pointOnSphere.y, -1.0, 1.0));\n return vec2f(phi * 0.5 * INVPI, theta * INVPI);\n}\n\nfn environmentOrientation() -> mat3x3f {\n return mat3x3f(rtUniform.environmentRotation[0].xyz, rtUniform.environmentRotation[1].xyz, rtUniform.environmentRotation[2].xyz);\n}\n\nfn environmentUv(worldDirection: vec3f) -> vec2f {\n return cartesianToEquirect(transpose(environmentOrientation()) * worldDirection);\n}\n\nfn getEnvmapV(u: f32, vOffset: ptr<function, i32>, pdf: ptr<function, vec2f>) -> f32 {\n let size = vec2i(textureDimensions(envMap, 0));\n\n var left = 0;\n var right = size.y + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n let mid = (left + right) >> 1;\n let s = textureLoad(envMapDistribution, vec2i(0, mid), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n *vOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n let s0 = textureLoad(envMapDistribution, vec2i(0, *vOffset), 0).xy;\n let s1 = textureLoad(envMapDistribution, vec2i(0, *vOffset + 1), 0).xy;\n\n (*pdf).y = s0.y;\n\n return (f32(*vOffset) + (u - s0.x) / (s1.x - s0.x)) / f32(size.y);\n}\n\nfn getEnvmapU(u: f32, vOffset: i32, pdf: ptr<function, vec2f>) -> f32 {\n let size = vec2i(textureDimensions(envMap, 0));\n\n var left = 0;\n var right = size.x + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n let mid = (left + right) >> 1;\n let s = textureLoad(envMapDistribution, vec2i(1 + mid, vOffset), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n let uOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n let s0 = textureLoad(envMapDistribution, vec2i(1 + uOffset, vOffset), 0).xy;\n let s1 = textureLoad(envMapDistribution, vec2i(1 + uOffset + 1, vOffset), 0).xy;\n\n (*pdf).x = s0.y;\n\n return (f32(uOffset) + (u - s0.x) / (s1.x - s0.x)) / f32(size.x);\n}\n\n// The lat-long Jacobian is undefined at either pole. In f32, sin(PI) can\n// also be negative, which makes MIS amplify a BSDF hit instead of weighting it.\nfn envMapSolidAnglePdf(partialPdf: vec2f, v: f32) -> f32 {\n if (!(v > 0.0 && v < 1.0)) { return 0.0; }\n let sinTheta = sin(min(v, 1.0 - v) * PI);\n return partialPdf.x * partialPdf.y * INVPI2 / (2.0 * sinTheta);\n}\n\n// Perform two binary searches to find light direction.\nfn sampleEnvmap(random: vec2f, uv: ptr<function, vec2f>, pdf: ptr<function, f32>) -> vec3f {\n var partialPdf: vec2f;\n var vOffset: i32;\n\n (*uv).y = getEnvmapV(random.x, &vOffset, &partialPdf);\n (*uv).x = getEnvmapU(random.y, vOffset, &partialPdf);\n\n let phi = (*uv).x * TWOPI;\n let theta = (*uv).y * PI;\n let cosTheta = cos(theta);\n let sinTheta = sin(theta);\n let cosPhi = cos(phi);\n let sinPhi = sin(phi);\n\n let dir = vec3f(-sinTheta * cosPhi, cosTheta, -sinTheta * sinPhi);\n\n *pdf = envMapSolidAnglePdf(partialPdf, (*uv).y);\n\n return environmentOrientation() * dir;\n}\n\nfn envMapPdf(_uv: vec2f) -> f32 {\n let size = vec2f(textureDimensions(envMap, 0));\n\n let _uv2 = clamp(vec2i(_uv * size), vec2i(0), vec2i(size) - vec2i(1));\n\n let partialX = textureLoad(envMapDistribution, vec2i(1 + _uv2.x, _uv2.y), 0).y;\n let partialY = textureLoad(envMapDistribution, vec2i(0, _uv2.y), 0).y;\n\n return envMapSolidAnglePdf(vec2f(partialX, partialY), _uv.y);\n}\n\n\n";
2
2
  export default _default;