@meimu/mutracer 0.0.0-stage → 0.1.1

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 (536) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/GLSL-PathTracer-MIT.txt +21 -0
  4. package/LICENSES/GlMatrix-MIT.txt +19 -0
  5. package/LICENSES/KinoBloom-MIT.txt +21 -0
  6. package/LICENSES/OIDNWeb-MIT.txt +21 -0
  7. package/LICENSES/Octicons-MIT.txt +21 -0
  8. package/LICENSES/RayTracingRenderer-MIT.txt +21 -0
  9. package/LICENSES/TinyBVH-MIT.txt +21 -0
  10. package/LICENSES/WebGPUUtils-MIT.txt +21 -0
  11. package/LICENSES/ZetaRay-MIT.txt +21 -0
  12. package/README.md +240 -2
  13. package/THIRD_PARTY_NOTICES.md +160 -0
  14. package/dist/assets/bvh.worker.js +1 -0
  15. package/dist/mutracer.umd.js +14360 -0
  16. package/docs/api.md +394 -0
  17. package/docs/bvh.md +141 -0
  18. package/docs/denoising.md +301 -0
  19. package/docs/getting-started.md +308 -0
  20. package/docs/materials.md +281 -0
  21. package/docs/performance.md +85 -0
  22. package/docs/post-processing.md +87 -0
  23. package/docs/progressive-rendering.md +160 -0
  24. package/docs/sampling.md +40 -0
  25. package/docs/threejs.md +274 -0
  26. package/docs/todo.md +61 -0
  27. package/docs/updates.md +208 -0
  28. package/lib/Display.d.ts +72 -0
  29. package/lib/Display.js +123 -0
  30. package/lib/Display.js.map +1 -0
  31. package/lib/Engine.d.ts +161 -0
  32. package/lib/Engine.js +681 -0
  33. package/lib/Engine.js.map +1 -0
  34. package/lib/Render.d.ts +265 -0
  35. package/lib/Render.js +742 -0
  36. package/lib/Render.js.map +1 -0
  37. package/lib/RenderLoop.d.ts +79 -0
  38. package/lib/RenderLoop.js +236 -0
  39. package/lib/RenderLoop.js.map +1 -0
  40. package/lib/Sync.d.ts +19 -0
  41. package/lib/Sync.js +19 -0
  42. package/lib/Sync.js.map +1 -0
  43. package/lib/constants.d.ts +2 -0
  44. package/lib/constants.js +3 -0
  45. package/lib/constants.js.map +1 -0
  46. package/lib/main.d.ts +56 -0
  47. package/lib/main.js +43 -0
  48. package/lib/main.js.map +1 -0
  49. package/lib/math.d.ts +23 -0
  50. package/lib/math.js +56 -0
  51. package/lib/math.js.map +1 -0
  52. package/lib/oidn.d.ts +45 -0
  53. package/lib/oidn.js +42 -0
  54. package/lib/oidn.js.map +1 -0
  55. package/lib/oidnBundledWeights.cdn.d.ts +2 -0
  56. package/lib/oidnBundledWeights.cdn.js +5 -0
  57. package/lib/oidnBundledWeights.cdn.js.map +1 -0
  58. package/lib/oidnBundledWeights.d.ts +2 -0
  59. package/lib/oidnBundledWeights.js +4 -0
  60. package/lib/oidnBundledWeights.js.map +1 -0
  61. package/lib/renderer/DisplayPostProcess.d.ts +14 -0
  62. package/lib/renderer/DisplayPostProcess.js +41 -0
  63. package/lib/renderer/DisplayPostProcess.js.map +1 -0
  64. package/lib/renderer/MaterialTable.d.ts +119 -0
  65. package/lib/renderer/MaterialTable.js +550 -0
  66. package/lib/renderer/MaterialTable.js.map +1 -0
  67. package/lib/renderer/OfflineAdaptiveSampling.d.ts +47 -0
  68. package/lib/renderer/OfflineAdaptiveSampling.js +36 -0
  69. package/lib/renderer/OfflineAdaptiveSampling.js.map +1 -0
  70. package/lib/renderer/RenderingPipeline.d.ts +232 -0
  71. package/lib/renderer/RenderingPipeline.js +18 -0
  72. package/lib/renderer/RenderingPipeline.js.map +1 -0
  73. package/lib/renderer/ScratchPool.d.ts +13 -0
  74. package/lib/renderer/ScratchPool.js +21 -0
  75. package/lib/renderer/ScratchPool.js.map +1 -0
  76. package/lib/renderer/TileRender.d.ts +44 -0
  77. package/lib/renderer/TileRender.js +283 -0
  78. package/lib/renderer/TileRender.js.map +1 -0
  79. package/lib/renderer/WGPUBloomPass.d.ts +17 -0
  80. package/lib/renderer/WGPUBloomPass.js +243 -0
  81. package/lib/renderer/WGPUBloomPass.js.map +1 -0
  82. package/lib/renderer/WGPUCanvasSurface.d.ts +21 -0
  83. package/lib/renderer/WGPUCanvasSurface.js +48 -0
  84. package/lib/renderer/WGPUCanvasSurface.js.map +1 -0
  85. package/lib/renderer/WGPUComputePass.d.ts +73 -0
  86. package/lib/renderer/WGPUComputePass.js +317 -0
  87. package/lib/renderer/WGPUComputePass.js.map +1 -0
  88. package/lib/renderer/WGPUFullQuadPass.d.ts +73 -0
  89. package/lib/renderer/WGPUFullQuadPass.js +389 -0
  90. package/lib/renderer/WGPUFullQuadPass.js.map +1 -0
  91. package/lib/renderer/WGPUHDRPeakMeter.d.ts +19 -0
  92. package/lib/renderer/WGPUHDRPeakMeter.js +112 -0
  93. package/lib/renderer/WGPUHDRPeakMeter.js.map +1 -0
  94. package/lib/renderer/WGPUJNLMDenoiser.d.ts +61 -0
  95. package/lib/renderer/WGPUJNLMDenoiser.js +412 -0
  96. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -0
  97. package/lib/renderer/WGPURayTraceOutput.d.ts +44 -0
  98. package/lib/renderer/WGPURayTraceOutput.js +368 -0
  99. package/lib/renderer/WGPURayTraceOutput.js.map +1 -0
  100. package/lib/renderer/WGPURayTracePass.d.ts +284 -0
  101. package/lib/renderer/WGPURayTracePass.js +2323 -0
  102. package/lib/renderer/WGPURayTracePass.js.map +1 -0
  103. package/lib/renderer/WGPURenderingPipeline.d.ts +9 -0
  104. package/lib/renderer/WGPURenderingPipeline.js +1448 -0
  105. package/lib/renderer/WGPURenderingPipeline.js.map +1 -0
  106. package/lib/renderer/WGPUSceneFeatures.d.ts +3 -0
  107. package/lib/renderer/WGPUSceneFeatures.js +20 -0
  108. package/lib/renderer/WGPUSceneFeatures.js.map +1 -0
  109. package/lib/renderer/WGPUScratchBuffer.d.ts +9 -0
  110. package/lib/renderer/WGPUScratchBuffer.js +21 -0
  111. package/lib/renderer/WGPUScratchBuffer.js.map +1 -0
  112. package/lib/renderer/WGPUScratchTexture.d.ts +10 -0
  113. package/lib/renderer/WGPUScratchTexture.js +27 -0
  114. package/lib/renderer/WGPUScratchTexture.js.map +1 -0
  115. package/lib/renderer/WGPUShaderCache.d.ts +26 -0
  116. package/lib/renderer/WGPUShaderCache.js +103 -0
  117. package/lib/renderer/WGPUShaderCache.js.map +1 -0
  118. package/lib/renderer/WebGLBloomPass.d.ts +18 -0
  119. package/lib/renderer/WebGLBloomPass.js +113 -0
  120. package/lib/renderer/WebGLBloomPass.js.map +1 -0
  121. package/lib/renderer/WebGLFullQuadPass.d.ts +65 -0
  122. package/lib/renderer/WebGLFullQuadPass.js +208 -0
  123. package/lib/renderer/WebGLFullQuadPass.js.map +1 -0
  124. package/lib/renderer/WebGLJNLMDenoiser.d.ts +32 -0
  125. package/lib/renderer/WebGLJNLMDenoiser.js +328 -0
  126. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -0
  127. package/lib/renderer/WebGLRayTraceOutputPass.d.ts +20 -0
  128. package/lib/renderer/WebGLRayTraceOutputPass.js +106 -0
  129. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -0
  130. package/lib/renderer/WebGLRayTracePass.d.ts +142 -0
  131. package/lib/renderer/WebGLRayTracePass.js +845 -0
  132. package/lib/renderer/WebGLRayTracePass.js.map +1 -0
  133. package/lib/renderer/WebGLReadback.d.ts +4 -0
  134. package/lib/renderer/WebGLReadback.js +75 -0
  135. package/lib/renderer/WebGLReadback.js.map +1 -0
  136. package/lib/renderer/WebGLRenderingPipeline.d.ts +4 -0
  137. package/lib/renderer/WebGLRenderingPipeline.js +510 -0
  138. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -0
  139. package/lib/renderer/WebGLScratchCopy.d.ts +10 -0
  140. package/lib/renderer/WebGLScratchCopy.js +27 -0
  141. package/lib/renderer/WebGLScratchCopy.js.map +1 -0
  142. package/lib/renderer/accumulationTarget.d.ts +26 -0
  143. package/lib/renderer/accumulationTarget.js +2 -0
  144. package/lib/renderer/accumulationTarget.js.map +1 -0
  145. package/lib/renderer/binnedSahBvh.d.ts +31 -0
  146. package/lib/renderer/binnedSahBvh.js +263 -0
  147. package/lib/renderer/binnedSahBvh.js.map +1 -0
  148. package/lib/renderer/bvh.worker.d.ts +1 -0
  149. package/lib/renderer/bvh.worker.js +16 -0
  150. package/lib/renderer/bvh.worker.js.map +1 -0
  151. package/lib/renderer/bvhAccel.d.ts +81 -0
  152. package/lib/renderer/bvhAccel.js +621 -0
  153. package/lib/renderer/bvhAccel.js.map +1 -0
  154. package/lib/renderer/bvhWorkerBuild.d.ts +12 -0
  155. package/lib/renderer/bvhWorkerBuild.js +17 -0
  156. package/lib/renderer/bvhWorkerBuild.js.map +1 -0
  157. package/lib/renderer/bvhWorkerClient.d.ts +57 -0
  158. package/lib/renderer/bvhWorkerClient.js +166 -0
  159. package/lib/renderer/bvhWorkerClient.js.map +1 -0
  160. package/lib/renderer/cameraLens.d.ts +5 -0
  161. package/lib/renderer/cameraLens.js +15 -0
  162. package/lib/renderer/cameraLens.js.map +1 -0
  163. package/lib/renderer/cameraSnapshot.d.ts +3 -0
  164. package/lib/renderer/cameraSnapshot.js +7 -0
  165. package/lib/renderer/cameraSnapshot.js.map +1 -0
  166. package/lib/renderer/committedScene.d.ts +13 -0
  167. package/lib/renderer/committedScene.js +126 -0
  168. package/lib/renderer/committedScene.js.map +1 -0
  169. package/lib/renderer/dataTextureUtil.d.ts +32 -0
  170. package/lib/renderer/dataTextureUtil.js +46 -0
  171. package/lib/renderer/dataTextureUtil.js.map +1 -0
  172. package/lib/renderer/denoiser.d.ts +65 -0
  173. package/lib/renderer/denoiser.js +2 -0
  174. package/lib/renderer/denoiser.js.map +1 -0
  175. package/lib/renderer/depthQuery.d.ts +14 -0
  176. package/lib/renderer/depthQuery.js +14 -0
  177. package/lib/renderer/depthQuery.js.map +1 -0
  178. package/lib/renderer/deviceRequirements.d.ts +23 -0
  179. package/lib/renderer/deviceRequirements.js +50 -0
  180. package/lib/renderer/deviceRequirements.js.map +1 -0
  181. package/lib/renderer/envMapCreation.d.ts +10 -0
  182. package/lib/renderer/envMapCreation.js +96 -0
  183. package/lib/renderer/envMapCreation.js.map +1 -0
  184. package/lib/renderer/envMapDistribution.d.ts +9 -0
  185. package/lib/renderer/envMapDistribution.js +107 -0
  186. package/lib/renderer/envMapDistribution.js.map +1 -0
  187. package/lib/renderer/float16.d.ts +1 -0
  188. package/lib/renderer/float16.js +19 -0
  189. package/lib/renderer/float16.js.map +1 -0
  190. package/lib/renderer/geometryBvh.d.ts +11 -0
  191. package/lib/renderer/geometryBvh.js +24 -0
  192. package/lib/renderer/geometryBvh.js.map +1 -0
  193. package/lib/renderer/geometryUpdates.d.ts +28 -0
  194. package/lib/renderer/geometryUpdates.js +131 -0
  195. package/lib/renderer/geometryUpdates.js.map +1 -0
  196. package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +37 -0
  198. package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/chunks/common.glsl.d.ts +2 -0
  200. package/lib/renderer/glsl/chunks/common.glsl.js +17 -0
  201. package/lib/renderer/glsl/chunks/common.glsl.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/envMap.glsl.d.ts +2 -0
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +192 -0
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -0
  205. package/lib/renderer/glsl/chunks/intersect.glsl.d.ts +2 -0
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js +1091 -0
  207. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -0
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +2 -0
  209. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +371 -0
  210. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -0
  211. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.d.ts +2 -0
  212. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +1767 -0
  213. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -0
  214. package/lib/renderer/glsl/chunks/rand.glsl.d.ts +2 -0
  215. package/lib/renderer/glsl/chunks/rand.glsl.js +26 -0
  216. package/lib/renderer/glsl/chunks/rand.glsl.js.map +1 -0
  217. package/lib/renderer/glsl/chunks/random.glsl.d.ts +2 -0
  218. package/lib/renderer/glsl/chunks/random.glsl.js +27 -0
  219. package/lib/renderer/glsl/chunks/random.glsl.js.map +1 -0
  220. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +2 -0
  221. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +287 -0
  222. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -0
  223. package/lib/renderer/glsl/chunks/sampleLight.glsl.d.ts +2 -0
  224. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +254 -0
  225. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -0
  226. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +2 -0
  227. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +279 -0
  228. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -0
  229. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.d.ts +2 -0
  230. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +48 -0
  231. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -0
  232. package/lib/renderer/glsl/chunks/sampling.glsl.d.ts +2 -0
  233. package/lib/renderer/glsl/chunks/sampling.glsl.js +194 -0
  234. package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -0
  235. package/lib/renderer/glsl/chunks/sobol.glsl.d.ts +2 -0
  236. package/lib/renderer/glsl/chunks/sobol.glsl.js +170 -0
  237. package/lib/renderer/glsl/chunks/sobol.glsl.js.map +1 -0
  238. package/lib/renderer/glsl/chunks/textureLinear.glsl.d.ts +2 -0
  239. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +27 -0
  240. package/lib/renderer/glsl/chunks/textureLinear.glsl.js.map +1 -0
  241. package/lib/renderer/glsl/chunks/uvProjection.glsl.d.ts +2 -0
  242. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +72 -0
  243. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -0
  244. package/lib/renderer/glsl/depthQuery.frag.d.ts +3 -0
  245. package/lib/renderer/glsl/depthQuery.frag.js +55 -0
  246. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -0
  247. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.d.ts +6 -0
  248. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +46 -0
  249. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -0
  250. package/lib/renderer/glsl/rayTrace.frag.d.ts +2 -0
  251. package/lib/renderer/glsl/rayTrace.frag.js +623 -0
  252. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -0
  253. package/lib/renderer/glsl/shadowCatcher.frag.d.ts +3 -0
  254. package/lib/renderer/glsl/shadowCatcher.frag.js +119 -0
  255. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -0
  256. package/lib/renderer/glsl/webglPipeline.frag.d.ts +4 -0
  257. package/lib/renderer/glsl/webglPipeline.frag.js +208 -0
  258. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -0
  259. package/lib/renderer/gpuMemory.d.ts +2 -0
  260. package/lib/renderer/gpuMemory.js +10 -0
  261. package/lib/renderer/gpuMemory.js.map +1 -0
  262. package/lib/renderer/halton.d.ts +1 -0
  263. package/lib/renderer/halton.js +15 -0
  264. package/lib/renderer/halton.js.map +1 -0
  265. package/lib/renderer/jnlm.d.ts +85 -0
  266. package/lib/renderer/jnlm.js +87 -0
  267. package/lib/renderer/jnlm.js.map +1 -0
  268. package/lib/renderer/lightSampling.d.ts +75 -0
  269. package/lib/renderer/lightSampling.js +305 -0
  270. package/lib/renderer/lightSampling.js.map +1 -0
  271. package/lib/renderer/lightsUtil.d.ts +26 -0
  272. package/lib/renderer/lightsUtil.js +154 -0
  273. package/lib/renderer/lightsUtil.js.map +1 -0
  274. package/lib/renderer/materialChanges.d.ts +13 -0
  275. package/lib/renderer/materialChanges.js +59 -0
  276. package/lib/renderer/materialChanges.js.map +1 -0
  277. package/lib/renderer/materialComparison.generated.d.ts +5 -0
  278. package/lib/renderer/materialComparison.generated.js +655 -0
  279. package/lib/renderer/materialComparison.generated.js.map +1 -0
  280. package/lib/renderer/materialConstants.d.ts +6 -0
  281. package/lib/renderer/materialConstants.js +3 -0
  282. package/lib/renderer/materialConstants.js.map +1 -0
  283. package/lib/renderer/materialEmission.d.ts +9 -0
  284. package/lib/renderer/materialEmission.js +21 -0
  285. package/lib/renderer/materialEmission.js.map +1 -0
  286. package/lib/renderer/materialIndices.d.ts +7 -0
  287. package/lib/renderer/materialIndices.js +34 -0
  288. package/lib/renderer/materialIndices.js.map +1 -0
  289. package/lib/renderer/materialLayout.d.ts +102 -0
  290. package/lib/renderer/materialLayout.js +189 -0
  291. package/lib/renderer/materialLayout.js.map +1 -0
  292. package/lib/renderer/materialTextureSlots.d.ts +537 -0
  293. package/lib/renderer/materialTextureSlots.js +219 -0
  294. package/lib/renderer/materialTextureSlots.js.map +1 -0
  295. package/lib/renderer/mergeMeshesToGeometry.d.ts +8 -0
  296. package/lib/renderer/mergeMeshesToGeometry.js +236 -0
  297. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -0
  298. package/lib/renderer/meshInstances.d.ts +23 -0
  299. package/lib/renderer/meshInstances.js +66 -0
  300. package/lib/renderer/meshInstances.js.map +1 -0
  301. package/lib/renderer/meshMembership.d.ts +10 -0
  302. package/lib/renderer/meshMembership.js +72 -0
  303. package/lib/renderer/meshMembership.js.map +1 -0
  304. package/lib/renderer/oidnNetwork.d.ts +20 -0
  305. package/lib/renderer/oidnNetwork.js +123 -0
  306. package/lib/renderer/oidnNetwork.js.map +1 -0
  307. package/lib/renderer/openPbrEnergyLut.d.ts +32 -0
  308. package/lib/renderer/openPbrEnergyLut.js +965 -0
  309. package/lib/renderer/openPbrEnergyLut.js.map +1 -0
  310. package/lib/renderer/pathLimits.d.ts +4 -0
  311. package/lib/renderer/pathLimits.js +7 -0
  312. package/lib/renderer/pathLimits.js.map +1 -0
  313. package/lib/renderer/prepareMeshBVH.d.ts +110 -0
  314. package/lib/renderer/prepareMeshBVH.js +857 -0
  315. package/lib/renderer/prepareMeshBVH.js.map +1 -0
  316. package/lib/renderer/progressiveScheduler.d.ts +11 -0
  317. package/lib/renderer/progressiveScheduler.js +19 -0
  318. package/lib/renderer/progressiveScheduler.js.map +1 -0
  319. package/lib/renderer/renderPipeline.d.ts +57 -0
  320. package/lib/renderer/renderPipeline.js +49 -0
  321. package/lib/renderer/renderPipeline.js.map +1 -0
  322. package/lib/renderer/sampling.d.ts +10 -0
  323. package/lib/renderer/sampling.js +28 -0
  324. package/lib/renderer/sampling.js.map +1 -0
  325. package/lib/renderer/sceneChangeDetector.d.ts +29 -0
  326. package/lib/renderer/sceneChangeDetector.js +232 -0
  327. package/lib/renderer/sceneChangeDetector.js.map +1 -0
  328. package/lib/renderer/sceneLightChanges.d.ts +14 -0
  329. package/lib/renderer/sceneLightChanges.js +34 -0
  330. package/lib/renderer/sceneLightChanges.js.map +1 -0
  331. package/lib/renderer/scratchSampling.d.ts +3 -0
  332. package/lib/renderer/scratchSampling.js +39 -0
  333. package/lib/renderer/scratchSampling.js.map +1 -0
  334. package/lib/renderer/shader.d.ts +37 -0
  335. package/lib/renderer/shader.js +41 -0
  336. package/lib/renderer/shader.js.map +1 -0
  337. package/lib/renderer/staticBvhPreparation.d.ts +24 -0
  338. package/lib/renderer/staticBvhPreparation.js +116 -0
  339. package/lib/renderer/staticBvhPreparation.js.map +1 -0
  340. package/lib/renderer/textureRegion.d.ts +8 -0
  341. package/lib/renderer/textureRegion.js +9 -0
  342. package/lib/renderer/textureRegion.js.map +1 -0
  343. package/lib/renderer/texturesFromMaterials.d.ts +6 -0
  344. package/lib/renderer/texturesFromMaterials.js +37 -0
  345. package/lib/renderer/texturesFromMaterials.js.map +1 -0
  346. package/lib/renderer/util.d.ts +17 -0
  347. package/lib/renderer/util.js +56 -0
  348. package/lib/renderer/util.js.map +1 -0
  349. package/lib/renderer/webgl.d.ts +131 -0
  350. package/lib/renderer/webgl.js +586 -0
  351. package/lib/renderer/webgl.js.map +1 -0
  352. package/lib/renderer/webglShaders.d.ts +4 -0
  353. package/lib/renderer/webglShaders.js +41 -0
  354. package/lib/renderer/webglShaders.js.map +1 -0
  355. package/lib/renderer/wgsl/chunks/common.wgsl.d.ts +2 -0
  356. package/lib/renderer/wgsl/chunks/common.wgsl.js +23 -0
  357. package/lib/renderer/wgsl/chunks/common.wgsl.js.map +1 -0
  358. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +2 -0
  359. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +128 -0
  360. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -0
  361. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -0
  362. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +1441 -0
  363. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -0
  364. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +8 -0
  365. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +85 -0
  366. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -0
  367. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +7 -0
  368. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +315 -0
  369. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -0
  370. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.d.ts +3 -0
  371. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +1737 -0
  372. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -0
  373. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +4 -0
  374. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +352 -0
  375. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -0
  376. package/lib/renderer/wgsl/chunks/rand.wgsl.d.ts +2 -0
  377. package/lib/renderer/wgsl/chunks/rand.wgsl.js +25 -0
  378. package/lib/renderer/wgsl/chunks/rand.wgsl.js.map +1 -0
  379. package/lib/renderer/wgsl/chunks/random.wgsl.d.ts +1 -0
  380. package/lib/renderer/wgsl/chunks/random.wgsl.js +2 -0
  381. package/lib/renderer/wgsl/chunks/random.wgsl.js.map +1 -0
  382. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -0
  383. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +328 -0
  384. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -0
  385. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +2 -0
  386. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +400 -0
  387. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -0
  388. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +3 -0
  389. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +439 -0
  390. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -0
  391. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +2 -0
  392. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +40 -0
  393. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -0
  394. package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +2 -0
  395. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +198 -0
  396. package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -0
  397. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +8 -0
  398. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +16 -0
  399. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -0
  400. package/lib/renderer/wgsl/chunks/sobol.wgsl.d.ts +2 -0
  401. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +170 -0
  402. package/lib/renderer/wgsl/chunks/sobol.wgsl.js.map +1 -0
  403. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.d.ts +2 -0
  404. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +42 -0
  405. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -0
  406. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +5 -0
  407. package/lib/renderer/wgsl/compose.frag.wgsl.js +218 -0
  408. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -0
  409. package/lib/renderer/wgsl/customDenoise.wgsl.d.ts +4 -0
  410. package/lib/renderer/wgsl/customDenoise.wgsl.js +28 -0
  411. package/lib/renderer/wgsl/customDenoise.wgsl.js.map +1 -0
  412. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +3 -0
  413. package/lib/renderer/wgsl/depthQuery.wgsl.js +34 -0
  414. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -0
  415. package/lib/renderer/wgsl/offlineAdaptive.compute.d.ts +2 -0
  416. package/lib/renderer/wgsl/offlineAdaptive.compute.js +108 -0
  417. package/lib/renderer/wgsl/offlineAdaptive.compute.js.map +1 -0
  418. package/lib/renderer/wgsl/rayTrace.compute.d.ts +16 -0
  419. package/lib/renderer/wgsl/rayTrace.compute.js +927 -0
  420. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -0
  421. package/lib/scene/AmbientLight.d.ts +17 -0
  422. package/lib/scene/AmbientLight.js +15 -0
  423. package/lib/scene/AmbientLight.js.map +1 -0
  424. package/lib/scene/Camera.d.ts +78 -0
  425. package/lib/scene/Camera.js +111 -0
  426. package/lib/scene/Camera.js.map +1 -0
  427. package/lib/scene/DirectionalLight.d.ts +18 -0
  428. package/lib/scene/DirectionalLight.js +17 -0
  429. package/lib/scene/DirectionalLight.js.map +1 -0
  430. package/lib/scene/EnvironmentLight.d.ts +14 -0
  431. package/lib/scene/EnvironmentLight.js +14 -0
  432. package/lib/scene/EnvironmentLight.js.map +1 -0
  433. package/lib/scene/Geometry.d.ts +87 -0
  434. package/lib/scene/Geometry.js +108 -0
  435. package/lib/scene/Geometry.js.map +1 -0
  436. package/lib/scene/IESProfile.d.ts +19 -0
  437. package/lib/scene/IESProfile.js +165 -0
  438. package/lib/scene/IESProfile.js.map +1 -0
  439. package/lib/scene/InstancedMesh.d.ts +43 -0
  440. package/lib/scene/InstancedMesh.js +79 -0
  441. package/lib/scene/InstancedMesh.js.map +1 -0
  442. package/lib/scene/Mesh.d.ts +14 -0
  443. package/lib/scene/Mesh.js +17 -0
  444. package/lib/scene/Mesh.js.map +1 -0
  445. package/lib/scene/OpenPBRMaterial.d.ts +224 -0
  446. package/lib/scene/OpenPBRMaterial.js +240 -0
  447. package/lib/scene/OpenPBRMaterial.js.map +1 -0
  448. package/lib/scene/RectLight.d.ts +31 -0
  449. package/lib/scene/RectLight.js +26 -0
  450. package/lib/scene/RectLight.js.map +1 -0
  451. package/lib/scene/Scene.d.ts +55 -0
  452. package/lib/scene/Scene.js +2 -0
  453. package/lib/scene/Scene.js.map +1 -0
  454. package/lib/scene/SceneNode.d.ts +16 -0
  455. package/lib/scene/SceneNode.js +33 -0
  456. package/lib/scene/SceneNode.js.map +1 -0
  457. package/lib/scene/SphereLight.d.ts +22 -0
  458. package/lib/scene/SphereLight.js +20 -0
  459. package/lib/scene/SphereLight.js.map +1 -0
  460. package/lib/scene/SpotLight.d.ts +35 -0
  461. package/lib/scene/SpotLight.js +29 -0
  462. package/lib/scene/SpotLight.js.map +1 -0
  463. package/lib/scene/Texture.d.ts +38 -0
  464. package/lib/scene/Texture.js +37 -0
  465. package/lib/scene/Texture.js.map +1 -0
  466. package/lib/scene/anisotropyParameters.d.ts +1 -0
  467. package/lib/scene/anisotropyParameters.js +13 -0
  468. package/lib/scene/anisotropyParameters.js.map +1 -0
  469. package/lib/scene/geometryChanges.d.ts +5 -0
  470. package/lib/scene/geometryChanges.js +18 -0
  471. package/lib/scene/geometryChanges.js.map +1 -0
  472. package/lib/scene/materialTextureNames.d.ts +2 -0
  473. package/lib/scene/materialTextureNames.js +9 -0
  474. package/lib/scene/materialTextureNames.js.map +1 -0
  475. package/lib/scene/openPbrSchema.d.ts +400 -0
  476. package/lib/scene/openPbrSchema.js +149 -0
  477. package/lib/scene/openPbrSchema.js.map +1 -0
  478. package/lib/scene/thinFilmParameters.d.ts +4 -0
  479. package/lib/scene/thinFilmParameters.js +12 -0
  480. package/lib/scene/thinFilmParameters.js.map +1 -0
  481. package/lib/settings/display.d.ts +118 -0
  482. package/lib/settings/display.js +34 -0
  483. package/lib/settings/display.js.map +1 -0
  484. package/lib/settings/engine.d.ts +37 -0
  485. package/lib/settings/engine.js +26 -0
  486. package/lib/settings/engine.js.map +1 -0
  487. package/lib/settings/render.d.ts +178 -0
  488. package/lib/settings/render.js +36 -0
  489. package/lib/settings/render.js.map +1 -0
  490. package/lib/tinybvh/LICENSE +21 -0
  491. package/lib/tinybvh/TinyBvhBuilder.d.ts +17 -0
  492. package/lib/tinybvh/TinyBvhBuilder.js +211 -0
  493. package/lib/tinybvh/TinyBvhBuilder.js.map +1 -0
  494. package/lib/tinybvh/tinybvh.wasm +0 -0
  495. package/lib/types.d.ts +13 -0
  496. package/lib/types.js +2 -0
  497. package/lib/types.js.map +1 -0
  498. package/lib/util/canvas.d.ts +2 -0
  499. package/lib/util/canvas.js +13 -0
  500. package/lib/util/canvas.js.map +1 -0
  501. package/lib/util/commonGeometry.d.ts +15 -0
  502. package/lib/util/commonGeometry.js +240 -0
  503. package/lib/util/commonGeometry.js.map +1 -0
  504. package/lib/util/events.d.ts +7 -0
  505. package/lib/util/events.js +23 -0
  506. package/lib/util/events.js.map +1 -0
  507. package/lib/util/frame.d.ts +2 -0
  508. package/lib/util/frame.js +10 -0
  509. package/lib/util/frame.js.map +1 -0
  510. package/lib/util/fromTHREE.d.ts +105 -0
  511. package/lib/util/fromTHREE.js +1111 -0
  512. package/lib/util/fromTHREE.js.map +1 -0
  513. package/lib/util/geometry.d.ts +13 -0
  514. package/lib/util/geometry.js +292 -0
  515. package/lib/util/geometry.js.map +1 -0
  516. package/lib/util/loadRGBE.d.ts +7 -0
  517. package/lib/util/loadRGBE.js +168 -0
  518. package/lib/util/loadRGBE.js.map +1 -0
  519. package/lib/util/math.d.ts +8 -0
  520. package/lib/util/math.js +64 -0
  521. package/lib/util/math.js.map +1 -0
  522. package/lib/util/mesh.d.ts +7 -0
  523. package/lib/util/mesh.js +20 -0
  524. package/lib/util/mesh.js.map +1 -0
  525. package/lib/util/threeDeformation.d.ts +20 -0
  526. package/lib/util/threeDeformation.js +218 -0
  527. package/lib/util/threeDeformation.js.map +1 -0
  528. package/lib/version.d.ts +2 -0
  529. package/lib/version.js +3 -0
  530. package/lib/version.js.map +1 -0
  531. package/llms.txt +62 -0
  532. package/oidn/weights/LICENSE.txt +202 -0
  533. package/oidn/weights/README.md +43 -0
  534. package/oidn/weights/rt_hdr_alb_nrm.tza +0 -0
  535. package/oidn/weights/rt_hdr_alb_nrm_small.tza +0 -0
  536. package/package.json +124 -4
