@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
@@ -1,27 +1,29 @@
1
+ import { researchTransport } from '../researchTransport.js';
1
2
  import { MAX_PATH_EVENTS } from '../pathLimits.js';
2
3
  import cameraRayGlsl from './chunks/cameraRay.glsl.js';
3
4
  // Portions adapted from ray-tracing-renderer@0.10.15
4
5
  // (https://github.com/hoverinc/ray-tracing-renderer).
5
6
  // Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
6
7
  import commonGlsl from './chunks/common.glsl.js';
7
- import rayTraceCore from './chunks/rayTraceCore.glsl.js';
8
+ import { createRayTraceCoreGlsl } from './chunks/rayTraceCore.glsl.js';
8
9
  import textureLinear from './chunks/textureLinear.glsl.js';
9
- import materialBufferGlsl from './chunks/materialBuffer.glsl.js';
10
+ import { createMaterialBufferGlsl } from './chunks/materialBuffer.glsl.js';
10
11
  import intersect from './chunks/intersect.glsl.js';
11
12
  import randGlsl from './chunks/rand.glsl.js';
12
13
  import random from './chunks/random.glsl.js';
13
14
  import envMap from './chunks/envMap.glsl.js';
14
- import sampleMaterialGlsl from './chunks/sampleMaterial.glsl.js';
15
+ import { createSampleMaterialGlsl } from './chunks/sampleMaterial.glsl.js';
15
16
  import sampleLightGlsl from './chunks/sampleLight.glsl.js';
16
17
  import { FragmentShader, glsl, Shader } from '../shader.js';
17
18
  import openPbrBsdfGlsl from './chunks/openPbrBsdf.glsl.js';
18
19
  import samplingGlsl from './chunks/sampling.glsl.js';
20
+ import { spectrumGlsl } from '../spectrum.js';
19
21
  import { isIntelMac } from '../util.js';
20
22
  import uvProjectionGlsl from './chunks/uvProjection.glsl.js';
21
23
  const doubleTransmissionCheckCode = glsl `
22
24
  #if defined(HAS_TRANSMISSION) || defined(HAS_ALPHA)
23
25
  if (!si.isTransparency && BOUNCES < 16 && depth * 2 > BOUNCES) {
24
- aa.abort = true;
26
+ path.abort = true;
25
27
  return;
26
28
  }
27
29
  #endif
@@ -32,27 +34,33 @@ return;
32
34
  // So here the code are injected separately.
33
35
  const bounceCodeOnIntelMac = glsl `
34
36
 
