@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.
- package/LICENSE +21 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/GLSL-PathTracer-MIT.txt +21 -0
- package/LICENSES/GlMatrix-MIT.txt +19 -0
- package/LICENSES/KinoBloom-MIT.txt +21 -0
- package/LICENSES/OIDNWeb-MIT.txt +21 -0
- package/LICENSES/Octicons-MIT.txt +21 -0
- package/LICENSES/RayTracingRenderer-MIT.txt +21 -0
- package/LICENSES/TinyBVH-MIT.txt +21 -0
- package/LICENSES/WebGPUUtils-MIT.txt +21 -0
- package/LICENSES/ZetaRay-MIT.txt +21 -0
- package/README.md +240 -2
- package/THIRD_PARTY_NOTICES.md +160 -0
- package/dist/assets/bvh.worker.js +1 -0
- package/dist/mutracer.umd.js +14360 -0
- package/docs/api.md +394 -0
- package/docs/bvh.md +141 -0
- package/docs/denoising.md +301 -0
- package/docs/getting-started.md +308 -0
- package/docs/materials.md +281 -0
- package/docs/performance.md +85 -0
- package/docs/post-processing.md +87 -0
- package/docs/progressive-rendering.md +160 -0
- package/docs/sampling.md +40 -0
- package/docs/threejs.md +274 -0
- package/docs/todo.md +61 -0
- package/docs/updates.md +208 -0
- package/lib/Display.d.ts +72 -0
- package/lib/Display.js +123 -0
- package/lib/Display.js.map +1 -0
- package/lib/Engine.d.ts +161 -0
- package/lib/Engine.js +681 -0
- package/lib/Engine.js.map +1 -0
- package/lib/Render.d.ts +265 -0
- package/lib/Render.js +742 -0
- package/lib/Render.js.map +1 -0
- package/lib/RenderLoop.d.ts +79 -0
- package/lib/RenderLoop.js +236 -0
- package/lib/RenderLoop.js.map +1 -0
- package/lib/Sync.d.ts +19 -0
- package/lib/Sync.js +19 -0
- package/lib/Sync.js.map +1 -0
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -0
- package/lib/main.d.ts +56 -0
- package/lib/main.js +43 -0
- package/lib/main.js.map +1 -0
- package/lib/math.d.ts +23 -0
- package/lib/math.js +56 -0
- package/lib/math.js.map +1 -0
- package/lib/oidn.d.ts +45 -0
- package/lib/oidn.js +42 -0
- package/lib/oidn.js.map +1 -0
- package/lib/oidnBundledWeights.cdn.d.ts +2 -0
- package/lib/oidnBundledWeights.cdn.js +5 -0
- package/lib/oidnBundledWeights.cdn.js.map +1 -0
- package/lib/oidnBundledWeights.d.ts +2 -0
- package/lib/oidnBundledWeights.js +4 -0
- package/lib/oidnBundledWeights.js.map +1 -0
- package/lib/renderer/DisplayPostProcess.d.ts +14 -0
- package/lib/renderer/DisplayPostProcess.js +41 -0
- package/lib/renderer/DisplayPostProcess.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +119 -0
- package/lib/renderer/MaterialTable.js +550 -0
- package/lib/renderer/MaterialTable.js.map +1 -0
- package/lib/renderer/OfflineAdaptiveSampling.d.ts +47 -0
- package/lib/renderer/OfflineAdaptiveSampling.js +36 -0
- package/lib/renderer/OfflineAdaptiveSampling.js.map +1 -0
- package/lib/renderer/RenderingPipeline.d.ts +232 -0
- package/lib/renderer/RenderingPipeline.js +18 -0
- package/lib/renderer/RenderingPipeline.js.map +1 -0
- package/lib/renderer/ScratchPool.d.ts +13 -0
- package/lib/renderer/ScratchPool.js +21 -0
- package/lib/renderer/ScratchPool.js.map +1 -0
- package/lib/renderer/TileRender.d.ts +44 -0
- package/lib/renderer/TileRender.js +283 -0
- package/lib/renderer/TileRender.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.d.ts +17 -0
- package/lib/renderer/WGPUBloomPass.js +243 -0
- package/lib/renderer/WGPUBloomPass.js.map +1 -0
- package/lib/renderer/WGPUCanvasSurface.d.ts +21 -0
- package/lib/renderer/WGPUCanvasSurface.js +48 -0
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -0
- package/lib/renderer/WGPUComputePass.d.ts +73 -0
- package/lib/renderer/WGPUComputePass.js +317 -0
- package/lib/renderer/WGPUComputePass.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.d.ts +73 -0
- package/lib/renderer/WGPUFullQuadPass.js +389 -0
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -0
- package/lib/renderer/WGPUHDRPeakMeter.d.ts +19 -0
- package/lib/renderer/WGPUHDRPeakMeter.js +112 -0
- package/lib/renderer/WGPUHDRPeakMeter.js.map +1 -0
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +61 -0
- package/lib/renderer/WGPUJNLMDenoiser.js +412 -0
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +44 -0
- package/lib/renderer/WGPURayTraceOutput.js +368 -0
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -0
- package/lib/renderer/WGPURayTracePass.d.ts +284 -0
- package/lib/renderer/WGPURayTracePass.js +2323 -0
- package/lib/renderer/WGPURayTracePass.js.map +1 -0
- package/lib/renderer/WGPURenderingPipeline.d.ts +9 -0
- package/lib/renderer/WGPURenderingPipeline.js +1448 -0
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -0
- package/lib/renderer/WGPUSceneFeatures.d.ts +3 -0
- package/lib/renderer/WGPUSceneFeatures.js +20 -0
- package/lib/renderer/WGPUSceneFeatures.js.map +1 -0
- package/lib/renderer/WGPUScratchBuffer.d.ts +9 -0
- package/lib/renderer/WGPUScratchBuffer.js +21 -0
- package/lib/renderer/WGPUScratchBuffer.js.map +1 -0
- package/lib/renderer/WGPUScratchTexture.d.ts +10 -0
- package/lib/renderer/WGPUScratchTexture.js +27 -0
- package/lib/renderer/WGPUScratchTexture.js.map +1 -0
- package/lib/renderer/WGPUShaderCache.d.ts +26 -0
- package/lib/renderer/WGPUShaderCache.js +103 -0
- package/lib/renderer/WGPUShaderCache.js.map +1 -0
- package/lib/renderer/WebGLBloomPass.d.ts +18 -0
- package/lib/renderer/WebGLBloomPass.js +113 -0
- package/lib/renderer/WebGLBloomPass.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +65 -0
- package/lib/renderer/WebGLFullQuadPass.js +208 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -0
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +32 -0
- package/lib/renderer/WebGLJNLMDenoiser.js +328 -0
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WebGLRayTraceOutputPass.d.ts +20 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js +106 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -0
- package/lib/renderer/WebGLRayTracePass.d.ts +142 -0
- package/lib/renderer/WebGLRayTracePass.js +845 -0
- package/lib/renderer/WebGLRayTracePass.js.map +1 -0
- package/lib/renderer/WebGLReadback.d.ts +4 -0
- package/lib/renderer/WebGLReadback.js +75 -0
- package/lib/renderer/WebGLReadback.js.map +1 -0
- package/lib/renderer/WebGLRenderingPipeline.d.ts +4 -0
- package/lib/renderer/WebGLRenderingPipeline.js +510 -0
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -0
- package/lib/renderer/WebGLScratchCopy.d.ts +10 -0
- package/lib/renderer/WebGLScratchCopy.js +27 -0
- package/lib/renderer/WebGLScratchCopy.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +26 -0
- package/lib/renderer/accumulationTarget.js +2 -0
- package/lib/renderer/accumulationTarget.js.map +1 -0
- package/lib/renderer/binnedSahBvh.d.ts +31 -0
- package/lib/renderer/binnedSahBvh.js +263 -0
- package/lib/renderer/binnedSahBvh.js.map +1 -0
- package/lib/renderer/bvh.worker.d.ts +1 -0
- package/lib/renderer/bvh.worker.js +16 -0
- package/lib/renderer/bvh.worker.js.map +1 -0
- package/lib/renderer/bvhAccel.d.ts +81 -0
- package/lib/renderer/bvhAccel.js +621 -0
- package/lib/renderer/bvhAccel.js.map +1 -0
- package/lib/renderer/bvhWorkerBuild.d.ts +12 -0
- package/lib/renderer/bvhWorkerBuild.js +17 -0
- package/lib/renderer/bvhWorkerBuild.js.map +1 -0
- package/lib/renderer/bvhWorkerClient.d.ts +57 -0
- package/lib/renderer/bvhWorkerClient.js +166 -0
- package/lib/renderer/bvhWorkerClient.js.map +1 -0
- package/lib/renderer/cameraLens.d.ts +5 -0
- package/lib/renderer/cameraLens.js +15 -0
- package/lib/renderer/cameraLens.js.map +1 -0
- package/lib/renderer/cameraSnapshot.d.ts +3 -0
- package/lib/renderer/cameraSnapshot.js +7 -0
- package/lib/renderer/cameraSnapshot.js.map +1 -0
- package/lib/renderer/committedScene.d.ts +13 -0
- package/lib/renderer/committedScene.js +126 -0
- package/lib/renderer/committedScene.js.map +1 -0
- package/lib/renderer/dataTextureUtil.d.ts +32 -0
- package/lib/renderer/dataTextureUtil.js +46 -0
- package/lib/renderer/dataTextureUtil.js.map +1 -0
- package/lib/renderer/denoiser.d.ts +65 -0
- package/lib/renderer/denoiser.js +2 -0
- package/lib/renderer/denoiser.js.map +1 -0
- package/lib/renderer/depthQuery.d.ts +14 -0
- package/lib/renderer/depthQuery.js +14 -0
- package/lib/renderer/depthQuery.js.map +1 -0
- package/lib/renderer/deviceRequirements.d.ts +23 -0
- package/lib/renderer/deviceRequirements.js +50 -0
- package/lib/renderer/deviceRequirements.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +10 -0
- package/lib/renderer/envMapCreation.js +96 -0
- package/lib/renderer/envMapCreation.js.map +1 -0
- package/lib/renderer/envMapDistribution.d.ts +9 -0
- package/lib/renderer/envMapDistribution.js +107 -0
- package/lib/renderer/envMapDistribution.js.map +1 -0
- package/lib/renderer/float16.d.ts +1 -0
- package/lib/renderer/float16.js +19 -0
- package/lib/renderer/float16.js.map +1 -0
- package/lib/renderer/geometryBvh.d.ts +11 -0
- package/lib/renderer/geometryBvh.js +24 -0
- package/lib/renderer/geometryBvh.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +28 -0
- package/lib/renderer/geometryUpdates.js +131 -0
- package/lib/renderer/geometryUpdates.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +37 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/common.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/common.glsl.js +17 -0
- package/lib/renderer/glsl/chunks/common.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +192 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js +1091 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +371 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +1767 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rand.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js +26 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/random.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/random.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/random.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +287 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +254 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +279 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +48 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js +194 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js +170 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +72 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/depthQuery.frag.d.ts +3 -0
- package/lib/renderer/glsl/depthQuery.frag.js +55 -0
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.d.ts +6 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +46 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -0
- package/lib/renderer/glsl/rayTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/rayTrace.frag.js +623 -0
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/shadowCatcher.frag.d.ts +3 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js +119 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -0
- package/lib/renderer/glsl/webglPipeline.frag.d.ts +4 -0
- package/lib/renderer/glsl/webglPipeline.frag.js +208 -0
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -0
- package/lib/renderer/gpuMemory.d.ts +2 -0
- package/lib/renderer/gpuMemory.js +10 -0
- package/lib/renderer/gpuMemory.js.map +1 -0
- package/lib/renderer/halton.d.ts +1 -0
- package/lib/renderer/halton.js +15 -0
- package/lib/renderer/halton.js.map +1 -0
- package/lib/renderer/jnlm.d.ts +85 -0
- package/lib/renderer/jnlm.js +87 -0
- package/lib/renderer/jnlm.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +75 -0
- package/lib/renderer/lightSampling.js +305 -0
- package/lib/renderer/lightSampling.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +26 -0
- package/lib/renderer/lightsUtil.js +154 -0
- package/lib/renderer/lightsUtil.js.map +1 -0
- package/lib/renderer/materialChanges.d.ts +13 -0
- package/lib/renderer/materialChanges.js +59 -0
- package/lib/renderer/materialChanges.js.map +1 -0
- package/lib/renderer/materialComparison.generated.d.ts +5 -0
- package/lib/renderer/materialComparison.generated.js +655 -0
- package/lib/renderer/materialComparison.generated.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +6 -0
- package/lib/renderer/materialConstants.js +3 -0
- package/lib/renderer/materialConstants.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +9 -0
- package/lib/renderer/materialEmission.js +21 -0
- package/lib/renderer/materialEmission.js.map +1 -0
- package/lib/renderer/materialIndices.d.ts +7 -0
- package/lib/renderer/materialIndices.js +34 -0
- package/lib/renderer/materialIndices.js.map +1 -0
- package/lib/renderer/materialLayout.d.ts +102 -0
- package/lib/renderer/materialLayout.js +189 -0
- package/lib/renderer/materialLayout.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +537 -0
- package/lib/renderer/materialTextureSlots.js +219 -0
- package/lib/renderer/materialTextureSlots.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.d.ts +8 -0
- package/lib/renderer/mergeMeshesToGeometry.js +236 -0
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -0
- package/lib/renderer/meshInstances.d.ts +23 -0
- package/lib/renderer/meshInstances.js +66 -0
- package/lib/renderer/meshInstances.js.map +1 -0
- package/lib/renderer/meshMembership.d.ts +10 -0
- package/lib/renderer/meshMembership.js +72 -0
- package/lib/renderer/meshMembership.js.map +1 -0
- package/lib/renderer/oidnNetwork.d.ts +20 -0
- package/lib/renderer/oidnNetwork.js +123 -0
- package/lib/renderer/oidnNetwork.js.map +1 -0
- package/lib/renderer/openPbrEnergyLut.d.ts +32 -0
- package/lib/renderer/openPbrEnergyLut.js +965 -0
- package/lib/renderer/openPbrEnergyLut.js.map +1 -0
- package/lib/renderer/pathLimits.d.ts +4 -0
- package/lib/renderer/pathLimits.js +7 -0
- package/lib/renderer/pathLimits.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +110 -0
- package/lib/renderer/prepareMeshBVH.js +857 -0
- package/lib/renderer/prepareMeshBVH.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +11 -0
- package/lib/renderer/progressiveScheduler.js +19 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -0
- package/lib/renderer/renderPipeline.d.ts +57 -0
- package/lib/renderer/renderPipeline.js +49 -0
- package/lib/renderer/renderPipeline.js.map +1 -0
- package/lib/renderer/sampling.d.ts +10 -0
- package/lib/renderer/sampling.js +28 -0
- package/lib/renderer/sampling.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +29 -0
- package/lib/renderer/sceneChangeDetector.js +232 -0
- package/lib/renderer/sceneChangeDetector.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +14 -0
- package/lib/renderer/sceneLightChanges.js +34 -0
- package/lib/renderer/sceneLightChanges.js.map +1 -0
- package/lib/renderer/scratchSampling.d.ts +3 -0
- package/lib/renderer/scratchSampling.js +39 -0
- package/lib/renderer/scratchSampling.js.map +1 -0
- package/lib/renderer/shader.d.ts +37 -0
- package/lib/renderer/shader.js +41 -0
- package/lib/renderer/shader.js.map +1 -0
- package/lib/renderer/staticBvhPreparation.d.ts +24 -0
- package/lib/renderer/staticBvhPreparation.js +116 -0
- package/lib/renderer/staticBvhPreparation.js.map +1 -0
- package/lib/renderer/textureRegion.d.ts +8 -0
- package/lib/renderer/textureRegion.js +9 -0
- package/lib/renderer/textureRegion.js.map +1 -0
- package/lib/renderer/texturesFromMaterials.d.ts +6 -0
- package/lib/renderer/texturesFromMaterials.js +37 -0
- package/lib/renderer/texturesFromMaterials.js.map +1 -0
- package/lib/renderer/util.d.ts +17 -0
- package/lib/renderer/util.js +56 -0
- package/lib/renderer/util.js.map +1 -0
- package/lib/renderer/webgl.d.ts +131 -0
- package/lib/renderer/webgl.js +586 -0
- package/lib/renderer/webgl.js.map +1 -0
- package/lib/renderer/webglShaders.d.ts +4 -0
- package/lib/renderer/webglShaders.js +41 -0
- package/lib/renderer/webglShaders.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +23 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +128 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +1441 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +85 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +7 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +315 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +1737 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +352 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +25 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js +2 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +328 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +400 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +439 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +40 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +198 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +170 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +42 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +218 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js +28 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js +34 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.d.ts +2 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +108 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +16 -0
- package/lib/renderer/wgsl/rayTrace.compute.js +927 -0
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -0
- package/lib/scene/AmbientLight.d.ts +17 -0
- package/lib/scene/AmbientLight.js +15 -0
- package/lib/scene/AmbientLight.js.map +1 -0
- package/lib/scene/Camera.d.ts +78 -0
- package/lib/scene/Camera.js +111 -0
- package/lib/scene/Camera.js.map +1 -0
- package/lib/scene/DirectionalLight.d.ts +18 -0
- package/lib/scene/DirectionalLight.js +17 -0
- package/lib/scene/DirectionalLight.js.map +1 -0
- package/lib/scene/EnvironmentLight.d.ts +14 -0
- package/lib/scene/EnvironmentLight.js +14 -0
- package/lib/scene/EnvironmentLight.js.map +1 -0
- package/lib/scene/Geometry.d.ts +87 -0
- package/lib/scene/Geometry.js +108 -0
- package/lib/scene/Geometry.js.map +1 -0
- package/lib/scene/IESProfile.d.ts +19 -0
- package/lib/scene/IESProfile.js +165 -0
- package/lib/scene/IESProfile.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +43 -0
- package/lib/scene/InstancedMesh.js +79 -0
- package/lib/scene/InstancedMesh.js.map +1 -0
- package/lib/scene/Mesh.d.ts +14 -0
- package/lib/scene/Mesh.js +17 -0
- package/lib/scene/Mesh.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +224 -0
- package/lib/scene/OpenPBRMaterial.js +240 -0
- package/lib/scene/OpenPBRMaterial.js.map +1 -0
- package/lib/scene/RectLight.d.ts +31 -0
- package/lib/scene/RectLight.js +26 -0
- package/lib/scene/RectLight.js.map +1 -0
- package/lib/scene/Scene.d.ts +55 -0
- package/lib/scene/Scene.js +2 -0
- package/lib/scene/Scene.js.map +1 -0
- package/lib/scene/SceneNode.d.ts +16 -0
- package/lib/scene/SceneNode.js +33 -0
- package/lib/scene/SceneNode.js.map +1 -0
- package/lib/scene/SphereLight.d.ts +22 -0
- package/lib/scene/SphereLight.js +20 -0
- package/lib/scene/SphereLight.js.map +1 -0
- package/lib/scene/SpotLight.d.ts +35 -0
- package/lib/scene/SpotLight.js +29 -0
- package/lib/scene/SpotLight.js.map +1 -0
- package/lib/scene/Texture.d.ts +38 -0
- package/lib/scene/Texture.js +37 -0
- package/lib/scene/Texture.js.map +1 -0
- package/lib/scene/anisotropyParameters.d.ts +1 -0
- package/lib/scene/anisotropyParameters.js +13 -0
- package/lib/scene/anisotropyParameters.js.map +1 -0
- package/lib/scene/geometryChanges.d.ts +5 -0
- package/lib/scene/geometryChanges.js +18 -0
- package/lib/scene/geometryChanges.js.map +1 -0
- package/lib/scene/materialTextureNames.d.ts +2 -0
- package/lib/scene/materialTextureNames.js +9 -0
- package/lib/scene/materialTextureNames.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +400 -0
- package/lib/scene/openPbrSchema.js +149 -0
- package/lib/scene/openPbrSchema.js.map +1 -0
- package/lib/scene/thinFilmParameters.d.ts +4 -0
- package/lib/scene/thinFilmParameters.js +12 -0
- package/lib/scene/thinFilmParameters.js.map +1 -0
- package/lib/settings/display.d.ts +118 -0
- package/lib/settings/display.js +34 -0
- package/lib/settings/display.js.map +1 -0
- package/lib/settings/engine.d.ts +37 -0
- package/lib/settings/engine.js +26 -0
- package/lib/settings/engine.js.map +1 -0
- package/lib/settings/render.d.ts +178 -0
- package/lib/settings/render.js +36 -0
- package/lib/settings/render.js.map +1 -0
- package/lib/tinybvh/LICENSE +21 -0
- package/lib/tinybvh/TinyBvhBuilder.d.ts +17 -0
- package/lib/tinybvh/TinyBvhBuilder.js +211 -0
- package/lib/tinybvh/TinyBvhBuilder.js.map +1 -0
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/types.d.ts +13 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/util/canvas.d.ts +2 -0
- package/lib/util/canvas.js +13 -0
- package/lib/util/canvas.js.map +1 -0
- package/lib/util/commonGeometry.d.ts +15 -0
- package/lib/util/commonGeometry.js +240 -0
- package/lib/util/commonGeometry.js.map +1 -0
- package/lib/util/events.d.ts +7 -0
- package/lib/util/events.js +23 -0
- package/lib/util/events.js.map +1 -0
- package/lib/util/frame.d.ts +2 -0
- package/lib/util/frame.js +10 -0
- package/lib/util/frame.js.map +1 -0
- package/lib/util/fromTHREE.d.ts +105 -0
- package/lib/util/fromTHREE.js +1111 -0
- package/lib/util/fromTHREE.js.map +1 -0
- package/lib/util/geometry.d.ts +13 -0
- package/lib/util/geometry.js +292 -0
- package/lib/util/geometry.js.map +1 -0
- package/lib/util/loadRGBE.d.ts +7 -0
- package/lib/util/loadRGBE.js +168 -0
- package/lib/util/loadRGBE.js.map +1 -0
- package/lib/util/math.d.ts +8 -0
- package/lib/util/math.js +64 -0
- package/lib/util/math.js.map +1 -0
- package/lib/util/mesh.d.ts +7 -0
- package/lib/util/mesh.js +20 -0
- package/lib/util/mesh.js.map +1 -0
- package/lib/util/threeDeformation.d.ts +20 -0
- package/lib/util/threeDeformation.js +218 -0
- package/lib/util/threeDeformation.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.js +3 -0
- package/lib/version.js.map +1 -0
- package/llms.txt +62 -0
- package/oidn/weights/LICENSE.txt +202 -0
- package/oidn/weights/README.md +43 -0
- package/oidn/weights/rt_hdr_alb_nrm.tza +0 -0
- package/oidn/weights/rt_hdr_alb_nrm_small.tza +0 -0
- package/package.json +124 -4
package/README.md
CHANGED
|
@@ -1,3 +1,241 @@
|
|
|
1
|
-
|
|
1
|
+
<h1><img src="site/src/assets/mutracer-logo.png" alt="" width="40" align="absmiddle" /> MuTracer</h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@meimu/mutracer)
|
|
4
|
+
[](./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.
|