@meimu/mutracer 0.1.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +10 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +12316 -9228
  6. package/docs/api.md +232 -21
  7. package/docs/caustics.md +80 -0
  8. package/docs/denoising.md +30 -15
  9. package/docs/materials.md +6 -5
  10. package/docs/performance.md +5 -2
  11. package/docs/progressive-rendering.md +73 -1
  12. package/docs/technical/continuous-spectrum.md +93 -0
  13. package/docs/threejs.md +14 -5
  14. package/docs/updates.md +46 -2
  15. package/docs/viewer-checklist.md +65 -0
  16. package/docs/viewer.md +15 -8
  17. package/lib/Display.d.ts +13 -2
  18. package/lib/Display.js +28 -7
  19. package/lib/Display.js.map +1 -1
  20. package/lib/Engine.d.ts +4 -0
  21. package/lib/Engine.js +99 -37
  22. package/lib/Engine.js.map +1 -1
  23. package/lib/Render.d.ts +98 -15
  24. package/lib/Render.js +275 -27
  25. package/lib/Render.js.map +1 -1
  26. package/lib/RenderLoop.d.ts +11 -1
  27. package/lib/RenderLoop.js +120 -15
  28. package/lib/RenderLoop.js.map +1 -1
  29. package/lib/main.d.ts +6 -3
  30. package/lib/main.js +1 -0
  31. package/lib/main.js.map +1 -1
  32. package/lib/math/access.d.ts +4 -0
  33. package/lib/math/access.js +10 -0
  34. package/lib/math/access.js.map +1 -0
  35. package/lib/math/mat3.d.ts +4 -0
  36. package/lib/math/mat3.js +54 -0
  37. package/lib/math/mat3.js.map +1 -0
  38. package/lib/math/mat4.d.ts +19 -0
  39. package/lib/math/mat4.js +413 -0
  40. package/lib/math/mat4.js.map +1 -0
  41. package/lib/math/storage.d.ts +6 -0
  42. package/lib/math/storage.js +22 -0
  43. package/lib/math/storage.js.map +1 -0
  44. package/lib/math/types.d.ts +3 -0
  45. package/lib/math/types.js +2 -0
  46. package/lib/math/types.js.map +1 -0
  47. package/lib/math/vec2.d.ts +13 -0
  48. package/lib/math/vec2.js +52 -0
  49. package/lib/math/vec2.js.map +1 -0
  50. package/lib/math/vec3.d.ts +23 -0
  51. package/lib/math/vec3.js +139 -0
  52. package/lib/math/vec3.js.map +1 -0
  53. package/lib/math.d.ts +5 -17
  54. package/lib/math.js +5 -55
  55. package/lib/math.js.map +1 -1
  56. package/lib/oidn.d.ts +1 -1
  57. package/lib/oidn.js +4 -2
  58. package/lib/oidn.js.map +1 -1
  59. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  60. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  61. package/lib/renderer/AovPrimitiveCache.js +48 -0
  62. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  63. package/lib/renderer/Box3.d.ts +5 -0
  64. package/lib/renderer/Box3.js +9 -0
  65. package/lib/renderer/Box3.js.map +1 -0
  66. package/lib/renderer/GPUTraceQueue.d.ts +11 -0
  67. package/lib/renderer/GPUTraceQueue.js +33 -0
  68. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  69. package/lib/renderer/MaterialData.d.ts +15 -0
  70. package/lib/renderer/MaterialData.js +61 -0
  71. package/lib/renderer/MaterialData.js.map +1 -0
  72. package/lib/renderer/MaterialTable.d.ts +11 -98
  73. package/lib/renderer/MaterialTable.js +34 -412
  74. package/lib/renderer/MaterialTable.js.map +1 -1
  75. package/lib/renderer/RenderingPipeline.d.ts +36 -13
  76. package/lib/renderer/RenderingPipeline.js +1 -17
  77. package/lib/renderer/RenderingPipeline.js.map +1 -1
  78. package/lib/renderer/TileRender.d.ts +0 -1
  79. package/lib/renderer/TileRender.js +14 -1
  80. package/lib/renderer/TileRender.js.map +1 -1
  81. package/lib/renderer/WGPUAov.d.ts +39 -0
  82. package/lib/renderer/WGPUAov.js +239 -0
  83. package/lib/renderer/WGPUAov.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  85. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  86. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  87. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  88. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  89. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  90. package/lib/renderer/WGPUBloomPass.js +17 -97
  91. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  92. package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
  93. package/lib/renderer/WGPUCausticLightPass.js +217 -0
  94. package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
  95. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  96. package/lib/renderer/WGPUComputePass.js.map +1 -1
  97. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  98. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  99. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  100. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  101. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  102. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  103. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  104. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  105. package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
  106. package/lib/renderer/WGPUPhotonMap.js +191 -0
  107. package/lib/renderer/WGPUPhotonMap.js.map +1 -0
  108. package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
  109. package/lib/renderer/WGPURayTraceOutput.js +132 -29
  110. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  111. package/lib/renderer/WGPURayTracePass.d.ts +83 -56
  112. package/lib/renderer/WGPURayTracePass.js +884 -837
  113. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  114. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  115. package/lib/renderer/WGPURenderingPipeline.js +297 -82
  116. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  117. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  118. package/lib/renderer/WGPUShaderCache.js +10 -5
  119. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  120. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  121. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  122. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  123. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  124. package/lib/renderer/WGPUSkyBaker.js +85 -0
  125. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  126. package/lib/renderer/WebGLAov.d.ts +41 -0
  127. package/lib/renderer/WebGLAov.js +106 -0
  128. package/lib/renderer/WebGLAov.js.map +1 -0
  129. package/lib/renderer/WebGLFullQuadPass.d.ts +7 -4
  130. package/lib/renderer/WebGLFullQuadPass.js +22 -2
  131. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  132. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  133. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  134. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  135. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  136. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  137. package/lib/renderer/WebGLRayTracePass.d.ts +18 -3
  138. package/lib/renderer/WebGLRayTracePass.js +121 -9
  139. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  140. package/lib/renderer/WebGLRenderingPipeline.js +126 -22
  141. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  142. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  143. package/lib/renderer/WebGLSkyBaker.js +422 -0
  144. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  145. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  146. package/lib/renderer/WebGLSkySource.js +28 -0
  147. package/lib/renderer/WebGLSkySource.js.map +1 -0
  148. package/lib/renderer/accumulationTarget.d.ts +6 -0
  149. package/lib/renderer/accumulationTarget.js.map +1 -1
  150. package/lib/renderer/aov.d.ts +42 -0
  151. package/lib/renderer/aov.js +50 -0
  152. package/lib/renderer/aov.js.map +1 -0
  153. package/lib/renderer/aovDisplay.d.ts +14 -0
  154. package/lib/renderer/aovDisplay.js +32 -0
  155. package/lib/renderer/aovDisplay.js.map +1 -0
  156. package/lib/renderer/aovScene.d.ts +21 -0
  157. package/lib/renderer/aovScene.js +139 -0
  158. package/lib/renderer/aovScene.js.map +1 -0
  159. package/lib/renderer/binnedSahBvh.js +2 -1
  160. package/lib/renderer/binnedSahBvh.js.map +1 -1
  161. package/lib/renderer/bvhAccel.d.ts +20 -10
  162. package/lib/renderer/bvhAccel.js +168 -58
  163. package/lib/renderer/bvhAccel.js.map +1 -1
  164. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  165. package/lib/renderer/cameraSnapshot.js +2 -1
  166. package/lib/renderer/cameraSnapshot.js.map +1 -1
  167. package/lib/renderer/cameraUniform.d.ts +2 -0
  168. package/lib/renderer/cameraUniform.js +12 -0
  169. package/lib/renderer/cameraUniform.js.map +1 -0
  170. package/lib/renderer/causticDiagnostics.d.ts +31 -0
  171. package/lib/renderer/causticDiagnostics.js +5 -0
  172. package/lib/renderer/causticDiagnostics.js.map +1 -0
  173. package/lib/renderer/causticEmission.d.ts +10 -0
  174. package/lib/renderer/causticEmission.js +40 -0
  175. package/lib/renderer/causticEmission.js.map +1 -0
  176. package/lib/renderer/causticUniform.d.ts +12 -0
  177. package/lib/renderer/causticUniform.js +22 -0
  178. package/lib/renderer/causticUniform.js.map +1 -0
  179. package/lib/renderer/caustics.d.ts +16 -0
  180. package/lib/renderer/caustics.js +93 -0
  181. package/lib/renderer/caustics.js.map +1 -0
  182. package/lib/renderer/committedScene.js +4 -0
  183. package/lib/renderer/committedScene.js.map +1 -1
  184. package/lib/renderer/denoiser.d.ts +3 -11
  185. package/lib/renderer/denoiser.js.map +1 -1
  186. package/lib/renderer/depthQuery.js +4 -1
  187. package/lib/renderer/depthQuery.js.map +1 -1
  188. package/lib/renderer/displacementPreparation.d.ts +11 -0
  189. package/lib/renderer/displacementPreparation.js +351 -0
  190. package/lib/renderer/displacementPreparation.js.map +1 -0
  191. package/lib/renderer/displacementRange.d.ts +1 -0
  192. package/lib/renderer/displacementRange.js +9 -0
  193. package/lib/renderer/displacementRange.js.map +1 -0
  194. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  195. package/lib/renderer/displayParityDiagnostics.js +2 -0
  196. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  197. package/lib/renderer/envMapCreation.d.ts +9 -8
  198. package/lib/renderer/envMapCreation.js +36 -12
  199. package/lib/renderer/envMapCreation.js.map +1 -1
  200. package/lib/renderer/envMapDistribution.d.ts +12 -2
  201. package/lib/renderer/envMapDistribution.js +43 -34
  202. package/lib/renderer/envMapDistribution.js.map +1 -1
  203. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  204. package/lib/renderer/geometryBvhBounds.js +82 -0
  205. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  206. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  207. package/lib/renderer/geometryUpdateState.js +2 -0
  208. package/lib/renderer/geometryUpdateState.js.map +1 -0
  209. package/lib/renderer/geometryUpdates.d.ts +17 -9
  210. package/lib/renderer/geometryUpdates.js +92 -33
  211. package/lib/renderer/geometryUpdates.js.map +1 -1
  212. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  213. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  214. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  215. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  216. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  217. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  218. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  219. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  220. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  221. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  222. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  223. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  224. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  225. package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
  226. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
  227. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
  228. package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -67
  229. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  230. package/lib/renderer/glsl/chunks/intersect.glsl.js +432 -434
  231. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  232. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
  233. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +160 -157
  234. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  235. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +802 -802
  236. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  237. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  238. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
  239. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +72 -67
  240. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  241. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
  242. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  243. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
  244. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +143 -120
  245. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  246. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +21 -18
  247. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  248. package/lib/renderer/glsl/chunks/sampling.glsl.js +91 -94
  249. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
  250. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  251. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  252. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  253. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  254. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  255. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  256. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  257. package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
  258. package/lib/renderer/glsl/rayTrace.frag.js +271 -248
  259. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  260. package/lib/renderer/glsl/shadowCatcher.frag.js +37 -32
  261. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  262. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  263. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  264. package/lib/renderer/lightConstants.d.ts +10 -0
  265. package/lib/renderer/lightConstants.js +11 -0
  266. package/lib/renderer/lightConstants.js.map +1 -0
  267. package/lib/renderer/lightCore.d.ts +12 -0
  268. package/lib/renderer/lightCore.js +13 -0
  269. package/lib/renderer/lightCore.js.map +1 -0
  270. package/lib/renderer/lightSampling.d.ts +22 -18
  271. package/lib/renderer/lightSampling.js +135 -62
  272. package/lib/renderer/lightSampling.js.map +1 -1
  273. package/lib/renderer/lightsData.d.ts +21 -0
  274. package/lib/renderer/lightsData.js +192 -0
  275. package/lib/renderer/lightsData.js.map +1 -0
  276. package/lib/renderer/lightsUtil.d.ts +3 -26
  277. package/lib/renderer/lightsUtil.js +3 -153
  278. package/lib/renderer/lightsUtil.js.map +1 -1
  279. package/lib/renderer/materialBufferData.d.ts +70 -0
  280. package/lib/renderer/materialBufferData.js +2 -0
  281. package/lib/renderer/materialBufferData.js.map +1 -0
  282. package/lib/renderer/materialConstants.d.ts +11 -0
  283. package/lib/renderer/materialConstants.js +11 -0
  284. package/lib/renderer/materialConstants.js.map +1 -1
  285. package/lib/renderer/materialCore.d.ts +8 -0
  286. package/lib/renderer/materialCore.js +9 -0
  287. package/lib/renderer/materialCore.js.map +1 -0
  288. package/lib/renderer/materialEmission.d.ts +2 -2
  289. package/lib/renderer/materialEmission.js +3 -3
  290. package/lib/renderer/materialEmission.js.map +1 -1
  291. package/lib/renderer/materialLayout.d.ts +2 -101
  292. package/lib/renderer/materialLayout.js +110 -172
  293. package/lib/renderer/materialLayout.js.map +1 -1
  294. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  295. package/lib/renderer/materialLayoutSchema.js +172 -0
  296. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  297. package/lib/renderer/materialParams.d.ts +69 -0
  298. package/lib/renderer/materialParams.js +272 -0
  299. package/lib/renderer/materialParams.js.map +1 -0
  300. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  301. package/lib/renderer/materialTextureSlots.js +21 -8
  302. package/lib/renderer/materialTextureSlots.js.map +1 -1
  303. package/lib/renderer/materialTextures.d.ts +6 -0
  304. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  305. package/lib/renderer/materialTextures.js.map +1 -0
  306. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  307. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  308. package/lib/renderer/meshInstances.d.ts +4 -21
  309. package/lib/renderer/meshInstances.js +10 -56
  310. package/lib/renderer/meshInstances.js.map +1 -1
  311. package/lib/renderer/oidnNetwork.d.ts +2 -2
  312. package/lib/renderer/oidnNetwork.js +1 -1
  313. package/lib/renderer/oidnNetwork.js.map +1 -1
  314. package/lib/renderer/openPbrEnergyLut.js +850 -846
  315. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  316. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  317. package/lib/renderer/ownedDenoiser.js +2 -0
  318. package/lib/renderer/ownedDenoiser.js.map +1 -0
  319. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  320. package/lib/renderer/packedMeshInstances.js +80 -0
  321. package/lib/renderer/packedMeshInstances.js.map +1 -0
  322. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  323. package/lib/renderer/prepareMeshBVH.js +21 -642
  324. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  325. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  326. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  327. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  328. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  329. package/lib/renderer/progressiveScheduler.js +7 -3
  330. package/lib/renderer/progressiveScheduler.js.map +1 -1
  331. package/lib/renderer/renderPipeline.d.ts +4 -1
  332. package/lib/renderer/renderPipeline.js.map +1 -1
  333. package/lib/renderer/renderingLimits.d.ts +9 -0
  334. package/lib/renderer/renderingLimits.js +18 -0
  335. package/lib/renderer/renderingLimits.js.map +1 -0
  336. package/lib/renderer/researchTransport.d.ts +31 -0
  337. package/lib/renderer/researchTransport.js +5 -0
  338. package/lib/renderer/researchTransport.js.map +1 -0
  339. package/lib/renderer/sceneAssembly.d.ts +73 -0
  340. package/lib/renderer/sceneAssembly.js +109 -0
  341. package/lib/renderer/sceneAssembly.js.map +1 -0
  342. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  343. package/lib/renderer/sceneChangeCore.js +307 -0
  344. package/lib/renderer/sceneChangeCore.js.map +1 -0
  345. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  346. package/lib/renderer/sceneChangeDetector.js +24 -150
  347. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  348. package/lib/renderer/sceneLayoutSchema.d.ts +119 -0
  349. package/lib/renderer/sceneLayoutSchema.js +111 -0
  350. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  351. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  352. package/lib/renderer/sceneLightChanges.js.map +1 -1
  353. package/lib/renderer/scenePreparation.d.ts +55 -0
  354. package/lib/renderer/scenePreparation.js +360 -0
  355. package/lib/renderer/scenePreparation.js.map +1 -0
  356. package/lib/renderer/scratchSampling.js +18 -18
  357. package/lib/renderer/scratchSampling.js.map +1 -1
  358. package/lib/renderer/shader.d.ts +2 -0
  359. package/lib/renderer/shader.js +2 -0
  360. package/lib/renderer/shader.js.map +1 -1
  361. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  362. package/lib/renderer/shaderCapabilities.js +55 -0
  363. package/lib/renderer/shaderCapabilities.js.map +1 -0
  364. package/lib/renderer/shaderCapacity.d.ts +2 -0
  365. package/lib/renderer/shaderCapacity.js +5 -0
  366. package/lib/renderer/shaderCapacity.js.map +1 -0
  367. package/lib/renderer/skyModel.d.ts +9 -0
  368. package/lib/renderer/skyModel.js +10 -0
  369. package/lib/renderer/skyModel.js.map +1 -0
  370. package/lib/renderer/spectrum.d.ts +21 -0
  371. package/lib/renderer/spectrum.js +154 -0
  372. package/lib/renderer/spectrum.js.map +1 -0
  373. package/lib/renderer/textureAtlas.d.ts +60 -0
  374. package/lib/renderer/textureAtlas.js +145 -0
  375. package/lib/renderer/textureAtlas.js.map +1 -0
  376. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  377. package/lib/renderer/textureAtlasPixels.js +68 -0
  378. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  379. package/lib/renderer/util.d.ts +1 -1
  380. package/lib/renderer/util.js.map +1 -1
  381. package/lib/renderer/webgl.d.ts +9 -2
  382. package/lib/renderer/webgl.js +54 -9
  383. package/lib/renderer/webgl.js.map +1 -1
  384. package/lib/renderer/webglLightSampling.d.ts +39 -0
  385. package/lib/renderer/webglLightSampling.js +15 -0
  386. package/lib/renderer/webglLightSampling.js.map +1 -0
  387. package/lib/renderer/wgpuBindless.d.ts +26 -0
  388. package/lib/renderer/wgpuBindless.js +95 -0
  389. package/lib/renderer/wgpuBindless.js.map +1 -0
  390. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  391. package/lib/renderer/wgpuBindlessSource.js +51 -0
  392. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  393. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  394. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  395. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  396. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  397. package/lib/renderer/wgpuSceneUniform.js +125 -0
  398. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  399. package/lib/renderer/wgpuShaderSource.d.ts +22 -0
  400. package/lib/renderer/wgpuShaderSource.js +33 -0
  401. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  402. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  403. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  404. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  405. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  406. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  407. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  408. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  409. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  410. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  411. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  412. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  413. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  414. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  415. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  416. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  417. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  418. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  419. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  420. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  421. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  422. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  423. package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
  424. package/lib/renderer/wgsl/causticLight.compute.js +537 -0
  425. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
  426. package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
  427. package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
  428. package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
  430. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
  431. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
  432. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
  433. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
  434. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
  435. package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
  436. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
  437. package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
  438. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  439. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  440. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +41 -35
  441. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  442. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  443. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +747 -704
  444. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  445. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  446. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  447. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +4 -1
  448. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +83 -79
  449. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  450. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  451. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  452. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +137 -137
  453. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  454. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +3 -1
  455. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +52 -32
  456. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  457. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  458. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -144
  459. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  460. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  461. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +269 -245
  462. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  463. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  464. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +27 -14
  465. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  466. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
  467. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -95
  468. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
  469. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  470. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  471. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  472. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  473. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  474. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  475. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  476. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  477. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  478. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  479. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  480. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  481. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  482. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  483. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  484. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  485. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  486. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  487. package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
  488. package/lib/renderer/wgsl/photonMap.compute.js +352 -0
  489. package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
  490. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  491. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  492. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  493. package/lib/renderer/wgsl/rayTrace.compute.d.ts +25 -1
  494. package/lib/renderer/wgsl/rayTrace.compute.js +645 -500
  495. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  496. package/lib/scene/Camera.js +7 -3
  497. package/lib/scene/Camera.js.map +1 -1
  498. package/lib/scene/EnvironmentLight.d.ts +5 -9
  499. package/lib/scene/EnvironmentLight.js +4 -14
  500. package/lib/scene/EnvironmentLight.js.map +1 -1
  501. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  502. package/lib/scene/EnvironmentLightState.js +19 -0
  503. package/lib/scene/EnvironmentLightState.js.map +1 -0
  504. package/lib/scene/Geometry.d.ts +12 -6
  505. package/lib/scene/Geometry.js +37 -13
  506. package/lib/scene/Geometry.js.map +1 -1
  507. package/lib/scene/InstanceState.d.ts +39 -0
  508. package/lib/scene/InstanceState.js +77 -0
  509. package/lib/scene/InstanceState.js.map +1 -0
  510. package/lib/scene/InstancedMesh.d.ts +1 -1
  511. package/lib/scene/InstancedMesh.js +3 -0
  512. package/lib/scene/InstancedMesh.js.map +1 -1
  513. package/lib/scene/MaterialState.d.ts +209 -0
  514. package/lib/scene/MaterialState.js +231 -0
  515. package/lib/scene/MaterialState.js.map +1 -0
  516. package/lib/scene/Mesh.d.ts +4 -6
  517. package/lib/scene/Mesh.js +3 -11
  518. package/lib/scene/Mesh.js.map +1 -1
  519. package/lib/scene/MeshState.d.ts +20 -0
  520. package/lib/scene/MeshState.js +35 -0
  521. package/lib/scene/MeshState.js.map +1 -0
  522. package/lib/scene/OpenPBRMaterial.d.ts +6 -168
  523. package/lib/scene/OpenPBRMaterial.js +5 -223
  524. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  525. package/lib/scene/PixelTexture.d.ts +6 -0
  526. package/lib/scene/PixelTexture.js +10 -0
  527. package/lib/scene/PixelTexture.js.map +1 -0
  528. package/lib/scene/ProceduralSky.d.ts +24 -0
  529. package/lib/scene/ProceduralSky.js +40 -0
  530. package/lib/scene/ProceduralSky.js.map +1 -0
  531. package/lib/scene/RectLight.d.ts +2 -13
  532. package/lib/scene/RectLight.js +3 -21
  533. package/lib/scene/RectLight.js.map +1 -1
  534. package/lib/scene/RectLightState.d.ts +31 -0
  535. package/lib/scene/RectLightState.js +26 -0
  536. package/lib/scene/RectLightState.js.map +1 -0
  537. package/lib/scene/Scene.d.ts +15 -4
  538. package/lib/scene/Scene.js.map +1 -1
  539. package/lib/scene/SceneNode.js +7 -6
  540. package/lib/scene/SceneNode.js.map +1 -1
  541. package/lib/scene/Texture.d.ts +10 -41
  542. package/lib/scene/Texture.js +4 -33
  543. package/lib/scene/Texture.js.map +1 -1
  544. package/lib/scene/TextureState.d.ts +35 -0
  545. package/lib/scene/TextureState.js +35 -0
  546. package/lib/scene/TextureState.js.map +1 -0
  547. package/lib/scene/attributeData.d.ts +4 -0
  548. package/lib/scene/attributeData.js +10 -0
  549. package/lib/scene/attributeData.js.map +1 -0
  550. package/lib/scene/lightState.d.ts +8 -0
  551. package/lib/scene/lightState.js +2 -0
  552. package/lib/scene/lightState.js.map +1 -0
  553. package/lib/scene/openPbrSchema.d.ts +7 -12
  554. package/lib/scene/openPbrSchema.js +273 -28
  555. package/lib/scene/openPbrSchema.js.map +1 -1
  556. package/lib/scene/skyParameters.d.ts +20 -0
  557. package/lib/scene/skyParameters.js +28 -0
  558. package/lib/scene/skyParameters.js.map +1 -0
  559. package/lib/scene/textureData.d.ts +9 -0
  560. package/lib/scene/textureData.js +2 -0
  561. package/lib/scene/textureData.js.map +1 -0
  562. package/lib/scene/texturePixels.d.ts +6 -0
  563. package/lib/scene/texturePixels.js +10 -0
  564. package/lib/scene/texturePixels.js.map +1 -0
  565. package/lib/settings/display.d.ts +33 -0
  566. package/lib/settings/display.js +7 -0
  567. package/lib/settings/display.js.map +1 -1
  568. package/lib/settings/render.d.ts +36 -3
  569. package/lib/settings/render.js +4 -1
  570. package/lib/settings/render.js.map +1 -1
  571. package/lib/tinybvh/tinybvh.wasm +0 -0
  572. package/lib/util/commonGeometry.js +7 -7
  573. package/lib/util/commonGeometry.js.map +1 -1
  574. package/lib/util/fromTHREE.d.ts +4 -1
  575. package/lib/util/fromTHREE.js +20 -7
  576. package/lib/util/fromTHREE.js.map +1 -1
  577. package/lib/util/geometry.js +42 -29
  578. package/lib/util/geometry.js.map +1 -1
  579. package/lib/util/loadRGBE.js +3 -4
  580. package/lib/util/loadRGBE.js.map +1 -1
  581. package/lib/util/studioLighting.d.ts +18 -0
  582. package/lib/util/studioLighting.js +36 -0
  583. package/lib/util/studioLighting.js.map +1 -0
  584. package/lib/version.d.ts +1 -1
  585. package/lib/version.js +1 -1
  586. package/lib/version.js.map +1 -1
  587. package/llms.txt +5 -0
  588. package/package.json +33 -7
  589. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  590. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -4,67 +4,67 @@ export default glsl `
4
4
 
5
5
 
6
6
 
7
- vec3 aQ(vec3 view, vec2 alpha, vec2 samplePoint) {
8
- vec3 rm = vec3(alpha, 1.0);
9
- vec3 gk = normalize(rm * view);
10
- float uh = min(gk.z, 1.0);
11
- float qQ = 1.0 + uh;
12
- float rh = (1.0 - samplePoint.y) * qQ;
13
- float rR = samplePoint.y * qQ;
14
- float sI = rh + (1.0 - uh);
15
- float fl = sqrt(max(0.0, sI * rR));
16
- float br = TWOPI * samplePoint.x;
17
- vec3 lI = vec3(
18
- gk.x + fl * cos(br),
19
- gk.y + fl * sin(br),
20
- rh
7
+ vec3 aA(vec3 view, vec2 alpha, vec2 samplePoint) {
8
+ vec3 sn = vec3(alpha, 1.0);
9
+ vec3 ce = normalize(sn * view);
10
+ float qG = min(ce.z, 1.0);
11
+ float jN = 1.0 + qG;
12
+ float kf = (1.0 - samplePoint.y) * jN;
13
+ float sR = samplePoint.y * jN;
14
+ float ub = kf + (1.0 - qG);
15
+ float dr = sqrt(max(0.0, ub * sR));
16
+ float azimuth = TWOPI * samplePoint.x;
17
+ vec3 lX = vec3(
18
+ ce.x + dr * cos(azimuth),
19
+ ce.y + dr * sin(azimuth),
20
+ kf
21
21
  );
22
- return normalize(rm * lI);
22
+ return normalize(sn * lX);
23
23
  }
24
24
 
25
- float gL(vec3 oo, vec2 alpha) {
26
- vec3 hr = vec3(
27
- oo.x / alpha.x,
28
- oo.y / alpha.y,
29
- oo.z
25
+ float sampling_ggx_ndf(vec3 oU, vec2 alpha) {
26
+ vec3 hl = vec3(
27
+ oU.x / alpha.x,
28
+ oU.y / alpha.y,
29
+ oU.z
30
30
  );
31
- float ap = dot(hr, hr);
31
+ float ah = dot(hl, hl);
32
32
  return 1.0 / (
33
- PI * alpha.x * alpha.y * ap * ap
33
+ PI * alpha.x * alpha.y * ah * ah
34
34
  );
35
35
  }
36
36
 
37
- float bk(vec3 direction, vec2 alpha) {
38
- float eF = abs(direction.z);
39
- if (eF <= 1e-8) {
37
+ float aD(vec3 direction, vec2 alpha) {
38
+ float eB = abs(direction.z);
39
+ if (eB <= 1e-8) {
40
40
  return 0.0;
41
41
  }
42
- vec2 ic = alpha * direction.xy;
43
- float lJ = dot(ic, ic)
44
- / (eF * eF);
45
- return 2.0 / (1.0 + sqrt(1.0 + lJ));
42
+ vec2 hZ = alpha * direction.xy;
43
+ float lY = dot(hZ, hZ)
44
+ / (eB * eB);
45
+ return 2.0 / (1.0 + sqrt(1.0 + lY));
46
46
  }
47
47
 
48
- float aE(float au) {
49
- float di = clamp(1.0 - au, 0.0, 1.0);
50
- return pow(di, 5.0);
48
+ float aH(float cosine) {
49
+ float cY = clamp(1.0 - cosine, 0.0, 1.0);
50
+ return pow(cY, 5.0);
51
51
  }
52
52
 
53
- float cu(float L, float cJ) {
54
- float iA = clamp(abs(L), 0.0, 1.0);
55
- float kl = cJ * cJ
56
- * max(0.0, 1.0 - iA * iA);
57
- if (kl >= 1.0) {
53
+ float sampling_dielectric_fresnel(float J, float cE) {
54
+ float iB = clamp(abs(J), 0.0, 1.0);
55
+ float kv = cE * cE
56
+ * max(0.0, 1.0 - iB * iB);
57
+ if (kv >= 1.0) {
58
58
  return 1.0;
59
59
  }
60
60
 
61
- float lT = sqrt(max(0.0, 1.0 - kl));
62
- float ba = (iA - cJ * lT)
63
- / max(iA + cJ * lT, 1e-8);
64
- float pN = (cJ * iA - lT)
65
- / max(cJ * iA + lT, 1e-8);
61
+ float ml = sqrt(max(0.0, 1.0 - kv));
62
+ float bd = (iB - cE * ml)
63
+ / max(iB + cE * ml, 1e-8);
64
+ float qu = (cE * iB - ml)
65
+ / max(cE * iB + ml, 1e-8);
66
66
  return 0.5 * (
67
- ba * ba + pN * pN
67
+ bd * bd + qu * qu
68
68
  );
69
69
  }
70
70
 
@@ -87,108 +87,105 @@ angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);
87
87
  return radius * vec2(cos(angle), sin(angle));
88
88
  }
89
89
 
90
- vec3 bi(vec2 samplePoint) {
91
- vec2 kF = gi(samplePoint);
90
+ vec3 aM(vec2 samplePoint) {
91
+ vec2 kS = gi(samplePoint);
92
92
  return vec3(
93
- kF,
94
- sqrt(max(0.0, 1.0 - dot(kF, kF)))
93
+ kS,
94
+ sqrt(max(0.0, 1.0 - dot(kS, kS)))
95
95
  );
96
96
  }
97
97
 
98
- float aG(float pr, float nN) {
99
- float scale = max(pr, nN);
98
+ float aF(float firstPdf, float secondPdf) {
99
+ float scale = max(firstPdf, secondPdf);
100
100
  if (scale <= 0.0) {
101
101
  return 0.0;
102
102
  }
103
- vec2 normalized = vec2(pr, nN) / scale;
104
- vec2 oO = normalized * normalized;
105
- return oO.x / (oO.x + oO.y);
103
+ vec2 normalized = vec2(firstPdf, secondPdf) / scale;
104
+ vec2 pq = normalized * normalized;
105
+ return pq.x / (pq.x + pq.y);
106
106
  }
107
107
 
108
- void aL(in vec3 normal, out vec3 tangent, out vec3 bitangent) {
108
+ void sampling_orthonormal_basis(in vec3 normal, out vec3 tangent, out vec3 bitangent) {
109
109
  float ik = normal.z >= 0.0 ? 1.0 : -1.0;
110
- float dW = -1.0 / (ik + normal.z);
111
- float xy = normal.x * normal.y * dW;
110
+ float cv = -1.0 / (ik + normal.z);
111
+ float xy = normal.x * normal.y * cv;
112
112
  tangent = vec3(
113
- 1.0 + ik * normal.x * normal.x * dW,
113
+ 1.0 + ik * normal.x * normal.x * cv,
114
114
  ik * xy,
115
115
  -ik * normal.x
116
116
  );
117
117
  bitangent = vec3(
118
118
  xy,
119
- ik + normal.y * normal.y * dW,
119
+ ik + normal.y * normal.y * cv,
120
120
  -normal.y
121
121
  );
122
122
  }
123
123
 
124
- vec3 ai(vec3 rgb, float wavelength) {
125
- if (wavelength == 0.0) {
124
+ vec3 sampling_spectral_rgb_filter(vec3 rgb, int channel) {
125
+ if (channel == 0) {
126
126
  return rgb;
127
127
  }
128
- vec3 tN = wavelength > 600.0
129
- ? vec3(1.0, 0.0, 0.0)
130
- : wavelength > 500.0
131
- ? vec3(0.0, 1.0, 0.0)
132
- : vec3(0.0, 0.0, 1.0);
133
- return rgb * tN;
128
+ vec3 sZ = vec3(0.0);
129
+ sZ[channel - 1] = 1.0;
130
+ return rgb * sZ;
134
131
  }
135
132
 
136
- float eN(
133
+ float sampling_cauchy_ior(
137
134
  float wavelength,
138
- float hh,
139
- float hp,
140
- float qs
135
+ float ha,
136
+ float hk,
137
+ float rm
141
138
  ) {
142
- if (wavelength == 0.0 || hp <= 0.0) {
143
- return hh;
139
+ if (wavelength == 0.0 || hk <= 0.0) {
140
+ return ha;
144
141
  }
145
142
 
146
143
  const float FRAUNHOFER_C = 656.3;
147
144
  const float FRAUNHOFER_D = 587.6;
148
145
  const float FRAUNHOFER_F = 486.1;
149
- float jR = 1.0 / (
146
+ float jX = 1.0 / (
150
147
  1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
151
148
  - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
152
149
  );
153
- float ng = max(qs / hp, 1e-6);
154
- float qR = (hh - 1.0) * jR / ng;
155
- float tl = hh
156
- - qR / (FRAUNHOFER_D * FRAUNHOFER_D);
157
- return tl + qR / (wavelength * wavelength);
150
+ float nU = max(rm / hk, 1e-6);
151
+ float rR = (ha - 1.0) * jX / nU;
152
+ float uO = ha
153
+ - rR / (FRAUNHOFER_D * FRAUNHOFER_D);
154
+ return uO + rR / (wavelength * wavelength);
158
155
  }
159
156
 
160
- vec3 fq(
161
- vec3 gz,
157
+ vec3 fj(
158
+ vec3 gw,
162
159
  float anisotropy,
163
160
  vec2 samplePoint
164
161
  ) {
165
- float au;
162
+ float cosine;
166
163
  if (abs(anisotropy) < 0.001) {
167
- au = 1.0 - 2.0 * samplePoint.y;
164
+ cosine = 1.0 - 2.0 * samplePoint.y;
168
165
  }
169
166
  else {
170
- float ja = (1.0 - anisotropy * anisotropy)
167
+ float iZ = (1.0 - anisotropy * anisotropy)
171
168
  / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
172
- au = (
173
- ja * ja - 1.0 - anisotropy * anisotropy
169
+ cosine = (
170
+ iZ * iZ - 1.0 - anisotropy * anisotropy
174
171
  ) / (2.0 * anisotropy);
175
172
  }
176
173
 
177
- float ud = sqrt(max(0.0, 1.0 - au * au));
178
- float br = TWOPI * samplePoint.x;
174
+ float uC = sqrt(max(0.0, 1.0 - cosine * cosine));
175
+ float azimuth = TWOPI * samplePoint.x;
179
176
  vec3 tangent;
180
177
  vec3 bitangent;
181
- aL(gz, tangent, bitangent);
182
- return tangent * (ud * cos(br))
183
- + bitangent * (ud * sin(br))
184
- + gz * au;
178
+ sampling_orthonormal_basis(gw, tangent, bitangent);
179
+ return tangent * (uC * cos(azimuth))
180
+ + bitangent * (uC * sin(azimuth))
181
+ + gw * cosine;
185
182
  }
186
183
 
187
- float bD(float au, float anisotropy) {
188
- float ap = 1.0 + anisotropy * anisotropy
189
- + 2.0 * anisotropy * au;
184
+ float bB(float cosine, float anisotropy) {
185
+ float ah = 1.0 + anisotropy * anisotropy
186
+ + 2.0 * anisotropy * cosine;
190
187
  return INV4PI * (1.0 - anisotropy * anisotropy)
191
- / (ap * sqrt(ap));
188
+ / (ah * sqrt(ah));
192
189
  }
193
190
  `;