35
- for(int vU = 0; vU < BOUNCES; vU++) {{
36
- if (aa.abort) {
37
- return vec4(aa.li, aa.alpha);
37
+ for(int yl = 0; yl < BOUNCES; yl++) {{
38
+ if (path.abort) {
39
+ return vec4(path.li, path.alpha);
38
40
  }
39
- bounce(aa, depth, si, mat, outAux);
41
+ bounce(path, depth, si, mat, outAux);
40
42
  }}
41
43
  `;
42
44
  const bounceCodeOnOther = glsl `
43
- bool vg = !si.isTransparency;
44
- int qO = min(BOUNCES, bounceLimit);
45
+ bool xB = !si.isTransparency;
46
+ int rQ = min(BOUNCES, bounceLimit);
45
47
  for(int idx = 0; idx < min(BOUNCES * 3, ${MAX_PATH_EVENTS}); idx++) {
46
- if (vg && idx > qO) {
47
- aa.abort = true;
48
+ if (xB && idx > rQ) {
49
+ path.abort = true;
48
50
  }
49
- if (aa.abort) {
50
- return vec4(aa.li, aa.alpha);
51
+ if (path.abort) {
52
+ return vec4(path.li, path.alpha);
51
53
  }
52
- bounce(aa, depth, si, mat, outAux);
54
+ bounce(path, depth, si, mat, outAux);
53
55
  }
54
56
  `;
55
- export default function createRayTraceFragmentShader() {
57
+ export default function createRayTraceFragmentShader(...options) {
58
+ const research = researchTransport()?.fragment(options);
59
+ const enabled = research?.enabled ?? false;
60
+ const fragments = research?.fragments;
61
+ const materialBufferGlsl = createMaterialBufferGlsl(fragments);
62
+ const rayTraceCore = createRayTraceCoreGlsl(fragments);
63
+ const sampleMaterialGlsl = createSampleMaterialGlsl(fragments);
56
64
  const intelMac = isIntelMac();
57
65
  return new FragmentShader({
58
66
  name: 'rayTraceFrag',
@@ -61,6 +69,9 @@ export default function createRayTraceFragmentShader() {
61
69
  BOUNCES: 2
62
70
  },
63
71
  uniforms: {
72
+ emissiveLightData: Shader.uniform('sampler2D'), emissiveLightColumns: Shader.uniform('int'),
73
+ emissiveChoiceOffset: Shader.uniform('int'), emissiveChoiceCount: Shader.uniform('int'), emissivePmfOffset: Shader.uniform('int'),
74
+ emissiveWeightTotal: Shader.uniform('float', 0),
64
75
  cameraApertureRadius: Shader.uniform('float', 0),
65
76
  cameraFocusDistance: Shader.uniform('float', 10),
66
77
  viewProjectionInv: Shader.uniform('mat4'),
@@ -68,12 +79,12 @@ export default function createRayTraceFragmentShader() {
68
79
  transmissiveOutputAlphaMin: Shader.uniform('float'),
69
80
  openPbrEnergyLut: Shader.uniform('sampler2D'),
70
81
  viewportSize: Shader.uniform('vec2'),
71
- wavelength: Shader.uniform('float', 0),
82
+ spectralChannel: Shader.uniform('int', 0),
72
83
  bevelEnabled: Shader.uniform('bool', true),
73
84
  dispersionWavelengths: Shader.uniform('int', 3),
74
85
  bounceLimit: Shader.uniform('int', 8)
75
86
  },
76
- includes: [rayTraceCore, materialBufferGlsl, intersect, random, envMap],
87
+ includes: [rayTraceCore, materialBufferGlsl, intersect, random, envMap, ...(research?.mixin ? [research.mixin] : [])],
77
88
  main: glsl `
78
89
  ${commonGlsl}
79
90
 
@@ -91,13 +102,16 @@ ${intersect.main}
91
102
  ${envMap.main}
92
103
 
93
104
  ${samplingGlsl}
105
+ ${spectrumGlsl}
94
106
  ${openPbrBsdfGlsl}
95
107
 
96
- float mv;
97
- float bf;
108
+ float qh;
109
+ float pathWavelength;
110
+ int qg;
111
+ int pathChannel;
98
112
 
99
113
  ${sampleLightGlsl}
100
- ${sampleMaterialGlsl}
114
+ ${research?.declarations ?? ''}${sampleMaterialGlsl}
101
115
 
102
116
  ${cameraRayGlsl}
103
117
  struct RayTraceAuxiliary {
@@ -109,8 +123,8 @@ bool isBlank;
109
123
  bool isShadowCatcher;
110
124
  };
111
125
 
112
- void bounce(inout Path aa, inout int depth, inout ad si, inout J mat, inout RayTraceAuxiliary outAux) {
113
- cF = uint(max(depth, 0));
126
+ void bounce(inout Path path, inout int depth, inout SurfaceInteraction si, inout OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux) {
127
+ samplingBounce = uint(max(depth, 0));
114
128
 
115
129
 
116
130
 
@@ -119,11 +133,11 @@ ${intelMac ? doubleTransmissionCheckCode : ''}
119
133
 
120
134
  bool isShadowCatcher = mat.materialType == SHADOW_CATCHER;
121
135
  if (isShadowCatcher) {
122
- if (aa.fromEye) {
136
+ if (path.fromEye) {
123
137
 
124
138
 
125
139
  outAux.albedo = vec3(1.0);
126
- outAux.normal = dot(si.normal, aa.ray.d) > 0.0 ? -si.normal : si.normal;
140
+ outAux.normal = dot(si.normal, path.ray.d) > 0.0 ? -si.normal : si.normal;
127
141
  si.hit = false;
128
142
  outAux.isShadowCatcher = true;
129
143
  }
@@ -131,97 +145,97 @@ else {
131
145
 
132
146
 
133
147
  #ifdef USE_ENVMAP
134
- if (aa.isNextRefraction) {
148
+ if (path.isNextRefraction) {
135
149
 
136
150
 
137
151
 
138
- vec4 bg = cx(aa.ray.o, aa.ray.d);
139
- bg.rgb = ai(bg.rgb, bf);
140
- float cT = aa.scatteringIsDelta ? 1.0
141
- : aG(aa.scatteringPdf,
142
- iB(cY(aa.ray.d)) * envLightSelectionPmf);
143
- aa.li += cT * aa.beta * bg.rgb * bg.a;
144
- aa.alpha = max(aa.alpha, bg.a);
152
+ vec4 bg = cn(path.ray.o, path.ray.d);
153
+ bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
154
+ float cM = path.scatteringIsDelta ? 1.0
155
+ : aF(path.scatteringPdf,
156
+ envMapPdf(cT(path.ray.d)) * envLightSelectionPmf);
157
+ path.li += cM * path.beta * bg.rgb * bg.a;
158
+ path.alpha = max(path.alpha, bg.a);
145
159
  }
146
160
  else {
147
- vec2 tQ = cY(aa.ray.d);
148
- vec3 emission = textureLinear(envMap, tQ).rgb;
149
- emission = ai(emission, bf);
150
- aa.li += aa.beta * emission *
151
- aG(
152
- aa.scatteringPdf,
153
- iB(tQ) * envLightSelectionPmf
161
+ vec2 vC = cT(path.ray.d);
162
+ vec3 emission = textureLinear(envMap, vC).rgb;
163
+ emission = sampling_spectral_rgb_filter(emission, pathChannel);
164
+ path.li += path.beta * emission *
165
+ aF(
166
+ path.scatteringPdf,
167
+ envMapPdf(vC) * envLightSelectionPmf
154
168
  );
155
169
  }
156
170
  #else
157
- vec4 bg = cx(aa.ray.o, aa.ray.d);
158
- bg.rgb = ai(bg.rgb, bf);
159
- aa.li += aa.beta * bg.rgb * bg.a;
171
+ vec4 bg = cn(path.ray.o, path.ray.d);
172
+ bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
173
+ path.li += path.beta * bg.rgb * bg.a;
160
174
  #endif
161
- aa.abort = true;
175
+ path.abort = true;
162
176
  return;
163
177
  }
164
178
  }
165
179
 
166
180
  if (!si.hit) {
167
181
 
168
- vec4 bg = cx(aa.ray.o, aa.ray.d);
182
+ vec4 bg = cn(path.ray.o, path.ray.d);
169
183
 
170
184
 
171
185
 
172
- bg.rgb = ai(bg.rgb, bf);
173
- if (aa.fromEye) {
174
- aa.li = bg.rgb * bg.a;
175
- aa.alpha = bg.a;
186
+ bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
187
+ if (path.fromEye) {
188
+ path.li = bg.rgb * bg.a;
189
+ path.alpha = bg.a;
176
190
 
177
191
  outAux.isBlank = bg.a < 0.01;
178
192
  }
179
193
  else {
180
- Ray cam = hC(v_Texcoord + sa());
181
- bool mL = dot(cam.d, aa.ray.d) > 0.0;
194
+ Ray cam = eT(v_Texcoord + te());
195
+ bool nt = dot(cam.d, path.ray.d) > 0.0;
182
196
  if (transmissiveOutputAlphaMin < 1.0) {
183
- if (mL) {
184
- aa.alpha = max(aa.alpha, bg.a);
197
+ if (nt) {
198
+ path.alpha = max(path.alpha, bg.a);
185
199
  } else {
186
- aa.alpha = 1.0;
200
+ path.alpha = 1.0;
187
201
  }
188
202
  }
189
203
  #if !defined(USE_ENVMAP)
190
204
 
191
- if (mL) {
192
- aa.li = aa.beta * aG(aa.scatteringPdf, 1.0) * bg.rgb;
205
+ if (nt) {
206
+ path.li += path.beta * aF(path.scatteringPdf, 1.0) * bg.rgb;
193
207
  }
194
208
  #endif
195
209
  }
196
- aa.abort = true;
210
+ path.abort = true;
197
211
  return;
198
212
  }
199
213
 
200
- bool cH = false;
214
+ bool aJ = false;
201
215
  if ((mat.materialType == STANDARD || mat.materialType == UNLIT)) {
202
216
  if (transmissiveOutputAlphaMin < 1.0) {
203
217
 
204
218
  float alpha = max(1.0 - mat.transmissionWeight, 1.0 - pow(1.0 - transmissiveOutputAlphaMin, float(depth)));
205
- aa.alpha = max(alpha, aa.alpha);
219
+ path.alpha = max(alpha, path.alpha);
206
220
  }
207
221
  float alpha = mat.alpha;
208
222
  if (alpha < 1.0) {
209
223
 
210
224
 
211
- aa.alpha = max(aa.alpha, alpha);
212
- if (eo(3u) > alpha) {
213
- cH = true;
225
+ path.alpha = max(path.alpha, alpha);
226
+ if (ek(3u) > alpha) {
227
+ aJ = true;
214
228
  }
215
229
  }
216
- if (!cH) {
217
- mb(si, mat, aa);
230
+ if (!aJ) {
231
+ mx(si, mat, path);
218
232
  }
219
233
  else {
220
- aa.ray.o = si.position + aa.ray.d * EPS;
234
+ path.ray.o = si.position + path.ray.d * EPS;
221
235
  }
222
236
  }
223
237
 
224
- if (!si.albedoSampled && !cH) {
238
+ if (!si.albedoSampled && !aJ) {
225
239
 
226
240
  if ((mat.materialType == STANDARD || mat.materialType == UNLIT) &&
227
241
  !(mat.transmissionWeight > 0.5 ||
@@ -243,100 +257,101 @@ si.albedoSampled = true;
243
257
 
244
258
 
245
259
  #ifdef USE_RR
246
- if (depth >= RR_MAX && !cH) {
260
+ if (depth >= RR_MAX && !aJ) {
247
261
 
248
- float oy = max(max(aa.beta.x, aa.beta.y), aa.beta.z);
249
- float q = max(0.0, 1.0 - oy);
250
- if (dz(cw(RUSSIAN_ROULETTE)) < q) {
262
+ float pc = max(max(path.beta.x, path.beta.y), path.beta.z);
263
+ float q = max(0.0, 1.0 - pc);
264
+ if (sample1D(bE(RUSSIAN_ROULETTE)) < q) {
251
265
 
252
266
 
253
- aa.alpha = 1.0;
254
- aa.abort = true;
267
+ path.alpha = 1.0;
268
+ path.abort = true;
255
269
  }
256
270
  else {
257
- aa.beta /= 1.0 - q;
271
+ path.beta /= 1.0 - q;
258
272
  }
259
273
  }
260
274
  #endif
261
275
 
262
- if (aa.abort) {
276
+ if (path.abort) {
263
277
  return;
264
278
  }
265
279
 
266
280
 
267
- cZ(aa.ray, si, true);
268
- eX(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
281
+ intersectScene(path.ray, si, true);
282
+ getMaterial(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
269
283
  si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
270
284
 
271
285
 
272
286
 
273
287
 
274
288
  if (dispersionWavelengths == 1 && si.hit && mat.transmissionWeight > 0.001 && mat.transmissionDispersionScale > 0.001) {
275
- bf = mv;
289
+ pathWavelength = qh;
290
+ pathChannel = qg;
276
291
  }
277
- if (mat.transmissionWeight > 0.001 && bf > 0.0) {
278
- mat.specularIor = eN(
279
- bf,
292
+ if (mat.transmissionWeight > 0.001 && pathWavelength > 0.0) {
293
+ mat.specularIor = sampling_cauchy_ior(
294
+ pathWavelength,
280
295
  mat.specularIor,
281
296
  mat.transmissionDispersionScale,
282
297
  mat.dispersionAbbeNumber
283
298
  );
284
299
  }
285
300
 
286
- if (cH) {
301
+ if (aJ) {
287
302
  return;
288
303
  }
289
304
 
290
- bool hy = eo(3u) < mat.alpha;
305
+ bool ht = ek(3u) < mat.alpha;
291
306
  #ifdef NUM_LIGHTS
292
307
 
293
308
  LightSampleRec lightSample;
294
309
  for (int i = 0; i < NUM_LIGHTS; i++) {
295
310
 
296
- Light light = qx(i);
297
- float d = my(aa.ray, light, lightSample);
298
- bool mC = si.hit && d > distance(si.position, aa.ray.o);
299
- if (d != INF && !(mC && hy)) {
311
+ Light light = fetchLight(i);
312
+ float d = mX(path.ray, light, lightSample);
313
+ bool lH = si.hit && d > distance(si.position, path.ray.o);
314
+ if (d != INF && !(lH && ht)) {
300
315
  lightSample.pdf *= light.selectionPmf;
301
- float fa = aG(aa.scatteringPdf, lightSample.pdf);
302
- lightSample.emission = ai(lightSample.emission, bf);
303
- aa.li += fa * aa.beta * lightSample.emission;
316
+ float misWeight = aF(path.scatteringPdf, lightSample.pdf);
317
+ lightSample.emission = sampling_spectral_rgb_filter(lightSample.emission, pathChannel);
318
+ ${enabled ? 'if (!causticHitOwned(path)) { ' : ''}path.li += misWeight * path.beta * lightSample.emission;${enabled ? ' }' : ''}
304
319
 
305
- aa.alpha = 1.0;
306
- aa.abort = true;
320
+ path.alpha = 1.0;
321
+ path.abort = true;
307
322
  }
308
323
  }
309
324
  #endif
310
325
 
311
326
  #ifdef USE_ENVMAP
312
- if (!(si.hit && hy)) {
313
- if (aa.isNextRefraction) {
314
-
315
-
316
- vec4 bg = cx(aa.ray.o, aa.ray.d);
317
- bg.rgb = ai(bg.rgb, bf);
318
- float cT = aa.scatteringIsDelta ? 1.0
319
- : aG(aa.scatteringPdf,
320
- iB(cY(aa.ray.d)) * envLightSelectionPmf);
321
- aa.li += cT * aa.beta * bg.rgb * bg.a;
322
- aa.alpha = max(aa.alpha, bg.a);
323
- aa.abort = true;
327
+ if (!(si.hit && ht)) {
328
+ if (path.isNextRefraction) {
329
+
330
+
331
+ vec4 bg = cn(path.ray.o, path.ray.d);
332
+ bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
333
+ float cM = path.scatteringIsDelta ? 1.0
334
+ : aF(path.scatteringPdf,
335
+ envMapPdf(cT(path.ray.d)) * envLightSelectionPmf);
336
+ path.li += cM * path.beta * bg.rgb * bg.a;
337
+ path.alpha = max(path.alpha, bg.a);
338
+ path.abort = true;
324
339
  return;
325
340
  }
326
- vec2 uv = cY(aa.ray.d);
341
+ vec2 uv = cT(path.ray.d);
327
342
  vec3 emission = textureLinear(envMap, uv).rgb;
328
- float fa = aG(
329
- aa.scatteringPdf,
330
- iB(uv) * envLightSelectionPmf
343
+ float misWeight = aF(
344
+ path.scatteringPdf,
345
+ envMapPdf(uv) * envLightSelectionPmf
331
346
  );
332
- emission = ai(emission, bf);
333
- aa.li += aa.beta * emission * fa;
347
+ emission = sampling_spectral_rgb_filter(emission, pathChannel);
348
+ path.li += path.beta * emission * misWeight;
334
349
 
335
350
 
336
351
  #if !defined(USE_BACKGROUND)
337
- aa.alpha = 1.0;
352
+ path.alpha = 1.0;
338
353
  #endif
339
- aa.abort = true;
354
+ path.abort = true;
340
355
  return;
341
356
  }
342
357
  #endif
@@ -345,180 +360,182 @@ depth++;
345
360
  }
346
361
 
347
362
 
348
- vec2 kz(float radius, float xi) {
363
+ vec2 kK(float radius, float xi) {
349
364
  float x = 0.25;
350
- for (int nG = 0; nG < 10; nG++) {
365
+ for (int iteration = 0; iteration < 10; iteration++) {
351
366
  float x2 = x * x;
352
367
  float x3 = x2 * x;
353
- float kP = 1.0 - x;
368
+ float la = 1.0 - x;
354
369
  float value = 10.0 * x2 - 20.0 * x3 + 15.0 * x2 * x2 -
355
370
  4.0 * x2 * x3 - xi;
356
- float mj = 20.0 * x * kP * kP * kP;
357
- if (abs(value) < 1e-6 || mj == 0.0) break;
358
- x = clamp(x - value / mj, 0.0, 1.0);
371
+ float mJ = 20.0 * x * la * la * la;
372
+ if (abs(value) < 1e-6 || mJ == 0.0) break;
373
+ x = clamp(x - value / mJ, 0.0, 1.0);
359
374
  }
360
- float jo = x * radius;
375
+ float jr = x * radius;
361
376
  return vec2(
362
- jo,
363
- sqrt(max(radius * radius - jo * jo, 0.0))
377
+ jr,
378
+ sqrt(max(radius * radius - jr * jr, 0.0))
364
379
  );
365
380
  }
366
381
 
367
- float iT(float radius, float gx) {
368
- if (gx >= radius) return 0.0;
369
- float og = radius - gx;
370
- return og * og * og;
382
+ float bevelCubicPdf(float radius, float gu) {
383
+ if (gu >= radius) return 0.0;
384
+ float falloff = radius - gu;
385
+ return falloff * falloff * falloff;
371
386
  }
372
387
 
373
388
 
374
- vec3 mt(ad source, float radius) {
389
+ vec3 mT(SurfaceInteraction source, float radius) {
375
390
  vec3 geometricNormal = source.faceNormal;
376
391
  if (dot(geometricNormal, source.vertexNormal) < 0.0) geometricNormal = -geometricNormal;
377
392
  vec3 tangent;
378
393
  vec3 bitangent;
379
- aL(geometricNormal, tangent, bitangent);
380
- vec3 iF = vec3(0.0);
381
-
382
- for (int ig = 0; ig < BEVEL_SAMPLES; ig++) {
383
- vec2 ph = fp(CAMERA_BEVEL_BASE + uint(ig));
384
- float cA = ph.x;
385
- float oF = ph.y;
386
- vec3 dj = geometricNormal;
394
+ sampling_orthonormal_basis(geometricNormal, tangent, bitangent);
395
+ vec3 iE = vec3(0.0);
396
+
397
+ for (int ih = 0; ih < BEVEL_SAMPLES; ih++) {
398
+ vec2 qa = sample2D(CAMERA_BEVEL_BASE + uint(ih));
399
+ float cr = qa.x;
400
+ float pj = qa.y;
401
+ vec3 cZ = geometricNormal;
387
402
  vec3 fI = tangent;
388
- vec3 ek = bitangent;
389
- float gf = 0.5;
390
- float hY = 0.25;
391
- float gH = 0.25;
392
- if (cA < 0.5) {
393
- cA *= 2.0;
394
- }
395
- else if (cA < 0.75) {
396
- vec3 mJ = dj;
397
- dj = fI;
398
- fI = mJ;
399
- gf = 0.25;
400
- hY = 0.5;
401
- cA = (cA - 0.5) * 4.0;
403
+ vec3 eh = bitangent;
404
+ float ge = 0.5;
405
+ float hW = 0.25;
406
+ float gC = 0.25;
407
+ if (cr < 0.5) {
408
+ cr *= 2.0;
409
+ }
410
+ else if (cr < 0.75) {
411
+ vec3 nr = cZ;
412
+ cZ = fI;
413
+ fI = nr;
414
+ ge = 0.25;
415
+ hW = 0.5;
416
+ cr = (cr - 0.5) * 4.0;
402
417
  }
403
418
  else {
404
- vec3 mJ = dj;
405
- dj = ek;
406
- ek = mJ;
407
- gf = 0.25;
408
- gH = 0.5;
409
- cA = (cA - 0.75) * 4.0;
410
- }
411
-
412
- vec2 gV = kz(radius, oF);
413
- float phi = TWOPI * cA;
414
- vec3 qv = gV.x *
415
- (cos(phi) * fI + sin(phi) * ek);
419
+ vec3 nr = cZ;
420
+ cZ = eh;
421
+ eh = nr;
422
+ ge = 0.25;
423
+ gC = 0.5;
424
+ cr = (cr - 0.75) * 4.0;
425
+ }
426
+
427
+ vec2 gQ = kK(radius, pj);
428
+ float phi = TWOPI * cr;
429
+ vec3 rr = gQ.x *
430
+ (cos(phi) * fI + sin(phi) * eh);
416
431
  Ray ray;
417
- iC(
432
+ initRay(
418
433
  ray,
419
- source.position + dj * gV.y + qv,
420
- -dj
434
+ source.position + cZ * gQ.y + rr,
435
+ -cZ
421
436
  );
422
- ad hit;
423
- iM(
437
+ SurfaceInteraction hit;
438
+ intersectSceneBevel(
424
439
  ray,
425
440
  hit,
426
441
  source.instanceIndex,
427
- max(2.0 * gV.y, EPS)
442
+ max(2.0 * gQ.y, EPS)
428
443
  );
429
444
  if (!hit.hit) continue;
430
445
 
431
- float kQ = gf * abs(dot(dj, hit.faceNormal));
432
- float mF = hY * abs(dot(fI, hit.faceNormal));
433
- float kb = gH * abs(dot(ek, hit.faceNormal));
434
- float weight = kQ / max(
435
- kQ * kQ + mF * mF +
436
- kb * kb,
446
+ float lc = ge * abs(dot(cZ, hit.faceNormal));
447
+ float nj = hW * abs(dot(fI, hit.faceNormal));
448
+ float kj = gC * abs(dot(eh, hit.faceNormal));
449
+ float weight = lc / max(
450
+ lc * lc + nj * nj +
451
+ kj * kj,
437
452
  1e-8
438
453
  );
439
- weight *= iT(radius, distance(hit.position, source.position)) /
440
- max(iT(radius, gV.x), 1e-8);
441
- iF += weight * hit.vertexNormal;
454
+ weight *= bevelCubicPdf(radius, distance(hit.position, source.position)) /
455
+ max(bevelCubicPdf(radius, gQ.x), 1e-8);
456
+ iE += weight * hit.vertexNormal;
442
457
  }
443
458
 
444
- if (dot(iF, iF) <= 1e-12) return source.normal;
445
- vec3 jH = normalize(iF);
446
- vec3 result = source.normal + jH - source.vertexNormal;
459
+ if (dot(iE, iE) <= 1e-12) return source.normal;
460
+ vec3 jM = normalize(iE);
461
+ vec3 result = source.normal + jM - source.vertexNormal;
447
462
  return dot(result, result) > 1e-12 ? normalize(result) : source.normal;
448
463
  }
449
464
 
450
- vec4 bw(ad si, Ray ray, J mat, inout RayTraceAuxiliary outAux) {
451
- Path aa;
452
- aa.ray = ray;
453
- aa.li = vec3(0);
454
- aa.alpha = transmissiveOutputAlphaMin < 1.0 ? 0.0 : 1.0;
455
- aa.beta = vec3(1.0);
456
- aa.fromEye = true;
457
- aa.scatteringPdf = 0.0;
458
- aa.scatteringIsDelta = false;
459
- aa.isNextRefraction = false;
460
- aa.abort = false;
465
+ vec4 cG(SurfaceInteraction si, Ray ray, OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux) {
466
+ Path path;
467
+ path.ray = ray;
468
+ path.li = vec3(0);
469
+ path.alpha = transmissiveOutputAlphaMin < 1.0 ? 0.0 : 1.0;
470
+ path.beta = vec3(1.0);
471
+ path.fromEye = true;${enabled ? /* glsl */ `
472
+ path.causticK = 0; path.causticSingleT = false;
473
+ path.causticReceiverPrimary = false; path.causticHasReceiver = false; path.causticMneeReceiver=false;` : ''}
474
+ path.scatteringPdf = 0.0;
475
+ path.scatteringIsDelta = false;
476
+ path.isNextRefraction = false;
477
+ path.abort = false;
461
478
  int depth = 0;
462
479
  ${intelMac ? bounceCodeOnIntelMac : bounceCodeOnOther}
463
- return vec4(aa.li, aa.alpha);
480
+ return vec4(path.li, path.alpha);
464
481
  }
465
482
 
466
- vec4 iD(ad si, Ray ray, J mat, inout RayTraceAuxiliary outAux) {
483
+ vec4 iC(SurfaceInteraction si, Ray ray, OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux) {
467
484
  float coverage = clamp(mat.alpha, 0.0, 1.0);
468
485
  if (!si.hit || (mat.materialType != STANDARD && mat.materialType != UNLIT) || coverage >= 1.0) {
469
- return bw(si, ray, mat, outAux);
486
+ return cG(si, ray, mat, outAux);
470
487
  }
471
488
 
472
489
 
473
490
 
474
491
 
475
492
 
476
- Ray nX = ray;
477
- nX.o = si.position + ray.d * (EPS * 0.02);
478
- ad dE = si;
479
- dE.albedoSampled = false;
480
- cZ(nX, dE, false);
481
- J nW;
482
- eX(nW, dE.materialIndex, dE.uv, dE.uv1, dE.instanceIndex, dE.vertexColor);
483
- RayTraceAuxiliary gn = outAux;
484
- if (dE.hit && (nW.materialType == STANDARD || nW.materialType == UNLIT)) {
485
- gn.albedo = nW.transmissionWeight > 0.5
493
+ Ray uK = ray;
494
+ uK.o = si.position + ray.d * (EPS * 0.02);
495
+ SurfaceInteraction jL = si;
496
+ jL.albedoSampled = false;
497
+ intersectScene(uK, jL, false);
498
+ OpenPbrResolvedMaterial oH;
499
+ getMaterial(oH, jL.materialIndex, jL.uv, jL.uv1, jL.instanceIndex, jL.vertexColor);
500
+ RayTraceAuxiliary eg = outAux;
501
+ if (jL.hit && (oH.materialType == STANDARD || oH.materialType == UNLIT)) {
502
+ eg.albedo = oH.transmissionWeight > 0.5
486
503
  ? vec3(1.0)
487
- : nW.baseColor;
488
- gn.normal = dot(
489
- dE.normal,
490
- dE.position - vec3(viewInv[3])
504
+ : oH.baseColor;
505
+ eg.normal = dot(
506
+ jL.normal,
507
+ jL.position - vec3(viewInv[3])
491
508
  ) > 0.0
492
- ? -dE.normal
493
- : dE.normal;
494
- dE.albedoSampled = nW.transmissionWeight > 0.5;
509
+ ? -jL.normal
510
+ : jL.normal;
511
+ jL.albedoSampled = oH.transmissionWeight > 0.5;
495
512
  }
496
- vec4 back = bw(dE, nX, nW, gn);
513
+ vec4 back = cG(jL, uK, oH, eg);
497
514
  if (coverage <= 0.0) {
498
- outAux = gn;
515
+ outAux = eg;
499
516
  return back;
500
517
  }
501
518
 
502
- ad tu = si;
503
- J tR = mat;
504
- tR.alpha = 1.0;
505
- RayTraceAuxiliary iW = outAux;
506
- vec4 qY = bw(tu, ray, tR, iW);
507
- outAux.albedo = mix(gn.albedo, iW.albedo, coverage);
508
- vec3 fW = mix(gn.normal, iW.normal, coverage);
509
- outAux.normal = dot(fW, fW) > 1e-12
510
- ? normalize(fW)
519
+ SurfaceInteraction yc = si;
520
+ OpenPbrResolvedMaterial vD = mat;
521
+ vD.alpha = 1.0;
522
+ RayTraceAuxiliary sa = outAux;
523
+ vec4 front = cG(yc, ray, vD, sa);
524
+ outAux.albedo = mix(eg.albedo, sa.albedo, coverage);
525
+ vec3 cS = mix(eg.normal, sa.normal, coverage);
526
+ outAux.normal = dot(cS, cS) > 1e-12
527
+ ? normalize(cS)
511
528
  : vec3(0.0);
512
- outAux.isBlank = gn.isBlank && iW.isBlank;
513
- return mix(back, qY, coverage);
529
+ outAux.isBlank = eg.isBlank && sa.isBlank;
530
+ return mix(back, front, coverage);
514
531
  }
515
532
 
516
533
 
517
534
 
518
- vec4 mx(Ray ray, out RayTraceAuxiliary outAux) {
535
+ vec4 hR(Ray ray, out RayTraceAuxiliary outAux) {
519
536
 
520
- ad si;
521
- J mat;
537
+ SurfaceInteraction si;
538
+ OpenPbrResolvedMaterial mat;
522
539
 
523
540
  si.albedoSampled = false;
524
541
  #ifdef HAS_MEDIUM
@@ -528,13 +545,13 @@ si.mediumScattering = vec3(0.0);
528
545
  si.mediumAnisotropy = 0.0;
529
546
  #endif
530
547
 
531
- cZ(ray, si, false);
532
- eX(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
548
+ intersectScene(ray, si, false);
549
+ getMaterial(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
533
550
  si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
534
551
 
535
552
  #ifdef HAS_BEVEL
536
553
  if (bevelEnabled && mat.bevel > 0.0) {
537
- si.normal = mt(si, mat.bevel);
554
+ si.normal = mT(si, mat.bevel);
538
555
  }
539
556
  #endif
540
557
 
@@ -551,32 +568,38 @@ si.albedoSampled = mat.transmissionWeight > 0.5;
551
568
  }
552
569
 
553
570
  if (mat.transmissionDispersionScale > 0.001) {
554
- mat.specularIor = eN(
555
- bf,
571
+ mat.specularIor = sampling_cauchy_ior(
572
+ pathWavelength,
556
573
  mat.specularIor,
557
574
  mat.transmissionDispersionScale,
558
575
  mat.dispersionAbbeNumber
559
576
  );
560
577
  }
561
- return iD(si, ray, mat, outAux);
578
+ return iC(si, ray, mat, outAux);
562
579
  }
563
580
 
564
581
  void main() {
565
582
 
566
- su();
567
- kh(v_Texcoord * viewportSize, int(uint(sampleCount) ^ eg(uint(sequenceSeed))));
583
+ ${fragments?.debugInit ?? ''} rA();
584
+ fi(v_Texcoord * viewportSize, int(uint(sampleCount) ^ cB(uint(sequenceSeed))));
568
585
 
569
586
 
570
- bf = dispersionWavelengths == 1 ? 0.0 : wavelength;
571
- mv = wavelength;
572
- if (dispersionWavelengths == 1 && wavelength > 0.0) {
573
- float channel = floor(dz(CAMERA_WAVELENGTH) * 3.0);
574
- mv = channel < 1.0 ? 650.0 : channel < 2.0 ? 510.0 : 475.0;
587
+ pathWavelength = 0.0;
588
+ pathChannel = 0;
589
+ if (spectralChannel > 0) {
590
+ float aZ = sample1D(CAMERA_WAVELENGTH);
591
+ if (dispersionWavelengths == 1) {
592
+ qg = min(int(aZ * 3.0), 2) + 1;
593
+ qh = cU(qg - 1, fract(aZ * 3.0));
594
+ } else {
595
+ pathChannel = spectralChannel;
596
+ pathWavelength = cU(spectralChannel - 1, aZ);
597
+ }
575
598
  }
576
599
 
577
600
 
578
601
 
579
- Ray cam = nM();
602
+ Ray cam = ow();
580
603
 
581
604
  RayTraceAuxiliary outAux;
582
605
  outAux.albedo = vec3(0.0);
@@ -584,38 +607,38 @@ outAux.normal = vec3(0.0);
584
607
  outAux.isBlank = false;
585
608
  outAux.isShadowCatcher = false;
586
609
 
587
- vec4 aF = mx(cam, outAux);
610
+ vec4 liAndAlpha = hR(cam, outAux);
588
611
 
589
612
 
590
613
 
591
614
  #ifdef CLAMPING
592
615
  float clamping = float(CLAMPING);
593
- aF.rgb = clamp(aF.rgb, -clamping, clamping);
616
+ liAndAlpha.rgb = clamp(liAndAlpha.rgb, -clamping, clamping);
594
617
  #endif
595
618
 
596
619
 
597
- if (bf > 0.0) {
620
+ if (pathWavelength > 0.0) {
598
621
 
599
- aF.rgb *= 3.0;
622
+ liAndAlpha.rgb *= 3.0;
600
623
  if (dispersionWavelengths != 1) {
601
624
 
602
625
 
603
- aF.a /= 3.0;
626
+ liAndAlpha.a /= 3.0;
604
627
  }
605
628
  }
606
- if (!(aF.x < INF && aF.x > -EPS)) {
607
- aF = vec4(0, 0, 0, 1);
629
+ if (!(liAndAlpha.x < INF && liAndAlpha.x > -EPS)) {
630
+ liAndAlpha = vec4(0, 0, 0, 1);
608
631
  }
609
632
 
610
- out_color = aF;
633
+ out_color = ${research?.debugOutput || 'liAndAlpha'};
611
634
  out_albedo = vec4(outAux.albedo, outAux.isBlank ? 0.0 : 1.0);
612
635
  out_normal = vec4(outAux.normal, 1.0);
613
636
 
614
637
 
615
- float jq = dot(aF.rgb, vec3(0.2126, 0.7152, 0.0722));
638
+ float jw = dot(liAndAlpha.rgb, vec3(0.2126, 0.7152, 0.0722));
616
639
  out_moments = outAux.isShadowCatcher
617
640
  ? vec4(0.0)
618
- : vec4(jq, jq * jq, 1.0, 0.0);
641
+ : vec4(jw, jw * jw, 1.0, 0.0);
619
642
 
620
643
  }`
621
644
  });