@meimu/mutracer 0.1.5 → 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 (526) 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 +10407 -8353
  6. package/docs/api.md +200 -10
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +1 -1
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +14 -5
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +11 -6
  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 -550
  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 +82 -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 +429 -429
  206. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +144 -144
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  208. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +801 -801
  209. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  210. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  211. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +49 -49
  212. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  213. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  214. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +102 -102
  215. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  216. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  217. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  218. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  219. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  220. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  221. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  222. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  223. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  224. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  225. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  226. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  227. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  228. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  229. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  230. package/lib/renderer/lightConstants.d.ts +10 -0
  231. package/lib/renderer/lightConstants.js +11 -0
  232. package/lib/renderer/lightConstants.js.map +1 -0
  233. package/lib/renderer/lightCore.d.ts +12 -0
  234. package/lib/renderer/lightCore.js +13 -0
  235. package/lib/renderer/lightCore.js.map +1 -0
  236. package/lib/renderer/lightSampling.d.ts +20 -17
  237. package/lib/renderer/lightSampling.js +123 -56
  238. package/lib/renderer/lightSampling.js.map +1 -1
  239. package/lib/renderer/lightsData.d.ts +21 -0
  240. package/lib/renderer/lightsData.js +192 -0
  241. package/lib/renderer/lightsData.js.map +1 -0
  242. package/lib/renderer/lightsUtil.d.ts +3 -26
  243. package/lib/renderer/lightsUtil.js +3 -153
  244. package/lib/renderer/lightsUtil.js.map +1 -1
  245. package/lib/renderer/materialBufferData.d.ts +70 -0
  246. package/lib/renderer/materialBufferData.js +2 -0
  247. package/lib/renderer/materialBufferData.js.map +1 -0
  248. package/lib/renderer/materialConstants.d.ts +11 -0
  249. package/lib/renderer/materialConstants.js +11 -0
  250. package/lib/renderer/materialConstants.js.map +1 -1
  251. package/lib/renderer/materialCore.d.ts +8 -0
  252. package/lib/renderer/materialCore.js +9 -0
  253. package/lib/renderer/materialCore.js.map +1 -0
  254. package/lib/renderer/materialEmission.d.ts +2 -2
  255. package/lib/renderer/materialEmission.js +3 -3
  256. package/lib/renderer/materialEmission.js.map +1 -1
  257. package/lib/renderer/materialLayout.d.ts +2 -101
  258. package/lib/renderer/materialLayout.js +110 -172
  259. package/lib/renderer/materialLayout.js.map +1 -1
  260. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  261. package/lib/renderer/materialLayoutSchema.js +172 -0
  262. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  263. package/lib/renderer/materialParams.d.ts +69 -0
  264. package/lib/renderer/materialParams.js +272 -0
  265. package/lib/renderer/materialParams.js.map +1 -0
  266. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  267. package/lib/renderer/materialTextureSlots.js +21 -8
  268. package/lib/renderer/materialTextureSlots.js.map +1 -1
  269. package/lib/renderer/materialTextures.d.ts +6 -0
  270. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  271. package/lib/renderer/materialTextures.js.map +1 -0
  272. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  273. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  274. package/lib/renderer/meshInstances.d.ts +4 -21
  275. package/lib/renderer/meshInstances.js +10 -56
  276. package/lib/renderer/meshInstances.js.map +1 -1
  277. package/lib/renderer/oidnNetwork.d.ts +2 -2
  278. package/lib/renderer/oidnNetwork.js +1 -1
  279. package/lib/renderer/oidnNetwork.js.map +1 -1
  280. package/lib/renderer/openPbrEnergyLut.js +850 -846
  281. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  282. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  283. package/lib/renderer/ownedDenoiser.js +2 -0
  284. package/lib/renderer/ownedDenoiser.js.map +1 -0
  285. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  286. package/lib/renderer/packedMeshInstances.js +80 -0
  287. package/lib/renderer/packedMeshInstances.js.map +1 -0
  288. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  289. package/lib/renderer/prepareMeshBVH.js +21 -642
  290. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  291. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  292. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  293. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  294. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  295. package/lib/renderer/progressiveScheduler.js +3 -0
  296. package/lib/renderer/progressiveScheduler.js.map +1 -1
  297. package/lib/renderer/renderPipeline.d.ts +3 -1
  298. package/lib/renderer/renderPipeline.js.map +1 -1
  299. package/lib/renderer/renderingLimits.d.ts +9 -0
  300. package/lib/renderer/renderingLimits.js +18 -0
  301. package/lib/renderer/renderingLimits.js.map +1 -0
  302. package/lib/renderer/sceneAssembly.d.ts +73 -0
  303. package/lib/renderer/sceneAssembly.js +109 -0
  304. package/lib/renderer/sceneAssembly.js.map +1 -0
  305. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  306. package/lib/renderer/sceneChangeCore.js +307 -0
  307. package/lib/renderer/sceneChangeCore.js.map +1 -0
  308. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  309. package/lib/renderer/sceneChangeDetector.js +24 -150
  310. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  311. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  312. package/lib/renderer/sceneLayoutSchema.js +111 -0
  313. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  314. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  315. package/lib/renderer/sceneLightChanges.js.map +1 -1
  316. package/lib/renderer/scenePreparation.d.ts +55 -0
  317. package/lib/renderer/scenePreparation.js +360 -0
  318. package/lib/renderer/scenePreparation.js.map +1 -0
  319. package/lib/renderer/scratchSampling.js +18 -18
  320. package/lib/renderer/scratchSampling.js.map +1 -1
  321. package/lib/renderer/shader.d.ts +2 -0
  322. package/lib/renderer/shader.js +2 -0
  323. package/lib/renderer/shader.js.map +1 -1
  324. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  325. package/lib/renderer/shaderCapabilities.js +55 -0
  326. package/lib/renderer/shaderCapabilities.js.map +1 -0
  327. package/lib/renderer/shaderCapacity.d.ts +2 -0
  328. package/lib/renderer/shaderCapacity.js +5 -0
  329. package/lib/renderer/shaderCapacity.js.map +1 -0
  330. package/lib/renderer/skyModel.d.ts +9 -0
  331. package/lib/renderer/skyModel.js +10 -0
  332. package/lib/renderer/skyModel.js.map +1 -0
  333. package/lib/renderer/textureAtlas.d.ts +60 -0
  334. package/lib/renderer/textureAtlas.js +145 -0
  335. package/lib/renderer/textureAtlas.js.map +1 -0
  336. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  337. package/lib/renderer/textureAtlasPixels.js +68 -0
  338. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  339. package/lib/renderer/util.d.ts +1 -1
  340. package/lib/renderer/util.js.map +1 -1
  341. package/lib/renderer/webgl.d.ts +9 -2
  342. package/lib/renderer/webgl.js +54 -9
  343. package/lib/renderer/webgl.js.map +1 -1
  344. package/lib/renderer/wgpuBindless.d.ts +26 -0
  345. package/lib/renderer/wgpuBindless.js +95 -0
  346. package/lib/renderer/wgpuBindless.js.map +1 -0
  347. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  348. package/lib/renderer/wgpuBindlessSource.js +51 -0
  349. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  350. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  351. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  352. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  353. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  354. package/lib/renderer/wgpuSceneUniform.js +125 -0
  355. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  356. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  357. package/lib/renderer/wgpuShaderSource.js +31 -0
  358. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  359. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  360. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  361. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  362. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  363. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  364. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  367. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  369. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  370. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  372. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  373. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  375. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  376. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  378. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  379. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  381. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  382. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  383. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  384. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  385. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +742 -705
  386. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  388. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  389. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  390. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +84 -82
  391. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  393. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  394. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  395. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  396. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  397. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  398. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  399. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  400. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  401. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  403. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  404. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  406. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  408. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  409. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  410. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  411. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  412. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  413. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  415. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  416. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  418. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  419. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  420. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  421. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  422. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  423. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  424. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  425. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  426. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  427. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  428. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  429. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  430. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  431. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  432. package/lib/scene/Camera.js +7 -3
  433. package/lib/scene/Camera.js.map +1 -1
  434. package/lib/scene/EnvironmentLight.d.ts +5 -9
  435. package/lib/scene/EnvironmentLight.js +4 -14
  436. package/lib/scene/EnvironmentLight.js.map +1 -1
  437. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  438. package/lib/scene/EnvironmentLightState.js +19 -0
  439. package/lib/scene/EnvironmentLightState.js.map +1 -0
  440. package/lib/scene/Geometry.d.ts +12 -6
  441. package/lib/scene/Geometry.js +37 -13
  442. package/lib/scene/Geometry.js.map +1 -1
  443. package/lib/scene/InstanceState.d.ts +39 -0
  444. package/lib/scene/InstanceState.js +77 -0
  445. package/lib/scene/InstanceState.js.map +1 -0
  446. package/lib/scene/InstancedMesh.d.ts +1 -1
  447. package/lib/scene/InstancedMesh.js +3 -0
  448. package/lib/scene/InstancedMesh.js.map +1 -1
  449. package/lib/scene/MaterialState.d.ts +209 -0
  450. package/lib/scene/MaterialState.js +231 -0
  451. package/lib/scene/MaterialState.js.map +1 -0
  452. package/lib/scene/Mesh.d.ts +4 -6
  453. package/lib/scene/Mesh.js +3 -11
  454. package/lib/scene/Mesh.js.map +1 -1
  455. package/lib/scene/MeshState.d.ts +20 -0
  456. package/lib/scene/MeshState.js +35 -0
  457. package/lib/scene/MeshState.js.map +1 -0
  458. package/lib/scene/OpenPBRMaterial.d.ts +6 -168
  459. package/lib/scene/OpenPBRMaterial.js +5 -223
  460. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  461. package/lib/scene/PixelTexture.d.ts +6 -0
  462. package/lib/scene/PixelTexture.js +10 -0
  463. package/lib/scene/PixelTexture.js.map +1 -0
  464. package/lib/scene/ProceduralSky.d.ts +24 -0
  465. package/lib/scene/ProceduralSky.js +40 -0
  466. package/lib/scene/ProceduralSky.js.map +1 -0
  467. package/lib/scene/RectLight.d.ts +2 -13
  468. package/lib/scene/RectLight.js +3 -21
  469. package/lib/scene/RectLight.js.map +1 -1
  470. package/lib/scene/RectLightState.d.ts +31 -0
  471. package/lib/scene/RectLightState.js +26 -0
  472. package/lib/scene/RectLightState.js.map +1 -0
  473. package/lib/scene/Scene.d.ts +15 -4
  474. package/lib/scene/Scene.js.map +1 -1
  475. package/lib/scene/SceneNode.js +7 -6
  476. package/lib/scene/SceneNode.js.map +1 -1
  477. package/lib/scene/Texture.d.ts +10 -41
  478. package/lib/scene/Texture.js +4 -33
  479. package/lib/scene/Texture.js.map +1 -1
  480. package/lib/scene/TextureState.d.ts +35 -0
  481. package/lib/scene/TextureState.js +35 -0
  482. package/lib/scene/TextureState.js.map +1 -0
  483. package/lib/scene/attributeData.d.ts +4 -0
  484. package/lib/scene/attributeData.js +10 -0
  485. package/lib/scene/attributeData.js.map +1 -0
  486. package/lib/scene/lightState.d.ts +8 -0
  487. package/lib/scene/lightState.js +2 -0
  488. package/lib/scene/lightState.js.map +1 -0
  489. package/lib/scene/openPbrSchema.d.ts +7 -12
  490. package/lib/scene/openPbrSchema.js +273 -28
  491. package/lib/scene/openPbrSchema.js.map +1 -1
  492. package/lib/scene/skyParameters.d.ts +20 -0
  493. package/lib/scene/skyParameters.js +28 -0
  494. package/lib/scene/skyParameters.js.map +1 -0
  495. package/lib/scene/textureData.d.ts +9 -0
  496. package/lib/scene/textureData.js +2 -0
  497. package/lib/scene/textureData.js.map +1 -0
  498. package/lib/scene/texturePixels.d.ts +6 -0
  499. package/lib/scene/texturePixels.js +10 -0
  500. package/lib/scene/texturePixels.js.map +1 -0
  501. package/lib/settings/display.d.ts +33 -0
  502. package/lib/settings/display.js +7 -0
  503. package/lib/settings/display.js.map +1 -1
  504. package/lib/settings/render.d.ts +25 -3
  505. package/lib/settings/render.js +3 -1
  506. package/lib/settings/render.js.map +1 -1
  507. package/lib/tinybvh/tinybvh.wasm +0 -0
  508. package/lib/util/commonGeometry.js +7 -7
  509. package/lib/util/commonGeometry.js.map +1 -1
  510. package/lib/util/fromTHREE.d.ts +4 -1
  511. package/lib/util/fromTHREE.js +18 -5
  512. package/lib/util/fromTHREE.js.map +1 -1
  513. package/lib/util/geometry.js +42 -29
  514. package/lib/util/geometry.js.map +1 -1
  515. package/lib/util/loadRGBE.js +3 -4
  516. package/lib/util/loadRGBE.js.map +1 -1
  517. package/lib/util/studioLighting.d.ts +18 -0
  518. package/lib/util/studioLighting.js +36 -0
  519. package/lib/util/studioLighting.js.map +1 -0
  520. package/lib/version.d.ts +1 -1
  521. package/lib/version.js +1 -1
  522. package/lib/version.js.map +1 -1
  523. package/llms.txt +4 -0
  524. package/package.json +31 -5
  525. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  526. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -2,41 +2,41 @@