194
191
  //# sourceMappingURL=sampling.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampling.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sampling.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+LlB,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\n\nexport default glsl`\n// The GGX distribution and spherical-cap VNDF sampler are adapted from\n// adobe/openpbr-bsdf, Copyright 2026 Adobe, Apache-2.0. Other routines are\n// project implementations of their stated analytic distributions.\n\nvec3 sampling_ggx_visible_normal(vec3 view, vec2 alpha, vec2 samplePoint) {\n vec3 stretch = vec3(alpha, 1.0);\n vec3 sphericalView = normalize(stretch * view);\n float viewZ = min(sphericalView.z, 1.0);\n float capSpan = 1.0 + viewZ;\n float normalZ = (1.0 - samplePoint.y) * capSpan;\n float oneMinusZ = samplePoint.y * capSpan;\n float onePlusZ = normalZ + (1.0 - viewZ);\n float radial = sqrt(max(0.0, onePlusZ * oneMinusZ));\n float azimuth = TWOPI * samplePoint.x;\n vec3 sphericalNormal = vec3(\n sphericalView.x + radial * cos(azimuth),\n sphericalView.y + radial * sin(azimuth),\n normalZ\n );\n return normalize(stretch * sphericalNormal);\n}\n\nfloat sampling_ggx_ndf(vec3 halfway, vec2 alpha) {\n vec3 ellipsoidNormal = vec3(\n halfway.x / alpha.x,\n halfway.y / alpha.y,\n halfway.z\n );\n float denominator = dot(ellipsoidNormal, ellipsoidNormal);\n return 1.0 / (\n PI * alpha.x * alpha.y * denominator * denominator\n );\n}\n\nfloat sampling_ggx_smith_g1(vec3 direction, vec2 alpha) {\n float normalComponent = abs(direction.z);\n if (normalComponent <= 1e-8) {\n return 0.0;\n }\n vec2 roughDirection = alpha * direction.xy;\n float tanThetaSquared = dot(roughDirection, roughDirection)\n / (normalComponent * normalComponent);\n return 2.0 / (1.0 + sqrt(1.0 + tanThetaSquared));\n}\n\nfloat sampling_schlick_fifth_power(float cosine) {\n float complement = clamp(1.0 - cosine, 0.0, 1.0);\n return pow(complement, 5.0);\n}\n\nfloat sampling_dielectric_fresnel(float incidentCosine, float etaIOverEtaT) {\n float cosineI = clamp(abs(incidentCosine), 0.0, 1.0);\n float sineTSquared = etaIOverEtaT * etaIOverEtaT\n * max(0.0, 1.0 - cosineI * cosineI);\n if (sineTSquared >= 1.0) {\n return 1.0;\n }\n\n float cosineT = sqrt(max(0.0, 1.0 - sineTSquared));\n float perpendicular = (cosineI - etaIOverEtaT * cosineT)\n / max(cosineI + etaIOverEtaT * cosineT, 1e-8);\n float parallel = (etaIOverEtaT * cosineI - cosineT)\n / max(etaIOverEtaT * cosineI + cosineT, 1e-8);\n return 0.5 * (\n perpendicular * perpendicular + parallel * parallel\n );\n}\n\nvec2 sampling_concentric_disk(vec2 samplePoint) {\n vec2 offset = 2.0 * samplePoint - vec2(1.0);\n if (offset.x == 0.0 && offset.y == 0.0) {\n return vec2(0.0);\n }\n\n float radius;\n float angle;\n if (abs(offset.x) > abs(offset.y)) {\n radius = offset.x;\n angle = 0.25 * PI * (offset.y / offset.x);\n }\n else {\n radius = offset.y;\n angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);\n }\n return radius * vec2(cos(angle), sin(angle));\n}\n\nvec3 sampling_cosine_hemisphere(vec2 samplePoint) {\n vec2 diskPoint = sampling_concentric_disk(samplePoint);\n return vec3(\n diskPoint,\n sqrt(max(0.0, 1.0 - dot(diskPoint, diskPoint)))\n );\n}\n\nfloat sampling_power_heuristic(float firstPdf, float secondPdf) {\n float scale = max(firstPdf, secondPdf);\n if (scale <= 0.0) {\n return 0.0;\n }\n vec2 normalized = vec2(firstPdf, secondPdf) / scale;\n vec2 squared = normalized * normalized;\n return squared.x / (squared.x + squared.y);\n}\n\nvoid sampling_orthonormal_basis(in vec3 normal, out vec3 tangent, out vec3 bitangent) {\n float signZ = normal.z >= 0.0 ? 1.0 : -1.0;\n float factor = -1.0 / (signZ + normal.z);\n float xy = normal.x * normal.y * factor;\n tangent = vec3(\n 1.0 + signZ * normal.x * normal.x * factor,\n signZ * xy,\n -signZ * normal.x\n );\n bitangent = vec3(\n xy,\n signZ + normal.y * normal.y * factor,\n -normal.y\n );\n}\n\nvec3 sampling_spectral_rgb_filter(vec3 rgb, float wavelength) {\n if (wavelength == 0.0) {\n return rgb;\n }\n vec3 channelMask = wavelength > 600.0\n ? vec3(1.0, 0.0, 0.0)\n : wavelength > 500.0\n ? vec3(0.0, 1.0, 0.0)\n : vec3(0.0, 0.0, 1.0);\n return rgb * channelMask;\n}\n\nfloat sampling_cauchy_ior(\n float wavelength,\n float referenceIor,\n float dispersionScale,\n float abbeNumber\n) {\n if (wavelength == 0.0 || dispersionScale <= 0.0) {\n return referenceIor;\n }\n\n const float FRAUNHOFER_C = 656.3;\n const float FRAUNHOFER_D = 587.6;\n const float FRAUNHOFER_F = 486.1;\n float inverseDifference = 1.0 / (\n 1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)\n - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)\n );\n float effectiveAbbe = max(abbeNumber / dispersionScale, 1e-6);\n float cauchyB = (referenceIor - 1.0) * inverseDifference / effectiveAbbe;\n float cauchyA = referenceIor\n - cauchyB / (FRAUNHOFER_D * FRAUNHOFER_D);\n return cauchyA + cauchyB / (wavelength * wavelength);\n}\n\nvec3 sampling_henyey_greenstein(\n vec3 forwardDirection,\n float anisotropy,\n vec2 samplePoint\n) {\n float cosine;\n if (abs(anisotropy) < 0.001) {\n cosine = 1.0 - 2.0 * samplePoint.y;\n }\n else {\n float ratio = (1.0 - anisotropy * anisotropy)\n / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);\n cosine = (\n ratio * ratio - 1.0 - anisotropy * anisotropy\n ) / (2.0 * anisotropy);\n }\n\n float sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n float azimuth = TWOPI * samplePoint.x;\n vec3 tangent;\n vec3 bitangent;\n sampling_orthonormal_basis(forwardDirection, tangent, bitangent);\n return tangent * (sine * cos(azimuth))\n + bitangent * (sine * sin(azimuth))\n + forwardDirection * cosine;\n}\n\nfloat sampling_henyey_greenstein_phase(float cosine, float anisotropy) {\n float denominator = 1.0 + anisotropy * anisotropy\n + 2.0 * anisotropy * cosine;\n return INV4PI * (1.0 - anisotropy * anisotropy)\n / (denominator * sqrt(denominator));\n}\n`;\n"]}