package/README.md CHANGED
@@ -1,3 +1,241 @@
1
- # Temporary Holding Version
1
+ <h1><img src="site/src/assets/mutracer-logo.png" alt="" width="40" align="absmiddle" /> MuTracer</h1>
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm version](https://img.shields.io/npm/v/@meimu/mutracer)](https://www.npmjs.com/package/@meimu/mutracer)
4
+ [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
5
+
6
+ **MuTracer** is a physically based path tracer for the web.
7
+ It renders on WebGPU and falls back to WebGL 2, with OpenPBR materials,
8
+ TinyBVH acceleration and denoising built in.
9
+
10
+ Try the
11
+ [viewer](https://mutracer.meimu-studio.com/viewer/). MuTracer is a 0.x library;
12
+ APIs may change between minor releases.
13
+
14
+ - **WebGPU first, WebGL 2 as fallback**: unidirectional progressive path
15
+ tracing with next-event estimation and multiple importance sampling over
16
+ rect, sphere, spot (with IES profiles), directional and HDR environment
17
+ lights. Without WebGPU, the same code renders on WebGL 2.
18
+ - **OpenPBR 1.1 surface**: F82 metals, anisotropic GGX specular and coat,
19
+ fuzz, thin-film interference, dispersive transmission with absorption and
20
+ volume scattering, subsurface scattering, emission and ray-marched
21
+ height-field displacement.
22
+ - **Interactive with millions of triangles**: a two-level BVH whose BLASes are
23
+ built with binned SAH in parallel Workers (a JavaScript port of TinyBVH, or
24
+ the TinyBVH WebAssembly builder with SBVH and CWBVH layouts). Moving
25
+ instances only refits the TLAS. See [performance](#performance).
26
+ - **Low-noise sampling and denoising**: Owen-scrambled Sobol or blue-noise
27
+ ZSobol sequences. Albedo- and normal-guided denoising with Intel Open Image
28
+ Denoise (WebGPU) or a joint non-local means filter (WebGPU and WebGL 2),
29
+ while the image converges or on the final frame.
30
+ - **Incremental Three.js sync**: `THREESync` converts standard and physical
31
+ materials, lights, instancing, skinning and morph targets, and picks up
32
+ transform, material and light edits on every update without reconverting
33
+ the scene.
34
+ - **Offline-quality output**: deterministic `converge()` with variance-driven
35
+ adaptive sampling (WebGPU); AgX, ACES, Cineon, Reinhard and linear tone
36
+ mapping, color grading, bloom, thin-lens depth of field, shadow catchers and
37
+ transparent backgrounds.
38
+
39
+ ## Gallery
40
+
41
+ Rendered live in the browser. Click an image to open the scene in the viewer.
42
+
43
+ <table>
44
+ <tr>
45
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=yamaha-mt-09"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/yamaha-mt-09/thumbnail.webp" alt="2025 Yamaha MT-09 SP V4" /></a><br /><sub>Yamaha MT-09 · metal and coat · <a href="https://sketchfab.com/3d-models/2025-yamaha-mt-09-sp-v4-cb5878baf5974167806eb8524d57f0b0">VTX</a>, CC-BY-NC-SA 4.0</sub></td>
46
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=super-human"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/super-human/thumbnail.webp" alt="Super Human" /></a><br /><sub>Super Human · subsurface skin · <a href="https://sketchfab.com/3d-models/super-human-7aa58e978b9f4357b8e73d8e0440c896">Davyd Vidiger</a>, CC-BY 4.0</sub></td>
47
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=gelatinous-cube"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/gelatinous-cube/thumbnail.webp" alt="Gelatinous Cube" /></a><br /><sub>Gelatinous Cube · transmission · <a href="https://sketchfab.com/3d-models/gelatinous-cube-e08385238f4d4b59b012233a9fbdca21">glenatron</a>, CC-BY-NC 4.0</sub></td>
48
+ </tr>
49
+ <tr>
50
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=dragon"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/dragon/thumbnail.webp" alt="Glass dragon" /></a><br /><sub>Dragon · glass · <a href="https://benedikt-bitterli.me/resources/">Delatronic</a>, CC-BY 3.0</sub></td>
51
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=blender-cover-remix"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/blender-cover-remix/thumbnail.webp" alt="Blender Cover Remix" /></a><br /><sub>Blender Cover Remix · characters · <a href="https://sketchfab.com/3d-models/blender-cover-remix-a38f11890ff141c88fcdac6b637fdaf8">bandinopla</a>, CC-BY 4.0</sub></td>
52
+ <td width="33%"><a href="https://mutracer.meimu-studio.com/viewer/#model=spheres"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/spheres/thumbnail.webp" alt="OpenPBR material spheres" /></a><br /><sub>Material spheres · OpenPBR layers · procedural, CC0</sub></td>
53
+ </tr>
54
+ </table>
55
+
56
+ ## Performance
57
+
58
+ <a href="https://mutracer.meimu-studio.com/viewer/#model=bugatti-chiron"><img src="https://cdn.jsdelivr.net/gh/pissang/mutracer-assets@main/assets/bugatti-chiron/thumbnail.webp" alt="LEGO Technic Bugatti Chiron rendered in MuTracer" width="480" /></a>
59
+
60
+ The [LEGO Technic Bugatti Chiron](https://mutracer.meimu-studio.com/viewer/#model=bugatti-chiron)
61
+ (<a href="https://sketchfab.com/3d-models/lego-technic-bugatti-chiron-c2a54e2e979a4905b859c1533b498221">VTX</a>, CC-BY-NC-SA 4.0)
62
+ is a heavy scene that path traces interactively in the viewer:
63
+
64
+ | | Bugatti Chiron |
65
+ | --- | --- |
66
+ | Rendered triangles | 4.6 M (2.5 M unique, 341 geometries in 560 meshes) |
67
+ | Materials | 35 |
68
+ | Download | 12.8 MB `.glb` |
69
+ | BVH build, 1 thread | 1.7 s (built-in builder) / 1.0 s (TinyBVH WebAssembly) |
70
+ | BVH build, 4 workers (default) | 0.50 s (built-in builder) / 0.28 s (TinyBVH WebAssembly) |
71
+ | 1920 × 1080, 64 spp | 12.1 s path tracing, 12.4 s with OIDN denoising |
72
+
73
+ Measured on an Apple M4 Max: rendering in Chrome with WebGPU at the viewer's
74
+ default settings (6 bounces), BVH builds on CPU threads excluding worker startup.
75
+
76
+ ## Install
77
+
78
+ ```bash
79
+ npm install @meimu/mutracer
80
+ ```
81
+
82
+ Install `three` to load glTF with `GLTFLoader` + `THREESync` or to use
83
+ the Three.js helpers. The quick start below also uses `gl-matrix` for matrix math.
84
+
85
+ The package is ESM with TypeScript declarations (`lib/main.js`). A UMD build
86
+ with a `MuTracer` global is at `dist/mutracer.umd.js`; deploy its `dist/assets/`
87
+ alongside it. See [loading and deployment](./docs/getting-started.md#loading-and-deployment).
88
+
89
+ ## Quick start
90
+
91
+ ### With Three.js
92
+
93
+ Build or load a Three.js scene as usual and let `THREESync` keep MuTracer in
94
+ sync with it. `RenderLoop` renders progressively and calls the sync each frame.
95
+
96
+ ```ts
97
+ import * as THREE from 'three';
98
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
99
+ import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
100
+ import { Engine, RenderLoop, THREESync } from '@meimu/mutracer';
101
+
102
+ const canvas = document.querySelector('canvas')!;
103
+
104
+ const scene = new THREE.Scene();
105
+ scene.add((await new GLTFLoader().loadAsync('model.glb')).scene);
106
+
107
+ const camera = new THREE.PerspectiveCamera(40, canvas.width / canvas.height, .1, 100);
108
+ camera.position.set(0, 2, 6);
109
+ const controls = new OrbitControls(camera, canvas);
110
+
111
+ const engine = new Engine({ canvas });
112
+ const sync = new THREESync(engine, { scene, camera, controls });
113
+ const loop = new RenderLoop(engine, { sync });
114
+ loop.start();
115
+ ```
116
+
117
+ Custom Three.js materials and lights can use `convertMaterial` / `convertLight`
118
+ in the same sync options; see [Three.js integration](./docs/threejs.md).
119
+
120
+ ### With MuTracer scene classes
121
+
122
+ Describe meshes, materials, lights and the camera directly with MuTracer.
123
+
124
+ ```ts
125
+ import { mat4 } from 'gl-matrix';
126
+ import {
127
+ Camera, EnvironmentLight, Mesh, OpenPBRMaterial, RectLight, Engine, RenderLoop,
128
+ Texture, createPlaneGeometry, createSphereGeometry, type Scene
129
+ } from '@meimu/mutracer';
130
+
131
+ const canvas = document.querySelector('canvas')!;
132
+
133
+ const red = new OpenPBRMaterial({ baseColor: [0.8, 0.1, 0.1], specularRoughness: 0.3 });
134
+
135
+ const ball = new Mesh(createSphereGeometry(64, 32), red);
136
+ mat4.fromTranslation(ball.transform, [0, 1, 0]);
137
+
138
+ const floor = new Mesh(createPlaneGeometry(), new OpenPBRMaterial());
139
+ mat4.fromScaling(floor.transform, [5, 1, 5]);
140
+
141
+ // Rect lights emit along their local -Z axis.
142
+ const light = new RectLight({ size: [2, 2], color: [1, 1, 1], intensity: 5 });
143
+ mat4.fromTranslation(light.transform, [0, 4, 0]);
144
+ mat4.rotateX(light.transform, light.transform, -Math.PI / 2);
145
+
146
+ // A constant grey sky as a 1x1 float environment map.
147
+ const sky = new Texture({ data: new Float32Array([0.3, 0.3, 0.3, 1]), width: 1, height: 1 });
148
+
149
+ const scene: Scene = {
150
+ meshes: [ball, floor],
151
+ lights: [light, new EnvironmentLight({ map: sky })]
152
+ };
153
+
154
+ const camera = new Camera({ projection: 'perspective', fov: 40, near: .1, far: 100 });
155
+ camera.position = [0, 2, 6];
156
+ camera.lookAt([0, 1, 0]);
157
+
158
+ const engine = new Engine({ canvas });
159
+ engine.on('error', error => console.error(error));
160
+ engine.scene = scene;
161
+ engine.camera = camera;
162
+ const loop = new RenderLoop(engine);
163
+ loop.start();
164
+ ```
165
+
166
+ For many copies of one geometry, use [`InstancedMesh`](./docs/updates.md#instanced-meshes)
167
+ with shared materials and a Float32 matrix array. `THREESync` converts Three.js
168
+ instancing into the same batches automatically. See the [instancing example](./examples/instancing.ts).
169
+
170
+ ### Rendering options
171
+
172
+ Enable denoising on an individual result:
173
+
174
+ ```ts
175
+ loop.final.setDenoiser({ type: 'jnlm' }); // required type; call again to change it
176
+ loop.final.setDenoiser({ type: 'oidn', model: 'standard' }); // WebGPU; custom weightsUrl also supported
177
+ // Third-party WebGPU filters: { type: 'custom', denoiser: yourCallerOwnedDenoiser }.
178
+ ```
179
+
180
+ Borrow WebGPU output with `render.getOutputTexture('hdr')` or `render.getOutputTexture('display')`, or add
181
+ a display overlay through `engine.display.addPostProcess(pass)`. Passes also
182
+ run during PNG export; see the [overlay example and texture lifetime](./docs/post-processing.md).
183
+
184
+ Batch quality or display edits use `Object.assign(loop.final, settings)` or
185
+ `Object.assign(engine.display, settings)`, typed with `RenderSettings` or
186
+ `DisplaySettings`; see the [setting defaults](./docs/api.md).
187
+
188
+ RenderLoop provides preview and final results. For custom frame control, use
189
+ Engine / Render / Display directly with a fallback, or a fixed-size
190
+ invisible render for export. See [independent render results](./docs/progressive-rendering.md).
191
+
192
+ ## Documentation
193
+
194
+ | Guide | Contents |
195
+ | --- | --- |
196
+ | [Getting started](./docs/getting-started.md) | Scene model, render loop, lights, export |
197
+ | [Scene updates](./docs/updates.md) | Editing a rendering scene, animation, update costs |
198
+ | [API reference](./docs/api.md) | Engine, Display and Render options, methods and scene types |
199
+ | [Materials](./docs/materials.md) | OpenPBR inputs, textures, alpha, bevel, displacement |
200
+ | [Three.js](./docs/threejs.md) | `THREESync`, supported materials and lights, `userData` keys |
201
+ | [Denoising](./docs/denoising.md) | JNLM and OIDN denoisers, OIDN weights hosting, denoising while converging |
202
+ | [Sampling](./docs/sampling.md) | Patterns, dimensions and progressive budgets |
203
+ | [BVH](./docs/bvh.md) | BVH builders, TinyBVH layouts, worker preparation |
204
+ | [Performance](./docs/performance.md) | Tuning checklist |
205
+ | [`llms.txt`](./llms.txt) | Compact usage guide for coding agents |
206
+
207
+ The [examples](./examples) cover a procedural scene, a Three.js/glTF scene and
208
+ an OpenPBR gallery with denoising and PNG export. Run them with:
209
+
210
+ ```bash
211
+ npm install
212
+ npm run dev
213
+ ```
214
+
215
+ ## Browser support
216
+
217
+ - **WebGPU** (recommended): any browser with WebGPU, such as current Chrome,
218
+ Edge and Safari. Required for OIDN denoising, HDR output and
219
+ the options marked WebGPU in the [API reference](./docs/api.md).
220
+ - **WebGL 2** fallback: requires `EXT_color_buffer_float`. Pass
221
+ `backend: 'webgl'` to force it.
222
+
223
+ The first frame compiles large shaders, which can take several seconds on some
224
+ platforms; `refine()` reports the progress through its return status.
225
+
226
+ ## Contributing
227
+
228
+ Pull requests are not accepted at the moment; please open an
229
+ [issue](https://github.com/pissang/mutracer/issues) instead. See
230
+ [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, required checks
231
+ and GPU validation.
232
+
233
+ ## License
234
+
235
+ MuTracer is released under the [MIT License](./LICENSE). It includes third-party
236
+ code and data under MIT, Apache-2.0 and CC0 licenses; see
237
+ [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).
238
+
239
+ For host WebGPU integration, [supply your own GPUDevice](docs/getting-started.md#using-your-own-gpudevice).
240
+
241
+ Render on an OffscreenCanvas in a Worker with the [worker integration guide](docs/getting-started.md#running-in-a-worker).
@@ -0,0 +1,160 @@
1
+ # Third-party notices
2
+
3
+ MuTracer is released under the MIT License (see [`LICENSE`](./LICENSE)). It
4
+ includes or adapts the following third-party work. License texts are in
5
+ [`LICENSES/`](./LICENSES) unless noted otherwise.
6
+
7
+ ## TinyBVH
8
+
9
+ The WebAssembly BVH builder (`src/tinybvh/`) wraps
10
+ [jbikker/tinybvh](https://github.com/jbikker/tinybvh) at commit
11
+ `0e4584287823252cf83f0e9cd072848bec5f79c5`. The JavaScript binned SAH builder
12
+ (`src/renderer/binnedSahBvh.ts`) is ported from TinyBVH's reference builder
13
+ (`BVH::Build`) at the same commit.
14
+
15
+ Copyright (c) 2024-2026 Jacco Bikker / Breda University of Applied Sciences.
16
+ MIT License. The license text is at
17
+ [`src/tinybvh/LICENSE`](./src/tinybvh/LICENSE) and is copied next to
18
+ `tinybvh.wasm` in published builds.
19
+
20
+ ## Adobe OpenPBR BSDF
21
+
22
+ The opaque-dielectric energy lookup tables (`src/renderer/openPbrEnergyLut.ts`)
23
+ and parts of the energy-conserving rough diffuse, GGX spherical-cap VNDF
24
+ sampling, thin-film Airy interference and thin-wall implementations in the
25
+ OpenPBR shader chunks are adapted from
26
+ [adobe/openpbr-bsdf](https://github.com/adobe/openpbr-bsdf) at commit
27
+ `9edf806740d2140846d9bef76e4342fc458e2ef5`.
28
+
29
+ The F82 saturation, coat passage absorption, directional-energy partition,
30
+ base albedo, internal-reflection darkening, independent coat-frame layering
31
+ and coat/thin-film IOR resolution
32
+ helpers additionally adapt
33
+ `impl/openpbr_lobe_utils.h`, `impl/openpbr_coating_lobe.h`, and
34
+ `impl/openpbr_bsdf.h` at commit `c91aad1d1ce1693e803f039d7c92c2965c4eb013`.
35
+
36
+ The ideal-metal direction/average energy tables and multiple-scattering lobe
37
+ additionally adapt `impl/openpbr_microfacet_multiple_scattering_lobes.h`,
38
+ `impl/openpbr_microfacet_multiple_scattering_data.h`, and
39
+ `impl/data/openpbr_ideal_metal_{,avg_}energy_complement_data.h` at the same
40
+ `c91aad1d1ce1693e803f039d7c92c2965c4eb013` commit. Directional tables use
41
+ row-normalized encoding; metal and ideal-dielectric averages retain exact u16
42
+ values in compact rows. The uniform-hemisphere proposal is mixed within the
43
+ existing metal sampling lobe.
44
+
45
+ The ideal-dielectric reflection/transmission multiple-scattering lobe and
46
+ three additional tables adapt the same commit's
47
+ `impl/openpbr_microfacet_multiple_scattering_lobes.h`,
48
+ `impl/openpbr_microfacet_multiple_scattering_data.h`, and
49
+ `impl/data/openpbr_ideal_dielectric_{energy_complement,avg_energy_complement,reflection_ratio}_data.h`.
50
+ They are translated to WGSL/GLSL and appended to the shared row-normalized
51
+ texture; each average uses a repeated degenerate row to retain small u16
52
+ values. The reference hemisphere-ratio proposal shares the existing
53
+ transmission-lobe interval and direction random dimensions; the combined
54
+ response and PDF are evaluated together. This addition is restricted to
55
+ solid transmissive materials, preserves the renderer's exact null boundary,
56
+ and retains the reference's isotropic alpha and scale factors.
57
+
58
+ Copyright 2026 Adobe. Apache License 2.0
59
+ ([`LICENSES/Apache-2.0.txt`](./LICENSES/Apache-2.0.txt)). Modified for WGSL and
60
+ GLSL; this repository re-quantized the Adobe energy lookup data to 8-bit
61
+ row-normalized values with 16-bit row minimum/maximum headers. Encoded rows
62
+ are stored as reversible differences from the preceding row, then Base64. The upstream
63
+ project has no NOTICE file.
64
+
65
+ ## GLSL-PathTracer
66
+
67
+ The PCG random number generator in the `rand` shader chunks, and parts of the
68
+ original GLSL path tracing structure, are adapted from
69
+ [knightcrawler25/GLSL-PathTracer](https://github.com/knightcrawler25/GLSL-PathTracer).
70
+ The generator in that project credits Moroz Mykhailo
71
+ ([Shadertoy wltcRS](https://www.shadertoy.com/view/wltcRS)).
72
+
73
+ Copyright (c) 2019 Asif Ali. MIT License
74
+ ([`LICENSES/GLSL-PathTracer-MIT.txt`](./LICENSES/GLSL-PathTracer-MIT.txt)).
75
+
76
+ ## ZetaRay
77
+
78
+ The histogram auto exposure pass (`src/renderer/WGPUAutoExposure.ts`) is
79
+ adapted from [alipbcs/ZetaRay](https://github.com/alipbcs/ZetaRay).
80
+
81
+ Copyright (c) 2023-2024 Ali Behnoudfar. MIT License
82
+ ([`LICENSES/ZetaRay-MIT.txt`](./LICENSES/ZetaRay-MIT.txt)).
83
+
84
+
85
+ ## KinoBloom
86
+
87
+ The bloom prefilter's median filter follows
88
+ [keijiro/KinoBloom](https://github.com/keijiro/KinoBloom).
89
+
90
+ Copyright (c) 2015-2017 Keijiro Takahashi. MIT License
91
+ ([`LICENSES/KinoBloom-MIT.txt`](./LICENSES/KinoBloom-MIT.txt)).
92
+
93
+ ## Intel Open Image Denoise weights
94
+
95
+ The `.tza` files in [`oidn/weights/`](./oidn/weights) are also distributed in the separate `oidn-weights@2.3.0-1` package,
96
+ with standard/small included in mutracer. They are trained weights from
97
+ [Intel Open Image Denoise](https://github.com/OpenImageDenoise/oidn).
98
+
99
+ Copyright Intel Corporation. Apache License 2.0
100
+ ([`oidn/weights/LICENSE.txt`](./oidn/weights/LICENSE.txt)). Denoising runs
101
+ through the [`oidn-web`](https://www.npmjs.com/package/oidn-web) package, which
102
+ carries its own license.
103
+
104
+ ## pbrt-v4 ZSobol
105
+
106
+ The ZSobol digit permutation walk in `src/renderer/{wgsl,glsl}/chunks/sobol.*`,
107
+ its permutation table in `src/renderer/sampling.ts`, and the test reference
108
+ adapt `ZSobolSampler::GetSampleIndex` from
109
+ [pbrt-v4](https://github.com/mmp/pbrt-v4/blob/master/src/pbrt/samplers.h).
110
+ Copyright (c) 1998-2020 Matt Pharr, Wenzel Jakob, and Greg Humphreys.
111
+ Apache License 2.0 ([`LICENSES/Apache-2.0.txt`](./LICENSES/Apache-2.0.txt)).
112
+ Modified for 32-bit tiled WGSL and GLSL ES 3.00. The upstream project has no
113
+ NOTICE file. Owen scrambling follows Burley's 2020 paper.
114
+
115
+ ## GitHub Octicons
116
+
117
+ The GitHub icon in `viewer/src/components/Toolbar.tsx` is adapted from
118
+ [`mark-github-16.svg`](https://github.com/primer/octicons/blob/main/icons/mark-github-16.svg)
119
+ in [GitHub Octicons](https://github.com/primer/octicons).
120
+
121
+ Copyright (c) 2026 GitHub Inc. MIT License
122
+ ([`LICENSES/Octicons-MIT.txt`](./LICENSES/Octicons-MIT.txt)).
123
+
124
+ ## ray-tracing-renderer
125
+
126
+ Parts of the original renderer are adapted from
127
+ [hoverinc/ray-tracing-renderer](https://github.com/hoverinc/ray-tracing-renderer),
128
+ npm version 0.10.15. Copyright (c) 2019 HOVER. MIT License
129
+ ([`LICENSES/RayTracingRenderer-MIT.txt`](./LICENSES/RayTracingRenderer-MIT.txt)).
130
+
131
+ The adapted files under `src/renderer/` include:
132
+
133
+ - `TileRender.ts`, `envMapDistribution.ts`,
134
+ `mergeMeshesToGeometry.ts`, `envMapCreation.ts`, `MaterialTable.ts`,
135
+ `texturesFromMaterials.ts`, `util.ts`, and parts of
136
+ `WGPURenderingPipeline.ts` / `WebGLRenderingPipeline.ts`.
137
+ - `glsl/chunks/{intersect,envMap,rayTraceCore,materialBuffer,textureLinear,common,sampleShadowCatcher}.glsl.ts`,
138
+ `glsl/rayTrace.frag.ts`, and `glsl/shadowCatcher.frag.ts`.
139
+ - WGSL ports: `wgsl/chunks/{intersect,envMap,materialBuffer,sampleShadowCatcher}.wgsl.ts`
140
+ and `wgsl/rayTrace.compute.ts`.
141
+
142
+ ## Bundled dependencies (dist/ only)
143
+
144
+ The standalone `dist/mutracer.{es,umd}.js` builds and their chunks bundle these
145
+ MIT-licensed dependencies. The `lib/` ESM modules keep npm dependency imports.
146
+
147
+ - [gl-matrix](https://github.com/toji/gl-matrix): Copyright (c) 2015-2025,
148
+ Brandon Jones, Colin MacKenzie IV.
149
+ [`LICENSES/GlMatrix-MIT.txt`](./LICENSES/GlMatrix-MIT.txt).
150
+ - [webgpu-utils](https://github.com/greggman/webgpu-utils): Copyright (c) 2022
151
+ Gregg Tavares.
152
+ [`LICENSES/WebGPUUtils-MIT.txt`](./LICENSES/WebGPUUtils-MIT.txt).
153
+ - [oidn-web](https://github.com/pissang/oidn-web): Copyright (c) 2024 pissang.
154
+ [`LICENSES/OIDNWeb-MIT.txt`](./LICENSES/OIDNWeb-MIT.txt).
155
+
156
+ The optional TinyBVH wasm is inlined in the standalone build. Its copyright
157
+ and MIT license are described in the TinyBVH section above; the full text is
158
+ also included in [`LICENSES/TinyBVH-MIT.txt`](./LICENSES/TinyBVH-MIT.txt).
159
+ These license files are copied without modification from the installed
160
+ packages and the checked-in TinyBVH license.