@meimu/mutracer 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +7 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +10421 -8363
  6. package/docs/api.md +202 -11
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +18 -27
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +19 -10
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +41 -3
  14. package/lib/Display.d.ts +13 -2
  15. package/lib/Display.js +27 -6
  16. package/lib/Display.js.map +1 -1
  17. package/lib/Engine.d.ts +2 -0
  18. package/lib/Engine.js +52 -25
  19. package/lib/Engine.js.map +1 -1
  20. package/lib/Render.d.ts +44 -9
  21. package/lib/Render.js +115 -17
  22. package/lib/Render.js.map +1 -1
  23. package/lib/RenderLoop.d.ts +7 -1
  24. package/lib/RenderLoop.js +94 -13
  25. package/lib/RenderLoop.js.map +1 -1
  26. package/lib/main.d.ts +6 -3
  27. package/lib/main.js +1 -0
  28. package/lib/main.js.map +1 -1
  29. package/lib/math/access.d.ts +4 -0
  30. package/lib/math/access.js +10 -0
  31. package/lib/math/access.js.map +1 -0
  32. package/lib/math/mat3.d.ts +4 -0
  33. package/lib/math/mat3.js +54 -0
  34. package/lib/math/mat3.js.map +1 -0
  35. package/lib/math/mat4.d.ts +19 -0
  36. package/lib/math/mat4.js +413 -0
  37. package/lib/math/mat4.js.map +1 -0
  38. package/lib/math/storage.d.ts +6 -0
  39. package/lib/math/storage.js +22 -0
  40. package/lib/math/storage.js.map +1 -0
  41. package/lib/math/types.d.ts +3 -0
  42. package/lib/math/types.js +2 -0
  43. package/lib/math/types.js.map +1 -0
  44. package/lib/math/vec2.d.ts +13 -0
  45. package/lib/math/vec2.js +52 -0
  46. package/lib/math/vec2.js.map +1 -0
  47. package/lib/math/vec3.d.ts +23 -0
  48. package/lib/math/vec3.js +139 -0
  49. package/lib/math/vec3.js.map +1 -0
  50. package/lib/math.d.ts +5 -17
  51. package/lib/math.js +5 -55
  52. package/lib/math.js.map +1 -1
  53. package/lib/oidn.d.ts +1 -1
  54. package/lib/oidn.js +4 -2
  55. package/lib/oidn.js.map +1 -1
  56. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  57. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  58. package/lib/renderer/AovPrimitiveCache.js +48 -0
  59. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  60. package/lib/renderer/Box3.d.ts +5 -0
  61. package/lib/renderer/Box3.js +9 -0
  62. package/lib/renderer/Box3.js.map +1 -0
  63. package/lib/renderer/GPUTraceQueue.d.ts +10 -0
  64. package/lib/renderer/GPUTraceQueue.js +31 -0
  65. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  66. package/lib/renderer/MaterialData.d.ts +15 -0
  67. package/lib/renderer/MaterialData.js +61 -0
  68. package/lib/renderer/MaterialData.js.map +1 -0
  69. package/lib/renderer/MaterialTable.d.ts +11 -98
  70. package/lib/renderer/MaterialTable.js +34 -412
  71. package/lib/renderer/MaterialTable.js.map +1 -1
  72. package/lib/renderer/RenderingPipeline.d.ts +32 -13
  73. package/lib/renderer/RenderingPipeline.js +1 -17
  74. package/lib/renderer/RenderingPipeline.js.map +1 -1
  75. package/lib/renderer/TileRender.d.ts +0 -1
  76. package/lib/renderer/TileRender.js +14 -1
  77. package/lib/renderer/TileRender.js.map +1 -1
  78. package/lib/renderer/WGPUAov.d.ts +39 -0
  79. package/lib/renderer/WGPUAov.js +239 -0
  80. package/lib/renderer/WGPUAov.js.map +1 -0
  81. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  82. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  83. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  85. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  86. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  87. package/lib/renderer/WGPUBloomPass.js +17 -97
  88. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  89. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  90. package/lib/renderer/WGPUComputePass.js.map +1 -1
  91. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  92. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  93. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  94. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  95. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  96. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  97. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  98. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  99. package/lib/renderer/WGPURayTraceOutput.js +26 -17
  100. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  101. package/lib/renderer/WGPURayTracePass.d.ts +36 -40
  102. package/lib/renderer/WGPURayTracePass.js +399 -548
  103. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  104. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  105. package/lib/renderer/WGPURenderingPipeline.js +239 -60
  106. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  107. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  108. package/lib/renderer/WGPUShaderCache.js +10 -5
  109. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  110. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  111. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  112. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  113. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  114. package/lib/renderer/WGPUSkyBaker.js +85 -0
  115. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  116. package/lib/renderer/WebGLAov.d.ts +41 -0
  117. package/lib/renderer/WebGLAov.js +106 -0
  118. package/lib/renderer/WebGLAov.js.map +1 -0
  119. package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
  120. package/lib/renderer/WebGLFullQuadPass.js +18 -2
  121. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  122. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  123. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  124. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  125. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  126. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  127. package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
  128. package/lib/renderer/WebGLRayTracePass.js +83 -7
  129. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  130. package/lib/renderer/WebGLRenderingPipeline.js +116 -8
  131. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  132. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  133. package/lib/renderer/WebGLSkyBaker.js +422 -0
  134. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  135. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  136. package/lib/renderer/WebGLSkySource.js +28 -0
  137. package/lib/renderer/WebGLSkySource.js.map +1 -0
  138. package/lib/renderer/accumulationTarget.d.ts +5 -0
  139. package/lib/renderer/accumulationTarget.js.map +1 -1
  140. package/lib/renderer/aov.d.ts +42 -0
  141. package/lib/renderer/aov.js +50 -0
  142. package/lib/renderer/aov.js.map +1 -0
  143. package/lib/renderer/aovDisplay.d.ts +14 -0
  144. package/lib/renderer/aovDisplay.js +32 -0
  145. package/lib/renderer/aovDisplay.js.map +1 -0
  146. package/lib/renderer/aovScene.d.ts +21 -0
  147. package/lib/renderer/aovScene.js +139 -0
  148. package/lib/renderer/aovScene.js.map +1 -0
  149. package/lib/renderer/binnedSahBvh.js +2 -1
  150. package/lib/renderer/binnedSahBvh.js.map +1 -1
  151. package/lib/renderer/bvhAccel.d.ts +20 -10
  152. package/lib/renderer/bvhAccel.js +168 -58
  153. package/lib/renderer/bvhAccel.js.map +1 -1
  154. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  155. package/lib/renderer/cameraSnapshot.js +2 -1
  156. package/lib/renderer/cameraSnapshot.js.map +1 -1
  157. package/lib/renderer/cameraUniform.d.ts +2 -0
  158. package/lib/renderer/cameraUniform.js +12 -0
  159. package/lib/renderer/cameraUniform.js.map +1 -0
  160. package/lib/renderer/committedScene.js +4 -0
  161. package/lib/renderer/committedScene.js.map +1 -1
  162. package/lib/renderer/denoiser.d.ts +3 -11
  163. package/lib/renderer/denoiser.js.map +1 -1
  164. package/lib/renderer/depthQuery.js +4 -1
  165. package/lib/renderer/depthQuery.js.map +1 -1
  166. package/lib/renderer/displacementPreparation.d.ts +11 -0
  167. package/lib/renderer/displacementPreparation.js +351 -0
  168. package/lib/renderer/displacementPreparation.js.map +1 -0
  169. package/lib/renderer/displacementRange.d.ts +1 -0
  170. package/lib/renderer/displacementRange.js +9 -0
  171. package/lib/renderer/displacementRange.js.map +1 -0
  172. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  173. package/lib/renderer/displayParityDiagnostics.js +2 -0
  174. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  175. package/lib/renderer/envMapCreation.d.ts +9 -8
  176. package/lib/renderer/envMapCreation.js +36 -12
  177. package/lib/renderer/envMapCreation.js.map +1 -1
  178. package/lib/renderer/envMapDistribution.d.ts +12 -2
  179. package/lib/renderer/envMapDistribution.js +43 -34
  180. package/lib/renderer/envMapDistribution.js.map +1 -1
  181. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  182. package/lib/renderer/geometryBvhBounds.js +82 -0
  183. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  184. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  185. package/lib/renderer/geometryUpdateState.js +2 -0
  186. package/lib/renderer/geometryUpdateState.js.map +1 -0
  187. package/lib/renderer/geometryUpdates.d.ts +17 -9
  188. package/lib/renderer/geometryUpdates.js +92 -33
  189. package/lib/renderer/geometryUpdates.js.map +1 -1
  190. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  191. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  192. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  193. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  194. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  195. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  196. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  198. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  200. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  201. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  205. package/lib/renderer/glsl/chunks/intersect.glsl.js +437 -435
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  209. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
  210. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  211. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  212. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  213. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +51 -51
  214. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  215. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  216. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +108 -108
  217. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  218. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  219. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  220. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  221. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  222. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  223. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  224. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  225. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  226. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  227. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  228. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  229. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  230. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  231. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  232. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  233. package/lib/renderer/lightConstants.d.ts +10 -0
  234. package/lib/renderer/lightConstants.js +11 -0
  235. package/lib/renderer/lightConstants.js.map +1 -0
  236. package/lib/renderer/lightCore.d.ts +12 -0
  237. package/lib/renderer/lightCore.js +13 -0
  238. package/lib/renderer/lightCore.js.map +1 -0
  239. package/lib/renderer/lightSampling.d.ts +20 -17
  240. package/lib/renderer/lightSampling.js +123 -56
  241. package/lib/renderer/lightSampling.js.map +1 -1
  242. package/lib/renderer/lightsData.d.ts +21 -0
  243. package/lib/renderer/lightsData.js +192 -0
  244. package/lib/renderer/lightsData.js.map +1 -0
  245. package/lib/renderer/lightsUtil.d.ts +3 -26
  246. package/lib/renderer/lightsUtil.js +3 -153
  247. package/lib/renderer/lightsUtil.js.map +1 -1
  248. package/lib/renderer/materialBufferData.d.ts +70 -0
  249. package/lib/renderer/materialBufferData.js +2 -0
  250. package/lib/renderer/materialBufferData.js.map +1 -0
  251. package/lib/renderer/materialConstants.d.ts +11 -0
  252. package/lib/renderer/materialConstants.js +11 -0
  253. package/lib/renderer/materialConstants.js.map +1 -1
  254. package/lib/renderer/materialCore.d.ts +8 -0
  255. package/lib/renderer/materialCore.js +9 -0
  256. package/lib/renderer/materialCore.js.map +1 -0
  257. package/lib/renderer/materialEmission.d.ts +2 -2
  258. package/lib/renderer/materialEmission.js +3 -3
  259. package/lib/renderer/materialEmission.js.map +1 -1
  260. package/lib/renderer/materialLayout.d.ts +2 -101
  261. package/lib/renderer/materialLayout.js +110 -172
  262. package/lib/renderer/materialLayout.js.map +1 -1
  263. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  264. package/lib/renderer/materialLayoutSchema.js +172 -0
  265. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  266. package/lib/renderer/materialParams.d.ts +69 -0
  267. package/lib/renderer/materialParams.js +272 -0
  268. package/lib/renderer/materialParams.js.map +1 -0
  269. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  270. package/lib/renderer/materialTextureSlots.js +21 -8
  271. package/lib/renderer/materialTextureSlots.js.map +1 -1
  272. package/lib/renderer/materialTextures.d.ts +6 -0
  273. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  274. package/lib/renderer/materialTextures.js.map +1 -0
  275. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  276. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  277. package/lib/renderer/meshInstances.d.ts +4 -21
  278. package/lib/renderer/meshInstances.js +10 -56
  279. package/lib/renderer/meshInstances.js.map +1 -1
  280. package/lib/renderer/oidnNetwork.d.ts +2 -2
  281. package/lib/renderer/oidnNetwork.js +1 -1
  282. package/lib/renderer/oidnNetwork.js.map +1 -1
  283. package/lib/renderer/openPbrEnergyLut.js +850 -846
  284. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  285. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  286. package/lib/renderer/ownedDenoiser.js +2 -0
  287. package/lib/renderer/ownedDenoiser.js.map +1 -0
  288. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  289. package/lib/renderer/packedMeshInstances.js +80 -0
  290. package/lib/renderer/packedMeshInstances.js.map +1 -0
  291. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  292. package/lib/renderer/prepareMeshBVH.js +21 -642
  293. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  294. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  295. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  296. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  297. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  298. package/lib/renderer/progressiveScheduler.js +3 -0
  299. package/lib/renderer/progressiveScheduler.js.map +1 -1
  300. package/lib/renderer/renderPipeline.d.ts +3 -1
  301. package/lib/renderer/renderPipeline.js.map +1 -1
  302. package/lib/renderer/renderingLimits.d.ts +9 -0
  303. package/lib/renderer/renderingLimits.js +18 -0
  304. package/lib/renderer/renderingLimits.js.map +1 -0
  305. package/lib/renderer/sceneAssembly.d.ts +73 -0
  306. package/lib/renderer/sceneAssembly.js +109 -0
  307. package/lib/renderer/sceneAssembly.js.map +1 -0
  308. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  309. package/lib/renderer/sceneChangeCore.js +307 -0
  310. package/lib/renderer/sceneChangeCore.js.map +1 -0
  311. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  312. package/lib/renderer/sceneChangeDetector.js +24 -150
  313. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  314. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  315. package/lib/renderer/sceneLayoutSchema.js +111 -0
  316. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  317. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  318. package/lib/renderer/sceneLightChanges.js.map +1 -1
  319. package/lib/renderer/scenePreparation.d.ts +55 -0
  320. package/lib/renderer/scenePreparation.js +360 -0
  321. package/lib/renderer/scenePreparation.js.map +1 -0
  322. package/lib/renderer/scratchSampling.js +18 -18
  323. package/lib/renderer/scratchSampling.js.map +1 -1
  324. package/lib/renderer/shader.d.ts +2 -0
  325. package/lib/renderer/shader.js +2 -0
  326. package/lib/renderer/shader.js.map +1 -1
  327. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  328. package/lib/renderer/shaderCapabilities.js +55 -0
  329. package/lib/renderer/shaderCapabilities.js.map +1 -0
  330. package/lib/renderer/shaderCapacity.d.ts +2 -0
  331. package/lib/renderer/shaderCapacity.js +5 -0
  332. package/lib/renderer/shaderCapacity.js.map +1 -0
  333. package/lib/renderer/skyModel.d.ts +9 -0
  334. package/lib/renderer/skyModel.js +10 -0
  335. package/lib/renderer/skyModel.js.map +1 -0
  336. package/lib/renderer/textureAtlas.d.ts +60 -0
  337. package/lib/renderer/textureAtlas.js +145 -0
  338. package/lib/renderer/textureAtlas.js.map +1 -0
  339. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  340. package/lib/renderer/textureAtlasPixels.js +68 -0
  341. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  342. package/lib/renderer/util.d.ts +1 -1
  343. package/lib/renderer/util.js.map +1 -1
  344. package/lib/renderer/webgl.d.ts +9 -2
  345. package/lib/renderer/webgl.js +54 -9
  346. package/lib/renderer/webgl.js.map +1 -1
  347. package/lib/renderer/wgpuBindless.d.ts +26 -0
  348. package/lib/renderer/wgpuBindless.js +95 -0
  349. package/lib/renderer/wgpuBindless.js.map +1 -0
  350. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  351. package/lib/renderer/wgpuBindlessSource.js +51 -0
  352. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  353. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  354. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  355. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  356. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  357. package/lib/renderer/wgpuSceneUniform.js +125 -0
  358. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  359. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  360. package/lib/renderer/wgpuShaderSource.js +31 -0
  361. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  362. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  363. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  364. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  367. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  369. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  370. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  372. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  373. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  375. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  376. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  378. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  379. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  381. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  382. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  383. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  384. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  385. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  386. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  388. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +743 -706
  389. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  390. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  391. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  393. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +86 -83
  394. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  395. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  396. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  397. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  398. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  399. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  400. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  401. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  403. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  404. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  406. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  408. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  409. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  410. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  411. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  412. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  413. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  415. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  416. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  418. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  419. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  420. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  421. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  422. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  423. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  424. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  425. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  426. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  427. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  428. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  430. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  431. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  432. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  433. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  434. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  435. package/lib/scene/Camera.js +7 -3
  436. package/lib/scene/Camera.js.map +1 -1
  437. package/lib/scene/EnvironmentLight.d.ts +5 -9
  438. package/lib/scene/EnvironmentLight.js +4 -14
  439. package/lib/scene/EnvironmentLight.js.map +1 -1
  440. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  441. package/lib/scene/EnvironmentLightState.js +19 -0
  442. package/lib/scene/EnvironmentLightState.js.map +1 -0
  443. package/lib/scene/Geometry.d.ts +12 -6
  444. package/lib/scene/Geometry.js +37 -13
  445. package/lib/scene/Geometry.js.map +1 -1
  446. package/lib/scene/InstanceState.d.ts +39 -0
  447. package/lib/scene/InstanceState.js +77 -0
  448. package/lib/scene/InstanceState.js.map +1 -0
  449. package/lib/scene/InstancedMesh.d.ts +1 -1
  450. package/lib/scene/InstancedMesh.js +3 -0
  451. package/lib/scene/InstancedMesh.js.map +1 -1
  452. package/lib/scene/MaterialState.d.ts +209 -0
  453. package/lib/scene/MaterialState.js +231 -0
  454. package/lib/scene/MaterialState.js.map +1 -0
  455. package/lib/scene/Mesh.d.ts +4 -6
  456. package/lib/scene/Mesh.js +3 -11
  457. package/lib/scene/Mesh.js.map +1 -1
  458. package/lib/scene/MeshState.d.ts +20 -0
  459. package/lib/scene/MeshState.js +35 -0
  460. package/lib/scene/MeshState.js.map +1 -0
  461. package/lib/scene/OpenPBRMaterial.d.ts +7 -169
  462. package/lib/scene/OpenPBRMaterial.js +5 -223
  463. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  464. package/lib/scene/PixelTexture.d.ts +6 -0
  465. package/lib/scene/PixelTexture.js +10 -0
  466. package/lib/scene/PixelTexture.js.map +1 -0
  467. package/lib/scene/ProceduralSky.d.ts +24 -0
  468. package/lib/scene/ProceduralSky.js +40 -0
  469. package/lib/scene/ProceduralSky.js.map +1 -0
  470. package/lib/scene/RectLight.d.ts +2 -13
  471. package/lib/scene/RectLight.js +3 -21
  472. package/lib/scene/RectLight.js.map +1 -1
  473. package/lib/scene/RectLightState.d.ts +31 -0
  474. package/lib/scene/RectLightState.js +26 -0
  475. package/lib/scene/RectLightState.js.map +1 -0
  476. package/lib/scene/Scene.d.ts +15 -4
  477. package/lib/scene/Scene.js.map +1 -1
  478. package/lib/scene/SceneNode.js +7 -6
  479. package/lib/scene/SceneNode.js.map +1 -1
  480. package/lib/scene/Texture.d.ts +10 -41
  481. package/lib/scene/Texture.js +4 -33
  482. package/lib/scene/Texture.js.map +1 -1
  483. package/lib/scene/TextureState.d.ts +35 -0
  484. package/lib/scene/TextureState.js +35 -0
  485. package/lib/scene/TextureState.js.map +1 -0
  486. package/lib/scene/attributeData.d.ts +4 -0
  487. package/lib/scene/attributeData.js +10 -0
  488. package/lib/scene/attributeData.js.map +1 -0
  489. package/lib/scene/lightState.d.ts +8 -0
  490. package/lib/scene/lightState.js +2 -0
  491. package/lib/scene/lightState.js.map +1 -0
  492. package/lib/scene/openPbrSchema.d.ts +7 -12
  493. package/lib/scene/openPbrSchema.js +273 -28
  494. package/lib/scene/openPbrSchema.js.map +1 -1
  495. package/lib/scene/skyParameters.d.ts +20 -0
  496. package/lib/scene/skyParameters.js +28 -0
  497. package/lib/scene/skyParameters.js.map +1 -0
  498. package/lib/scene/textureData.d.ts +9 -0
  499. package/lib/scene/textureData.js +2 -0
  500. package/lib/scene/textureData.js.map +1 -0
  501. package/lib/scene/texturePixels.d.ts +6 -0
  502. package/lib/scene/texturePixels.js +10 -0
  503. package/lib/scene/texturePixels.js.map +1 -0
  504. package/lib/settings/display.d.ts +33 -0
  505. package/lib/settings/display.js +7 -0
  506. package/lib/settings/display.js.map +1 -1
  507. package/lib/settings/render.d.ts +25 -3
  508. package/lib/settings/render.js +3 -1
  509. package/lib/settings/render.js.map +1 -1
  510. package/lib/tinybvh/tinybvh.wasm +0 -0
  511. package/lib/util/commonGeometry.js +7 -7
  512. package/lib/util/commonGeometry.js.map +1 -1
  513. package/lib/util/fromTHREE.d.ts +4 -1
  514. package/lib/util/fromTHREE.js +18 -5
  515. package/lib/util/fromTHREE.js.map +1 -1
  516. package/lib/util/geometry.js +42 -29
  517. package/lib/util/geometry.js.map +1 -1
  518. package/lib/util/loadRGBE.js +3 -4
  519. package/lib/util/loadRGBE.js.map +1 -1
  520. package/lib/util/studioLighting.d.ts +18 -0
  521. package/lib/util/studioLighting.js +36 -0
  522. package/lib/util/studioLighting.js.map +1 -0
  523. package/lib/version.d.ts +1 -1
  524. package/lib/version.js +1 -1
  525. package/lib/version.js.map +1 -1
  526. package/llms.txt +4 -0
  527. package/package.json +31 -5
  528. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  529. package/lib/renderer/texturesFromMaterials.js.map +0 -1