2
2
  // http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Direct_Lighting.html#EstimatingtheDirectLightingIntegral
3
3
  import { glsl } from '../../shader.js';
4
4
  export default glsl `
5
- vec3 mT(ad si, J mat, ag prepared, inout Path aa, vec3 ffnormal, bool gF) {
6
- float mC = 1.0;
7
- vec3 ln = vec3(fp(cw(LIGHT_POSITION)), dz(cw(LIGHT_SELECT)));
5
+ vec3 ta(SurfaceInteraction si, OpenPbrResolvedMaterial mat, ag prepared, inout Path aa, vec3 ffnormal, bool eM) {
6
+ float lY = 1.0;
7
+ vec3 lV = vec3(dZ(cE(LIGHT_POSITION)), dp(cE(LIGHT_SELECT)));
8
8
 
9
9
  LightSampleRec lightSample;
10
- sampleLight(si.position, ln, lightSample, false);
11
- lightSample.emission = ai(lightSample.emission, bf);
10
+ sampleLight(si.position, lV, lightSample, false);
11
+ lightSample.emission = aj(lightSample.emission, bp);
12
12
 
13
13
  vec3 lightDir = lightSample.direction;
14
- vec3 oS = -aa.ray.d;
15
- float fg = lightSample.pdf;
14
+ vec3 qY = -aa.ray.d;
15
+ float fA = lightSample.pdf;
16
16
 
17
17
 
18
18
 
19
19
 
20
20
  float cosThetaL = dot(ffnormal, lightDir);
21
21
  #ifdef USE_COAT_NORMAL_FRAMES
22
- if (gF && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
22
+ if (eM && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
23
23
  #endif
24
24
 
25
- if (fg <= 0.0 || max(max(lightSample.emission.x, lightSample.emission.y), lightSample.emission.z) <= 0.0) {
25
+ if (fA <= 0.0 || max(max(lightSample.emission.x, lightSample.emission.y), lightSample.emission.z) <= 0.0) {
26
26
  return vec3(0.0);
27
27
  }
28
28
 
29
29
  float scatteringPdf = 0.0;
30
30
  vec3 f = vec3(0.0);
31
- if (gF) {
31
+ if (eM) {
32
32
  if (cosThetaL <= 0.0 && mat.transmissionWeight <= 0.0 && mat.subsurfaceWeight <= 0.0) {
33
33
  return vec3(0.0);
34
34
  }
35
- f = bI(prepared, lightDir, scatteringPdf);
35
+ f = bO(prepared, lightDir, scatteringPdf);
36
36
  }
37
37
  else {
38
- scatteringPdf = bD(
39
- dot(oS, lightDir),
38
+ scatteringPdf = bL(
39
+ dot(qY, lightDir),
40
40
  si.mediumAnisotropy
41
41
  );
42
42
  f = vec3(scatteringPdf);
@@ -46,83 +46,83 @@ if (scatteringPdf <= 0.0 || max(max(f.x, f.y), f.z) <= 0.0) {
46
46
  return vec3(0.0);
47
47
  }
48
48
 
49
- Ray mz;
50
- vec3 hi = si.position + EPS * lightDir;
51
- if (gF) {
52
- const float bZ = 0.1;
53
- float dr = dot(si.normal, lightDir);
49
+ Ray ns;
50
+ vec3 hw = si.position + EPS * lightDir;
51
+ if (eM) {
52
+ const float ch = 0.1;
53
+ float dL = dot(si.normal, lightDir);
54
54
  #ifdef USE_COAT_NORMAL_FRAMES
55
- if (mat.coatNormalEnabled) { dr = dot(si.faceNormal, lightDir); }
55
+ if (mat.coatNormalEnabled) { dL = dot(si.faceNormal, lightDir); }
56
56
  #endif
57
- vec3 geometricNormal = dr < 0.0 ? -si.faceNormal : si.faceNormal;
58
- dr = abs(dr);
59
- float hS = dot(geometricNormal, lightDir);
60
- float oB = dr < bZ
57
+ vec3 geometricNormal = dL < 0.0 ? -si.faceNormal : si.faceNormal;
58
+ dL = abs(dL);
59
+ float iq = dot(geometricNormal, lightDir);
60
+ float pq = dL < ch
61
61
  ? clamp(
62
- 2.0 - (hS + dr) / bZ,
62
+ 2.0 - (iq + dL) / ch,
63
63
  0.0,
64
64
  1.0
65
65
  )
66
- : clamp(1.0 - hS / bZ, 0.0, 1.0);
67
- hi += si.shadowOffset * oB;
66
+ : clamp(1.0 - iq / ch, 0.0, 1.0);
67
+ hw += si.shadowOffset * pq;
68
68
  }
69
- iC(mz, hi, lightDir);
70
- if (ex(mz, lightSample.dist - EPS, si.triangleIndex)) {
69
+ gC(ns, hw, lightDir);
70
+ if (intersectSceneShadow(ns, lightSample.dist - EPS, si.triangleIndex)) {
71
71
  return vec3(0.0);
72
72
  }
73
73
 
74
74
  #ifdef USE_ENVMAP
75
75
 
76
76
 
77
- if (gF && cosThetaL < 0.0 && ln.z < envLightSelectionPmf) {
78
- vec4 background = cx(mz.o, lightDir);
79
- lightSample.emission = ai(background.rgb * background.a, bf);
77
+ if (eM && cosThetaL < 0.0 && lV.z < envLightSelectionPmf) {
78
+ vec4 background = cG(ns.o, lightDir);
79
+ lightSample.emission = aj(background.rgb * background.a, bp);
80
80
  }
81
81
  #endif
82
82
 
83
83
 
84
84
 
85
- float fa = lightSample.isDelta
85
+ float fl = lightSample.isDelta
86
86
  ? 1.0
87
- : aG(fg, scatteringPdf);
88
- return fa > 0.0
89
- ? fa * lightSample.emission * f / fg
87
+ : aK(fA, scatteringPdf);
88
+ return fl > 0.0
89
+ ? fl * lightSample.emission * f / fA
90
90
  : vec3(0.0);
91
91
  }
92
92
 
93
93
  #ifdef USE_COAT_NORMAL_FRAMES
94
- vec3 fF(vec3 pG, vec3 tq, vec3 view) {
95
- bool qY = dot(tq, view) >= 0.0;
96
- vec3 uo = qY ? tq : -tq;
97
- vec3 qX = qY ? pG : -pG;
98
- if (dot(pG, tq) <= 0.0 || dot(qX, view) <= 1e-6) { return uo; }
99
- return qX;
94
+ vec3 fT(vec3 qt, vec3 face, vec3 view) {
95
+ bool front = dot(face, view) >= 0.0;
96
+ vec3 vP = front ? face : -face;
97
+ vec3 sc = front ? qt : -qt;
98
+ if (dot(qt, face) <= 0.0 || dot(sc, view) <= 1e-6) { return vP; }
99
+ return sc;
100
100
  }
101
101
  #endif
102
- void mb(inout ad si, J mat, inout Path aa) {
103
- vec3 ur = vec3(fp(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
102
+ void mL(inout SurfaceInteraction si, OpenPbrResolvedMaterial mat, inout Path aa) {
103
+ vec3 vR = vec3(dZ(cE(BSDF_DIRECTION)), dp(cE(BSDF_LOBE)));
104
104
  #ifdef USE_COAT_NORMAL_FRAMES
105
- vec3 bC = si.faceNormal;
106
- vec3 mE = si.normal;
105
+ vec3 bK = si.faceNormal;
106
+ vec3 nB = si.normal;
107
107
  #endif
108
- float rN = -dot(si.faceNormal, aa.ray.d);
109
- float sG = -dot(si.normal, aa.ray.d);
108
+ float sO = -dot(si.faceNormal, aa.ray.d);
109
+ float tV = -dot(si.normal, aa.ray.d);
110
110
  if ((mat.transmissionWeight > 0.0 || mat.subsurfaceWeight > 0.0) && mat.thinWalled) {
111
111
 
112
- if (rN < 0.0) {
112
+ if (sO < 0.0) {
113
113
  si.faceNormal = -si.faceNormal;
114
- rN = -rN;
114
+ sO = -sO;
115
115
  }
116
- if (sG < 0.0) {
116
+ if (tV < 0.0) {
117
117
  si.normal = -si.normal;
118
- sG = -sG;
118
+ tV = -tV;
119
119
  }
120
120
  }
121
121
 
122
122
 
123
- bool pU = rN >= 0.0 && sG < 0.0;
124
- float ndv = pU ? rN : sG;
125
- vec3 normal = pU ? si.faceNormal : si.normal;
123
+ bool qM = sO >= 0.0 && tV < 0.0;
124
+ float ndv = qM ? sO : tV;
125
+ vec3 normal = qM ? si.faceNormal : si.normal;
126
126
 
127
127
  mat.inside = ndv <= 0.0 && !mat.thinWalled;
128
128
 
@@ -131,96 +131,96 @@ vec3 ffnormal = ndv >= 0.0 ? normal : -normal;
131
131
  #ifdef USE_COAT_NORMAL_FRAMES
132
132
  if (mat.coatNormalEnabled) {
133
133
  vec3 view = -aa.ray.d;
134
- float gb = dot(bC, view);
135
- mat.geometricNormal = gb >= 0.0 ? bC : -bC;
136
- ffnormal = fF(mE, bC, view);
137
- mat.coatNormal = fF(si.coatNormal, bC, view);
138
- mat.inside = gb <= 0.0 && !mat.thinWalled;
139
- mat.relativeIor = (gb > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.specularIor;
134
+ float gp = dot(bK, view);
135
+ mat.geometricNormal = gp >= 0.0 ? bK : -bK;
136
+ ffnormal = fT(nB, bK, view);
137
+ mat.coatNormal = fT(si.coatNormal, bK, view);
138
+ mat.inside = gp <= 0.0 && !mat.thinWalled;
139
+ mat.relativeIor = (gp > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.specularIor;
140
140
  }
141
141
  #endif
142
142
 
143
143
 
144
144
  float scatteringPdf;
145
- vec3 cG;
145
+ vec3 dH;
146
146
  aa.scatteringIsDelta = false;
147
- bool bl = false;
148
- bool hn = false;
147
+ bool bs = false;
148
+ bool hC = false;
149
149
  ag prepared;
150
150
 
151
151
  #ifdef HAS_MEDIUM
152
152
  int mediumType = si.mediumType;
153
153
  float d = distance(si.position, aa.ray.o);
154
- vec3 nu = aa.ray.o;
154
+ vec3 os = aa.ray.o;
155
155
  vec3 extinction = si.mediumExtinction;
156
156
  vec3 scattering = min(si.mediumScattering, extinction);
157
- float sC = max(max(extinction.x, extinction.y), extinction.z);
158
- if (mediumType > 0 && sC > 0.0) {
157
+ float tR = max(max(extinction.x, extinction.y), extinction.z);
158
+ if (mediumType > 0 && tR > 0.0) {
159
159
 
160
160
 
161
161
 
162
162
 
163
- int nj = min(int(dz(cw(MEDIUM_CHANNEL)) * 3.0), 2);
164
- float fE = extinction[nj];
165
- float ih = fE > 0.0
166
- ? min(-log(max(dz(cw(MEDIUM_DISTANCE)), 1e-7)) / fE, d)
163
+ int oi = min(int(dp(cE(MEDIUM_CHANNEL)) * 3.0), 2);
164
+ float fS = extinction[oi];
165
+ float iH = fS > 0.0
166
+ ? min(-log(max(dp(cE(MEDIUM_DISTANCE)), 1e-7)) / fS, d)
167
167
  : d;
168
- bl = ih < d;
169
- vec3 ew = exp(-extinction * ih);
170
- vec3 nZ = bl
171
- ? extinction * ew
172
- : ew;
173
- float nK = max(
174
- (nZ.x + nZ.y + nZ.z) / 3.0,
168
+ bs = iH < d;
169
+ vec3 transmittance = exp(-extinction * iH);
170
+ vec3 oU = bs
171
+ ? extinction * transmittance
172
+ : transmittance;
173
+ float oE = max(
174
+ (oU.x + oU.y + oU.z) / 3.0,
175
175
  1e-8
176
176
  );
177
- if (bl) {
178
- aa.beta *= ew * scattering / nK;
177
+ if (bs) {
178
+ aa.beta *= transmittance * scattering / oE;
179
179
 
180
- aa.ray.o = nu + ih * aa.ray.d;
180
+ aa.ray.o = os + iH * aa.ray.d;
181
181
  si.position = aa.ray.o;
182
- aa.li += mT(si, mat, prepared, aa, ffnormal, false) * aa.beta;
182
+ aa.li += ta(si, mat, prepared, aa, ffnormal, false) * aa.beta;
183
183
 
184
184
 
185
- cG = fq(
185
+ dH = fH(
186
186
  -aa.ray.d,
187
187
  si.mediumAnisotropy,
188
- fp(cw(PHASE_DIRECTION))
188
+ dZ(cE(PHASE_DIRECTION))
189
189
  );
190
- scatteringPdf = bD(
191
- dot(cG, -aa.ray.d),
190
+ scatteringPdf = bL(
191
+ dot(dH, -aa.ray.d),
192
192
  si.mediumAnisotropy
193
193
  );
194
194
  }
195
195
  else {
196
- aa.beta *= ew / nK;
196
+ aa.beta *= transmittance / oE;
197
197
  }
198
198
  }
199
199
  #endif
200
200
 
201
201
 
202
- if (!bl) {
202
+ if (!bs) {
203
203
  aa.li += mat.emission * aa.beta;
204
204
  if (mat.materialType == UNLIT) {
205
205
  aa.abort = true;
206
206
  return;
207
207
  }
208
- vec3 pS = vec3(0.0);
208
+ vec3 qJ = vec3(0.0);
209
209
  #ifdef USE_TANGENT
210
- pS = si.tangent;
210
+ qJ = si.tangent;
211
211
  #endif
212
212
  mat.directionTangent = si.directionTangent;
213
213
  mat.directionBitangent = si.directionBitangent;
214
214
  mat.geometryTangent = si.geometryTangent;
215
215
  mat.geometryBitangent = si.geometryBitangent;
216
- prepared = eH(pS, mat, -aa.ray.d, ffnormal);
217
- aa.li += mT(si, mat, prepared, aa, ffnormal, true) * aa.beta;
216
+ prepared = ds(qJ, mat, -aa.ray.d, ffnormal);
217
+ aa.li += ta(si, mat, prepared, aa, ffnormal, true) * aa.beta;
218
218
 
219
219
  bool isNextRefraction;
220
- vec3 f = dv(
220
+ vec3 f = eN(
221
221
  prepared,
222
- ur,
223
- cG,
222
+ vR,
223
+ dH,
224
224
  scatteringPdf,
225
225
  isNextRefraction
226
226
  );
@@ -232,26 +232,26 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6;
232
232
 
233
233
 
234
234
  if (!(scatteringPdf > 0.0) || any(isnan(f)) || any(isinf(f)) ||
235
- dot(cG, cG) < 0.5) {
235
+ dot(dH, dH) < 0.5) {
236
236
  aa.scatteringPdf = 0.0;
237
237
  aa.abort = true;
238
238
  return;
239
239
  }
240
240
  aa.beta *= f / scatteringPdf;
241
- hn = !mat.thinWalled &&
241
+ hC = !mat.thinWalled &&
242
242
  isNextRefraction;
243
243
  aa.isNextRefraction = isNextRefraction;
244
244
 
245
245
 
246
- aa.ray.o = si.position + EPS * cG;
246
+ aa.ray.o = si.position + EPS * dH;
247
247
  #ifdef USE_COAT_NORMAL_FRAMES
248
- if (mat.coatNormalEnabled) { aa.ray.o = si.position + EPS * (dot(bC, cG) >= 0.0 ? bC : -bC); }
248
+ if (mat.coatNormalEnabled) { aa.ray.o = si.position + EPS * (dot(bK, dH) >= 0.0 ? bK : -bK); }
249
249
  #endif
250
250
  }
251
251
 
252
252
  aa.scatteringPdf = scatteringPdf;
253
- iC(aa.ray, aa.ray.o, cG);
254
- if (bl) {
253
+ gC(aa.ray, aa.ray.o, dH);
254
+ if (bs) {
255
255
  aa.isNextRefraction = false;
256
256
  }
257
257
  aa.fromEye = false;
@@ -259,8 +259,8 @@ aa.fromEye = false;
259
259
  #ifdef HAS_MEDIUM
260
260
 
261
261
 
262
- if (!bl && hn && mat.mediumType > 0) {
263
- if (rN >= 0.0) {
262
+ if (!bs && hC && mat.mediumType > 0) {
263
+ if (sO >= 0.0) {
264
264
  si.mediumType = mat.mediumType;
265
265
  si.mediumExtinction = mat.mediumExtinction;
266
266
  si.mediumScattering = mat.mediumScattering;
@@ -9,40 +9,43 @@ export default glsl `
9
9
 