1
+ {"version":3,"file":"sampling.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sampling.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4LlB,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\n\nexport default glsl`\n// The GGX distribution and spherical-cap VNDF sampler are adapted from\n// adobe/openpbr-bsdf, Copyright 2026 Adobe, Apache-2.0. Other routines are\n// project implementations of their stated analytic distributions.\n\nvec3 sampling_ggx_visible_normal(vec3 view, vec2 alpha, vec2 samplePoint) {\n vec3 stretch = vec3(alpha, 1.0);\n vec3 sphericalView = normalize(stretch * view);\n float viewZ = min(sphericalView.z, 1.0);\n float capSpan = 1.0 + viewZ;\n float normalZ = (1.0 - samplePoint.y) * capSpan;\n float oneMinusZ = samplePoint.y * capSpan;\n float onePlusZ = normalZ + (1.0 - viewZ);\n float radial = sqrt(max(0.0, onePlusZ * oneMinusZ));\n float azimuth = TWOPI * samplePoint.x;\n vec3 sphericalNormal = vec3(\n sphericalView.x + radial * cos(azimuth),\n sphericalView.y + radial * sin(azimuth),\n normalZ\n );\n return normalize(stretch * sphericalNormal);\n}\n\nfloat sampling_ggx_ndf(vec3 halfway, vec2 alpha) {\n vec3 ellipsoidNormal = vec3(\n halfway.x / alpha.x,\n halfway.y / alpha.y,\n halfway.z\n );\n float denominator = dot(ellipsoidNormal, ellipsoidNormal);\n return 1.0 / (\n PI * alpha.x * alpha.y * denominator * denominator\n );\n}\n\nfloat sampling_ggx_smith_g1(vec3 direction, vec2 alpha) {\n float normalComponent = abs(direction.z);\n if (normalComponent <= 1e-8) {\n return 0.0;\n }\n vec2 roughDirection = alpha * direction.xy;\n float tanThetaSquared = dot(roughDirection, roughDirection)\n / (normalComponent * normalComponent);\n return 2.0 / (1.0 + sqrt(1.0 + tanThetaSquared));\n}\n\nfloat sampling_schlick_fifth_power(float cosine) {\n float complement = clamp(1.0 - cosine, 0.0, 1.0);\n return pow(complement, 5.0);\n}\n\nfloat sampling_dielectric_fresnel(float incidentCosine, float etaIOverEtaT) {\n float cosineI = clamp(abs(incidentCosine), 0.0, 1.0);\n float sineTSquared = etaIOverEtaT * etaIOverEtaT\n * max(0.0, 1.0 - cosineI * cosineI);\n if (sineTSquared >= 1.0) {\n return 1.0;\n }\n\n float cosineT = sqrt(max(0.0, 1.0 - sineTSquared));\n float perpendicular = (cosineI - etaIOverEtaT * cosineT)\n / max(cosineI + etaIOverEtaT * cosineT, 1e-8);\n float parallel = (etaIOverEtaT * cosineI - cosineT)\n / max(etaIOverEtaT * cosineI + cosineT, 1e-8);\n return 0.5 * (\n perpendicular * perpendicular + parallel * parallel\n );\n}\n\nvec2 sampling_concentric_disk(vec2 samplePoint) {\n vec2 offset = 2.0 * samplePoint - vec2(1.0);\n if (offset.x == 0.0 && offset.y == 0.0) {\n return vec2(0.0);\n }\n\n float radius;\n float angle;\n if (abs(offset.x) > abs(offset.y)) {\n radius = offset.x;\n angle = 0.25 * PI * (offset.y / offset.x);\n }\n else {\n radius = offset.y;\n angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);\n }\n return radius * vec2(cos(angle), sin(angle));\n}\n\nvec3 sampling_cosine_hemisphere(vec2 samplePoint) {\n vec2 diskPoint = sampling_concentric_disk(samplePoint);\n return vec3(\n diskPoint,\n sqrt(max(0.0, 1.0 - dot(diskPoint, diskPoint)))\n );\n}\n\nfloat sampling_power_heuristic(float firstPdf, float secondPdf) {\n float scale = max(firstPdf, secondPdf);\n if (scale <= 0.0) {\n return 0.0;\n }\n vec2 normalized = vec2(firstPdf, secondPdf) / scale;\n vec2 squared = normalized * normalized;\n return squared.x / (squared.x + squared.y);\n}\n\nvoid sampling_orthonormal_basis(in vec3 normal, out vec3 tangent, out vec3 bitangent) {\n float signZ = normal.z >= 0.0 ? 1.0 : -1.0;\n float factor = -1.0 / (signZ + normal.z);\n float xy = normal.x * normal.y * factor;\n tangent = vec3(\n 1.0 + signZ * normal.x * normal.x * factor,\n signZ * xy,\n -signZ * normal.x\n );\n bitangent = vec3(\n xy,\n signZ + normal.y * normal.y * factor,\n -normal.y\n );\n}\n\nvec3 sampling_spectral_rgb_filter(vec3 rgb, int channel) {\n if (channel == 0) {\n return rgb;\n }\n vec3 channelMask = vec3(0.0);\n channelMask[channel - 1] = 1.0;\n return rgb * channelMask;\n}\n\nfloat sampling_cauchy_ior(\n float wavelength,\n float referenceIor,\n float dispersionScale,\n float abbeNumber\n) {\n if (wavelength == 0.0 || dispersionScale <= 0.0) {\n return referenceIor;\n }\n\n const float FRAUNHOFER_C = 656.3;\n const float FRAUNHOFER_D = 587.6;\n const float FRAUNHOFER_F = 486.1;\n float inverseDifference = 1.0 / (\n 1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)\n - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)\n );\n float effectiveAbbe = max(abbeNumber / dispersionScale, 1e-6);\n float cauchyB = (referenceIor - 1.0) * inverseDifference / effectiveAbbe;\n float cauchyA = referenceIor\n - cauchyB / (FRAUNHOFER_D * FRAUNHOFER_D);\n return cauchyA + cauchyB / (wavelength * wavelength);\n}\n\nvec3 sampling_henyey_greenstein(\n vec3 forwardDirection,\n float anisotropy,\n vec2 samplePoint\n) {\n float cosine;\n if (abs(anisotropy) < 0.001) {\n cosine = 1.0 - 2.0 * samplePoint.y;\n }\n else {\n float ratio = (1.0 - anisotropy * anisotropy)\n / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);\n cosine = (\n ratio * ratio - 1.0 - anisotropy * anisotropy\n ) / (2.0 * anisotropy);\n }\n\n float sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n float azimuth = TWOPI * samplePoint.x;\n vec3 tangent;\n vec3 bitangent;\n sampling_orthonormal_basis(forwardDirection, tangent, bitangent);\n return tangent * (sine * cos(azimuth))\n + bitangent * (sine * sin(azimuth))\n + forwardDirection * cosine;\n}\n\nfloat sampling_henyey_greenstein_phase(float cosine, float anisotropy) {\n float denominator = 1.0 + anisotropy * anisotropy\n + 2.0 * anisotropy * cosine;\n return INV4PI * (1.0 - anisotropy * anisotropy)\n / (denominator * sqrt(denominator));\n}\n`;\n"]}
@@ -24,41 +24,41 @@ const uint BOUNCE_STRIDE = 64u;
24
24
 