package/lib/RenderLoop.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { scheduleFrame } from './util/frame.js';
2
2
  import Render from './Render.js';
3
3
  import { Events } from './util/events.js';
4
- import { updateProgressiveState, loopImageState } from './renderer/progressiveScheduler.js';
4
+ import { aovChannel, updateProgressiveState, loopImageState } from './renderer/progressiveScheduler.js';
5
5
  /** Built-in interactive policy implemented entirely through the first-layer API. */
6
6
  export default class RenderLoop {
7
7
  engine;
@@ -22,11 +22,14 @@ export default class RenderLoop {
22
22
  _busy = false;
23
23
  _disposed = false;
24
24
  _cancelScheduled;
25
+ _refillGeneration = 0;
26
+ _cancelRefillFrame;
25
27
  _warnedTick = false;
26
28
  /** Render whose next presentation is waiting for a complete preview frame. */
27
29
  _previewFrameOwner;
28
30
  _presented;
29
31
  _finishedImage;
32
+ _motion;
30
33
  _unsubscribe;
31
34
  constructor(engine, options = {}) {
32
35
  this.engine = engine;
@@ -78,7 +81,7 @@ export default class RenderLoop {
78
81
  _assertAlive() { if (this._disposed)
79
82
  throw new Error('RenderLoop is disposed.'); }
80
83
  /** Whether an explicit integration or consecutive edits indicate motion. Default false. */ get changing() { return this._changing; }
81
- /** Complete final samples; preview sampling is excluded. Default 0. */ get samples() { return this.status === 'previewing' ? 0 : this.final.samples; }
84
+ /** Complete final beauty samples; preview and AOV-only sampling are excluded. Default 0. */ get samples() { return this.status === 'previewing' ? 0 : this.final.samples; }
82
85
  /** Current presented/execution state. Default preparing. */ get status() { return this._status; }
83
86
  /** Subscribes to status transitions or complete final samples; returns unsubscribe. */
84
87
  on(event, listener) { return this._events.on(event, listener); }
@@ -112,14 +115,22 @@ export default class RenderLoop {
112
115
  return this._tick();
113
116
  }
114
117
  _tick() {
118
+ this._cancelRefill();
119
+ const refillGeneration = this._refillGeneration;
115
120
  if (this._busy || (typeof document !== 'undefined' && document.hidden))
116
121
  return this.status;
117
122
  for (const sync of this._syncs)
118
123
  sync.update();
124
+ const aov = aovChannel(this.display.channel);
125
+ const refine = (render) => render.refine(aov, {
126
+ batchSamples: render.batchSamples && !this.changing && render !== this.preview,
127
+ targetBatchTimeMs: 4,
128
+ });
129
+ const samples = (render) => aov ? render.aovSamplesRendered : render.samples;
119
130
  const owner = this._previewFrameOwner;
120
- const pendingPreview = !!owner && (owner === this.preview || !owner._complete);
121
- const tracingPreview = pendingPreview && this.preview?.status === 'converging' && this.preview.samples === 0;
122
- const holding = tracingPreview || (this.coalesceSceneUpdates && pendingPreview && !!this.preview?.denoising);
131
+ const pendingPreview = !!owner && (owner === this.preview || !owner._completeFor(this.display.channel));
132
+ const tracingPreview = pendingPreview && this.preview?.status === 'converging' && samples(this.preview) === 0;
133
+ const holding = tracingPreview || (!aov && this.coalesceSceneUpdates && pendingPreview && !!this.preview?.denoising);
123
134
  // Inference belongs to a presentation, not merely to a background render.
124
135
  // A fallback result must never replace an already available final image.
125
136
  if (pendingPreview && !holding && this.preview)
@@ -135,7 +146,7 @@ export default class RenderLoop {
135
146
  // Finish this image against its committed camera while syncs collect the
136
147
  // latest input. Restarting its first tile on every edit starves presentation.
137
148
  if (tracingPreview) {
138
- const status = this.preview.refine();
149
+ const status = refine(this.preview);
139
150
  if (status === 'error') {
140
151
  this._previewFrameOwner = undefined;
141
152
  return this._setStatus('error');
@@ -146,28 +157,95 @@ export default class RenderLoop {
146
157
  return this._setStatus('previewing');
147
158
  }
148
159
  const current = selected === 'preview' && this.preview ? this.preview : this.final;
160
+ const idle = !changed && !this.changing;
161
+ if (aov !== 'motion')
162
+ this._motion = undefined;
163
+ else if (this._motion?.render !== current) {
164
+ // Targets have independent histories. Prime every target switch, even
165
+ // when a final small camera edit coincides with leaving preview.
166
+ this._motion = { render: current, phase: this._motion ? 'priming' : 'moving' };
167
+ }
168
+ else if ((!idle && this._motion.phase !== 'priming') || (!current._completeFor('motion') && this._motion.phase === 'settled')) {
169
+ this._motion.phase = 'moving';
170
+ }
171
+ const motion = this._motion;
149
172
  const imageState = loopImageState(this.final, this.display);
150
- if (!changed && !this.changing && current === this.final && this.status === 'finished' && this.final.status === 'finished' && imageState === this._finishedImage)
173
+ if (idle && current === this.final && this.status === 'finished' && this.final.status === 'finished' && imageState === this._finishedImage && (!motion || motion.phase === 'settled'))
151
174
  return this.status;
152
175
  // Invalidate a completed filter before refinement when display settings changed.
153
176
  if (this.status === 'finished' && imageState !== this._finishedImage && this.final.samples > 0)
154
177
  this._present(this.final);
155
- const status = current.refine();
178
+ // Motion describes successive images. One unchanged image retires the last
179
+ // displacement; afterwards leave the finished target idle as usual.
180
+ if (motion?.phase === 'moving' && idle && current._completeFor('motion')) {
181
+ current._restartAovs();
182
+ motion.phase = 'settling';
183
+ }
184
+ let status = refine(current);
185
+ if (motion?.phase === 'priming' && status === 'finished') {
186
+ current._restartAovs();
187
+ motion.phase = 'settling';
188
+ status = refine(current);
189
+ }
190
+ if (motion?.phase === 'settling' && status === 'finished')
191
+ motion.phase = 'settled';
156
192
  // Keep the canvas on the last completed image while filtering the next
157
193
  // preview; presenting its raw sample here would overwrite the denoise above.
158
- const waitingForPreview = !!this.preview && ((current === this.preview && status === 'converging' && current.samples === 0) || (this.coalesceSceneUpdates && this.preview.denoising)) &&
159
- (current === this.preview || (!current._complete && current.fallback === this.preview));
194
+ const waitingForPreview = !!this.preview && ((current === this.preview && status === 'converging' && samples(current) === 0) || (!aov && this.coalesceSceneUpdates && this.preview.denoising)) &&
195
+ (current === this.preview || (!current._completeFor(this.display.channel) && current.fallback === this.preview));
160
196
  if (waitingForPreview)
161
197
  this._previewFrameOwner = current;
162
198
  else
163
199
  this._present(current);
164
200
  // Execution may already be tracing final tiles while the canvas still shows
165
201
  // preview. Only a successful presentation transfers ownership of the image.
166
- const previewing = waitingForPreview || (current === this.preview && current.denoising) || (!!this.preview && this._presented === this.preview);
202
+ const previewing = waitingForPreview || (!aov && current === this.preview && current.denoising) || (!!this.preview && this._presented === this.preview);
167
203
  const next = status === 'error' ? 'error' : previewing ? 'previewing' : status;
168
204
  this._finishedImage = next === 'finished' ? loopImageState(this.final, this.display) : undefined;
205
+ if (refillGeneration === this._refillGeneration && !aov && idle && current === this.final && !previewing)
206
+ this._scheduleRefill();
169
207
  return this._setStatus(next);
170
208
  }
209
+ _cancelRefill() {
210
+ this._refillGeneration++;
211
+ this._cancelRefillFrame?.();
212
+ this._cancelRefillFrame = undefined;
213
+ }
214
+ _scheduleRefill() {
215
+ const device = this.engine.device;
216
+ if (!device || !this._canRefill())
217
+ return;
218
+ const generation = this._refillGeneration;
219
+ // A manual tick grants work only until the next display frame. If the host
220
+ // stops ticking (pause/export), it cannot leave a background render running.
221
+ this._cancelRefillFrame = scheduleFrame(() => this._cancelRefill());
222
+ const refill = () => {
223
+ if (generation !== this._refillGeneration || device !== this.engine.device ||
224
+ this._disposed || this._busy || (typeof document !== 'undefined' && document.hidden) ||
225
+ aovChannel(this.display.channel) ||
226
+ !this._canRefill() || [...this._syncs].some(sync => sync.active) ||
227
+ this.select({ changing: false }) !== 'final')
228
+ return;
229
+ const before = this.final.samples;
230
+ const status = this.final.refine(undefined, { targetBatchTimeMs: 4, deferResolve: true });
231
+ if (status === 'error') {
232
+ this._cancelRefill();
233
+ this._setStatus('error');
234
+ return;
235
+ }
236
+ if (this.final.samples > before && status === 'converging')
237
+ wait();
238
+ };
239
+ const wait = () => { void this.final.whenReadyToRefine().then(refill, () => { }); };
240
+ // Keep only a short chunk ahead of input. GPU completion, rather than the
241
+ // display refresh rate, paces the next chunk; presentation stays on rAF.
242
+ wait();
243
+ }
244
+ _canRefill() {
245
+ const time = this.final.gpuSampleTimeMs;
246
+ return this.final.batchSamples && !this.final.denoising && this.final.samples > 0 &&
247
+ this.final.status === 'converging' && time !== undefined && time <= this.final.timeBudgetMs;
248
+ }
171
249
  _schedule() {
172
250
  if (!this._running || this._busy || this._cancelScheduled !== undefined || (typeof document !== 'undefined' && document.hidden))
173
251
  return;
@@ -179,14 +257,16 @@ export default class RenderLoop {
179
257
  } });
180
258
  }
181
259
  _visibility = () => {
182
- if (document.hidden)
260
+ if (document.hidden) {
183
261
  this._cancelFrame();
262
+ this._cancelRefill();
263
+ }
184
264
  else
185
265
  this._schedule();
186
266
  };
187
267
  _cancelFrame() { this._cancelScheduled?.(); this._cancelScheduled = undefined; }
188
268
  /** Starts an idempotent loop; uses a 16 ms timer without rAF. Hidden pages pause automatically. */ start() { this._assertAlive(); this._running = true; this._schedule(); }
189
- /** Stops scheduling without discarding accumulated images. */ stop() { this._running = false; this._cancelFrame(); }
269
+ /** Stops scheduling without discarding accumulated images. */ stop() { this._running = false; this._cancelFrame(); this._cancelRefill(); }
190
270
  /** Pauses ticks, converges final, presents it, and resumes a previously running loop. */
191
271
  async converge(options) {
192
272
  this._assertAlive();
@@ -195,6 +275,7 @@ export default class RenderLoop {
195
275
  this._busy = true;
196
276
  this._previewFrameOwner = undefined;
197
277
  this._cancelFrame();
278
+ this._cancelRefill();
198
279
  try {
199
280
  for (const sync of this._syncs)
200
281
  sync.update();
@@ -1 +1 @@
1
- {"version":3,"file":"RenderLoop.js","sourceRoot":"","sources":["../src/RenderLoop.ts"],"names":[],"mappings":"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","sourcesContent":["import {scheduleFrame} from './util/frame.js';\nimport type Engine from './Engine.js';\nimport type Display from './Display.js';\nimport Render, { type RenderOptions, type RenderStatus, type ConvergeOptions, type ConvergeResult, type SampleEvent } from './Render.js';\nimport type Sync from './Sync.js';\nimport { Events } from './util/events.js';\nimport { updateProgressiveState, loopImageState, type ProgressiveState } from './renderer/progressiveScheduler.js';\n\n/** Presentation state; preview images never count as final completion. */\nexport type RenderLoopStatus = RenderStatus | 'previewing';\nexport interface RenderLoopOptions {\n /** Presentation settings/canvas. Default engine.display. */ display?: Display;\n /** Preview render/settings, or false to disable. Default half resolution with adaptive scale .125–.5, 80 ms budget, 2 bounces, no bevel, 1 wavelength and 2 light candidates. */ preview?: Render | RenderOptions | false;\n /** Final render/settings. Default a new Render with preview as fallback. */ final?: Render | RenderOptions;\n /** External integrations, invoked in order. Default none. */ sync?: Sync | Sync[];\n /** Idle delay for consecutive edits without explicit sync activity. Default 150 ms. */ idleMs?: number;\n /** Hold preview inference before committing the latest camera/scene. Default false. */ coalesceSceneUpdates?: boolean;\n}\ninterface LoopEvents {\n status: {status: RenderLoopStatus; previous: RenderLoopStatus};\n sample: SampleEvent & {preview: false};\n}\n\n/** Built-in interactive policy implemented entirely through the first-layer API. */\nexport default class RenderLoop {\n readonly preview: Render | undefined;\n readonly final: Render;\n readonly display: Display;\n /** Selection policy. Default changing ? preview : final; absent previews select final. */\n select: (info: {changing: boolean}) => 'preview' | 'final' = ({changing}) => changing ? 'preview' : 'final';\n /** Heuristic idle delay. Default 150 ms. */ idleMs: number;\n /** Defer engine commits while preview inference is pending. Default false. */ coalesceSceneUpdates: boolean;\n private _changing = false;\n private _status: RenderLoopStatus = 'preparing';\n private _events = new Events<LoopEvents>();\n private _syncs = new Set<Sync>();\n private _owned = new Set<Render>();\n private _policy: ProgressiveState = {previousChanged: false, lastContinuousChange: -Infinity, changing: false};\n private _running = false;\n private _busy = false;\n private _disposed = false;\n private _cancelScheduled?: () => void;\n private _warnedTick = false;\n /** Render whose next presentation is waiting for a complete preview frame. */\n private _previewFrameOwner?: Render;\n private _presented?: Render;\n private _finishedImage?: string;\n private _unsubscribe: () => void;\n constructor(readonly engine: Engine, options: RenderLoopOptions = {}) {\n // Validate foreign objects before allocating owned resources.\n const syncs = options.sync ? (Array.isArray(options.sync) ? options.sync : [options.sync]) : [];\n for (const sync of syncs) this._checkEngine(sync.engine);\n for (const render of [options.preview, options.final]) if (render instanceof Render) this._checkEngine(render.engine);\n this.display = options.display ?? engine.display;\n this.idleMs = options.idleMs ?? 150;\n this.coalesceSceneUpdates = options.coalesceSceneUpdates ?? false;\n try {\n if (options.preview !== false) this.preview = this._render(options.preview, {\n resolutionScale: .5, timeBudgetMs: 80, adaptiveResolution: {targetFrameMs: 80, minScale: .125},\n bounces: 2, bevel: false, dispersionWavelengths: 1, directLightCandidates: 2,\n });\n this.final = this._render(options.final, {fallback: this.preview ?? null});\n } catch (error) {for (const render of this._owned) render.dispose(); throw error;}\n for (const sync of syncs) this.addSync(sync);\n this._unsubscribe = this.final.on('sample', event => this._events.emit('sample', {...event, preview: false}));\n if (typeof document !== 'undefined') document.addEventListener('visibilitychange', this._visibility);\n }\n private _render(value: Render | RenderOptions | undefined, defaults: RenderOptions): Render {\n if (value instanceof Render) return value;\n const settings = {...defaults, ...value};\n if (value && 'width' in value) {\n if (!('resolutionScale' in value)) delete settings.resolutionScale;\n if (!('adaptiveResolution' in value)) delete settings.adaptiveResolution;\n }\n const render = new Render(this.engine, settings as RenderOptions); this._owned.add(render); return render;\n }\n private _checkEngine(engine: Engine): void { if (engine !== this.engine) throw new Error('RenderLoop renders and syncs must belong to the same engine.'); }\n private _assertAlive(): void { if (this._disposed) throw new Error('RenderLoop is disposed.'); }\n /** Whether an explicit integration or consecutive edits indicate motion. Default false. */ get changing(): boolean { return this._changing; }\n /** Complete final samples; preview sampling is excluded. Default 0. */ get samples(): number { return this.status === 'previewing' ? 0 : this.final.samples; }\n /** Current presented/execution state. Default preparing. */ get status(): RenderLoopStatus { return this._status; }\n /** Subscribes to status transitions or complete final samples; returns unsubscribe. */\n on<K extends keyof LoopEvents>(event: K, listener: (value: LoopEvents[K]) => void): () => void { return this._events.on(event, listener); }\n /** Adds an integration on this engine. Duplicate registrations are ignored. */\n addSync(sync: Sync): void { this._assertAlive(); this._checkEngine(sync.engine); this._syncs.add(sync); }\n /** Removes an integration without disposing it. */ removeSync(sync: Sync): void { this._syncs.delete(sync); }\n private _setStatus(status: RenderLoopStatus): RenderLoopStatus {\n if (status !== this._status) { const previous = this._status; this._status = status; this._events.emit('status', {status, previous}); }\n return status;\n }\n private _present(render: Render): Render | undefined {\n const shown = this.display.present(render);\n if (shown) this._presented = shown;\n return shown;\n }\n /** Executes one manual tick. Calls during start are ignored with one warning. */\n tick(): RenderLoopStatus {\n this._assertAlive();\n if (this._running) { if (!this._warnedTick) {this._warnedTick = true; console.warn('RenderLoop.tick() is ignored while start() is active.');} return this.status; }\n return this._tick();\n }\n private _tick(): RenderLoopStatus {\n if (this._busy || (typeof document !== 'undefined' && document.hidden)) return this.status;\n for (const sync of this._syncs) sync.update();\n const owner = this._previewFrameOwner;\n const pendingPreview = !!owner && (owner === this.preview || !owner._complete);\n const tracingPreview = pendingPreview && this.preview?.status === 'converging' && this.preview.samples === 0;\n const holding = tracingPreview || (this.coalesceSceneUpdates && pendingPreview && !!this.preview?.denoising);\n // Inference belongs to a presentation, not merely to a background render.\n // A fallback result must never replace an already available final image.\n if (pendingPreview && !holding && this.preview) this._present(this.preview);\n if (!holding) this._previewFrameOwner = undefined;\n const changed = holding ? false : this.engine.update();\n const active = [...this._syncs].some(sync => sync.active);\n this._policy = updateProgressiveState(this._policy, changed, active, performance.now(), this.idleMs);\n this._changing = this._policy.changing;\n const selected = this.select({changing: this.changing});\n if (holding && this.preview) {\n // Finish this image against its committed camera while syncs collect the\n // latest input. Restarting its first tile on every edit starves presentation.\n if (tracingPreview) {\n const status = this.preview.refine();\n if (status === 'error') { this._previewFrameOwner = undefined; return this._setStatus('error'); }\n if ((!this.coalesceSceneUpdates || !this.preview.denoising) && this._present(this.preview)) this._previewFrameOwner = undefined;\n }\n return this._setStatus('previewing');\n }\n const current = selected === 'preview' && this.preview ? this.preview : this.final;\n const imageState = loopImageState(this.final, this.display);\n if (!changed && !this.changing && current === this.final && this.status === 'finished' && this.final.status === 'finished' && imageState === this._finishedImage) return this.status;\n // Invalidate a completed filter before refinement when display settings changed.\n if (this.status === 'finished' && imageState !== this._finishedImage && this.final.samples > 0) this._present(this.final);\n const status = current.refine();\n // Keep the canvas on the last completed image while filtering the next\n // preview; presenting its raw sample here would overwrite the denoise above.\n const waitingForPreview = !!this.preview && ((current === this.preview && status === 'converging' && current.samples === 0) || (this.coalesceSceneUpdates && this.preview.denoising)) &&\n (current === this.preview || (!current._complete && current.fallback === this.preview));\n if (waitingForPreview) this._previewFrameOwner = current;\n else this._present(current);\n // Execution may already be tracing final tiles while the canvas still shows\n // preview. Only a successful presentation transfers ownership of the image.\n const previewing = waitingForPreview || (current === this.preview && current.denoising) || (!!this.preview && this._presented === this.preview);\n const next = status === 'error' ? 'error' : previewing ? 'previewing' : status;\n this._finishedImage = next === 'finished' ? loopImageState(this.final, this.display) : undefined;\n return this._setStatus(next);\n }\n private _schedule(): void {\n if (!this._running || this._busy || this._cancelScheduled !== undefined || (typeof document !== 'undefined' && document.hidden)) return;\n this._cancelScheduled = scheduleFrame(() => { this._cancelScheduled = undefined; try {this._tick();} finally {this._schedule();} });\n }\n private _visibility = (): void => {\n if (document.hidden) this._cancelFrame(); else this._schedule();\n };\n private _cancelFrame(): void { this._cancelScheduled?.(); this._cancelScheduled = undefined; }\n /** Starts an idempotent loop; uses a 16 ms timer without rAF. Hidden pages pause automatically. */ start(): void { this._assertAlive(); this._running = true; this._schedule(); }\n /** Stops scheduling without discarding accumulated images. */ stop(): void { this._running = false; this._cancelFrame(); }\n /** Pauses ticks, converges final, presents it, and resumes a previously running loop. */\n async converge(options: ConvergeOptions): Promise<ConvergeResult> {\n this._assertAlive(); if (this._busy) throw new Error('RenderLoop convergence is already running.');\n this._busy = true; this._previewFrameOwner = undefined; this._cancelFrame();\n try {\n for (const sync of this._syncs) sync.update(); this.engine.update();\n this._setStatus('preparing');\n const result = await this.final.converge({...options, onProgress: progress => {\n this._setStatus(progress.stage === 'denoising' ? 'denoising' : this.final.status);\n options.onProgress?.(progress);\n }});\n this._present(this.final); this._setStatus('finished'); return result;\n } catch (error) {this._setStatus('error'); throw error;}\n finally {this._busy = false; this._schedule();}\n }\n /** Stops the loop and releases renders it created. Supplied renders/syncs remain owned by the caller. */\n dispose(): void {\n if (this._disposed) return;\n this.stop(); this._disposed = true; this._unsubscribe(); this._events.clear(); this._syncs.clear();\n if (typeof document !== 'undefined') document.removeEventListener('visibilitychange', this._visibility);\n for (const render of this._owned) render.dispose(); this._owned.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"RenderLoop.js","sourceRoot":"","sources":["../src/RenderLoop.ts"],"names":[],"mappings":"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","sourcesContent":["import {scheduleFrame} from './util/frame.js';\nimport type Engine from './Engine.js';\nimport type Display from './Display.js';\nimport Render, { type RenderOptions, type RenderStatus, type ConvergeOptions, type ConvergeResult, type SampleEvent } from './Render.js';\nimport type Sync from './Sync.js';\nimport { Events } from './util/events.js';\nimport { aovChannel, updateProgressiveState, loopImageState, type ProgressiveState } from './renderer/progressiveScheduler.js';\n\n/** Presentation state; preview images never count as final completion. */\nexport type RenderLoopStatus = RenderStatus | 'previewing';\nexport interface RenderLoopOptions {\n /** Presentation settings/canvas. Default engine.display. */ display?: Display;\n /** Preview render/settings, or false to disable. Default half resolution with adaptive scale .125–.5, 80 ms budget, 2 bounces, no bevel, 1 wavelength and 2 light candidates. */ preview?: Render | RenderOptions | false;\n /** Final render/settings. Default a new Render with preview as fallback. */ final?: Render | RenderOptions;\n /** External integrations, invoked in order. Default none. */ sync?: Sync | Sync[];\n /** Idle delay for consecutive edits without explicit sync activity. Default 150 ms. */ idleMs?: number;\n /** Hold preview inference before committing the latest camera/scene. Default false. */ coalesceSceneUpdates?: boolean;\n}\ninterface LoopEvents {\n status: {status: RenderLoopStatus; previous: RenderLoopStatus};\n sample: SampleEvent & {preview: false};\n}\n\n/** Built-in interactive policy implemented entirely through the first-layer API. */\nexport default class RenderLoop {\n readonly preview: Render | undefined;\n readonly final: Render;\n readonly display: Display;\n /** Selection policy. Default changing ? preview : final; absent previews select final. */\n select: (info: {changing: boolean}) => 'preview' | 'final' = ({changing}) => changing ? 'preview' : 'final';\n /** Heuristic idle delay. Default 150 ms. */ idleMs: number;\n /** Defer engine commits while preview inference is pending. Default false. */ coalesceSceneUpdates: boolean;\n private _changing = false;\n private _status: RenderLoopStatus = 'preparing';\n private _events = new Events<LoopEvents>();\n private _syncs = new Set<Sync>();\n private _owned = new Set<Render>();\n private _policy: ProgressiveState = {previousChanged: false, lastContinuousChange: -Infinity, changing: false};\n private _running = false;\n private _busy = false;\n private _disposed = false;\n private _cancelScheduled?: () => void;\n private _refillGeneration = 0;\n private _cancelRefillFrame?: () => void;\n private _warnedTick = false;\n /** Render whose next presentation is waiting for a complete preview frame. */\n private _previewFrameOwner?: Render;\n private _presented?: Render;\n private _finishedImage?: string;\n private _motion?: {render: Render; phase: 'moving' | 'priming' | 'settling' | 'settled'};\n private _unsubscribe: () => void;\n constructor(readonly engine: Engine, options: RenderLoopOptions = {}) {\n // Validate foreign objects before allocating owned resources.\n const syncs = options.sync ? (Array.isArray(options.sync) ? options.sync : [options.sync]) : [];\n for (const sync of syncs) this._checkEngine(sync.engine);\n for (const render of [options.preview, options.final]) if (render instanceof Render) this._checkEngine(render.engine);\n this.display = options.display ?? engine.display;\n this.idleMs = options.idleMs ?? 150;\n this.coalesceSceneUpdates = options.coalesceSceneUpdates ?? false;\n try {\n if (options.preview !== false) this.preview = this._render(options.preview, {\n resolutionScale: .5, timeBudgetMs: 80, adaptiveResolution: {targetFrameMs: 80, minScale: .125},\n bounces: 2, bevel: false, dispersionWavelengths: 1, directLightCandidates: 2,\n });\n this.final = this._render(options.final, {fallback: this.preview ?? null});\n } catch (error) {for (const render of this._owned) render.dispose(); throw error;}\n for (const sync of syncs) this.addSync(sync);\n this._unsubscribe = this.final.on('sample', event => this._events.emit('sample', {...event, preview: false}));\n if (typeof document !== 'undefined') document.addEventListener('visibilitychange', this._visibility);\n }\n private _render(value: Render | RenderOptions | undefined, defaults: RenderOptions): Render {\n if (value instanceof Render) return value;\n const settings = {...defaults, ...value};\n if (value && 'width' in value) {\n if (!('resolutionScale' in value)) delete settings.resolutionScale;\n if (!('adaptiveResolution' in value)) delete settings.adaptiveResolution;\n }\n const render = new Render(this.engine, settings as RenderOptions); this._owned.add(render); return render;\n }\n private _checkEngine(engine: Engine): void { if (engine !== this.engine) throw new Error('RenderLoop renders and syncs must belong to the same engine.'); }\n private _assertAlive(): void { if (this._disposed) throw new Error('RenderLoop is disposed.'); }\n /** Whether an explicit integration or consecutive edits indicate motion. Default false. */ get changing(): boolean { return this._changing; }\n /** Complete final beauty samples; preview and AOV-only sampling are excluded. Default 0. */ get samples(): number { return this.status === 'previewing' ? 0 : this.final.samples; }\n /** Current presented/execution state. Default preparing. */ get status(): RenderLoopStatus { return this._status; }\n /** Subscribes to status transitions or complete final samples; returns unsubscribe. */\n on<K extends keyof LoopEvents>(event: K, listener: (value: LoopEvents[K]) => void): () => void { return this._events.on(event, listener); }\n /** Adds an integration on this engine. Duplicate registrations are ignored. */\n addSync(sync: Sync): void { this._assertAlive(); this._checkEngine(sync.engine); this._syncs.add(sync); }\n /** Removes an integration without disposing it. */ removeSync(sync: Sync): void { this._syncs.delete(sync); }\n private _setStatus(status: RenderLoopStatus): RenderLoopStatus {\n if (status !== this._status) { const previous = this._status; this._status = status; this._events.emit('status', {status, previous}); }\n return status;\n }\n private _present(render: Render): Render | undefined {\n const shown = this.display.present(render);\n if (shown) this._presented = shown;\n return shown;\n }\n /** Executes one manual tick. Calls during start are ignored with one warning. */\n tick(): RenderLoopStatus {\n this._assertAlive();\n if (this._running) { if (!this._warnedTick) {this._warnedTick = true; console.warn('RenderLoop.tick() is ignored while start() is active.');} return this.status; }\n return this._tick();\n }\n private _tick(): RenderLoopStatus {\n this._cancelRefill();\n const refillGeneration = this._refillGeneration;\n if (this._busy || (typeof document !== 'undefined' && document.hidden)) return this.status;\n for (const sync of this._syncs) sync.update();\n const aov = aovChannel(this.display.channel);\n const refine = (render: Render) => render.refine(aov, {\n batchSamples: render.batchSamples && !this.changing && render !== this.preview,\n targetBatchTimeMs: 4,\n });\n const samples = (render: Render) => aov ? render.aovSamplesRendered : render.samples;\n const owner = this._previewFrameOwner;\n const pendingPreview = !!owner && (owner === this.preview || !owner._completeFor(this.display.channel));\n const tracingPreview = pendingPreview && this.preview?.status === 'converging' && samples(this.preview) === 0;\n const holding = tracingPreview || (!aov && this.coalesceSceneUpdates && pendingPreview && !!this.preview?.denoising);\n // Inference belongs to a presentation, not merely to a background render.\n // A fallback result must never replace an already available final image.\n if (pendingPreview && !holding && this.preview) this._present(this.preview);\n if (!holding) this._previewFrameOwner = undefined;\n const changed = holding ? false : this.engine.update();\n const active = [...this._syncs].some(sync => sync.active);\n this._policy = updateProgressiveState(this._policy, changed, active, performance.now(), this.idleMs);\n this._changing = this._policy.changing;\n const selected = this.select({changing: this.changing});\n if (holding && this.preview) {\n // Finish this image against its committed camera while syncs collect the\n // latest input. Restarting its first tile on every edit starves presentation.\n if (tracingPreview) {\n const status = refine(this.preview);\n if (status === 'error') { this._previewFrameOwner = undefined; return this._setStatus('error'); }\n if ((!this.coalesceSceneUpdates || !this.preview.denoising) && this._present(this.preview)) this._previewFrameOwner = undefined;\n }\n return this._setStatus('previewing');\n }\n const current = selected === 'preview' && this.preview ? this.preview : this.final;\n const idle = !changed && !this.changing;\n if (aov !== 'motion') this._motion = undefined;\n else if (this._motion?.render !== current) {\n // Targets have independent histories. Prime every target switch, even\n // when a final small camera edit coincides with leaving preview.\n this._motion = {render: current, phase: this._motion ? 'priming' : 'moving'};\n } else if ((!idle && this._motion.phase !== 'priming') || (!current._completeFor('motion') && this._motion.phase === 'settled')) {\n this._motion.phase = 'moving';\n }\n const motion = this._motion;\n const imageState = loopImageState(this.final, this.display);\n if (idle && current === this.final && this.status === 'finished' && this.final.status === 'finished' && imageState === this._finishedImage && (!motion || motion.phase === 'settled')) return this.status;\n // Invalidate a completed filter before refinement when display settings changed.\n if (this.status === 'finished' && imageState !== this._finishedImage && this.final.samples > 0) this._present(this.final);\n // Motion describes successive images. One unchanged image retires the last\n // displacement; afterwards leave the finished target idle as usual.\n if (motion?.phase === 'moving' && idle && current._completeFor('motion')) {\n current._restartAovs(); motion.phase = 'settling';\n }\n let status = refine(current);\n if (motion?.phase === 'priming' && status === 'finished') {\n current._restartAovs(); motion.phase = 'settling'; status = refine(current);\n }\n if (motion?.phase === 'settling' && status === 'finished') motion.phase = 'settled';\n // Keep the canvas on the last completed image while filtering the next\n // preview; presenting its raw sample here would overwrite the denoise above.\n const waitingForPreview = !!this.preview && ((current === this.preview && status === 'converging' && samples(current) === 0) || (!aov && this.coalesceSceneUpdates && this.preview.denoising)) &&\n (current === this.preview || (!current._completeFor(this.display.channel) && current.fallback === this.preview));\n if (waitingForPreview) this._previewFrameOwner = current;\n else this._present(current);\n // Execution may already be tracing final tiles while the canvas still shows\n // preview. Only a successful presentation transfers ownership of the image.\n const previewing = waitingForPreview || (!aov && current === this.preview && current.denoising) || (!!this.preview && this._presented === this.preview);\n const next = status === 'error' ? 'error' : previewing ? 'previewing' : status;\n this._finishedImage = next === 'finished' ? loopImageState(this.final, this.display) : undefined;\n if (refillGeneration === this._refillGeneration && !aov && idle && current === this.final && !previewing) this._scheduleRefill();\n return this._setStatus(next);\n }\n private _cancelRefill(): void {\n this._refillGeneration++;\n this._cancelRefillFrame?.(); this._cancelRefillFrame = undefined;\n }\n private _scheduleRefill(): void {\n const device = this.engine.device;\n if (!device || !this._canRefill()) return;\n const generation = this._refillGeneration;\n // A manual tick grants work only until the next display frame. If the host\n // stops ticking (pause/export), it cannot leave a background render running.\n this._cancelRefillFrame = scheduleFrame(() => this._cancelRefill());\n const refill = () => {\n if (generation !== this._refillGeneration || device !== this.engine.device ||\n this._disposed || this._busy || (typeof document !== 'undefined' && document.hidden) ||\n aovChannel(this.display.channel) ||\n !this._canRefill() || [...this._syncs].some(sync => sync.active) ||\n this.select({changing: false}) !== 'final') return;\n const before = this.final.samples;\n const status = this.final.refine(undefined, {targetBatchTimeMs: 4, deferResolve: true});\n if (status === 'error') {this._cancelRefill(); this._setStatus('error'); return;}\n if (this.final.samples > before && status === 'converging') wait();\n };\n const wait = () => {void this.final.whenReadyToRefine().then(refill, () => {});};\n // Keep only a short chunk ahead of input. GPU completion, rather than the\n // display refresh rate, paces the next chunk; presentation stays on rAF.\n wait();\n }\n private _canRefill(): boolean {\n const time = this.final.gpuSampleTimeMs;\n return this.final.batchSamples && !this.final.denoising && this.final.samples > 0 &&\n this.final.status === 'converging' && time !== undefined && time <= this.final.timeBudgetMs;\n }\n private _schedule(): void {\n if (!this._running || this._busy || this._cancelScheduled !== undefined || (typeof document !== 'undefined' && document.hidden)) return;\n this._cancelScheduled = scheduleFrame(() => { this._cancelScheduled = undefined; try {this._tick();} finally {this._schedule();} });\n }\n private _visibility = (): void => {\n if (document.hidden) {this._cancelFrame(); this._cancelRefill();} else this._schedule();\n };\n private _cancelFrame(): void { this._cancelScheduled?.(); this._cancelScheduled = undefined; }\n /** Starts an idempotent loop; uses a 16 ms timer without rAF. Hidden pages pause automatically. */ start(): void { this._assertAlive(); this._running = true; this._schedule(); }\n /** Stops scheduling without discarding accumulated images. */ stop(): void { this._running = false; this._cancelFrame(); this._cancelRefill(); }\n /** Pauses ticks, converges final, presents it, and resumes a previously running loop. */\n async converge(options: ConvergeOptions): Promise<ConvergeResult> {\n this._assertAlive(); if (this._busy) throw new Error('RenderLoop convergence is already running.');\n this._busy = true; this._previewFrameOwner = undefined; this._cancelFrame(); this._cancelRefill();\n try {\n for (const sync of this._syncs) sync.update(); this.engine.update();\n this._setStatus('preparing');\n const result = await this.final.converge({...options, onProgress: progress => {\n this._setStatus(progress.stage === 'denoising' ? 'denoising' : this.final.status);\n options.onProgress?.(progress);\n }});\n this._present(this.final); this._setStatus('finished'); return result;\n } catch (error) {this._setStatus('error'); throw error;}\n finally {this._busy = false; this._schedule();}\n }\n /** Stops the loop and releases renders it created. Supplied renders/syncs remain owned by the caller. */\n dispose(): void {\n if (this._disposed) return;\n this.stop(); this._disposed = true; this._unsubscribe(); this._events.clear(); this._syncs.clear();\n if (typeof document !== 'undefined') document.removeEventListener('visibilitychange', this._visibility);\n for (const render of this._owned) render.dispose(); this._owned.clear();\n }\n}\n"]}
package/lib/main.d.ts CHANGED
@@ -15,7 +15,7 @@ export type { OfflineAdaptiveSamplingOptions, OfflineVarianceHistory } from './r
15
15
  export type { OIDNModel, OIDNEngine, OIDNPrecision, OIDNHDRTransfer, OIDNDynamicTileOptions, OIDNDynamicTileSetting, OIDNAuxiliaryModelUrls } from './oidn.js';
16
16
  export { DEFAULT_JNLM_OPTIONS } from './renderer/jnlm.js';
17
17
  export type { JNLMOptions } from './renderer/jnlm.js';
18
- export type { AnalyticLight, GroundedSkyboxBackground, Scene, SceneBackground, SceneLight } from './scene/Scene.js';
18
+ export type { AnalyticLight, EquirectBackground, GroundedSkyboxBackground, Scene, SceneBackground, SceneLight } from './scene/Scene.js';
19
19
  export { default as Camera } from './scene/Camera.js';
20
20
  export { default as Mesh } from './scene/Mesh.js';
21
21
  export { default as InstancedMesh } from './scene/InstancedMesh.js';
@@ -26,6 +26,8 @@ export type { GeometryInit } from './scene/Geometry.js';
26
26
  export type { OpenPBRMaterialParams } from './scene/OpenPBRMaterial.js';
27
27
  export { default as OpenPBRMaterial } from './scene/OpenPBRMaterial.js';
28
28
  export type { MaterialAlphaMode, UVProjection } from './scene/OpenPBRMaterial.js';
29
+ export { default as ProceduralSky } from './scene/ProceduralSky.js';
30
+ export type { ProceduralSkyOptions } from './scene/ProceduralSky.js';
29
31
  export { default as Texture } from './scene/Texture.js';
30
32
  export type { TextureDataSource, TextureWrapMode, TextureColorSpace } from './scene/Texture.js';
31
33
  export type { ColorRGB, ColorRGBA, Vec2, Vec3, Mat4 } from './types.js';
@@ -47,10 +49,11 @@ export type { SamplingPattern } from './renderer/sampling.js';
47
49
  export { default as Engine } from './Engine.js';
48
50
  export type { EngineParams, EngineInfo, EngineDiagnostics, PrepareOptions, BVHBuilder, DepthSampleArea, TextureAtlasLimits } from './Engine.js';
49
51
  export { default as Display } from './Display.js';
50
- export type { BlobOptions, DisplayChannel, DisplaySettings, PostProcess, PostProcessContext } from './Display.js';
52
+ export type { BlobOptions, DisplayChannel, AovIdComponent, DisplaySettings, PostProcess, PostProcessContext } from './Display.js';
51
53
  export { default as Render } from './Render.js';
52
- export type { RenderOptions, RenderSettings, ConvergeOptions, ConvergeResult, DenoiserOptions, Denoiser, DenoiseInput, CustomDenoiserOptions, DenoiseSchedule, JNLMDenoiserOptions, OIDNDenoiserOptions, RenderStatus, SampleEvent } from './Render.js';
54
+ export type { RenderOptions, RenderSettings, RefineOptions, ConvergeOptions, ConvergeResult, DenoiserOptions, Denoiser, DenoiseInput, CustomDenoiserOptions, DenoiseSchedule, JNLMDenoiserOptions, OIDNDenoiserOptions, RenderStatus, SampleEvent } from './Render.js';
53
55
  export { default as Sync } from './Sync.js';
54
56
  export { default as RenderLoop } from './RenderLoop.js';
55
57
  export type { RenderLoopOptions, RenderLoopStatus } from './RenderLoop.js';
56
58
  export { getRecommendedDeviceDescriptor } from './renderer/deviceRequirements.js';
59
+ export type { AovKind } from './renderer/aov.js';
package/lib/main.js CHANGED
@@ -17,6 +17,7 @@ export { default as InstancedMesh } from './scene/InstancedMesh.js';
17
17
  export { default as SceneNode } from './scene/SceneNode.js';
18
18
  export { default as Geometry, Attribute as GeometryAttribute } from './scene/Geometry.js';
19
19
  export { default as OpenPBRMaterial } from './scene/OpenPBRMaterial.js';
20
+ export { default as ProceduralSky } from './scene/ProceduralSky.js';
20
21
  export { default as Texture } from './scene/Texture.js';
21
22
  // Lights
22
23
  export { default as AmbientLight } from './scene/AmbientLight.js';
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAYvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAW1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,OAAO,IAAI,QAAQ,EACnB,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIxD,SAAS;AACT,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EACL,OAAO,IAAI,UAAU,EACrB,aAAa,EACb,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,2BAA2B;AAC3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOjF,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAO1D,oCAAoC;AACpC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC","sourcesContent":["/// <reference types=\"@webgpu/types\" preserve=\"true\" />\n\n/**\n * MuTracer: a physically based WebGPU path tracer with a\n * WebGL 2 fallback.\n *\n * Build a {@link Scene} from {@link Mesh}es and lights (or convert a Three.js\n * scene with {@link fromTHREEScene}), then call {@link Engine.update} and {@link Render.refine} once\n * per animation frame.\n *\n * @packageDocumentation\n */\nexport { VERSION } from './version.js';\n\nexport type {\n AlphaBlendStrategy,\n ShaderCompilationDiagnostics,\n ToneMapping\n} from './renderer/RenderingPipeline.js';\nexport type {\n OfflineAdaptiveSamplingOptions,\n OfflineVarianceHistory\n} from './renderer/OfflineAdaptiveSampling.js';\nexport type { OIDNModel, OIDNEngine, OIDNPrecision, OIDNHDRTransfer, OIDNDynamicTileOptions, OIDNDynamicTileSetting, OIDNAuxiliaryModelUrls } from './oidn.js';\nexport { DEFAULT_JNLM_OPTIONS } from './renderer/jnlm.js';\nexport type { JNLMOptions } from './renderer/jnlm.js';\n\n// Scene description\nexport type {\n AnalyticLight,\n GroundedSkyboxBackground,\n Scene,\n SceneBackground,\n SceneLight\n} from './scene/Scene.js';\nexport { default as Camera } from './scene/Camera.js';\nexport { default as Mesh } from './scene/Mesh.js';\nexport { default as InstancedMesh } from './scene/InstancedMesh.js';\nexport type { InstancedMeshOptions } from './scene/InstancedMesh.js';\nexport { default as SceneNode } from './scene/SceneNode.js';\nexport {\n default as Geometry,\n Attribute as GeometryAttribute\n} from './scene/Geometry.js';\nexport type { GeometryInit } from './scene/Geometry.js';\nexport type { OpenPBRMaterialParams } from './scene/OpenPBRMaterial.js';\nexport { default as OpenPBRMaterial } from './scene/OpenPBRMaterial.js';\nexport type {\n MaterialAlphaMode,\n UVProjection\n} from './scene/OpenPBRMaterial.js';\nexport { default as Texture } from './scene/Texture.js';\nexport type { TextureDataSource, TextureWrapMode, TextureColorSpace } from './scene/Texture.js';\nexport type { ColorRGB, ColorRGBA, Vec2, Vec3, Mat4 } from './types.js';\n\n// Lights\nexport { default as AmbientLight } from './scene/AmbientLight.js';\nexport { default as DirectionalLight } from './scene/DirectionalLight.js';\nexport { default as RectLight } from './scene/RectLight.js';\nexport { default as SphereLight } from './scene/SphereLight.js';\nexport { default as SpotLight } from './scene/SpotLight.js';\nexport { default as EnvironmentLight } from './scene/EnvironmentLight.js';\nexport {\n default as IESProfile,\n IESParseError,\n parseIESProfile\n} from './scene/IESProfile.js';\n\n// Loaders and integrations\nexport { loadRGBE, parseRGBE } from './util/loadRGBE.js';\nexport { fromTHREECamera, fromTHREEScene, THREESync } from './util/fromTHREE.js';\nexport type {\n FromTHREESceneOptions,\n THREESyncOptions, THREEControls,\n FromTHREECameraOptions\n} from './util/fromTHREE.js';\n\n// Geometry helpers\nexport {\n createCubeGeometry,\n createCurvePlaneGeometry,\n createPlaneGeometry,\n createSphereGeometry\n} from './util/commonGeometry.js';\nexport {\n generateVertexNormals,\n generateVertexTangents\n} from './util/geometry.js';\nexport { computeMeshesBoundingBox } from './util/mesh.js';\n\n// BVH\nexport type { TinyBvhLayout } from './tinybvh/TinyBvhBuilder.js';\n\nexport type { SamplingPattern } from './renderer/sampling.js';\n\n// Independent rendering mechanisms.\nexport { default as Engine } from './Engine.js';\nexport type { EngineParams, EngineInfo, EngineDiagnostics, PrepareOptions, BVHBuilder, DepthSampleArea, TextureAtlasLimits } from './Engine.js';\nexport { default as Display } from './Display.js';\nexport type { BlobOptions, DisplayChannel, DisplaySettings, PostProcess, PostProcessContext } from './Display.js';\nexport { default as Render } from './Render.js';\nexport type { RenderOptions, RenderSettings, ConvergeOptions, ConvergeResult, DenoiserOptions, Denoiser, DenoiseInput, CustomDenoiserOptions, DenoiseSchedule, JNLMDenoiserOptions, OIDNDenoiserOptions, RenderStatus, SampleEvent } from './Render.js';\n\nexport { default as Sync } from './Sync.js';\nexport { default as RenderLoop } from './RenderLoop.js';\nexport type { RenderLoopOptions, RenderLoopStatus } from './RenderLoop.js';\n\nexport {getRecommendedDeviceDescriptor} from './renderer/deviceRequirements.js';\n"]}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAYvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAY1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,OAAO,IAAI,QAAQ,EACnB,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIxD,SAAS;AACT,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EACL,OAAO,IAAI,UAAU,EACrB,aAAa,EACb,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,2BAA2B;AAC3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOjF,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAO1D,oCAAoC;AACpC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC","sourcesContent":["/// <reference types=\"@webgpu/types\" preserve=\"true\" />\n\n/**\n * MuTracer: a physically based WebGPU path tracer with a\n * WebGL 2 fallback.\n *\n * Build a {@link Scene} from {@link Mesh}es and lights (or convert a Three.js\n * scene with {@link fromTHREEScene}), then call {@link Engine.update} and {@link Render.refine} once\n * per animation frame.\n *\n * @packageDocumentation\n */\nexport { VERSION } from './version.js';\n\nexport type {\n AlphaBlendStrategy,\n ShaderCompilationDiagnostics,\n ToneMapping\n} from './renderer/RenderingPipeline.js';\nexport type {\n OfflineAdaptiveSamplingOptions,\n OfflineVarianceHistory\n} from './renderer/OfflineAdaptiveSampling.js';\nexport type { OIDNModel, OIDNEngine, OIDNPrecision, OIDNHDRTransfer, OIDNDynamicTileOptions, OIDNDynamicTileSetting, OIDNAuxiliaryModelUrls } from './oidn.js';\nexport { DEFAULT_JNLM_OPTIONS } from './renderer/jnlm.js';\nexport type { JNLMOptions } from './renderer/jnlm.js';\n\n// Scene description\nexport type {\n AnalyticLight,\n EquirectBackground,\n GroundedSkyboxBackground,\n Scene,\n SceneBackground,\n SceneLight\n} from './scene/Scene.js';\nexport { default as Camera } from './scene/Camera.js';\nexport { default as Mesh } from './scene/Mesh.js';\nexport { default as InstancedMesh } from './scene/InstancedMesh.js';\nexport type { InstancedMeshOptions } from './scene/InstancedMesh.js';\nexport { default as SceneNode } from './scene/SceneNode.js';\nexport {\n default as Geometry,\n Attribute as GeometryAttribute\n} from './scene/Geometry.js';\nexport type { GeometryInit } from './scene/Geometry.js';\nexport type { OpenPBRMaterialParams } from './scene/OpenPBRMaterial.js';\nexport { default as OpenPBRMaterial } from './scene/OpenPBRMaterial.js';\nexport type {\n MaterialAlphaMode,\n UVProjection\n} from './scene/OpenPBRMaterial.js';\nexport { default as ProceduralSky } from './scene/ProceduralSky.js';\nexport type { ProceduralSkyOptions } from './scene/ProceduralSky.js';\nexport { default as Texture } from './scene/Texture.js';\nexport type { TextureDataSource, TextureWrapMode, TextureColorSpace } from './scene/Texture.js';\nexport type { ColorRGB, ColorRGBA, Vec2, Vec3, Mat4 } from './types.js';\n\n// Lights\nexport { default as AmbientLight } from './scene/AmbientLight.js';\nexport { default as DirectionalLight } from './scene/DirectionalLight.js';\nexport { default as RectLight } from './scene/RectLight.js';\nexport { default as SphereLight } from './scene/SphereLight.js';\nexport { default as SpotLight } from './scene/SpotLight.js';\nexport { default as EnvironmentLight } from './scene/EnvironmentLight.js';\nexport {\n default as IESProfile,\n IESParseError,\n parseIESProfile\n} from './scene/IESProfile.js';\n\n// Loaders and integrations\nexport { loadRGBE, parseRGBE } from './util/loadRGBE.js';\nexport { fromTHREECamera, fromTHREEScene, THREESync } from './util/fromTHREE.js';\nexport type {\n FromTHREESceneOptions,\n THREESyncOptions, THREEControls,\n FromTHREECameraOptions\n} from './util/fromTHREE.js';\n\n// Geometry helpers\nexport {\n createCubeGeometry,\n createCurvePlaneGeometry,\n createPlaneGeometry,\n createSphereGeometry\n} from './util/commonGeometry.js';\nexport {\n generateVertexNormals,\n generateVertexTangents\n} from './util/geometry.js';\nexport { computeMeshesBoundingBox } from './util/mesh.js';\n\n// BVH\nexport type { TinyBvhLayout } from './tinybvh/TinyBvhBuilder.js';\n\nexport type { SamplingPattern } from './renderer/sampling.js';\n\n// Independent rendering mechanisms.\nexport { default as Engine } from './Engine.js';\nexport type { EngineParams, EngineInfo, EngineDiagnostics, PrepareOptions, BVHBuilder, DepthSampleArea, TextureAtlasLimits } from './Engine.js';\nexport { default as Display } from './Display.js';\nexport type { BlobOptions, DisplayChannel, AovIdComponent, DisplaySettings, PostProcess, PostProcessContext } from './Display.js';\nexport { default as Render } from './Render.js';\nexport type { RenderOptions, RenderSettings, RefineOptions, ConvergeOptions, ConvergeResult, DenoiserOptions, Denoiser, DenoiseInput, CustomDenoiserOptions, DenoiseSchedule, JNLMDenoiserOptions, OIDNDenoiserOptions, RenderStatus, SampleEvent } from './Render.js';\n\nexport { default as Sync } from './Sync.js';\nexport { default as RenderLoop } from './RenderLoop.js';\nexport type { RenderLoopOptions, RenderLoopStatus } from './RenderLoop.js';\n\nexport {getRecommendedDeviceDescriptor} from './renderer/deviceRequirements.js';\n\nexport type {AovKind} from './renderer/aov.js';\n"]}
@@ -0,0 +1,4 @@
1
+ import type { MathArray, ReadonlyMathArray } from './types.js';
2
+ export declare function read(array: ReadonlyMathArray, index: number): number;
3
+ export declare function write(array: MathArray, index: number, value: number): void;
4
+ export declare function size(array: ReadonlyMathArray): number;
@@ -0,0 +1,10 @@
1
+ export function read(array, index) {
2
+ return array[index];
3
+ }
4
+ export function write(array, index, value) {
5
+ array[index] = value;
6
+ }
7
+ export function size(array) {
8
+ return array.length;
9
+ }
10
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/math/access.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,IAAI,CAAC,KAAwB,EAAE,KAAa;IAC1D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,KAAgB,EAAE,KAAa,EAAE,KAAa;IAClE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACvB,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,KAAwB;IAC3C,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC","sourcesContent":["import type { MathArray, ReadonlyMathArray } from './types.js';\n\nexport function read(array: ReadonlyMathArray, index: number): number {\n return array[index];\n}\nexport function write(array: MathArray, index: number, value: number): void {\n array[index] = value;\n}\nexport function size(array: ReadonlyMathArray): number {\n return array.length;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { MathArray, ReadonlyMathArray } from './types.js';
2
+ export declare function create(): Float32Array;
3
+ export declare function fromMat4<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0;
4
+ export declare function normalFromMat4<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0 | null;
@@ -0,0 +1,54 @@
1
+ export function create() {
2
+ var out = new Float32Array(9);
3
+ out[0] = 1;
4
+ out[4] = 1;
5
+ out[8] = 1;
6
+ return out;
7
+ }
8
+ export function fromMat4(out, a) {
9
+ out[0] = a[0];
10
+ out[1] = a[1];
11
+ out[2] = a[2];
12
+ out[3] = a[4];
13
+ out[4] = a[5];
14
+ out[5] = a[6];
15
+ out[6] = a[8];
16
+ out[7] = a[9];
17
+ out[8] = a[10];
18
+ return out;
19
+ }
20
+ export function normalFromMat4(out, a) {
21
+ var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
22
+ var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
23
+ var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
24
+ var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
25
+ var b00 = a00 * a11 - a01 * a10;
26
+ var b01 = a00 * a12 - a02 * a10;
27
+ var b02 = a00 * a13 - a03 * a10;
28
+ var b03 = a01 * a12 - a02 * a11;
29
+ var b04 = a01 * a13 - a03 * a11;
30
+ var b05 = a02 * a13 - a03 * a12;
31
+ var b06 = a20 * a31 - a21 * a30;
32
+ var b07 = a20 * a32 - a22 * a30;
33
+ var b08 = a20 * a33 - a23 * a30;
34
+ var b09 = a21 * a32 - a22 * a31;
35
+ var b10 = a21 * a33 - a23 * a31;
36
+ var b11 = a22 * a33 - a23 * a32;
37
+ // Calculate the determinant
38
+ var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
39
+ if (!det) {
40
+ return null;
41
+ }
42
+ det = 1.0 / det;
43
+ out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
44
+ out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
45
+ out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
46
+ out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
47
+ out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
48
+ out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
49
+ out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
50
+ out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
51
+ out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
52
+ return out;
53
+ }
54
+ //# sourceMappingURL=mat3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mat3.js","sourceRoot":"","sources":["../../src/math/mat3.ts"],"names":[],"mappings":"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G,GAAG,CAAC;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["// Adapted from gl-matrix 3.4.4, https://github.com/toji/gl-matrix/tree/v3.4.4/src\n// Copyright (c) 2015-2025 Brandon Jones and Colin MacKenzie IV, MIT.\n// See LICENSES/GlMatrix-MIT.txt. Arithmetic/order retained; creators use Float32Array.\nimport type { MathArray, ReadonlyMathArray } from './types.js';\n\nexport function create(): Float32Array {\n var out = new Float32Array(9);\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n\nexport function fromMat4<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0 {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n\nexport function normalFromMat4<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0 | null {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import type { MathArray, ReadonlyMathArray } from './types.js';
2
+ export declare function copy<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0;
3
+ export declare function create(): Float32Array;
4
+ export declare function invert<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1): T0 | null;
5
+ export declare function lookAt<T0 extends MathArray, T1 extends ReadonlyMathArray, T2 extends ReadonlyMathArray, T3 extends ReadonlyMathArray>(out: T0, eye: T1, center: T2, up: T3): T0;
6
+ export declare function identity<T0 extends MathArray>(out: T0): T0;
7
+ export declare function targetTo<T0 extends MathArray, T1 extends ReadonlyMathArray, T2 extends ReadonlyMathArray, T3 extends ReadonlyMathArray>(out: T0, eye: T1, target: T2, up: T3): T0;
8
+ export declare function getScaling<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, mat: T1): T0;
9
+ export declare const mul: typeof multiply;
10
+ export declare function multiply<T0 extends MathArray, T1 extends ReadonlyMathArray, T2 extends ReadonlyMathArray>(out: T0, a: T1, b: T2): T0;
11
+ export declare const ortho: typeof orthoNO;
12
+ export declare function orthoNO<T0 extends MathArray>(out: T0, left: number, right: number, bottom: number, top: number, near: number, far: number): T0;
13
+ export declare const perspective: typeof perspectiveNO;
14
+ export declare function perspectiveNO<T0 extends MathArray>(out: T0, fovy: number, aspect: number, near: number, far: number | null): T0;
15
+ export declare function scale<T0 extends MathArray, T1 extends ReadonlyMathArray, T2 extends ReadonlyMathArray>(out: T0, a: T1, v: T2): T0;
16
+ export declare function rotateZ<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, a: T1, rad: number): T0;
17
+ export declare function fromScaling<T0 extends MathArray, T1 extends ReadonlyMathArray>(out: T0, v: T1): T0;
18
+ export declare function translate<T0 extends MathArray, T1 extends ReadonlyMathArray, T2 extends ReadonlyMathArray>(out: T0, a: T1, v: T2): T0;
19
+ export type Mat4Array = Float32Array | Float64Array | number[];