10
10
 
11
11
 
12
+
12
13
  const uint SHADOW_CATCHER_LIGHT_SAMPLES = 4u;
13
14
 
14
- uint ky(uint candidate, uint slot) {
15
- return candidate == 0u ? cw(slot) : cw(9u + (candidate - 1u) * 3u + slot);
15
+ uint lc(uint candidate, uint slot) {
16
+ return candidate == 0u ? cE(slot) : cE(9u + (candidate - 1u) * 3u + slot);
16
17
  }
17
18
 
18
- void sampleShadowCatcher(ad si, int bounce, inout Path aa) {
19
- vec3 oS = -aa.ray.d;
19
+
20
+
21
+ vec2 sampleShadowCatcher(SurfaceInteraction si, int bounce, inout Path aa) {
22
+ vec3 qY = -aa.ray.d;
23
+ vec2 counts = vec2(0.0);
20
24
 
21
25
  #if defined(NUM_LIGHTS) || defined(USE_ENVMAP)
22
- float visibility = 0.0;
23
26
  for (uint candidate = 0u; candidate < SHADOW_CATCHER_LIGHT_SAMPLES; candidate++) {
24
27
  LightSampleRec lightSample;
25
- vec3 ln = vec3(
26
- fp(ky(candidate, LIGHT_POSITION)),
27
- dz(ky(candidate, LIGHT_SELECT))
28
+ vec3 lV = vec3(
29
+ dZ(lc(candidate, LIGHT_POSITION)),
30
+ dp(lc(candidate, LIGHT_SELECT))
28
31
  );
29
- sampleLight(si.position, ln, lightSample, false);
32
+ sampleLight(si.position, lV, lightSample, false);
30
33
 
31
34
  vec3 lightDir = lightSample.direction;
32
35
  float cosThetaL = dot(si.normal, lightDir);
33
- float pM = dot(si.normal, oS) * cosThetaL;
34
- bool mC = false;
35
- if (pM >= 0.0) {
36
+ float qB = dot(si.normal, qY) * cosThetaL;
37
+ if (lightSample.pdf > 0.0 && qB >= 0.0) {
38
+ if (dot(lightSample.emission, luminance) * abs(cosThetaL) > 0.0) {
36
39
  Ray ray;
37
- iC(ray, si.position + EPS * lightDir, lightDir);
38
- mC = ex(ray, lightSample.dist - EPS, si.triangleIndex);
40
+ gC(ray, si.position + EPS * lightDir, lightDir);
41
+ bool lY = intersectSceneShadow(ray, lightSample.dist - EPS, si.triangleIndex);
42
+ counts += vec2(lY ? 1.0 : 0.0, 1.0);
43
+ }
39
44
  }
40
- visibility += mC ? 0.0 : 1.0;
41
45
  }
42
-
43
- aa.alpha = visibility / float(SHADOW_CATCHER_LIGHT_SAMPLES);
44
46
  #endif
45
47
  aa.fromEye = false;
48
+ return counts;
46
49
  }
47
50
  `;
48
51
  //# sourceMappingURL=sampleShadowCatcher.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampleShadowCatcher.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sampleShadowCatcher.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,2EAA2E;AAC3E,iIAAiI;AAEjI,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwClB,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\n// Estimate the direct lighting integral using multiple importance sampling\n// http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Direct_Lighting.html#EstimatingtheDirectLightingIntegral\n\nimport { glsl } from '../../shader.js';\n\nexport default glsl`\n// A one-sample binary shadow test leaves scattered fully dark pixels far\n// from the occluder at low sample counts. Averaging a few light samples per\n// primary hit costs only shadow rays and lets the mask settle much sooner.\n// Candidate dimensions match WGSL lightDim().\nconst uint SHADOW_CATCHER_LIGHT_SAMPLES = 4u;\n\nuint shadowCatcherLightDim(uint candidate, uint slot) {\n return candidate == 0u ? bounceDim(slot) : bounceDim(9u + (candidate - 1u) * 3u + slot);\n}\n\nvoid sampleShadowCatcher(SurfaceInteraction si, int bounce, inout Path path) {\n vec3 viewDir = -path.ray.d;\n\n#if defined(NUM_LIGHTS) || defined(USE_ENVMAP)\n float visibility = 0.0;\n for (uint candidate = 0u; candidate < SHADOW_CATCHER_LIGHT_SAMPLES; candidate++) {\n LightSampleRec lightSample;\n vec3 lightRnd = vec3(\n sample2D(shadowCatcherLightDim(candidate, LIGHT_POSITION)),\n sample1D(shadowCatcherLightDim(candidate, LIGHT_SELECT))\n );\n sampleLight(si.position, lightRnd, lightSample, false);\n\n vec3 lightDir = lightSample.direction;\n float cosThetaL = dot(si.normal, lightDir);\n float orientation = dot(si.normal, viewDir) * cosThetaL;\n bool occluded = false;\n if (orientation >= 0.0) {\n Ray ray;\n initRay(ray, si.position + EPS * lightDir, lightDir);\n occluded = intersectSceneShadow(ray, lightSample.dist - EPS, si.triangleIndex);\n }\n visibility += occluded ? 0.0 : 1.0;\n }\n // WebGL's compose pass converts visibility to shadow opacity.\n path.alpha = visibility / float(SHADOW_CATCHER_LIGHT_SAMPLES);\n#endif\n path.fromEye = false;\n}\n`;\n"]}
1
+ {"version":3,"file":"sampleShadowCatcher.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sampleShadowCatcher.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,2EAA2E;AAC3E,iIAAiI;AAEjI,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClB,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\n// Estimate the direct lighting integral using multiple importance sampling\n// http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Direct_Lighting.html#EstimatingtheDirectLightingIntegral\n\nimport { glsl } from '../../shader.js';\n\nexport default glsl`\n// A one-sample binary shadow test leaves scattered fully dark pixels far\n// from the occluder at low sample counts. Averaging a few light samples per\n// primary hit costs only shadow rays and lets the mask settle much sooner.\n// Candidate dimensions match WGSL lightDim(). sampleLight() draws only the\n// environment and analytic lights, like WGSL's shadow-catcher table.\nconst uint SHADOW_CATCHER_LIGHT_SAMPLES = 4u;\n\nuint shadowCatcherLightDim(uint candidate, uint slot) {\n return candidate == 0u ? bounceDim(slot) : bounceDim(9u + (candidate - 1u) * 3u + slot);\n}\n\n// Returns the occluded and the total count of light samples that reach the\n// visible side of this hit; see the WGSL sampleShadowCatcher().\nvec2 sampleShadowCatcher(SurfaceInteraction si, int bounce, inout Path path) {\n vec3 viewDir = -path.ray.d;\n vec2 counts = vec2(0.0);\n\n#if defined(NUM_LIGHTS) || defined(USE_ENVMAP)\n for (uint candidate = 0u; candidate < SHADOW_CATCHER_LIGHT_SAMPLES; candidate++) {\n LightSampleRec lightSample;\n vec3 lightRnd = vec3(\n sample2D(shadowCatcherLightDim(candidate, LIGHT_POSITION)),\n sample1D(shadowCatcherLightDim(candidate, LIGHT_SELECT))\n );\n sampleLight(si.position, lightRnd, lightSample, false);\n\n vec3 lightDir = lightSample.direction;\n float cosThetaL = dot(si.normal, lightDir);\n float orientation = dot(si.normal, viewDir) * cosThetaL;\n if (lightSample.pdf > 0.0 && orientation >= 0.0) {\n if (dot(lightSample.emission, luminance) * abs(cosThetaL) > 0.0) {\n Ray ray;\n initRay(ray, si.position + EPS * lightDir, lightDir);\n bool occluded = intersectSceneShadow(ray, lightSample.dist - EPS, si.triangleIndex);\n counts += vec2(occluded ? 1.0 : 0.0, 1.0);\n }\n }\n }\n#endif\n path.fromEye = false;\n return counts;\n}\n`;\n"]}