25
25
 
26
26
 
27
- uvec2 bc;
28
- uint bd;
29
- uint cF = 0u;
30
- uint em = 0u;
31
- uint eg(uint kt) {
32
- uint x = kt;
27
+ uvec2 aI;
28
+ uint aC;
29
+ uint samplingBounce = 0u;
30
+ uint ca = 0u;
31
+ uint cB(uint kC) {
32
+ uint x = kC;
33
33
  x ^= x >> 16u; x *= 0x7feb352du;
34
34
  x ^= x >> 15u; x *= 0x846ca68bu;
35
35
  return x ^ (x >> 16u);
36
36
  }
37
- uint aq(uint a, uint b) {
38
- return eg(a ^ eg(b + 0x9e3779b9u));
37
+ uint ak(uint a, uint b) {
38
+ return cB(a ^ cB(b + 0x9e3779b9u));
39
39
  }
40
- uint iE(uint kt, uint ij) {
41
- uint x = kt + ij;
40
+ uint iD(uint kC, uint seed) {
41
+ uint x = kC + seed;
42
42
  x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
43
43
  x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
44
44
  return x;
45
45
  }
46
- uint sK(uint x, uint ij) {
47
- return reverseBits(iE(reverseBits(x), ij));
46
+ uint ud(uint x, uint seed) {
47
+ return reverseBits(iD(reverseBits(x), seed));
48
48
  }
49
49
 
50
- uint rl(uint kt) {
51
- uint r = reverseBits(kt);
50
+ uint sm(uint kC) {
51
+ uint r = reverseBits(kC);
52
52
  ${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
53
53
  return r;
54
54
  }
55
- vec2 vP(uint index, uint ij) {
56
- uint i = sK(index, aq(ij, 0u));
57
- uint x = reverseBits(iE(i, aq(ij, 1u)));
58
- uint y = sK(rl(i), aq(ij, 2u));
55
+ vec2 yf(uint index, uint seed) {
56
+ uint i = ud(index, ak(seed, 0u));
57
+ uint x = reverseBits(iD(i, ak(seed, 1u)));
58
+ uint y = ud(sm(i), ak(seed, 2u));
59
59
  return vec2(float(x >> 8u), float(y >> 8u)) * (1.0 / 16777216.0);
60
60
  }
61
- uint tB(uvec2 p) {
61
+ uint uX(uvec2 p) {
62
62
  uvec2 v = p & uvec2(255u);
63
63
  v = (v | (v << uvec2(4u))) & uvec2(0x0f0fu);
64
64
  v = (v | (v << uvec2(2u))) & uvec2(0x3333u);
@@ -66,104 +66,104 @@ v = (v | (v << uvec2(1u))) & uvec2(0x5555u);
66
66
  return v.x | (v.y << 1u);
67
67
  }
68
68
  ${zSobolPackedPermutations.map((v, i) => `const uint Z_PERM_${i} = ${v}u;`).join("\n")}
69
- uint kw(uint tE) {
70
- uint group = tE >> 2u;
69
+ uint kG(uint va) {
70
+ uint group = va >> 2u;
71
71
  uint word = Z_PERM_5;
72
72
  ${[0, 1, 2, 3, 4].map(i => `word = group == ${i}u ? Z_PERM_${i} : word;`).join("\n ")}
73
- return (word >> ((tE & 3u) * 8u)) & 255u;
73
+ return (word >> ((va & 3u) * 8u)) & 255u;
74
74
  }
75
- uint pW(uint kN, uint dim, uint logSPP) {
75
+ uint qJ(uint kY, uint dim, uint logSPP) {
76
76
  uint odd = logSPP & 1u;
77
- uint um = 8u + ((logSPP + 1u) >> 1u);
77
+ uint wb = 8u + ((logSPP + 1u) >> 1u);
78
78
  uint result = 0u;
79
- for (int digit = int(um) - 1; digit >= int(odd); digit--) {
79
+ for (int digit = int(wb) - 1; digit >= int(odd); digit--) {
80
80
  uint shift = 2u*uint(digit) - odd;
81
81
 
82
- uint st = 0u;
83
- if (shift < 30u) { st = kN >> (shift + 2u); }
84
- uint tE = (eg(st ^ (0x55555555u * dim)) >> 24u) % 24u;
85
- uint d = (kN >> shift) & 3u;
86
- result |= ((kw(tE) >> (2u*d)) & 3u) << shift;
82
+ uint tN = 0u;
83
+ if (shift < 30u) { tN = kY >> (shift + 2u); }
84
+ uint va = (cB(tN ^ (0x55555555u * dim)) >> 24u) % 24u;
85
+ uint d = (kY >> shift) & 3u;
86
+ result |= ((kG(va) >> (2u*d)) & 3u) << shift;
87
87
  }
88
88
  if (odd != 0u) {
89
- result |= (kN & 1u) ^ (eg((kN >> 1u) ^ (0x55555555u * dim)) & 1u);
89
+ result |= (kY & 1u) ^ (cB((kY >> 1u) ^ (0x55555555u * dim)) & 1u);
90
90
  }
91
91
  return result;
92
92
  }
93
93
 
94
94
 
95
95
 
96
- uint cw(uint slot) {
97
- return CAMERA_BEVEL_BASE + uint(BEVEL_SAMPLES) + cF * BOUNCE_STRIDE + slot;
96
+ uint bE(uint slot) {
97
+ return CAMERA_BEVEL_BASE + uint(BEVEL_SAMPLES) + samplingBounce * BOUNCE_STRIDE + slot;
98
98
  }
99
99
 
100
- uvec4 hl;
101
- uint hm;
102
- bool fC = false;
103
- bool dg = false;
104
- uint dF;
105
- uint gv;
106
- vec2 eQ;
107
- void dw(uint dim) {
100
+ uvec4 hg;
101
+ uint hh;
102
+ bool fA = false;
103
+ bool cX = false;
104
+ uint dD;
105
+ uint gt;
106
+ vec2 eJ;
107
+ void dm(uint dim) {
108
108
 
109
- uint kd = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
110
- uvec4 key = uvec4(dim, bd, kd, uint(sequenceSeed));
111
- if (fC && all(equal(hl, key)) && hm == uint(zSobolLogSPP)) { return; }
112
- hl = key; hm = uint(zSobolLogSPP);
113
- fC = true; dg = false;
114
- uint ij = aq(aq(kd, dim), uint(sequenceSeed));
115
- uint index = bd;
109
+ uint kl = aI.x + aI.y * uint(round(1.0 / pixelSize.x));
110
+ uvec4 key = uvec4(dim, aC, kl, uint(sequenceSeed));
111
+ if (fA && all(equal(hg, key)) && hh == uint(zSobolLogSPP)) { return; }
112
+ hg = key; hh = uint(zSobolLogSPP);
113
+ fA = true; cX = false;
114
+ uint seed = ak(ak(kl, dim), uint(sequenceSeed));
115
+ uint index = aC;
116
116
  if (samplingPattern == 1) {
117
117
  uint logSPP = uint(zSobolLogSPP);
118
118
  if (index == 0u) { logSPP = 0u; }
119
119
  else { index -= 1u; }
120
120
 
121
- uint jb = index >> logSPP;
121
+ uint jd = index >> logSPP;
122
122
  uint mask = (1u << logSPP) - 1u;
123
- uint kN = (tB(bc) << logSPP) | (index & mask);
124
- index = pW(kN, dim, logSPP);
125
- uvec2 tile = bc >> uvec2(8u);
126
- ij = aq(aq(dim, uint(sequenceSeed)), aq(tile.x, tile.y));
123
+ uint kY = (uX(aI) << logSPP) | (index & mask);
124
+ index = qJ(kY, dim, logSPP);
125
+ uvec2 tile = aI >> uvec2(8u);
126
+ seed = ak(ak(dim, uint(sequenceSeed)), ak(tile.x, tile.y));
127
127
 
128
- if (bd != 0u) { jb += 1u; }
129
- ij = aq(ij, jb);
128
+ if (aC != 0u) { jd += 1u; }
129
+ seed = ak(seed, jd);
130
130
  }
131
- dF = sK(index, aq(ij, 0u));
132
- gv = ij;
133
- uint x = reverseBits(iE(dF, aq(ij, 1u)));
134
- eQ.x = float(x >> 8u) * (1.0 / 16777216.0);
131
+ dD = ud(index, ak(seed, 0u));
132
+ gt = seed;
133
+ uint x = reverseBits(iD(dD, ak(seed, 1u)));
134
+ eJ.x = float(x >> 8u) * (1.0 / 16777216.0);
135
135
  }
136
- vec2 kS(uint dim) {
137
- dw(dim);
138
- if (!dg) {
139
- uint y = sK(rl(dF), aq(gv, 2u));
140
- eQ.y = float(y >> 8u) * (1.0 / 16777216.0);
141
- dg = true;
136
+ vec2 le(uint dim) {
137
+ dm(dim);
138
+ if (!cX) {
139
+ uint y = ud(sm(dD), ak(gt, 2u));
140
+ eJ.y = float(y >> 8u) * (1.0 / 16777216.0);
141
+ cX = true;
142
142
  }
143
- return EPS + (1.0 - 2.0*EPS) * eQ;
143
+ return EPS + (1.0 - 2.0*EPS) * eJ;
144
144
  }
145
- float dz(uint dim) {
145
+ float sample1D(uint dim) {
146
146
  if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
147
- dw(dim);
148
- return EPS + (1.0 - 2.0*EPS) * eQ.x;
147
+ dm(dim);
148
+ return EPS + (1.0 - 2.0*EPS) * eJ.x;
149
149
  }
150
- vec2 fp(uint dim) {
150
+ vec2 sample2D(uint dim) {
151
151
  if (samplingPattern == 2) {
152
- float x = dz(dim); float y = dz(dim);
152
+ float x = sample1D(dim); float y = sample1D(dim);
153
153
  return vec2(x,y);
154
154
  }
155
- return kS(dim);
155
+ return le(dim);
156
156
  }
157
157
 
158
- float eo(uint slot) {
159
- uint dim = aq(aq(cF, slot), em) | 0x80000000u;
160
- em += 1u;
158
+ float ek(uint slot) {
159
+ uint dim = ak(ak(samplingBounce, slot), ca) | 0x80000000u;
160
+ ca += 1u;
161
161
  if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
162
162
 
163
- uint kd = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
164
- uint ij = aq(aq(kd, dim), uint(sequenceSeed));
165
- uint i = sK(bd, aq(ij, 0u));
166
- uint x = reverseBits(iE(i, aq(ij, 1u)));
163
+ uint kl = aI.x + aI.y * uint(round(1.0 / pixelSize.x));
164
+ uint seed = ak(ak(kl, dim), uint(sequenceSeed));
165
+ uint i = ud(aC, ak(seed, 0u));
166
+ uint x = reverseBits(iD(i, ak(seed, 1u)));
167
167
  return EPS + (1.0 - 2.0*EPS) * (float(x >> 8u) * (1.0 / 16777216.0));
168
168
  }
169
169
  `;
@@ -9,16 +9,16 @@ vec4 textureLinear(sampler2D map, vec2 uv) {
9
9
  return texture(map, uv);
10
10
  #else
11
11
  vec2 size = vec2(textureSize(map, 0));
12
- vec2 qa = 1.0 / size;
12
+ vec2 qQ = 1.0 / size;
13
13
 
14
14
  uv = uv * size - 0.5;
15
15
  vec2 f = fract(uv);
16
16
  uv = floor(uv) + 0.5;
17
17
 
18
- vec4 s1 = texture(map, (uv + vec2(0, 0)) * qa);
19
- vec4 s2 = texture(map, (uv + vec2(1, 0)) * qa);
20
- vec4 s3 = texture(map, (uv + vec2(0, 1)) * qa);
21
- vec4 s4 = texture(map, (uv + vec2(1, 1)) * qa);
18
+ vec4 s1 = texture(map, (uv + vec2(0, 0)) * qQ);
19
+ vec4 s2 = texture(map, (uv + vec2(1, 0)) * qQ);
20
+ vec4 s3 = texture(map, (uv + vec2(0, 1)) * qQ);
21
+ vec4 s4 = texture(map, (uv + vec2(1, 1)) * qQ);
22
22
 
23
23
  return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);
24
24
  #endif
@@ -1,5 +1,5 @@
1
1
  import { glsl } from '../../shader.js';
2
- import { uvProjectionConstants } from '../../MaterialTable.js';
2
+ import { uvProjectionConstants } from '../../materialConstants.js';
3
3
  export default glsl `
4
4
  vec2 sphericalProjection(vec3 pos) {
5
5
  vec3 n = normalize(pos);
@@ -8,12 +8,12 @@ float phi = acos(n.y) / PI;
8
8
  return vec2(theta, 1.0 - phi);
9
9
  }
10
10
 
11
- vec2 iR(vec3 pos, vec3 normal, vec2 uvScale) {
12
- vec3 dn = abs(normal);
11
+ vec2 iO(vec3 pos, vec3 normal, vec2 uvScale) {
12
+ vec3 dg = abs(normal);
13
13
  vec2 uv = vec2(0.0);
14
- if (dn.x > dn.y && dn.x > dn.z) {
14
+ if (dg.x > dg.y && dg.x > dg.z) {
15
15
  uv = pos.yz;
16
- } else if (dn.y > dn.x && dn.y > dn.z) {
16
+ } else if (dg.y > dg.x && dg.y > dg.z) {
17
17
  uv = pos.xz;
18
18
  } else {
19
19
  uv = pos.xy;
@@ -53,18 +53,18 @@ return fract(uv * uvScale);
53
53
 
54
54
 
55
55
 
56
- vec2 hD(vec3 pos, vec3 normal) {
56
+ vec2 hA(vec3 pos, vec3 normal) {
57
57
  float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;
58
58
  return vec2(theta, pos.y);
59
59
  }
60
60
 
61
- vec2 gI(int fk, vec3 pos, vec3 normal, vec2 uvScale) {
62
- if (fk == ${uvProjectionConstants.triplanar + ''}) {
63
- return iR(pos, normal, uvScale);
64
- } else if (fk == ${uvProjectionConstants.spherical + ''}) {
61
+ vec2 gE(int fg, vec3 pos, vec3 normal, vec2 uvScale) {
62
+ if (fg == ${uvProjectionConstants.triplanar + ''}) {
63
+ return iO(pos, normal, uvScale);
64
+ } else if (fg == ${uvProjectionConstants.spherical + ''}) {
65
65
  return sphericalProjection(pos) * uvScale;
66
- } else if (fk == ${uvProjectionConstants.cylindrical + ''}) {
67
- return hD(pos, normal) * uvScale;
66
+ } else if (fg == ${uvProjectionConstants.cylindrical + ''}) {
67
+ return hA(pos, normal) * uvScale;
68
68
  }
69
69
  return vec2(0.0);
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uvProjection.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/uvProjection.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2DO,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAE7B,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAEpC,qBAAqB,CAAC,WAAW,GAAG,EAAE;;;;;CAKtE,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\nimport { uvProjectionConstants } from '../../MaterialTable.js';\n\nexport default glsl`\nvec2 sphericalProjection(vec3 pos) {\n vec3 n = normalize(pos);\n float theta = atan(n.x, n.z) / (2.0 * PI) + 0.5;\n float phi = acos(n.y) / PI;\n return vec2(theta, 1.0 - phi);\n}\n\nvec2 triplanarProjection(vec3 pos, vec3 normal, vec2 uvScale) {\n vec3 absNormal = abs(normal);\n vec2 uv = vec2(0.0);\n if (absNormal.x > absNormal.y && absNormal.x > absNormal.z) {\n uv = pos.yz;\n } else if (absNormal.y > absNormal.x && absNormal.y > absNormal.z) {\n uv = pos.xz;\n } else {\n uv = pos.xy;\n }\n return fract(uv * uvScale);\n}\n\n// vec4 triplanarProjectionSample(\n// sampler2DArray _map, vec2 mapSize, int index,\n// vec3 pos, vec3 normal, vec2 uvScale, float blending\n// ) {\n// vec3 absNormal = abs(normal);\n// // Calculate blending power - higher expo means sharper transitions\n// float expo = (1.0 - blending) * 125.0 + blending * 3.0;\n \n// // Weight each axis by its normal component raised to expo power\n// vec3 weights = pow(absNormal, vec3(expo));\n \n// // Normalize weights so they sum to 1\n// weights = weights / (weights.x + weights.y + weights.z);\n \n// // Project UVs on each axis plane (yz, xz, xy)\n// vec2 yzPlane = pos.yz * uvScale;\n// vec2 xzPlane = pos.xz * uvScale;\n// vec2 xyPlane = pos.xy * uvScale;\n// // Wrap\n// yzPlane = fract(yzPlane);\n// xzPlane = fract(xzPlane);\n// xyPlane = fract(xyPlane);\n\n// // Sample maps\n// vec4 yz = texture(_map, vec3(yzPlane * mapSize, float(index)));\n// vec4 xz = texture(_map, vec3(xzPlane * mapSize, float(index)));\n// vec4 xy = texture(_map, vec3(xyPlane * mapSize, float(index)));\n \n// // Blend the projected coordinates using the weights\n// return weights.x * yz + weights.y * xz + weights.z * xy;\n// }\n\nvec2 cylindricalProjection(vec3 pos, vec3 normal) {\n float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;\n return vec2(theta, pos.y);\n}\n\nvec2 projectUV(int projectionType, vec3 pos, vec3 normal, vec2 uvScale) {\n if (projectionType == ${uvProjectionConstants.triplanar + ''}) {\n return triplanarProjection(pos, normal, uvScale);\n } else if (projectionType == ${uvProjectionConstants.spherical + ''}) {\n return sphericalProjection(pos) * uvScale;\n } else if (projectionType == ${uvProjectionConstants.cylindrical + ''}) {\n return cylindricalProjection(pos, normal) * uvScale;\n }\n return vec2(0.0);\n}\n`;\n"]}
1
+ {"version":3,"file":"uvProjection.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/uvProjection.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2DO,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAE7B,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAEpC,qBAAqB,CAAC,WAAW,GAAG,EAAE;;;;;CAKtE,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\nimport { uvProjectionConstants } from '../../materialConstants.js';\n\nexport default glsl`\nvec2 sphericalProjection(vec3 pos) {\n vec3 n = normalize(pos);\n float theta = atan(n.x, n.z) / (2.0 * PI) + 0.5;\n float phi = acos(n.y) / PI;\n return vec2(theta, 1.0 - phi);\n}\n\nvec2 triplanarProjection(vec3 pos, vec3 normal, vec2 uvScale) {\n vec3 absNormal = abs(normal);\n vec2 uv = vec2(0.0);\n if (absNormal.x > absNormal.y && absNormal.x > absNormal.z) {\n uv = pos.yz;\n } else if (absNormal.y > absNormal.x && absNormal.y > absNormal.z) {\n uv = pos.xz;\n } else {\n uv = pos.xy;\n }\n return fract(uv * uvScale);\n}\n\n// vec4 triplanarProjectionSample(\n// sampler2DArray _map, vec2 mapSize, int index,\n// vec3 pos, vec3 normal, vec2 uvScale, float blending\n// ) {\n// vec3 absNormal = abs(normal);\n// // Calculate blending power - higher expo means sharper transitions\n// float expo = (1.0 - blending) * 125.0 + blending * 3.0;\n \n// // Weight each axis by its normal component raised to expo power\n// vec3 weights = pow(absNormal, vec3(expo));\n \n// // Normalize weights so they sum to 1\n// weights = weights / (weights.x + weights.y + weights.z);\n \n// // Project UVs on each axis plane (yz, xz, xy)\n// vec2 yzPlane = pos.yz * uvScale;\n// vec2 xzPlane = pos.xz * uvScale;\n// vec2 xyPlane = pos.xy * uvScale;\n// // Wrap\n// yzPlane = fract(yzPlane);\n// xzPlane = fract(xzPlane);\n// xyPlane = fract(xyPlane);\n\n// // Sample maps\n// vec4 yz = texture(_map, vec3(yzPlane * mapSize, float(index)));\n// vec4 xz = texture(_map, vec3(xzPlane * mapSize, float(index)));\n// vec4 xy = texture(_map, vec3(xyPlane * mapSize, float(index)));\n \n// // Blend the projected coordinates using the weights\n// return weights.x * yz + weights.y * xz + weights.z * xy;\n// }\n\nvec2 cylindricalProjection(vec3 pos, vec3 normal) {\n float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;\n return vec2(theta, pos.y);\n}\n\nvec2 projectUV(int projectionType, vec3 pos, vec3 normal, vec2 uvScale) {\n if (projectionType == ${uvProjectionConstants.triplanar + ''}) {\n return triplanarProjection(pos, normal, uvScale);\n } else if (projectionType == ${uvProjectionConstants.spherical + ''}) {\n return sphericalProjection(pos) * uvScale;\n } else if (projectionType == ${uvProjectionConstants.cylindrical + ''}) {\n return cylindricalProjection(pos, normal) * uvScale;\n }\n return vec2(0.0);\n}\n`;\n"]}
@@ -33,18 +33,18 @@ if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;
33
33
  vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);
34
34
  vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);
35
35
  Ray ray;
36
- iC(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
36
+ initRay(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
37
37
  vec3 eye = viewInv[3].xyz;
38
- vec3 oj = -normalize(viewInv[2].xyz);
39
- ad si;
38
+ vec3 forward = -normalize(viewInv[2].xyz);
39
+ SurfaceInteraction si;
40
40
  si.triangleIndex = -1;
41
41
  for (int layer = 0; layer < 32; layer++) {
42
- cZ(ray, si, false);
42
+ intersectScene(ray, si, false);
43
43
  if (!si.hit) return;
44
- J material;
45
- eX(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
44
+ OpenPbrResolvedMaterial material;
45
+ getMaterial(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
46
46
  if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
47
- out_depth.r = max(dot(si.position - eye, oj), 0.0);
47
+ out_depth.r = max(dot(si.position - eye, forward), 0.0);
48
48
  return;
49
49
  }
50
50
  ray.o = si.position + ray.d * (EPS * 0.02);