@meimu/mutracer 0.1.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSES/Classroom-CC0.txt +121 -0
- package/README.md +10 -7
- package/THIRD_PARTY_NOTICES.md +13 -8
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +12316 -9228
- package/docs/api.md +232 -21
- package/docs/caustics.md +80 -0
- package/docs/denoising.md +30 -15
- package/docs/materials.md +6 -5
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +73 -1
- package/docs/technical/continuous-spectrum.md +93 -0
- package/docs/threejs.md +14 -5
- package/docs/updates.md +46 -2
- package/docs/viewer-checklist.md +65 -0
- package/docs/viewer.md +15 -8
- package/lib/Display.d.ts +13 -2
- package/lib/Display.js +28 -7
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +4 -0
- package/lib/Engine.js +99 -37
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +98 -15
- package/lib/Render.js +275 -27
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +11 -1
- package/lib/RenderLoop.js +120 -15
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +6 -3
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/math/access.d.ts +4 -0
- package/lib/math/access.js +10 -0
- package/lib/math/access.js.map +1 -0
- package/lib/math/mat3.d.ts +4 -0
- package/lib/math/mat3.js +54 -0
- package/lib/math/mat3.js.map +1 -0
- package/lib/math/mat4.d.ts +19 -0
- package/lib/math/mat4.js +413 -0
- package/lib/math/mat4.js.map +1 -0
- package/lib/math/storage.d.ts +6 -0
- package/lib/math/storage.js +22 -0
- package/lib/math/storage.js.map +1 -0
- package/lib/math/types.d.ts +3 -0
- package/lib/math/types.js +2 -0
- package/lib/math/types.js.map +1 -0
- package/lib/math/vec2.d.ts +13 -0
- package/lib/math/vec2.js +52 -0
- package/lib/math/vec2.js.map +1 -0
- package/lib/math/vec3.d.ts +23 -0
- package/lib/math/vec3.js +139 -0
- package/lib/math/vec3.js.map +1 -0
- package/lib/math.d.ts +5 -17
- package/lib/math.js +5 -55
- package/lib/math.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidn.js +4 -2
- package/lib/oidn.js.map +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
- package/lib/renderer/AovPrimitiveCache.js +48 -0
- package/lib/renderer/AovPrimitiveCache.js.map +1 -0
- package/lib/renderer/Box3.d.ts +5 -0
- package/lib/renderer/Box3.js +9 -0
- package/lib/renderer/Box3.js.map +1 -0
- package/lib/renderer/GPUTraceQueue.d.ts +11 -0
- package/lib/renderer/GPUTraceQueue.js +33 -0
- package/lib/renderer/GPUTraceQueue.js.map +1 -0
- package/lib/renderer/MaterialData.d.ts +15 -0
- package/lib/renderer/MaterialData.js +61 -0
- package/lib/renderer/MaterialData.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +11 -98
- package/lib/renderer/MaterialTable.js +34 -412
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +36 -13
- package/lib/renderer/RenderingPipeline.js +1 -17
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +0 -1
- package/lib/renderer/TileRender.js +14 -1
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +39 -0
- package/lib/renderer/WGPUAov.js +239 -0
- package/lib/renderer/WGPUAov.js.map +1 -0
- package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
- package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
- package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
- package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
- package/lib/renderer/WGPUBindlessTextures.js +180 -0
- package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.js +17 -97
- package/lib/renderer/WGPUBloomPass.js.map +1 -1
- package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
- package/lib/renderer/WGPUCausticLightPass.js +217 -0
- package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
- package/lib/renderer/WGPUComputePass.d.ts +1 -1
- package/lib/renderer/WGPUComputePass.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
- package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.js +10 -9
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
- package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
- package/lib/renderer/WGPUPhotonMap.js +191 -0
- package/lib/renderer/WGPUPhotonMap.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
- package/lib/renderer/WGPURayTraceOutput.js +132 -29
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +83 -56
- package/lib/renderer/WGPURayTracePass.js +884 -837
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
- package/lib/renderer/WGPURenderingPipeline.js +297 -82
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUShaderCache.d.ts +2 -2
- package/lib/renderer/WGPUShaderCache.js +10 -5
- package/lib/renderer/WGPUShaderCache.js.map +1 -1
- package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
- package/lib/renderer/WGPUShaderCapabilities.js +54 -0
- package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
- package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
- package/lib/renderer/WGPUSkyBaker.js +85 -0
- package/lib/renderer/WGPUSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLAov.d.ts +41 -0
- package/lib/renderer/WebGLAov.js +106 -0
- package/lib/renderer/WebGLAov.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +7 -4
- package/lib/renderer/WebGLFullQuadPass.js +22 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
- package/lib/renderer/WebGLRayTracePass.d.ts +18 -3
- package/lib/renderer/WebGLRayTracePass.js +121 -9
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +126 -22
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
- package/lib/renderer/WebGLSkyBaker.js +422 -0
- package/lib/renderer/WebGLSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLSkySource.d.ts +9 -0
- package/lib/renderer/WebGLSkySource.js +28 -0
- package/lib/renderer/WebGLSkySource.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +6 -0
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/aov.d.ts +42 -0
- package/lib/renderer/aov.js +50 -0
- package/lib/renderer/aov.js.map +1 -0
- package/lib/renderer/aovDisplay.d.ts +14 -0
- package/lib/renderer/aovDisplay.js +32 -0
- package/lib/renderer/aovDisplay.js.map +1 -0
- package/lib/renderer/aovScene.d.ts +21 -0
- package/lib/renderer/aovScene.js +139 -0
- package/lib/renderer/aovScene.js.map +1 -0
- package/lib/renderer/binnedSahBvh.js +2 -1
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +20 -10
- package/lib/renderer/bvhAccel.js +168 -58
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
- package/lib/renderer/cameraSnapshot.js +2 -1
- package/lib/renderer/cameraSnapshot.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +2 -0
- package/lib/renderer/cameraUniform.js +12 -0
- package/lib/renderer/cameraUniform.js.map +1 -0
- package/lib/renderer/causticDiagnostics.d.ts +31 -0
- package/lib/renderer/causticDiagnostics.js +5 -0
- package/lib/renderer/causticDiagnostics.js.map +1 -0
- package/lib/renderer/causticEmission.d.ts +10 -0
- package/lib/renderer/causticEmission.js +40 -0
- package/lib/renderer/causticEmission.js.map +1 -0
- package/lib/renderer/causticUniform.d.ts +12 -0
- package/lib/renderer/causticUniform.js +22 -0
- package/lib/renderer/causticUniform.js.map +1 -0
- package/lib/renderer/caustics.d.ts +16 -0
- package/lib/renderer/caustics.js +93 -0
- package/lib/renderer/caustics.js.map +1 -0
- package/lib/renderer/committedScene.js +4 -0
- package/lib/renderer/committedScene.js.map +1 -1
- package/lib/renderer/denoiser.d.ts +3 -11
- package/lib/renderer/denoiser.js.map +1 -1
- package/lib/renderer/depthQuery.js +4 -1
- package/lib/renderer/depthQuery.js.map +1 -1
- package/lib/renderer/displacementPreparation.d.ts +11 -0
- package/lib/renderer/displacementPreparation.js +351 -0
- package/lib/renderer/displacementPreparation.js.map +1 -0
- package/lib/renderer/displacementRange.d.ts +1 -0
- package/lib/renderer/displacementRange.js +9 -0
- package/lib/renderer/displacementRange.js.map +1 -0
- package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
- package/lib/renderer/displayParityDiagnostics.js +2 -0
- package/lib/renderer/displayParityDiagnostics.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +9 -8
- package/lib/renderer/envMapCreation.js +36 -12
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/envMapDistribution.d.ts +12 -2
- package/lib/renderer/envMapDistribution.js +43 -34
- package/lib/renderer/envMapDistribution.js.map +1 -1
- package/lib/renderer/geometryBvhBounds.d.ts +4 -0
- package/lib/renderer/geometryBvhBounds.js +82 -0
- package/lib/renderer/geometryBvhBounds.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +32 -0
- package/lib/renderer/geometryUpdateState.js +2 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +17 -9
- package/lib/renderer/geometryUpdates.js +92 -33
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
- package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
- package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/aovTrace.frag.js +121 -0
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -67
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +432 -434
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +160 -157
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +802 -802
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +72 -67
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +143 -120
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +21 -18
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampling.glsl.js +91 -94
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
- package/lib/renderer/glsl/depthQuery.frag.js +7 -7
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
- package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +271 -248
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +37 -32
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
- package/lib/renderer/lightConstants.d.ts +10 -0
- package/lib/renderer/lightConstants.js +11 -0
- package/lib/renderer/lightConstants.js.map +1 -0
- package/lib/renderer/lightCore.d.ts +12 -0
- package/lib/renderer/lightCore.js +13 -0
- package/lib/renderer/lightCore.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +22 -18
- package/lib/renderer/lightSampling.js +135 -62
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/lightsData.d.ts +21 -0
- package/lib/renderer/lightsData.js +192 -0
- package/lib/renderer/lightsData.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +3 -26
- package/lib/renderer/lightsUtil.js +3 -153
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialBufferData.d.ts +70 -0
- package/lib/renderer/materialBufferData.js +2 -0
- package/lib/renderer/materialBufferData.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +11 -0
- package/lib/renderer/materialConstants.js +11 -0
- package/lib/renderer/materialConstants.js.map +1 -1
- package/lib/renderer/materialCore.d.ts +8 -0
- package/lib/renderer/materialCore.js +9 -0
- package/lib/renderer/materialCore.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +2 -2
- package/lib/renderer/materialEmission.js +3 -3
- package/lib/renderer/materialEmission.js.map +1 -1
- package/lib/renderer/materialLayout.d.ts +2 -101
- package/lib/renderer/materialLayout.js +110 -172
- package/lib/renderer/materialLayout.js.map +1 -1
- package/lib/renderer/materialLayoutSchema.d.ts +26 -0
- package/lib/renderer/materialLayoutSchema.js +172 -0
- package/lib/renderer/materialLayoutSchema.js.map +1 -0
- package/lib/renderer/materialParams.d.ts +69 -0
- package/lib/renderer/materialParams.js +272 -0
- package/lib/renderer/materialParams.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +14 -324
- package/lib/renderer/materialTextureSlots.js +21 -8
- package/lib/renderer/materialTextureSlots.js.map +1 -1
- package/lib/renderer/materialTextures.d.ts +6 -0
- package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
- package/lib/renderer/materialTextures.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.js +6 -147
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
- package/lib/renderer/meshInstances.d.ts +4 -21
- package/lib/renderer/meshInstances.js +10 -56
- package/lib/renderer/meshInstances.js.map +1 -1
- package/lib/renderer/oidnNetwork.d.ts +2 -2
- package/lib/renderer/oidnNetwork.js +1 -1
- package/lib/renderer/oidnNetwork.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.js +850 -846
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/ownedDenoiser.d.ts +9 -0
- package/lib/renderer/ownedDenoiser.js +2 -0
- package/lib/renderer/ownedDenoiser.js.map +1 -0
- package/lib/renderer/packedMeshInstances.d.ts +23 -0
- package/lib/renderer/packedMeshInstances.js +80 -0
- package/lib/renderer/packedMeshInstances.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +12 -47
- package/lib/renderer/prepareMeshBVH.js +21 -642
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
- package/lib/renderer/proceduralEnvironmentPower.js +8 -0
- package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +1 -0
- package/lib/renderer/progressiveScheduler.js +7 -3
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +4 -1
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/renderingLimits.d.ts +9 -0
- package/lib/renderer/renderingLimits.js +18 -0
- package/lib/renderer/renderingLimits.js.map +1 -0
- package/lib/renderer/researchTransport.d.ts +31 -0
- package/lib/renderer/researchTransport.js +5 -0
- package/lib/renderer/researchTransport.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +73 -0
- package/lib/renderer/sceneAssembly.js +109 -0
- package/lib/renderer/sceneAssembly.js.map +1 -0
- package/lib/renderer/sceneChangeCore.d.ts +39 -0
- package/lib/renderer/sceneChangeCore.js +307 -0
- package/lib/renderer/sceneChangeCore.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +3 -6
- package/lib/renderer/sceneChangeDetector.js +24 -150
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +119 -0
- package/lib/renderer/sceneLayoutSchema.js +111 -0
- package/lib/renderer/sceneLayoutSchema.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +3 -3
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +55 -0
- package/lib/renderer/scenePreparation.js +360 -0
- package/lib/renderer/scenePreparation.js.map +1 -0
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/scratchSampling.js.map +1 -1
- package/lib/renderer/shader.d.ts +2 -0
- package/lib/renderer/shader.js +2 -0
- package/lib/renderer/shader.js.map +1 -1
- package/lib/renderer/shaderCapabilities.d.ts +23 -0
- package/lib/renderer/shaderCapabilities.js +55 -0
- package/lib/renderer/shaderCapabilities.js.map +1 -0
- package/lib/renderer/shaderCapacity.d.ts +2 -0
- package/lib/renderer/shaderCapacity.js +5 -0
- package/lib/renderer/shaderCapacity.js.map +1 -0
- package/lib/renderer/skyModel.d.ts +9 -0
- package/lib/renderer/skyModel.js +10 -0
- package/lib/renderer/skyModel.js.map +1 -0
- package/lib/renderer/spectrum.d.ts +21 -0
- package/lib/renderer/spectrum.js +154 -0
- package/lib/renderer/spectrum.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +60 -0
- package/lib/renderer/textureAtlas.js +145 -0
- package/lib/renderer/textureAtlas.js.map +1 -0
- package/lib/renderer/textureAtlasPixels.d.ts +7 -0
- package/lib/renderer/textureAtlasPixels.js +68 -0
- package/lib/renderer/textureAtlasPixels.js.map +1 -0
- package/lib/renderer/util.d.ts +1 -1
- package/lib/renderer/util.js.map +1 -1
- package/lib/renderer/webgl.d.ts +9 -2
- package/lib/renderer/webgl.js +54 -9
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/webglLightSampling.d.ts +39 -0
- package/lib/renderer/webglLightSampling.js +15 -0
- package/lib/renderer/webglLightSampling.js.map +1 -0
- package/lib/renderer/wgpuBindless.d.ts +26 -0
- package/lib/renderer/wgpuBindless.js +95 -0
- package/lib/renderer/wgpuBindless.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
- package/lib/renderer/wgpuBindlessSource.js +51 -0
- package/lib/renderer/wgpuBindlessSource.js.map +1 -0
- package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
- package/lib/renderer/wgpuMaterialConstants.js +52 -0
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
- package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
- package/lib/renderer/wgpuSceneUniform.js +125 -0
- package/lib/renderer/wgpuSceneUniform.js.map +1 -0
- package/lib/renderer/wgpuShaderSource.d.ts +22 -0
- package/lib/renderer/wgpuShaderSource.js +33 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
- package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
- package/lib/renderer/wgsl/causticLight.compute.js +537 -0
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +41 -35
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +747 -704
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +4 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +83 -79
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +137 -137
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +3 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +52 -32
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -144
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +269 -245
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +27 -14
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -95
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
- package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
- package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
- package/lib/renderer/wgsl/jnlm.compute.js +315 -0
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
- package/lib/renderer/wgsl/photonMap.compute.js +352 -0
- package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +25 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +645 -500
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Camera.js +7 -3
- package/lib/scene/Camera.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +5 -9
- package/lib/scene/EnvironmentLight.js +4 -14
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/EnvironmentLightState.d.ts +18 -0
- package/lib/scene/EnvironmentLightState.js +19 -0
- package/lib/scene/EnvironmentLightState.js.map +1 -0
- package/lib/scene/Geometry.d.ts +12 -6
- package/lib/scene/Geometry.js +37 -13
- package/lib/scene/Geometry.js.map +1 -1
- package/lib/scene/InstanceState.d.ts +39 -0
- package/lib/scene/InstanceState.js +77 -0
- package/lib/scene/InstanceState.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +1 -1
- package/lib/scene/InstancedMesh.js +3 -0
- package/lib/scene/InstancedMesh.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +209 -0
- package/lib/scene/MaterialState.js +231 -0
- package/lib/scene/MaterialState.js.map +1 -0
- package/lib/scene/Mesh.d.ts +4 -6
- package/lib/scene/Mesh.js +3 -11
- package/lib/scene/Mesh.js.map +1 -1
- package/lib/scene/MeshState.d.ts +20 -0
- package/lib/scene/MeshState.js +35 -0
- package/lib/scene/MeshState.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +6 -168
- package/lib/scene/OpenPBRMaterial.js +5 -223
- package/lib/scene/OpenPBRMaterial.js.map +1 -1
- package/lib/scene/PixelTexture.d.ts +6 -0
- package/lib/scene/PixelTexture.js +10 -0
- package/lib/scene/PixelTexture.js.map +1 -0
- package/lib/scene/ProceduralSky.d.ts +24 -0
- package/lib/scene/ProceduralSky.js +40 -0
- package/lib/scene/ProceduralSky.js.map +1 -0
- package/lib/scene/RectLight.d.ts +2 -13
- package/lib/scene/RectLight.js +3 -21
- package/lib/scene/RectLight.js.map +1 -1
- package/lib/scene/RectLightState.d.ts +31 -0
- package/lib/scene/RectLightState.js +26 -0
- package/lib/scene/RectLightState.js.map +1 -0
- package/lib/scene/Scene.d.ts +15 -4
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SceneNode.js +7 -6
- package/lib/scene/SceneNode.js.map +1 -1
- package/lib/scene/Texture.d.ts +10 -41
- package/lib/scene/Texture.js +4 -33
- package/lib/scene/Texture.js.map +1 -1
- package/lib/scene/TextureState.d.ts +35 -0
- package/lib/scene/TextureState.js +35 -0
- package/lib/scene/TextureState.js.map +1 -0
- package/lib/scene/attributeData.d.ts +4 -0
- package/lib/scene/attributeData.js +10 -0
- package/lib/scene/attributeData.js.map +1 -0
- package/lib/scene/lightState.d.ts +8 -0
- package/lib/scene/lightState.js +2 -0
- package/lib/scene/lightState.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +7 -12
- package/lib/scene/openPbrSchema.js +273 -28
- package/lib/scene/openPbrSchema.js.map +1 -1
- package/lib/scene/skyParameters.d.ts +20 -0
- package/lib/scene/skyParameters.js +28 -0
- package/lib/scene/skyParameters.js.map +1 -0
- package/lib/scene/textureData.d.ts +9 -0
- package/lib/scene/textureData.js +2 -0
- package/lib/scene/textureData.js.map +1 -0
- package/lib/scene/texturePixels.d.ts +6 -0
- package/lib/scene/texturePixels.js +10 -0
- package/lib/scene/texturePixels.js.map +1 -0
- package/lib/settings/display.d.ts +33 -0
- package/lib/settings/display.js +7 -0
- package/lib/settings/display.js.map +1 -1
- package/lib/settings/render.d.ts +36 -3
- package/lib/settings/render.js +4 -1
- package/lib/settings/render.js.map +1 -1
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/util/commonGeometry.js +7 -7
- package/lib/util/commonGeometry.js.map +1 -1
- package/lib/util/fromTHREE.d.ts +4 -1
- package/lib/util/fromTHREE.js +20 -7
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/util/geometry.js +42 -29
- package/lib/util/geometry.js.map +1 -1
- package/lib/util/loadRGBE.js +3 -4
- package/lib/util/loadRGBE.js.map +1 -1
- package/lib/util/studioLighting.d.ts +18 -0
- package/lib/util/studioLighting.js +36 -0
- package/lib/util/studioLighting.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +5 -0
- package/package.json +33 -7
- package/lib/renderer/texturesFromMaterials.d.ts +0 -6
- package/lib/renderer/texturesFromMaterials.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fromTHREE.js","sourceRoot":"","sources":["../../src/util/fromTHREE.ts"],"names":[],"mappings":"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","sourcesContent":["import { specularAnisotropyModelIndex } from '../scene/anisotropyParameters.js';\nimport { normalizeMaterialParams } from '../scene/openPbrSchema.js';\nimport { thinFilmMapChannelIndex } from '../scene/thinFilmParameters.js';\nimport { snapshotMaterialParameters, materialParametersEqual } from '../renderer/sceneChangeDetector.js';\nimport InstancedMesh from '../scene/InstancedMesh.js';\nimport Sync from '../Sync.js';\nimport type Engine from '../Engine.js';\nimport { markDeformedGeometry } from '../scene/geometryChanges.js';\nimport type * as THREE from 'three';\nimport Mesh from '../scene/Mesh.js';\nimport OpenPBRMaterial, { getMaterialHashKey, materialKeys } from '../scene/OpenPBRMaterial.js';\nimport Geometry, { Attribute } from '../scene/Geometry.js';\nimport Texture from '../scene/Texture.js';\nimport DirectionalLight from '../scene/DirectionalLight.js';\nimport AmbientLight from '../scene/AmbientLight.js';\nimport EnvironmentLight from '../scene/EnvironmentLight.js';\nimport RectLight from '../scene/RectLight.js';\nimport SphereLight from '../scene/SphereLight.js';\nimport SpotLight from '../scene/SpotLight.js';\nimport IESProfile from '../scene/IESProfile.js';\nimport Camera from '../scene/Camera.js';\nimport { ColorRGB, ColorRGBA } from '../types.js';\nimport { GroundedSkyboxBackground, Scene, SceneLight } from '../scene/Scene.js';\nimport { mat4 } from '../math.js';\nimport { generateVertexNormals, updateBoundingBox, updateDynamicTangents } from './geometry.js';\nimport { THREEDeformation, isDeformingMesh } from './threeDeformation.js';\nimport { snapshotsEqual, snapshotFields } from '../renderer/sceneChangeDetector.js';\n\ninterface TextureRecord {\n texture: Texture;\n state: unknown[];\n}\ntype TextureStore = WeakMap<THREE.Texture, TextureRecord>;\n\nfunction convertTexture(\n threeTexture: THREE.Texture | null | undefined,\n textureStore: TextureStore\n) {\n if (!threeTexture) return;\n const state = [threeTexture.version, threeTexture.image, threeTexture.flipY,\n threeTexture.repeat.x, threeTexture.repeat.y, threeTexture.offset.x,\n threeTexture.offset.y, threeTexture.channel, threeTexture.wrapS, threeTexture.wrapT, threeTexture.colorSpace];\n const cached = textureStore.get(threeTexture);\n if (cached && snapshotsEqual(cached.state, state)) return cached.texture;\n const image = convertTextureImage(threeTexture);\n const texture = cached?.texture ?? new Texture(image);\n texture.image = image;\n texture.source = threeTexture;\n texture.flipY = threeTexture.flipY;\n texture.uvScale = [threeTexture.repeat.x, threeTexture.repeat.y];\n texture.uvOffset = [threeTexture.offset.x, threeTexture.offset.y];\n texture.uvChannel = threeTexture.channel === 1 ? 1 : 0;\n const wrap = (value: number) => value === 1001 ? 'clamp-to-edge' as const\n : value === 1002 ? 'mirrored-repeat' as const : 'repeat' as const;\n texture.wrapS = wrap(threeTexture.wrapS); texture.wrapT = wrap(threeTexture.wrapT);\n // Three.js NoColorSpace also reads color channels without a transfer function.\n texture.colorSpace = threeTexture.colorSpace === 'srgb' ? 'srgb'\n : threeTexture.colorSpace === 'srgb-linear' || threeTexture.colorSpace === '' ? 'linear' : undefined;\n if (cached) texture.markUpdated();\n else texture.version = threeTexture.version;\n textureStore.set(threeTexture, { texture, state });\n return texture;\n}\n\nfunction halfFloatToFloat(value: number) {\n const sign = value & 0x8000 ? -1 : 1;\n const exponent = (value >> 10) & 0x1f;\n const fraction = value & 0x03ff;\n if (exponent === 0) {\n return sign * Math.pow(2, -14) * (fraction / 0x400);\n }\n if (exponent === 0x1f) {\n return fraction ? NaN : sign * Infinity;\n }\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 0x400);\n}\n\n/** Decode Three.js storage into the RGBA byte/float images used by MuTracer. */\nfunction convertTextureImage(texture: THREE.Texture): Texture['image'] {\n const image = texture.image as THREE.DataTexture['image'];\n if (!image?.data) return image as Texture['image'];\n // Three.js enums are kept numeric to retain the optional, type-only peer import.\n const channels = texture.format === 1028 ? 1 : texture.format === 1030 ? 2\n : texture.format === 1022 ? 3 : texture.format === 1023 ? 4 : 0;\n if (!channels) throw new Error(`Unsupported Three.js data texture format: ${texture.format}`);\n const data = image.data as ArrayLike<number>;\n if (data.length !== image.width * image.height * channels) {\n throw new Error('Three.js data texture length does not match its format and dimensions.');\n }\n const half = texture.type === 1016;\n if (channels === 4 && !half && (data instanceof Float32Array || data instanceof Uint8Array ||\n data instanceof Uint8ClampedArray || data instanceof Int32Array)) return image as Texture['image'];\n const bytes = data instanceof Uint8Array || data instanceof Uint8ClampedArray;\n const result = bytes ? new Uint8Array(image.width * image.height * 4)\n : new Float32Array(image.width * image.height * 4);\n const read = (index: number) => {\n const value = data[index];\n if (half) return halfFloatToFloat(value);\n if (data instanceof Uint16Array) return value / 65535;\n if (data instanceof Uint32Array) return value / 4294967295;\n if (data instanceof Int8Array) return Math.max(-1, value / 127);\n if (data instanceof Int16Array) return Math.max(-1, value / 32767);\n return value;\n };\n for (let i = 0; i < image.width * image.height; i++) {\n result[i * 4] = read(i * channels);\n result[i * 4 + 1] = channels > 1 ? read(i * channels + 1) : 0;\n result[i * 4 + 2] = channels > 2 ? read(i * channels + 2) : 0;\n result[i * 4 + 3] = channels === 4 ? read(i * channels + 3) : bytes ? 255 : 1;\n }\n return { width: image.width, height: image.height, data: result };\n}\n\nfunction convertDataTexture(threeTexture: THREE.DataTexture | null | undefined, textureStore: TextureStore) {\n if (!threeTexture?.image?.data || !threeTexture.image.width || !threeTexture.image.height) return;\n const previous = textureStore.get(threeTexture);\n const texture = convertTexture(threeTexture, textureStore)!;\n if (previous?.state === textureStore.get(threeTexture)?.state) return texture;\n const data = (texture.image as import('../scene/Texture.js').TextureDataSource).data;\n const { width, height } = threeTexture.image;\n // Three.js equirect maps put the sky at v = 1, so with flipY = false the\n // first row is the nadir. MuTracer environments start at the zenith and\n // ignore flipY, so reorder the rows here instead.\n texture.image = { data: threeTexture.flipY ? data : flipRows(data, width, height), width, height };\n texture.flipY = false;\n return texture;\n}\n\nfunction flipRows<T extends Float32Array | Uint8Array | Uint8ClampedArray | Int32Array>(data: T, width: number, height: number): T {\n if (height <= 1) return data;\n const rowLength = data.length / height;\n const flipped = new (data.constructor as new (length: number) => T)(data.length);\n for (let y = 0; y < height; y++) {\n flipped.set(data.subarray((height - 1 - y) * rowLength, (height - y) * rowLength), y * rowLength);\n }\n return flipped;\n}\n\nfunction convertMaterial(\n threeMaterial: THREE.Material,\n textureCache: TextureStore\n) {\n const material = new OpenPBRMaterial();\n if (threeMaterial.userData.mutracerShadowCatcher === true) {\n material.shadowCatcher = true;\n return material;\n }\n if ((threeMaterial as THREE.MeshBasicMaterial).isMeshBasicMaterial) {\n const basic = threeMaterial as THREE.MeshBasicMaterial;\n // GLTFLoader represents KHR_materials_unlit as MeshBasicMaterial. Keep its\n // base-color texture's alpha while displaying RGB without scene lighting.\n material.unlit = true;\n material.baseWeight = 0;\n material.specularWeight = 0;\n material.baseColor = basic.color.toArray() as ColorRGB;\n material.emissionColor = material.baseColor;\n material.emissionLuminance = 1;\n material.map = convertTexture(basic.map, textureCache);\n material.emissiveMap = material.map;\n material.alphaMap = convertTexture(basic.alphaMap, textureCache);\n material.geometryOpacity = basic.opacity;\n material.alphaCutoff = Math.max(0, basic.alphaTest);\n material.alphaMode = basic.alphaTest > 0\n ? 'mask'\n : basic.transparent || basic.opacity < 1 || !!basic.alphaMap\n ? 'blend'\n : 'opaque';\n material.mapAlphaUsage = material.alphaMode === 'opaque'\n ? \"opaque\"\n : \"alpha\";\n material.doubleSided = basic.side === 2;\n return material;\n }\n const standardMaterial = threeMaterial as THREE.MeshStandardMaterial;\n material.baseColor = standardMaterial.color.toArray() as ColorRGB;\n material.emissionColor =\n standardMaterial.emissive &&\n (standardMaterial.emissive.toArray() as ColorRGB);\n material.specularRoughness = standardMaterial.roughness;\n material.baseMetalness = standardMaterial.metalness;\n material.emissionLuminance = standardMaterial.emissiveIntensity;\n\n material.normalScale =\n standardMaterial.normalScale && standardMaterial.normalScale.toArray();\n\n const materialUvProjection = standardMaterial.userData\n .mutracerUvProjection;\n if (\n materialUvProjection === 'triplanar' ||\n materialUvProjection === 'spherical' ||\n materialUvProjection === 'cylindrical' ||\n materialUvProjection === 'none'\n ) {\n material.uvProjection = materialUvProjection;\n }\n const materialUvScale = standardMaterial.userData.mutracerUvProjectionScale;\n if (Array.isArray(materialUvScale) && materialUvScale.length >= 2) {\n const referenceLength = Math.max(\n Number(standardMaterial.userData.mutracerUvReferenceLength) || 1,\n 0.000001\n );\n const scaleX = Math.max(\n Number(materialUvScale[0]) || 0.000001,\n 0.000001\n );\n const scaleY = Math.max(\n Number(materialUvScale[1]) || 0.000001,\n 0.000001\n );\n material.uvProjectionScale = material.uvProjection === 'triplanar'\n ? [scaleX / referenceLength, scaleY / referenceLength]\n : material.uvProjection === 'cylindrical'\n ? [scaleX, scaleY / referenceLength]\n : [scaleX, scaleY];\n }\n\n material.map = convertTexture(standardMaterial.map, textureCache);\n material.alphaMap = convertTexture(standardMaterial.alphaMap, textureCache);\n material.alphaCutoff = Math.max(\n 0,\n Number.isFinite(standardMaterial.alphaTest) ? standardMaterial.alphaTest : 0\n );\n material.emissiveMap = convertTexture(\n standardMaterial.emissiveMap,\n textureCache\n );\n material.normalMap = convertTexture(standardMaterial.normalMap, textureCache);\n material.displacementMap = convertTexture(\n standardMaterial.displacementMap,\n textureCache\n );\n const displacementBias = Number(standardMaterial.displacementBias);\n if (Number.isFinite(displacementBias)) material.displacementBias = displacementBias;\n const displacementScale = Number(standardMaterial.displacementScale);\n // Three.js stores 1 even without a height map. Do not turn that inactive\n // default into MuTracer's height when a texture is added after conversion.\n material.displacementScale = Number.isFinite(displacementScale) &&\n (standardMaterial.displacementMap != null || displacementScale !== 1)\n ? displacementScale\n : material.displacementScale;\n const displacementStepSize = Number(\n standardMaterial.userData.mutracerDisplacementStepSize\n );\n if (Number.isFinite(displacementStepSize)) {\n material.displacementStepSize = Math.max(0, displacementStepSize);\n }\n const uvProjection = standardMaterial.userData\n .mutracerDisplacementUvProjection;\n if (\n uvProjection === 'triplanar' ||\n uvProjection === 'spherical' ||\n uvProjection === 'cylindrical' ||\n uvProjection === 'none'\n ) {\n material.displacementUvProjection = uvProjection;\n }\n const displacementUvProjectionScale = Number(\n standardMaterial.userData.mutracerDisplacementUvProjectionScale\n );\n if (Number.isFinite(displacementUvProjectionScale)) {\n material.displacementUvProjectionScale = Math.max(displacementUvProjectionScale, 0.000001);\n }\n if (\n standardMaterial.roughnessMap &&\n standardMaterial.roughnessMap === standardMaterial.metalnessMap\n ) {\n material.metallicRoughnessMap = convertTexture(\n standardMaterial.roughnessMap,\n textureCache\n );\n } else {\n material.roughnessMap = convertTexture(\n standardMaterial.roughnessMap,\n textureCache\n );\n material.metalnessMap = convertTexture(\n standardMaterial.metalnessMap,\n textureCache\n );\n }\n const physicalMaterial = standardMaterial as THREE.MeshPhysicalMaterial;\n if (physicalMaterial.type === 'MeshPhysicalMaterial') {\n material.transmissionWeight = physicalMaterial.transmission;\n material.transmissionMap = convertTexture(\n physicalMaterial.transmissionMap,\n textureCache\n );\n material.specularIor = physicalMaterial.ior;\n // glTF specular (KHR_materials_specular) only scales the dielectric\n // lobe, while OpenPBR applies it to metals too. A fully metallic\n // surface has no dielectric part, so keep the OpenPBR defaults there.\n const fullyMetallic = physicalMaterial.metalness === 1 && !physicalMaterial.metalnessMap;\n material.specularWeight = fullyMetallic ? 1 : physicalMaterial.specularIntensity;\n if (physicalMaterial.specularColor && !fullyMetallic) {\n material.specularColor =\n physicalMaterial.specularColor.toArray() as ColorRGB;\n }\n material.coatWeightMap = convertTexture(physicalMaterial.clearcoatMap, textureCache);\n material.coatRoughnessMap = convertTexture(physicalMaterial.clearcoatRoughnessMap, textureCache);\n material.coatNormalMap = convertTexture(physicalMaterial.clearcoatNormalMap, textureCache);\n material.coatNormalScale = physicalMaterial.clearcoatNormalScale.toArray();\n material.fuzzColorMap = convertTexture(physicalMaterial.sheenColorMap, textureCache);\n material.fuzzRoughnessMap = convertTexture(physicalMaterial.sheenRoughnessMap, textureCache);\n if (!fullyMetallic) {\n material.specularWeightMap = convertTexture(physicalMaterial.specularIntensityMap, textureCache);\n material.specularColorMap = convertTexture(physicalMaterial.specularColorMap, textureCache);\n }\n material.coatWeight = physicalMaterial.clearcoat;\n material.coatRoughness = physicalMaterial.clearcoatRoughness;\n // MeshPhysicalMaterial's clearcoat BRDF uses the fixed dielectric F0\n // for IOR 1.5. Match that in the OpenPBR path representation; explicit\n // mutracerOpenPBR metadata below may provide a different coat IOR.\n material.coatIor = 1.5;\n // Three.js/glTF clearcoat does not model internal-reflection darkening.\n material.coatDarkening = 0;\n material.fuzzWeight = physicalMaterial.sheen;\n material.fuzzRoughness = physicalMaterial.sheenRoughness;\n if (physicalMaterial.sheenColor) {\n material.fuzzColor = physicalMaterial.sheenColor.toArray() as ColorRGB;\n }\n if (physicalMaterial.attenuationColor) {\n material.transmissionColor =\n physicalMaterial.attenuationColor.toArray() as ColorRGB;\n }\n if (Number.isFinite(physicalMaterial.attenuationDistance)) {\n material.transmissionDepth = Math.max(\n 0,\n physicalMaterial.attenuationDistance\n );\n }\n }\n const dispersion = Number(physicalMaterial.dispersion);\n material.transmissionDispersionScale = Number.isFinite(dispersion)\n ? Math.min(1, Math.max(0, dispersion))\n : 0;\n const realtimeIridescence = physicalMaterial as THREE.MeshPhysicalMaterial & {\n iridescence?: number;\n iridescenceIOR?: number;\n iridescenceThicknessRange?: number[];\n iridescenceThicknessMap?: THREE.Texture | null;\n };\n material.thinFilmThickness = Math.min(\n 20,\n Math.max(\n 0,\n (realtimeIridescence.iridescenceThicknessRange?.[1] ?? 500) / 1000\n )\n );\n material.thinFilmWeight = Math.min(\n 1, Math.max(0, realtimeIridescence.iridescence ?? 0)\n );\n material.thinFilmIor = Math.min(\n 2.5, Math.max(1, realtimeIridescence.iridescenceIOR ?? 1.4)\n );\n const nativeThinFilmMap = standardMaterial.userData.mutracerThinFilmMap as THREE.Texture | undefined;\n const thinFilmMap =\n (standardMaterial.userData\n .mutracerThinFilmMap as THREE.Texture | undefined) ??\n realtimeIridescence.iridescenceThicknessMap ??\n undefined;\n if (thinFilmMap) {\n material.thinFilmMap = convertTexture(thinFilmMap, textureCache);\n if (!nativeThinFilmMap) {\n material.thinFilmThicknessMinimum = Math.min(20, Math.max(0,\n (realtimeIridescence.iridescenceThicknessRange?.[0] ?? 0) / 1000));\n material.thinFilmMapChannel = 'g';\n }\n }\n const anisotropy = Number(physicalMaterial.anisotropy);\n material.specularRoughnessAnisotropy = Number.isFinite(anisotropy)\n ? Math.min(1, Math.max(0, anisotropy))\n : 0;\n if (physicalMaterial.isMeshPhysicalMaterial) {\n material.specularAnisotropyModel = 'gltf';\n material.anisotropyMap = convertTexture(physicalMaterial.anisotropyMap, textureCache);\n const rotation = Number(physicalMaterial.anisotropyRotation);\n material.specularAnisotropyRotation = Number.isFinite(rotation) ? rotation : 0;\n }\n const sourceOpenPbr = standardMaterial.userData.mutracerOpenPBR as Record<string, unknown> | undefined;\n const openPbr = sourceOpenPbr ? normalizeMaterialParams(sourceOpenPbr) : undefined;\n const finite = (\n value: unknown,\n fallback: number,\n minimum = 0,\n maximum = 1\n ) => {\n const number = Number(value);\n return Number.isFinite(number)\n ? Math.min(maximum, Math.max(minimum, number))\n : fallback;\n };\n const color = (value: unknown, fallback: ColorRGB) => {\n const components = value as ArrayLike<number> | undefined;\n return components && components.length >= 3\n ? ([\n finite(components[0], fallback[0]),\n finite(components[1], fallback[1]),\n finite(components[2], fallback[2])\n ] as ColorRGB)\n : fallback;\n };\n if (openPbr) {\n for (const key of ['displacementScale', 'displacementBias', 'displacementStepSize'] as const) {\n const value = openPbr[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n material[key] = key === 'displacementStepSize' ? Math.max(0, value) : value;\n }\n }\n if (openPbr.specularAnisotropyModel !== undefined) {\n specularAnisotropyModelIndex(openPbr.specularAnisotropyModel);\n material.specularAnisotropyModel = openPbr.specularAnisotropyModel as 'openpbr' | 'gltf';\n }\n if (openPbr.specularAnisotropy !== undefined && openPbr.specularAnisotropyModel !== 'gltf') {\n material.specularAnisotropyModel = 'openpbr';\n material.anisotropyMap = undefined;\n material.specularAnisotropyRotation = 0;\n }\n // Only supported Texture inputs are accepted; arbitrary metadata objects\n // must never enter the atlas as textures. Explicit null clears an import.\n for (const name of ['coatWeightMap', 'coatRoughnessMap', 'fuzzColorMap',\n 'fuzzRoughnessMap', 'specularWeightMap', 'specularColorMap', 'anisotropyMap', 'coatNormalMap'] as const) {\n const texture = openPbr[name];\n if (texture === null) material[name] = undefined;\n else if (texture instanceof Texture) material[name] = texture;\n else if (texture && (texture as THREE.Texture).isTexture &&\n typeof (texture as THREE.Texture).clone === 'function') {\n material[name] = convertTexture(texture as THREE.Texture, textureCache);\n }\n }\n material.specularAnisotropyRotation = finite(openPbr.specularAnisotropyRotation, material.specularAnisotropyRotation, -Infinity, Infinity);\n material.coatAnisotropyRotation = finite(openPbr.coatAnisotropyRotation, material.coatAnisotropyRotation, -Infinity, Infinity);\n const coatScale = openPbr.coatNormalScale as ArrayLike<number> | undefined;\n if (coatScale && coatScale.length >= 2) {\n material.coatNormalScale = [\n finite(coatScale[0], material.coatNormalScale[0], -Infinity, Infinity),\n finite(coatScale[1], material.coatNormalScale[1], -Infinity, Infinity)\n ];\n }\n material.baseWeight = finite(openPbr.baseWeight, material.baseWeight);\n material.baseDiffuseRoughness = finite(\n openPbr.baseDiffuseRoughness,\n material.baseDiffuseRoughness\n );\n material.specularWeight = finite(\n openPbr.specularWeight,\n material.specularWeight\n );\n material.specularColor = color(\n openPbr.specularColor,\n material.specularColor\n );\n material.transmissionScatter = color(\n openPbr.transmissionScatter,\n material.transmissionScatter\n );\n material.transmissionScatterAnisotropy = finite(\n openPbr.transmissionScatterAnisotropy,\n material.transmissionScatterAnisotropy,\n -0.95,\n 0.95\n );\n material.transmissionDispersionScale = finite(\n openPbr.transmissionDispersionScale,\n material.transmissionDispersionScale\n );\n material.transmissionDispersionAbbeNumber = finite(\n openPbr.transmissionDispersionAbbeNumber,\n material.transmissionDispersionAbbeNumber,\n 1,\n 100\n );\n material.subsurfaceWeight = finite(\n openPbr.subsurfaceWeight,\n material.subsurfaceWeight\n );\n material.subsurfaceColor = color(\n openPbr.subsurfaceColor,\n material.subsurfaceColor\n );\n material.subsurfaceRadius = finite(\n openPbr.subsurfaceRadius,\n material.subsurfaceRadius,\n 0,\n Infinity\n );\n material.subsurfaceRadiusScale = color(\n openPbr.subsurfaceRadiusScale,\n material.subsurfaceRadiusScale\n );\n material.subsurfaceScatterAnisotropy = finite(\n openPbr.subsurfaceAnisotropy,\n material.subsurfaceAnisotropy,\n -0.95,\n 0.95\n );\n material.coatWeight = finite(openPbr.coatWeight, material.coatWeight);\n material.coatColor = color(openPbr.coatColor, material.coatColor);\n material.coatRoughness = finite(\n openPbr.coatRoughness,\n material.coatRoughness\n );\n material.coatRoughnessAnisotropy = finite(\n openPbr.coatAnisotropy,\n material.coatAnisotropy\n );\n material.coatIor = finite(openPbr.coatIor, material.coatIor, 1, 2.5);\n material.coatDarkening = finite(\n openPbr.coatDarkening,\n material.coatDarkening\n );\n material.fuzzWeight = finite(openPbr.fuzzWeight, material.fuzzWeight);\n material.fuzzColor = color(openPbr.fuzzColor, material.fuzzColor);\n material.fuzzRoughness = finite(\n openPbr.fuzzRoughness,\n material.fuzzRoughness\n );\n if ('thinWalled' in openPbr) {\n material.geometryThinWalled = openPbr.thinWalled === true;\n }\n material.thinFilmWeight = finite(\n openPbr.thinFilmWeight,\n material.thinFilmWeight\n );\n material.thinFilmThickness = finite(\n openPbr.thinFilmThickness,\n material.thinFilmThickness,\n 0,\n 20\n );\n material.thinFilmThicknessMinimum = finite(\n openPbr.thinFilmThicknessMinimum, material.thinFilmThicknessMinimum, 0, 20\n );\n if (openPbr.thinFilmMapChannel !== undefined) {\n material.thinFilmMapChannel = ['r', 'g', 'b', 'a'][thinFilmMapChannelIndex(openPbr.thinFilmMapChannel)] as OpenPBRMaterial['thinFilmMapChannel'];\n }\n if (openPbr.thinFilmMap instanceof Texture) material.thinFilmMap = openPbr.thinFilmMap;\n else if (openPbr.thinFilmMap && (openPbr.thinFilmMap as THREE.Texture).isTexture) {\n material.thinFilmMap = convertTexture(openPbr.thinFilmMap as THREE.Texture, textureCache);\n }\n material.thinFilmIor = finite(\n openPbr.thinFilmIor,\n material.thinFilmIor,\n 1,\n 2.5\n );\n }\n material.geometryOpacity = standardMaterial.opacity;\n // THREE.DoubleSide is the numeric enum value 2. Keep this module's Three.js\n // import type-only while preserving the source material's culling semantics.\n material.doubleSided = standardMaterial.side === 2;\n if (openPbr) {\n material.specularRoughnessAnisotropy = finite(openPbr.specularAnisotropy, material.specularRoughnessAnisotropy);\n material.geometryOpacity = finite(openPbr.opacity, material.geometryOpacity);\n }\n const bevelSize = Number(standardMaterial.userData.mutracerBevelSize);\n material.bevelSize = Number.isFinite(bevelSize) ? Math.max(0, bevelSize) : 0;\n material.mapAlphaUsage =\n standardMaterial.transparent ||\n !!standardMaterial.alphaMap ||\n standardMaterial.alphaTest > 0\n ? \"alpha\"\n : \"opaque\";\n material.alphaMode = standardMaterial.alphaTest > 0\n ? 'mask'\n : standardMaterial.transparent ||\n material.geometryOpacity < 1 ||\n !!standardMaterial.alphaMap\n ? 'blend'\n : 'opaque';\n\n if (standardMaterial.side === 1) {\n // BackSide normals are reversed in converted geometry. Keep the source\n // displacement direction and biased base surface unchanged.\n material.displacementScale = -material.displacementScale;\n material.displacementBias = -material.displacementBias;\n }\n return material;\n}\n\nfunction copyFloatAttribute(\n attribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n itemSize = attribute.itemSize\n) {\n const result = new Float32Array(attribute.count * itemSize);\n if (attribute.array instanceof Float32Array && !attribute.normalized) {\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n if (!interleaved.isInterleavedBufferAttribute && itemSize === attribute.itemSize) {\n result.set(attribute.array.subarray(0, result.length));\n } else {\n const stride = interleaved.isInterleavedBufferAttribute\n ? interleaved.data.stride : attribute.itemSize;\n const offset = interleaved.isInterleavedBufferAttribute ? interleaved.offset : 0;\n for (let index = 0; index < attribute.count; index++) {\n const sourceOffset = index * stride + offset;\n const targetOffset = index * itemSize;\n for (let component = 0; component < itemSize; component++) {\n result[targetOffset + component] = attribute.array[sourceOffset + component];\n }\n }\n }\n return result;\n }\n // Getters preserve normalized integer and Float16BufferAttribute decoding.\n const getters = [\n attribute.getX,\n attribute.getY,\n attribute.getZ,\n attribute.getW\n ];\n for (let index = 0; index < attribute.count; index++) {\n for (let component = 0; component < itemSize; component++) {\n result[index * itemSize + component] = getters[component].call(\n attribute,\n index\n );\n }\n }\n return result;\n}\n\nfunction convertGeometry(\n threeGeometry: THREE.BufferGeometry,\n drawRange: { start: number; count: number },\n vertexColors: boolean,\n backSide: boolean\n): Geometry | null {\n const positionAttrb = threeGeometry.getAttribute('position');\n const normalAttrb = threeGeometry.getAttribute('normal');\n const tangentAttrb = threeGeometry.getAttribute('tangent');\n const uvAttrb = threeGeometry.getAttribute('uv');\n const uv1Attrb = threeGeometry.getAttribute('uv1');\n const colorAttrb = vertexColors && threeGeometry.getAttribute('color');\n const indexAttrb = threeGeometry.getIndex();\n const sourceCount = indexAttrb ? indexAttrb.array.length : positionAttrb.count;\n // Match Array.slice range handling without expanding the complete index stream.\n const clampOffset = (offset: number) => {\n const integer = Math.trunc(offset) || 0;\n return integer < 0 ? Math.max(sourceCount + integer, 0) : Math.min(integer, sourceCount);\n };\n const start = drawRange ? clampOffset(drawRange.start) : 0;\n const end = drawRange ? clampOffset(drawRange.start + drawRange.count) : sourceCount;\n let indexCount = Math.max(end - start, 0);\n // WebGL's TRIANGLES draw mode ignores an incomplete final primitive. Keep\n // path tracing on the same index stream so valid BufferGeometry with a\n // dangling one or two elements cannot produce invalid BLAS input.\n indexCount -= indexCount % 3;\n if (indexCount === 0) return null;\n const indices = new Uint32Array(indexCount);\n if (indexAttrb) {\n indices.set(indexAttrb.array.subarray(start, start + indexCount));\n } else {\n for (let index = 0; index < indexCount; index++) indices[index] = start + index;\n }\n if (backSide) {\n for (let i = 0; i < indices.length; i += 3) {\n const tmp = indices[i + 1];\n indices[i + 1] = indices[i + 2];\n indices[i + 2] = tmp;\n }\n }\n const geometry = new Geometry({\n position: new Attribute(\n copyFloatAttribute(positionAttrb),\n positionAttrb.itemSize\n ),\n normal:\n normalAttrb &&\n new Attribute(copyFloatAttribute(normalAttrb), normalAttrb.itemSize),\n tangent: tangentAttrb && new Attribute(\n copyFloatAttribute(tangentAttrb, Math.min(4, tangentAttrb.itemSize)),\n Math.min(4, tangentAttrb.itemSize)\n ),\n uv: uvAttrb && new Attribute(copyFloatAttribute(uvAttrb), uvAttrb.itemSize),\n uv1:\n uv1Attrb &&\n new Attribute(copyFloatAttribute(uv1Attrb), uv1Attrb.itemSize),\n // MuTracer stores linear RGB only; omit Three.js's optional vertex alpha.\n color: colorAttrb ? new Attribute(copyFloatAttribute(colorAttrb, 3), 3) : undefined,\n indices: new Attribute(indices, 1)\n });\n // Generated normals already follow the reversed indices; authored normals do not.\n if (backSide) {\n if (normalAttrb) negateNormals(geometry);\n reverseTangentHandedness(geometry);\n }\n updateBoundingBox(geometry);\n return geometry;\n}\n\nfunction negateNormals(geometry: Geometry) {\n const normals = geometry.normal.array;\n for (let i = 0; i < normals.length; i++) normals[i] = -normals[i];\n}\n\nfunction reverseTangentHandedness(geometry: Geometry) {\n // Three.js FLIP_SIDED reverses N but preserves T and B. Reversing W\n // preserves that bitangent when the renderer reconstructs cross(N,T)*W.\n const tangent = geometry.tangent;\n if (tangent?.itemSize === 4) for (let i = 3; i < tangent.array.length; i += 4) tangent.array[i] *= -1;\n}\n\n/** Options for one-shot conversion and persistent Three.js synchronization. */\nexport interface FromTHREESceneOptions {\n /** Custom material conversion. Default undefined uses built-in conversion; returning null skips every mesh using this material. THREESync invokes once per source material identity/version, so the result cannot depend on a particular mesh. Returned materials are caller-owned; engine.update detects parameter edits. */\n convertMaterial?(material: THREE.Material): OpenPBRMaterial | null | undefined;\n /** Custom light conversion. Default undefined uses built-in conversion; returning null skips this light. THREESync invokes once per source light identity and numeric userData.mutracerVersion (default undefined, never rerun). Returned lights are retained by identity and remain caller-owned. */\n convertLight?(light: THREE.Light): SceneLight | null | undefined;\n /** Receives each converted visible mesh/group on every update. Default: no callback. */\n onMeshConverted?(\n mesh: Mesh | InstancedMesh,\n source: THREE.Mesh,\n group: { start: number; count: number; materialIndex?: number },\n groupIndex: number\n ): void;\n}\n\ninterface MaterialVariant {\n material: OpenPBRMaterial;\n parameters: unknown[];\n hash?: string;\n base?: OpenPBRMaterial;\n autoUvProjection: boolean;\n autoDisplacementUvProjection: boolean;\n}\ninterface GeometryEntry { state: unknown[]; groups: Map<string, Geometry>; checkedAt: number }\ninterface ConversionStore {\n updateId: number;\n textures: TextureStore;\n // Equirectangular conversion normalizes rows; material textures retain source pixels and flipY.\n equirectTextures: TextureStore;\n materials: WeakMap<THREE.Material, { material: OpenPBRMaterial; hash: string }>;\n materialHooks: WeakMap<THREE.Material, {version: number; value: OpenPBRMaterial | null | undefined}>;\n lightHooks: WeakMap<THREE.Light, {version: number | undefined; value: SceneLight | null | undefined}>;\n geometries: WeakMap<THREE.BufferGeometry, GeometryEntry>;\n deformedGeometries: WeakMap<THREE.Mesh, GeometryEntry>;\n deformations: WeakMap<THREE.Mesh, THREEDeformation>;\n poseChanged: boolean;\n meshes: WeakMap<THREE.Mesh, Map<number, Mesh>>;\n lights: WeakMap<THREE.Object3D | THREE.Texture, SceneLight>;\n instanceMeshes: WeakMap<THREE.Mesh, Map<number, InstancedMesh>>;\n // Automatic-projection variants, pruned each update.\n projectionVariants: Map<THREE.Material, Map<string, MaterialVariant>>;\n warned: WeakSet<THREE.Object3D>;\n background?: Scene['background'];\n}\nfunction createConversionStore(): ConversionStore {\n return { updateId: 0, textures: new WeakMap(), equirectTextures: new WeakMap(),\n materials: new WeakMap(), geometries: new WeakMap(),\n materialHooks: new WeakMap(), lightHooks: new WeakMap(),\n poseChanged: false, meshes: new WeakMap(), lights: new WeakMap(), deformedGeometries: new WeakMap(), deformations: new WeakMap(),\n instanceMeshes: new WeakMap(), projectionVariants: new Map(), warned: new WeakSet() };\n}\nconst geometryAttributeNames = ['position', 'normal', 'tangent', 'uv', 'uv1', 'color', 'index'] as const;\nfunction geometryState(geometry: THREE.BufferGeometry, deformation: boolean) {\n const state: unknown[] = [];\n for (let i = 0; i < geometryAttributeNames.length; i++) {\n const name = geometryAttributeNames[i];\n const attribute = name === 'index' ? geometry.index : geometry.getAttribute(name);\n if (!attribute) { state.push(undefined); continue; }\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n const buffer = interleaved.isInterleavedBufferAttribute ? interleaved.data : attribute as THREE.BufferAttribute;\n state.push(attribute, buffer, deformation && i < 3 ? undefined : buffer.version, buffer.array, attribute.count, attribute.itemSize,\n attribute.normalized, interleaved.offset, interleaved.data?.stride);\n }\n return state;\n}\n/** Compare cached fields directly; unchanged geometry creates no snapshot arrays. */\nfunction geometryStateMatches(geometry: THREE.BufferGeometry, state: readonly unknown[], deformation: boolean) {\n let field = 0;\n for (let i = 0; i < geometryAttributeNames.length; i++) {\n const name = geometryAttributeNames[i];\n const attribute = name === 'index' ? geometry.index : geometry.getAttribute(name);\n if (!attribute) {\n if (state[field++] !== undefined) return false;\n continue;\n }\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n const buffer = interleaved.isInterleavedBufferAttribute ? interleaved.data : attribute as THREE.BufferAttribute;\n if (state[field++] !== attribute || state[field++] !== buffer ||\n !Object.is(state[field++], deformation && i < 3 ? undefined : buffer.version) ||\n state[field++] !== buffer.array || !Object.is(state[field++], attribute.count) ||\n !Object.is(state[field++], attribute.itemSize) || !Object.is(state[field++], attribute.normalized) ||\n !Object.is(state[field++], interleaved.offset) || !Object.is(state[field++], interleaved.data?.stride)) return false;\n }\n return field === state.length;\n}\nfunction retainLight(store: ConversionStore, source: THREE.Object3D | THREE.Texture, value: SceneLight) {\n const cached = store.lights.get(source);\n if (!cached || cached.type !== value.type) {\n store.lights.set(source, value);\n return value;\n }\n // Matrix and color arrays are retained when unchanged; light identity always is.\n for (const key of Object.keys(value)) {\n const previous = (cached as unknown as Record<string, unknown>)[key];\n const next = (value as unknown as Record<string, unknown>)[key];\n if (Array.isArray(previous) && Array.isArray(next) && snapshotsEqual(previous, next)) continue;\n (cached as unknown as Record<string, unknown>)[key] = next;\n }\n return cached;\n}\n\n/**\n * Converts a Three.js scene into a MuTracer {@link Scene}: meshes with\n * `MeshStandardMaterial` / `MeshPhysicalMaterial` (mapped to OpenPBR),\n * directional, ambient, rect-area, point and spot lights, and the scene\n * background / environment. Calls `scene.updateMatrixWorld()` and creates fresh objects on every call.\n * CPU-evaluates skinning/morph targets and batches InstancedMesh instances\n * with shared geometry, native colors and cached projection material variants. Unsupported batched\n * or instanced deformation falls back to an ordinary mesh with a warning.\n * For animation and editing, use {@link THREESync}.\n *\n * Renderer-specific material settings can be supplied through\n * `material.userData`, e.g. `userData.mutracerShadowCatcher = true` or\n * `userData.mutracerOpenPBR = { ... }` for OpenPBR inputs without a Three.js\n * equivalent.\n */\nexport function fromTHREEScene(\n scene: THREE.Scene,\n options: FromTHREESceneOptions = {}\n) : Scene {\n return convertScene(scene, options, createConversionStore());\n}\n\nfunction convertScene(scene: THREE.Scene, options: FromTHREESceneOptions, store: ConversionStore): Scene {\n const updateId = ++store.updateId;\n const meshes: Mesh[] = [];\n const lights: SceneLight[] = [];\n const textureCache = store.textures;\n const convertedMaterials = new Set<THREE.Material>();\n const baseHashes = new Map<OpenPBRMaterial, string>();\n function refreshVariant(entry: MaterialVariant, base: OpenPBRMaterial) {\n let hash = baseHashes.get(base);\n if (hash === undefined) { hash = getMaterialHashKey(base); baseHashes.set(base, hash); }\n if (entry.base === base && entry.hash === hash && materialParametersEqual(base, entry.parameters)) return;\n for (const field of materialKeys) (entry.material as unknown as Record<string, unknown>)[field] = base[field];\n if (entry.autoUvProjection) entry.material.uvProjection = 'triplanar';\n if (entry.autoDisplacementUvProjection) entry.material.displacementUvProjection = 'triplanar';\n entry.parameters = snapshotMaterialParameters(base); entry.hash = hash; entry.base = base;\n }\n function materialVariant(source: THREE.Material, base: OpenPBRMaterial,\n autoUvProjection: boolean, autoDisplacementUvProjection: boolean) {\n if (!autoUvProjection && !autoDisplacementUvProjection) return base;\n let variants = store.projectionVariants.get(source);\n if (!variants) { variants = new Map(); store.projectionVariants.set(source, variants); }\n const key = `${+autoUvProjection}:${+autoDisplacementUvProjection}`;\n let variant = variants.get(key);\n if (!variant) {\n variant = { material: new OpenPBRMaterial(), parameters: [],\n autoUvProjection, autoDisplacementUvProjection };\n variants.set(key, variant);\n }\n refreshVariant(variant, base);\n return variant.material;\n }\n\n function materialHook(source: THREE.Material) {\n if (!options.convertMaterial) return undefined;\n let entry = store.materialHooks.get(source);\n if (!entry || entry.version !== source.version) {\n entry = {version: source.version, value: options.convertMaterial(source)};\n store.materialHooks.set(source, entry);\n }\n return entry.value;\n }\n function lightHook(source: THREE.Light) {\n if (!options.convertLight) return undefined;\n // Three.js Light has no built-in version; applications revise it through userData.\n const revision = source.userData.mutracerVersion;\n const version = typeof revision === 'number' ? revision : undefined;\n let entry = store.lightHooks.get(source);\n if (!entry || entry.version !== version) {\n entry = {version, value: options.convertLight(source)};\n store.lightHooks.set(source, entry);\n }\n return entry.value;\n }\n function resolveMaterial(source: THREE.Material) {\n const custom = materialHook(source);\n if (custom !== undefined) return custom;\n const cached = store.materials.get(source);\n if (convertedMaterials.has(source)) return cached!.material;\n const converted = convertMaterial(source, textureCache);\n const hash = getMaterialHashKey(converted);\n let material = converted;\n if (cached) {\n if (cached.hash !== hash) {\n for (const key of materialKeys) (cached.material as unknown as Record<string, unknown>)[key] = converted[key];\n cached.hash = hash;\n }\n material = cached.material;\n } else store.materials.set(source, {material, hash});\n convertedMaterials.add(source);\n return material;\n }\n\n function isMesh(node: THREE.Object3D): node is THREE.Mesh {\n return (node as THREE.Mesh).isMesh;\n }\n function isDirectionalLight(\n node: THREE.Object3D\n ): node is THREE.DirectionalLight {\n return (node as THREE.DirectionalLight).isDirectionalLight;\n }\n function isAmbientLight(node: THREE.Object3D): node is THREE.AmbientLight {\n return (node as THREE.AmbientLight).isAmbientLight;\n }\n function isRectAreaLight(node: THREE.Object3D): node is THREE.RectAreaLight {\n return (node as THREE.RectAreaLight).isRectAreaLight;\n }\n function isPointLight(node: THREE.Object3D): node is THREE.PointLight {\n return node.type === 'PointLight';\n }\n function isSpotLight(node: THREE.Object3D): node is THREE.SpotLight {\n return node.type === 'SpotLight';\n }\n scene.updateMatrixWorld(true);\n scene.traverseVisible((child) => {\n if ((child as THREE.Light).isLight) {\n const custom = lightHook(child as THREE.Light);\n if (custom !== undefined) {\n if (custom !== null) lights.push(custom);\n return;\n }\n }\n if (isMesh(child)) {\n if (child.userData.viewerEnvironment) return;\n // Viewer-only proxy geometry is already represented by its source mesh.\n if (child.userData.viewerRealtimeDisplacement) return;\n const childMaterials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n // A null result rejects the source mesh, including all of its groups/instances.\n if (childMaterials.some(material => materialHook(material) === null)) return;\n if (!child.geometry) {\n console.warn(child, 'must have a geometry property');\n } else if (\n childMaterials.some(\n (material) =>\n materialHook(material) === undefined &&\n !(material as THREE.MeshStandardMaterial).isMeshStandardMaterial &&\n !(material as THREE.MeshBasicMaterial).isMeshBasicMaterial &&\n material.userData.mutracerShadowCatcher !== true\n )\n ) {\n console.warn(\n child,\n 'must use MeshStandardMaterial or MeshBasicMaterial in order to be rendered.'\n );\n } else {\n const instanced = child as THREE.InstancedMesh;\n const unsupported = (child as THREE.Mesh & { isBatchedMesh?: boolean }).isBatchedMesh ||\n instanced.isInstancedMesh && (!!instanced.morphTexture || (child as THREE.SkinnedMesh).isSkinnedMesh);\n if (unsupported && !store.warned.has(child)) {\n console.warn('MuTracer: BatchedMesh, instanced morph targets and skinned instancing are not supported; converting as an ordinary mesh.', child);\n store.warned.add(child);\n }\n const expand = instanced.isInstancedMesh && !unsupported;\n let deformation: THREEDeformation | undefined;\n let deformed = false;\n if (!unsupported && isDeformingMesh(child)) {\n deformation = store.deformations.get(child);\n if (!deformation?.matches(child.geometry)) {\n deformation = new THREEDeformation(child.geometry); store.deformations.set(child, deformation);\n store.deformedGeometries.delete(child);\n }\n deformed = deformation.update(child);\n store.poseChanged ||= deformed;\n }\n const threeMaterials = childMaterials;\n const groups =\n threeMaterials.length > 1 && child.geometry.groups.length\n ? child.geometry.groups\n : [{ start: 0, count: Infinity, materialIndex: 0 }];\n // Shared static geometry is checked once per update, before its groups.\n // Deforming meshes keep independent entries for their evaluated geometry.\n let entry = deformation ? store.deformedGeometries.get(child) : store.geometries.get(child.geometry);\n if (!entry || entry.checkedAt !== updateId) {\n if (!entry || !geometryStateMatches(child.geometry, entry.state, !!deformation)) {\n entry = { state: geometryState(child.geometry, !!deformation), groups: new Map(), checkedAt: updateId };\n if (deformation) store.deformedGeometries.set(child, entry);\n else store.geometries.set(child.geometry, entry);\n }\n entry.checkedAt = updateId;\n }\n const geometryEntry = entry;\n groups.forEach((group, groupIndex) => {\n const count = Number.isFinite(group.count)\n ? group.count\n : (child.geometry.getIndex()?.count ??\n child.geometry.getAttribute('position').count);\n const sourceMaterial = threeMaterials[group.materialIndex ?? 0];\n // Vertex colors and BackSide orientation are baked into geometry, so\n // groups with different switches cannot share the same cached variant.\n const vertexColors = sourceMaterial.vertexColors === true;\n const backSide = sourceMaterial.side === 1;\n const geometryKey = `${group.start}:${count}:${vertexColors}:${backSide}`;\n let geometry = geometryEntry.groups.get(geometryKey);\n const newGeometry = !geometry;\n if (!geometry) {\n const converted = convertGeometry(child.geometry, { start: group.start, count }, vertexColors, backSide);\n if (!converted) return;\n geometry = converted;\n geometryEntry.groups.set(geometryKey, geometry);\n }\n // A retained color/side variant may predate the current pose.\n if (deformation && (deformed || newGeometry || store.meshes.get(child)?.get(groupIndex)?.geometry !== geometry)) {\n geometry.dynamic = true;\n geometry.position.array.set(deformation.position);\n if (deformation.normal) {\n geometry.normal.array.set(deformation.normal);\n if (backSide) negateNormals(geometry);\n } else {\n // Retain resident attribute storage so a pose change can refit its BVH.\n const normal = geometry.normal;\n generateVertexNormals(geometry);\n normal.array.set(geometry.normal.array);\n geometry.normal = normal;\n }\n if (deformation.tangent && geometry.tangent) {\n geometry.tangent.array.set(deformation.tangent);\n if (backSide) reverseTangentHandedness(geometry);\n }\n if (!child.geometry.getAttribute('tangent')) updateDynamicTangents(geometry);\n updateBoundingBox(geometry);\n if (!newGeometry) markDeformedGeometry(geometry);\n }\n let material = resolveMaterial(sourceMaterial)!;\n const baseMaterial = material;\n const autoUvProjection = !geometry.uv && baseMaterial.uvProjection === 'none' &&\n !!(baseMaterial.map || baseMaterial.normalMap || baseMaterial.emissiveMap || baseMaterial.metallicRoughnessMap ||\n baseMaterial.roughnessMap || baseMaterial.metalnessMap || baseMaterial.thinFilmMap ||\n baseMaterial.coatWeightMap || baseMaterial.coatRoughnessMap || baseMaterial.fuzzColorMap ||\n baseMaterial.fuzzRoughnessMap || baseMaterial.specularWeightMap || baseMaterial.specularColorMap || baseMaterial.anisotropyMap || baseMaterial.coatNormalMap);\n const autoDisplacementUvProjection = !geometry.uv && !!baseMaterial.displacementMap &&\n baseMaterial.displacementUvProjection === 'none';\n const instanceCount = expand ? instanced.count : 1;\n if (expand) {\n let batchesByGroup = store.instanceMeshes.get(child);\n if (!batchesByGroup) { batchesByGroup = new Map(); store.instanceMeshes.set(child, batchesByGroup); }\n const variant = materialVariant(sourceMaterial, baseMaterial, autoUvProjection, autoDisplacementUvProjection);\n let batch = batchesByGroup.get(groupIndex);\n if (!batch) {\n batch = new InstancedMesh(geometry, variant, {count: instanceCount});\n batch.transform = child.matrixWorld.elements.slice() as mat4.Mat4Array;\n batchesByGroup.set(groupIndex, batch);\n }\n batch.geometry = geometry;\n if (batch.materials[0] !== variant) batch.materials = [variant];\n let changed = batch.count !== instanceCount;\n if (batch.transforms.length < instanceCount * 16) {\n batch.transforms = new Float32Array(instanceCount * 16); changed = true;\n }\n // Grow colors before count validation in either notification method.\n const sourceColors = instanced.instanceColor;\n let colorsChanged = false;\n if (sourceColors) {\n if (!batch.colors || batch.colors.length < instanceCount * 3) batch.colors = new Float32Array(instanceCount * 3);\n for (let i = 0; i < instanceCount; i++) {\n for (let k = 0; k < 3; k++) {\n const value = Math.fround(k === 0 ? sourceColors.getX(i) : k === 1 ? sourceColors.getY(i) : sourceColors.getZ(i));\n if (!Object.is(batch.colors[i * 3 + k], value)) { batch.colors[i * 3 + k] = value; colorsChanged = true; }\n }\n }\n } else batch.colors = undefined;\n batch.count = instanceCount;\n const matrices = instanced.instanceMatrix;\n for (let i = 0; i < instanceCount; i++) for (let k = 0; k < 16; k++) {\n const value = Math.fround(matrices.array[i * matrices.itemSize + k]);\n if (!Object.is(batch.transforms[i * 16 + k], value)) { batch.transforms[i * 16 + k] = value; changed = true; }\n }\n for (let i = 0; i < 16; i++) batch.transform[i] = child.matrixWorld.elements[i];\n if (changed) batch.markTransformsUpdated();\n if (colorsChanged) batch.markColorsUpdated();\n batch.name = child.name || `Mesh ${meshes.length + 1}${groups.length > 1 ? `.${groupIndex + 1}` : ''}`;\n if (instanceCount > 0) { meshes.push(batch); options.onMeshConverted?.(batch, child, group, groupIndex); }\n } else {\n material = materialVariant(sourceMaterial, baseMaterial, autoUvProjection, autoDisplacementUvProjection);\n let meshGroups = store.meshes.get(child);\n if (!meshGroups) { meshGroups = new Map(); store.meshes.set(child, meshGroups); }\n let mesh = meshGroups.get(groupIndex);\n if (!mesh) {\n mesh = new Mesh(geometry, material);\n mesh.transform = child.matrixWorld.elements.slice() as mat4.Mat4Array;\n meshGroups.set(groupIndex, mesh);\n }\n mesh.geometry = geometry;\n if (mesh.materials[0] !== material) mesh.materials = [material];\n mesh.name = child.name || `Mesh ${meshes.length + 1}${groups.length > 1 ? `.${groupIndex + 1}` : ''}`;\n for (let i = 0; i < 16; i++) mesh.transform[i] = child.matrixWorld.elements[i];\n meshes.push(mesh); options.onMeshConverted?.(mesh, child, group, groupIndex);\n }\n });\n }\n } else if (isDirectionalLight(child)) {\n const light = new DirectionalLight({color: child.color.toArray() as ColorRGB, intensity: child.intensity});\n light.transform = Array.from(light.transform);\n light.position = child.getWorldPosition(child.position.clone()).toArray();\n light.lookAt(child.target.getWorldPosition(child.target.position.clone()).toArray());\n lights.push(retainLight(store, child, light));\n } else if (isRectAreaLight(child)) {\n const worldMatrix = child.matrixWorld.clone();\n // Shear decomposition can return a non-unit quaternion. The size below\n // carries scale; this approximated rectangle's sampling frame is rigid.\n const worldRotation = child.getWorldQuaternion(child.quaternion.clone()).normalize();\n const worldPosition = child.getWorldPosition(child.position.clone());\n const elements = worldMatrix.elements;\n const widthScale = Math.hypot(elements[0], elements[1], elements[2]);\n const heightScale = Math.hypot(elements[4], elements[5], elements[6]);\n const light = new RectLight({\n size: [child.width * widthScale, child.height * heightScale],\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity\n });\n worldMatrix.compose(worldPosition, worldRotation, child.scale.clone().set(1, 1, 1));\n light.transform = worldMatrix.elements.slice() as mat4.Mat4Array;\n lights.push(retainLight(store, child, light));\n } else if (isSpotLight(child)) {\n const worldPosition = child.getWorldPosition(child.position.clone());\n const worldTarget = child.target.getWorldPosition(\n child.target.position.clone()\n );\n const outerAngle = (child.angle * 180) / Math.PI;\n const profile = child.userData.mutracerIesProfile;\n if (profile != null && !(profile instanceof IESProfile)) {\n throw new Error(\n `THREE.SpotLight \"${child.name || '<unnamed>'}\" has an invalid mutracerIesProfile`\n );\n }\n const light = new SpotLight({\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity,\n radius: child.userData.mutracerRadius ?? 0.01,\n innerAngle: outerAngle * (1 - child.penumbra),\n outerAngle,\n iesProfile: profile\n });\n light.transform = Array.from(light.transform);\n light.position = worldPosition.toArray();\n light.lookAt(worldTarget.toArray());\n const rotation = -(child.userData.mutracerIesRotation ?? 0) * Math.PI / 180;\n if (rotation) mat4.rotateZ(light.transform, light.transform, rotation);\n lights.push(retainLight(store, child, light));\n } else if (isPointLight(child)) {\n const world = child.matrixWorld.elements;\n const position: [number, number, number] = [\n world[12],\n world[13],\n world[14]\n ];\n lights.push(retainLight(store, child,\n Object.assign(new SphereLight({\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity,\n radius: child.userData.mutracerRadius ?? 0.25\n }), { transform: [1,0,0,0, 0,1,0,0, 0,0,1,0, ...position,1] })\n ));\n } else if (isAmbientLight(child)) {\n lights.push(retainLight(store, child,\n new AmbientLight({color: child.color.toArray() as ColorRGB, intensity: child.intensity})\n ));\n }\n });\n\n const threeEnvironment = scene.environment as THREE.DataTexture | null;\n const environmentMap = convertDataTexture(threeEnvironment, store.equirectTextures);\n const environmentLight = threeEnvironment && environmentMap\n ? retainLight(store, threeEnvironment, new EnvironmentLight({map: environmentMap, intensity: scene.environmentIntensity})) as EnvironmentLight\n : undefined;\n if (environmentLight) {\n environmentLight.transform = scene.matrix.clone().makeRotationFromEuler(scene.environmentRotation).elements.slice();\n lights.push(environmentLight);\n }\n\n const grounded = scene.userData.mutracerGroundedSkybox as\n | {\n texture: THREE.DataTexture;\n height: number;\n radius: number;\n groundHeight?: number;\n center?: [number, number];\n rotation?: number;\n intensity?: number;\n }\n | undefined;\n const groundedTexture = grounded && convertDataTexture(grounded.texture, store.equirectTextures);\n const hideEnvironmentBackground =\n scene.userData.mutracerHiddenBackground === true;\n let background: GroundedSkyboxBackground | ColorRGBA | Texture | undefined =\n hideEnvironmentBackground\n ? [0, 0, 0, 0]\n : grounded && groundedTexture\n ? {\n type: 'GroundedSkybox',\n map: groundedTexture,\n height: grounded.height,\n radius: grounded.radius,\n groundHeight: grounded.groundHeight,\n center: grounded.center,\n rotation: grounded.rotation,\n intensity: grounded.intensity\n }\n : scene.background\n ? (scene.background as THREE.Color).isColor\n ? ([...(scene.background as THREE.Color).toArray(), 1] as ColorRGBA)\n : scene.background === scene.environment && environmentLight\n ? environmentLight.map\n : convertDataTexture(scene.background as THREE.DataTexture, store.equirectTextures)\n : undefined;\n\n const oldBackground = store.background;\n if (Array.isArray(background) && Array.isArray(oldBackground) && snapshotsEqual(background, oldBackground)) {\n background = oldBackground;\n } else if (background && oldBackground && !Array.isArray(background) && !Array.isArray(oldBackground)\n && !(background instanceof Texture) && !(oldBackground instanceof Texture)) {\n // Compare by values, ignoring the newly constructed wrapper's identity.\n if (snapshotsEqual(snapshotFields(background).slice(1), snapshotFields(oldBackground).slice(1))) background = oldBackground;\n else { Object.assign(oldBackground, background); background = oldBackground; }\n }\n store.background = background;\n // Inspect the final converted meshes, including onMeshConverted overrides.\n // Iterate across source materials so removed/hidden objects are pruned too.\n const usedMaterials = new Set(meshes.flatMap(mesh => mesh.materials));\n for (const [source, variants] of store.projectionVariants) {\n for (const [key, variant] of variants) if (!usedMaterials.has(variant.material)) variants.delete(key);\n if (!variants.size) store.projectionVariants.delete(source);\n }\n return {\n background,\n meshes,\n lights\n };\n}\n\n/** Structural control interface; no Three.js imports are needed in core APIs. */\nexport interface THREEControls {\n update(deltaTime?: number): boolean | void;\n addEventListener(type: 'start' | 'end', listener: () => void): void;\n removeEventListener(type: 'start' | 'end', listener: () => void): void;\n target?: THREE.Vector3;\n enableDamping?: boolean;\n /** Damping per 60 Hz frame; synchronization adjusts it for elapsed time. Default undefined uses the control's own timing. */\n dampingFactor?: number;\n autoRotate?: boolean;\n enabled?: boolean;\n /** Optional OrbitControls polar-angle accessor. Default undefined. */ getPolarAngle?(): number;\n /** Optional OrbitControls azimuthal-angle accessor. Default undefined. */ getAzimuthalAngle?(): number;\n}\n/** Three.js sources synchronized on each tick. */\nexport interface THREESyncOptions extends FromTHREESceneOptions {\n /** Scene source. Default undefined (engine.scene is untouched). */ scene?: THREE.Scene;\n /** Camera source. Default undefined (engine.camera is untouched). */ camera?: THREE.PerspectiveCamera | THREE.OrthographicCamera;\n /** Camera controls. Default undefined. */ controls?: THREEControls;\n /** Call controls.update during synchronization. Default true. */ updateControls?: boolean;\n}\n\n/** Inputs that can wake an idle OrbitControls instance, without inspecting its private inertia. */\nfunction orbitControlsState(camera: THREE.PerspectiveCamera | THREE.OrthographicCamera | undefined, controls: THREEControls): unknown[] | undefined {\n if (!camera || !controls.getPolarAngle || !controls.getAzimuthalAngle) return;\n camera.parent?.updateWorldMatrix(true, false);\n const state: unknown[] = [camera, controls.update, camera.parent, ...camera.position.toArray(), ...camera.quaternion.toArray(),\n ...camera.scale.toArray(), ...camera.up.toArray(), camera.zoom, ...(camera.parent?.matrixWorld.elements ?? [])];\n for (const [key, value] of Object.entries(controls)) {\n // Pointer-down changes the gesture state without changing the view.\n if (key.startsWith('_') || key === 'state') continue;\n const vector = value as THREE.Vector3 | undefined;\n if (vector?.isVector3) state.push(key, ...vector.toArray());\n else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') state.push(key, value);\n }\n return state;\n}\n/**\n * Keeps one MuTracer scene in sync with a Three.js scene, reusing unchanged objects.\n * Skinning/morph targets run on the CPU with per-source-mesh dynamic geometry.\n * InstancedMesh retains its prefix on count changes and shares geometry/BLAS;\n * Instance colors use native batch storage; automatic UV-less projections\n * share cached material variants per source material. Source edits refresh variants; unused variants\n * are removed after each update.\n */\nexport class THREESync extends Sync {\n /** Retained converted scene; absent when no scene source was supplied. */\n readonly scene: Scene | undefined;\n /** Retained converted camera; absent until the first camera update. */\n private _camera?: Camera;\n private _store = createConversionStore();\n private _disposed = false;\n private _started = false;\n private _gestureChanged = false;\n private _cameraState: unknown[] = [];\n private _lastUpdate?: number;\n private _idleControlsState?: unknown[];\n private _start = () => {this._started = true; this._gestureChanged = false;};\n private _end = () => {this._started = false;};\n /** Subscribes to controls without converting sources or modifying the engine. */\n constructor(engine: Engine, private _options: THREESyncOptions = {}) {\n super(engine);\n if (_options.scene) this.scene = {meshes: [], lights: []};\n _options.controls?.addEventListener('start', this._start);\n _options.controls?.addEventListener('end', this._end);\n }\n /** Updates controls, world matrices, retained instances and camera before engine.update. */\n update(): void {\n if (this._disposed) throw new Error('THREESync has been disposed');\n const now = performance.now(), controls = this._options.controls, sourceCamera = this._options.camera;\n const elapsed = this._lastUpdate === undefined ? 0 : Math.max(0, (now - this._lastUpdate) / 1000);\n const dt = Math.min(.1, elapsed);\n this._lastUpdate = now;\n let moving = false, settled = false;\n if (controls && this._options.updateControls !== false) {\n const orbitInputs = orbitControlsState(sourceCamera, controls);\n // OrbitControls applies pointer movement before synchronization. Keep a\n // settled camera untouched on pointer-down until its inputs actually change.\n const idle = (!this._started || !this._gestureChanged) && !controls.autoRotate && orbitInputs && this._idleControlsState && snapshotsEqual(orbitInputs, this._idleControlsState);\n if (!idle) {\n this._idleControlsState = undefined;\n const position = sourceCamera?.position.clone(), rotation = sourceCamera?.quaternion.clone(), zoom = sourceCamera?.zoom;\n const target = controls.target?.clone(), damping = controls.dampingFactor;\n const frameDamping = controls.enableDamping && damping !== undefined && damping >= 0 && damping <= 1\n ? 1 - Math.pow(1 - damping, elapsed * 60) : undefined;\n if (frameDamping !== undefined) controls.dampingFactor = frameDamping;\n try {moving = !!controls.update(dt);}\n finally {if (frameDamping !== undefined) controls.dampingFactor = damping;}\n if (!this._started && !controls.autoRotate && controls.enableDamping && position && sourceCamera && controls.target) {\n const referenceScale = frameDamping ? damping! / frameDamping : 1;\n const step = position.distanceTo(sourceCamera.position) * referenceScale;\n const zoomStep = Math.abs(Math.log(sourceCamera.zoom / zoom!)) * referenceScale;\n const poseChanged = step > 0 || sourceCamera.zoom !== zoom || !!(orbitInputs && (!rotation!.equals(sourceCamera.quaternion) || !target!.equals(controls.target)));\n // End the remaining inertia once its 60 Hz movement is imperceptible.\n // update() can return false before that tail has actually stopped.\n if ((moving || poseChanged) && step < 5e-4 * sourceCamera.position.distanceTo(controls.target) && zoomStep < 5e-4) {\n controls.enableDamping = false;\n try {controls.update(0);} finally {controls.enableDamping = true;}\n moving = false; settled = true;\n }\n // Once stopped, no more spherical/cartesian round trips occur until\n // a gesture, source pose, parent transform or public control option changes.\n if (orbitInputs && (settled || (!moving && !poseChanged))) this._idleControlsState = orbitControlsState(sourceCamera, controls);\n } else if (orbitInputs && !this._started && !controls.autoRotate && !moving) {\n this._idleControlsState = orbitControlsState(sourceCamera, controls);\n }\n }\n }\n this._store.poseChanged = false;\n if (this._options.scene && this.scene) {\n const next = convertScene(this._options.scene, this._options, this._store);\n if (!snapshotsEqual(this.scene.meshes, next.meshes)) this.scene.meshes = next.meshes;\n if (!snapshotsEqual(this.scene.lights, next.lights)) this.scene.lights = next.lights;\n this.scene.background = next.background;\n this.engine.scene = this.scene;\n }\n let cameraChanged = false;\n if (sourceCamera) {\n sourceCamera.updateWorldMatrix(true, false);\n const next = fromTHREECamera(sourceCamera);\n const state = snapshotFields(next).slice(1);\n cameraChanged = this._cameraState.length > 0 && !snapshotsEqual(state, this._cameraState);\n this._cameraState = state;\n if (!this._camera) this._camera = next; else this._camera.copy(next);\n this.engine.camera = this._camera;\n }\n if (this._started && (moving || cameraChanged)) this._gestureChanged = true;\n this.setActive((this._started && this._gestureChanged) || moving || this._store.poseChanged || (cameraChanged && !settled));\n }\n /** Removes control subscriptions and caches. The last converted objects remain usable. */\n dispose(): void {\n if (this._disposed) return;\n this._options.controls?.removeEventListener('start', this._start);\n this._options.controls?.removeEventListener('end', this._end);\n this._store = createConversionStore(); this._idleControlsState = undefined; this._disposed = true; super.dispose();\n }\n}\n\n/** Lens settings for {@link fromTHREECamera}. */\nexport interface FromTHREECameraOptions {\n /** Lens f-number; `0` disables depth of field. Default `0`. */\n fStop?: number;\n /**\n * Distance to the plane in focus in scene units. Default: the perspective\n * camera's `focus` (Three.js default `10`), otherwise `10`.\n */\n focusDistance?: number;\n /** Length of one scene unit in metres. Default `1`. */\n metersPerUnit?: number;\n}\n\n/**\n * Converts a Three.js perspective or orthographic camera. A perspective\n * camera's `focus` and film height (`filmGauge` and `aspect`) become\n * `focusDistance` and `sensorHeight`.\n */\nexport function fromTHREECamera(\n threeCamera: THREE.PerspectiveCamera | THREE.OrthographicCamera,\n options: FromTHREECameraOptions = {}\n) {\n const camera = (threeCamera as THREE.PerspectiveCamera).fov\n ? new Camera({projection: 'perspective', fov: (threeCamera as THREE.PerspectiveCamera).fov, aspect: (threeCamera as THREE.PerspectiveCamera).aspect, near: (threeCamera as THREE.PerspectiveCamera).near, far: (threeCamera as THREE.PerspectiveCamera).far})\n : new Camera({projection: 'orthographic', left: (threeCamera as THREE.OrthographicCamera).left, right: (threeCamera as THREE.OrthographicCamera).right, bottom: (threeCamera as THREE.OrthographicCamera).bottom, top: (threeCamera as THREE.OrthographicCamera).top, near: (threeCamera as THREE.OrthographicCamera).near, far: (threeCamera as THREE.OrthographicCamera).far});\n threeCamera.updateWorldMatrix(true, false);\n camera.zoom = threeCamera.zoom;\n camera.transform =\n threeCamera.matrixWorld.elements.slice() as mat4.Mat4Array;\n const perspective = threeCamera as THREE.PerspectiveCamera;\n if (perspective.isPerspectiveCamera) {\n if (perspective.focus > 0) camera.focusDistance = perspective.focus;\n const filmHeight = perspective.getFilmHeight();\n if (filmHeight > 0) camera.sensorHeight = filmHeight;\n }\n if (options.fStop !== undefined) camera.fStop = options.fStop;\n if (options.focusDistance !== undefined) {\n camera.focusDistance = options.focusDistance;\n }\n if (options.metersPerUnit !== undefined) {\n camera.metersPerUnit = options.metersPerUnit;\n }\n return camera;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fromTHREE.js","sourceRoot":"","sources":["../../src/util/fromTHREE.ts"],"names":[],"mappings":"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","sourcesContent":["import { specularAnisotropyModelIndex } from '../scene/anisotropyParameters.js';\nimport { normalizeMaterialParams } from '../scene/openPbrSchema.js';\nimport { thinFilmMapChannelIndex } from '../scene/thinFilmParameters.js';\nimport { snapshotMaterialParameters, materialParametersEqual } from '../renderer/sceneChangeDetector.js';\nimport InstancedMesh from '../scene/InstancedMesh.js';\nimport Sync from '../Sync.js';\nimport type Engine from '../Engine.js';\nimport { markDeformedGeometry } from '../scene/geometryChanges.js';\nimport type * as THREE from 'three';\nimport Mesh from '../scene/Mesh.js';\nimport OpenPBRMaterial, { getMaterialHashKey, materialKeys } from '../scene/OpenPBRMaterial.js';\nimport Geometry, { Attribute } from '../scene/Geometry.js';\nimport Texture from '../scene/Texture.js';\nimport DirectionalLight from '../scene/DirectionalLight.js';\nimport AmbientLight from '../scene/AmbientLight.js';\nimport EnvironmentLight from '../scene/EnvironmentLight.js';\nimport RectLight from '../scene/RectLight.js';\nimport SphereLight from '../scene/SphereLight.js';\nimport SpotLight from '../scene/SpotLight.js';\nimport IESProfile from '../scene/IESProfile.js';\nimport Camera from '../scene/Camera.js';\nimport type { ColorRGB, ColorRGBA } from '../types.js';\nimport type { Scene, SceneLight } from '../scene/Scene.js';\nimport { mat4 } from '../math.js';\nimport { generateVertexNormals, updateBoundingBox, updateDynamicTangents } from './geometry.js';\nimport { THREEDeformation, isDeformingMesh } from './threeDeformation.js';\nimport { snapshotsEqual, snapshotFields } from '../renderer/sceneChangeDetector.js';\n\ninterface TextureRecord {\n texture: Texture;\n state: unknown[];\n}\ntype TextureStore = WeakMap<THREE.Texture, TextureRecord>;\n\nfunction convertTexture(\n threeTexture: THREE.Texture | null | undefined,\n textureStore: TextureStore\n) {\n if (!threeTexture) return;\n const state = [threeTexture.version, threeTexture.image, threeTexture.flipY,\n threeTexture.repeat.x, threeTexture.repeat.y, threeTexture.offset.x,\n threeTexture.offset.y, threeTexture.channel, threeTexture.wrapS, threeTexture.wrapT, threeTexture.colorSpace];\n const cached = textureStore.get(threeTexture);\n if (cached && snapshotsEqual(cached.state, state)) return cached.texture;\n const image = convertTextureImage(threeTexture);\n const texture = cached?.texture ?? new Texture(image);\n texture.image = image;\n texture.source = threeTexture;\n texture.flipY = threeTexture.flipY;\n texture.uvScale = [threeTexture.repeat.x, threeTexture.repeat.y];\n texture.uvOffset = [threeTexture.offset.x, threeTexture.offset.y];\n texture.uvChannel = threeTexture.channel === 1 ? 1 : 0;\n const wrap = (value: number) => value === 1001 ? 'clamp-to-edge' as const\n : value === 1002 ? 'mirrored-repeat' as const : 'repeat' as const;\n texture.wrapS = wrap(threeTexture.wrapS); texture.wrapT = wrap(threeTexture.wrapT);\n // Three.js NoColorSpace also reads color channels without a transfer function.\n texture.colorSpace = threeTexture.colorSpace === 'srgb' ? 'srgb'\n : threeTexture.colorSpace === 'srgb-linear' || threeTexture.colorSpace === '' ? 'linear' : undefined;\n if (cached) texture.markUpdated();\n else texture.version = threeTexture.version;\n textureStore.set(threeTexture, { texture, state });\n return texture;\n}\n\nfunction halfFloatToFloat(value: number) {\n const sign = value & 0x8000 ? -1 : 1;\n const exponent = (value >> 10) & 0x1f;\n const fraction = value & 0x03ff;\n if (exponent === 0) {\n return sign * Math.pow(2, -14) * (fraction / 0x400);\n }\n if (exponent === 0x1f) {\n return fraction ? NaN : sign * Infinity;\n }\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 0x400);\n}\n\n/** Decode Three.js storage into the RGBA byte/float images used by MuTracer. */\nfunction convertTextureImage(texture: THREE.Texture): Texture['image'] {\n const image = texture.image as THREE.DataTexture['image'];\n if (!image?.data) return image as Texture['image'];\n // Three.js enums are kept numeric to retain the optional, type-only peer import.\n const channels = texture.format === 1028 ? 1 : texture.format === 1030 ? 2\n : texture.format === 1022 ? 3 : texture.format === 1023 ? 4 : 0;\n if (!channels) throw new Error(`Unsupported Three.js data texture format: ${texture.format}`);\n const data = image.data as ArrayLike<number>;\n if (data.length !== image.width * image.height * channels) {\n throw new Error('Three.js data texture length does not match its format and dimensions.');\n }\n const half = texture.type === 1016;\n if (channels === 4 && !half && (data instanceof Float32Array || data instanceof Uint8Array ||\n data instanceof Uint8ClampedArray || data instanceof Int32Array)) return image as Texture['image'];\n const bytes = data instanceof Uint8Array || data instanceof Uint8ClampedArray;\n const result = bytes ? new Uint8Array(image.width * image.height * 4)\n : new Float32Array(image.width * image.height * 4);\n const read = (index: number) => {\n const value = data[index];\n if (half) return halfFloatToFloat(value);\n if (data instanceof Uint16Array) return value / 65535;\n if (data instanceof Uint32Array) return value / 4294967295;\n if (data instanceof Int8Array) return Math.max(-1, value / 127);\n if (data instanceof Int16Array) return Math.max(-1, value / 32767);\n return value;\n };\n for (let i = 0; i < image.width * image.height; i++) {\n result[i * 4] = read(i * channels);\n result[i * 4 + 1] = channels > 1 ? read(i * channels + 1) : 0;\n result[i * 4 + 2] = channels > 2 ? read(i * channels + 2) : 0;\n result[i * 4 + 3] = channels === 4 ? read(i * channels + 3) : bytes ? 255 : 1;\n }\n return { width: image.width, height: image.height, data: result };\n}\n\nfunction convertDataTexture(threeTexture: THREE.DataTexture | null | undefined, textureStore: TextureStore) {\n if (!threeTexture?.image?.data || !threeTexture.image.width || !threeTexture.image.height) return;\n const previous = textureStore.get(threeTexture);\n const texture = convertTexture(threeTexture, textureStore)!;\n if (previous?.state === textureStore.get(threeTexture)?.state) return texture;\n const data = (texture.image as import('../scene/Texture.js').TextureDataSource).data;\n const { width, height } = threeTexture.image;\n // Three.js equirect maps put the sky at v = 1, so with flipY = false the\n // first row is the nadir. MuTracer environments start at the zenith and\n // ignore flipY, so reorder the rows here instead.\n texture.image = { data: threeTexture.flipY ? data : flipRows(data, width, height), width, height };\n texture.flipY = false;\n return texture;\n}\n\nfunction flipRows<T extends Float32Array | Uint8Array | Uint8ClampedArray | Int32Array>(data: T, width: number, height: number): T {\n if (height <= 1) return data;\n const rowLength = data.length / height;\n const flipped = new (data.constructor as new (length: number) => T)(data.length);\n for (let y = 0; y < height; y++) {\n flipped.set(data.subarray((height - 1 - y) * rowLength, (height - y) * rowLength), y * rowLength);\n }\n return flipped;\n}\n\nfunction convertMaterial(\n threeMaterial: THREE.Material,\n textureCache: TextureStore\n) {\n const material = new OpenPBRMaterial();\n if (threeMaterial.userData.mutracerShadowCatcher === true) {\n material.shadowCatcher = true;\n return material;\n }\n if ((threeMaterial as THREE.MeshBasicMaterial).isMeshBasicMaterial) {\n const basic = threeMaterial as THREE.MeshBasicMaterial;\n // GLTFLoader represents KHR_materials_unlit as MeshBasicMaterial. Keep its\n // base-color texture's alpha while displaying RGB without scene lighting.\n material.unlit = true;\n material.baseWeight = 0;\n material.specularWeight = 0;\n material.baseColor = basic.color.toArray() as ColorRGB;\n material.emissionColor = material.baseColor;\n material.emissionLuminance = 1;\n material.map = convertTexture(basic.map, textureCache);\n material.emissiveMap = material.map;\n material.alphaMap = convertTexture(basic.alphaMap, textureCache);\n material.geometryOpacity = basic.opacity;\n material.alphaCutoff = Math.max(0, basic.alphaTest);\n material.alphaMode = basic.alphaTest > 0\n ? 'mask'\n : basic.transparent || basic.opacity < 1 || !!basic.alphaMap\n ? 'blend'\n : 'opaque';\n material.mapAlphaUsage = material.alphaMode === 'opaque'\n ? \"opaque\"\n : \"alpha\";\n material.doubleSided = basic.side === 2;\n return material;\n }\n const standardMaterial = threeMaterial as THREE.MeshStandardMaterial;\n material.baseColor = standardMaterial.color.toArray() as ColorRGB;\n material.emissionColor =\n standardMaterial.emissive &&\n (standardMaterial.emissive.toArray() as ColorRGB);\n material.specularRoughness = standardMaterial.roughness;\n material.baseMetalness = standardMaterial.metalness;\n material.emissionLuminance = standardMaterial.emissiveIntensity;\n\n material.normalScale =\n standardMaterial.normalScale && standardMaterial.normalScale.toArray();\n\n const materialUvProjection = standardMaterial.userData\n .mutracerUvProjection;\n if (\n materialUvProjection === 'triplanar' ||\n materialUvProjection === 'spherical' ||\n materialUvProjection === 'cylindrical' ||\n materialUvProjection === 'none'\n ) {\n material.uvProjection = materialUvProjection;\n }\n const materialUvScale = standardMaterial.userData.mutracerUvProjectionScale;\n if (Array.isArray(materialUvScale) && materialUvScale.length >= 2) {\n const referenceLength = Math.max(\n Number(standardMaterial.userData.mutracerUvReferenceLength) || 1,\n 0.000001\n );\n const scaleX = Math.max(\n Number(materialUvScale[0]) || 0.000001,\n 0.000001\n );\n const scaleY = Math.max(\n Number(materialUvScale[1]) || 0.000001,\n 0.000001\n );\n material.uvProjectionScale = material.uvProjection === 'triplanar'\n ? [scaleX / referenceLength, scaleY / referenceLength]\n : material.uvProjection === 'cylindrical'\n ? [scaleX, scaleY / referenceLength]\n : [scaleX, scaleY];\n }\n\n material.map = convertTexture(standardMaterial.map, textureCache);\n material.alphaMap = convertTexture(standardMaterial.alphaMap, textureCache);\n material.alphaCutoff = Math.max(\n 0,\n Number.isFinite(standardMaterial.alphaTest) ? standardMaterial.alphaTest : 0\n );\n material.emissiveMap = convertTexture(\n standardMaterial.emissiveMap,\n textureCache\n );\n material.normalMap = convertTexture(standardMaterial.normalMap, textureCache);\n material.displacementMap = convertTexture(\n standardMaterial.displacementMap,\n textureCache\n );\n const displacementBias = Number(standardMaterial.displacementBias);\n if (Number.isFinite(displacementBias)) material.displacementBias = displacementBias;\n const displacementScale = Number(standardMaterial.displacementScale);\n // Three.js stores 1 even without a height map. Do not turn that inactive\n // default into MuTracer's height when a texture is added after conversion.\n material.displacementScale = Number.isFinite(displacementScale) &&\n (standardMaterial.displacementMap != null || displacementScale !== 1)\n ? displacementScale\n : material.displacementScale;\n const displacementStepSize = Number(\n standardMaterial.userData.mutracerDisplacementStepSize\n );\n if (Number.isFinite(displacementStepSize)) {\n material.displacementStepSize = Math.max(0, displacementStepSize);\n }\n const uvProjection = standardMaterial.userData\n .mutracerDisplacementUvProjection;\n if (\n uvProjection === 'triplanar' ||\n uvProjection === 'spherical' ||\n uvProjection === 'cylindrical' ||\n uvProjection === 'none'\n ) {\n material.displacementUvProjection = uvProjection;\n }\n const displacementUvProjectionScale = Number(\n standardMaterial.userData.mutracerDisplacementUvProjectionScale\n );\n if (Number.isFinite(displacementUvProjectionScale)) {\n material.displacementUvProjectionScale = Math.max(displacementUvProjectionScale, 0.000001);\n }\n if (\n standardMaterial.roughnessMap &&\n standardMaterial.roughnessMap === standardMaterial.metalnessMap\n ) {\n material.metallicRoughnessMap = convertTexture(\n standardMaterial.roughnessMap,\n textureCache\n );\n } else {\n material.roughnessMap = convertTexture(\n standardMaterial.roughnessMap,\n textureCache\n );\n material.metalnessMap = convertTexture(\n standardMaterial.metalnessMap,\n textureCache\n );\n }\n const physicalMaterial = standardMaterial as THREE.MeshPhysicalMaterial;\n if (physicalMaterial.type === 'MeshPhysicalMaterial') {\n material.transmissionWeight = physicalMaterial.transmission;\n material.transmissionMap = convertTexture(\n physicalMaterial.transmissionMap,\n textureCache\n );\n material.specularIor = physicalMaterial.ior;\n // glTF specular (KHR_materials_specular) only scales the dielectric\n // lobe, while OpenPBR applies it to metals too. A fully metallic\n // surface has no dielectric part, so keep the OpenPBR defaults there.\n const fullyMetallic = physicalMaterial.metalness === 1 && !physicalMaterial.metalnessMap;\n material.specularWeight = fullyMetallic ? 1 : physicalMaterial.specularIntensity;\n if (physicalMaterial.specularColor && !fullyMetallic) {\n material.specularColor =\n physicalMaterial.specularColor.toArray() as ColorRGB;\n }\n material.coatWeightMap = convertTexture(physicalMaterial.clearcoatMap, textureCache);\n material.coatRoughnessMap = convertTexture(physicalMaterial.clearcoatRoughnessMap, textureCache);\n material.coatNormalMap = convertTexture(physicalMaterial.clearcoatNormalMap, textureCache);\n material.coatNormalScale = physicalMaterial.clearcoatNormalScale.toArray();\n material.fuzzColorMap = convertTexture(physicalMaterial.sheenColorMap, textureCache);\n material.fuzzRoughnessMap = convertTexture(physicalMaterial.sheenRoughnessMap, textureCache);\n if (!fullyMetallic) {\n material.specularWeightMap = convertTexture(physicalMaterial.specularIntensityMap, textureCache);\n material.specularColorMap = convertTexture(physicalMaterial.specularColorMap, textureCache);\n }\n material.coatWeight = physicalMaterial.clearcoat;\n material.coatRoughness = physicalMaterial.clearcoatRoughness;\n // MeshPhysicalMaterial's clearcoat BRDF uses the fixed dielectric F0\n // for IOR 1.5. Match that in the OpenPBR path representation; explicit\n // mutracerOpenPBR metadata below may provide a different coat IOR.\n material.coatIor = 1.5;\n // Three.js/glTF clearcoat does not model internal-reflection darkening.\n material.coatDarkening = 0;\n material.fuzzWeight = physicalMaterial.sheen;\n material.fuzzRoughness = physicalMaterial.sheenRoughness;\n if (physicalMaterial.sheenColor) {\n material.fuzzColor = physicalMaterial.sheenColor.toArray() as ColorRGB;\n }\n if (physicalMaterial.attenuationColor) {\n material.transmissionColor =\n physicalMaterial.attenuationColor.toArray() as ColorRGB;\n }\n if (Number.isFinite(physicalMaterial.attenuationDistance)) {\n material.transmissionDepth = Math.max(\n 0,\n physicalMaterial.attenuationDistance\n );\n }\n }\n const dispersion = Number(physicalMaterial.dispersion);\n material.transmissionDispersionScale = Number.isFinite(dispersion)\n ? Math.max(0, dispersion)\n : 0;\n const realtimeIridescence = physicalMaterial as THREE.MeshPhysicalMaterial & {\n iridescence?: number;\n iridescenceIOR?: number;\n iridescenceThicknessRange?: number[];\n iridescenceThicknessMap?: THREE.Texture | null;\n };\n material.thinFilmThickness = Math.min(\n 20,\n Math.max(\n 0,\n (realtimeIridescence.iridescenceThicknessRange?.[1] ?? 500) / 1000\n )\n );\n material.thinFilmWeight = Math.min(\n 1, Math.max(0, realtimeIridescence.iridescence ?? 0)\n );\n material.thinFilmIor = Math.min(\n 2.5, Math.max(1, realtimeIridescence.iridescenceIOR ?? 1.4)\n );\n const nativeThinFilmMap = standardMaterial.userData.mutracerThinFilmMap as THREE.Texture | undefined;\n const thinFilmMap =\n (standardMaterial.userData\n .mutracerThinFilmMap as THREE.Texture | undefined) ??\n realtimeIridescence.iridescenceThicknessMap ??\n undefined;\n if (thinFilmMap) {\n material.thinFilmMap = convertTexture(thinFilmMap, textureCache);\n if (!nativeThinFilmMap) {\n material.thinFilmThicknessMinimum = Math.min(20, Math.max(0,\n (realtimeIridescence.iridescenceThicknessRange?.[0] ?? 0) / 1000));\n material.thinFilmMapChannel = 'g';\n }\n }\n const anisotropy = Number(physicalMaterial.anisotropy);\n material.specularRoughnessAnisotropy = Number.isFinite(anisotropy)\n ? Math.min(1, Math.max(0, anisotropy))\n : 0;\n if (physicalMaterial.isMeshPhysicalMaterial) {\n material.specularAnisotropyModel = 'gltf';\n material.anisotropyMap = convertTexture(physicalMaterial.anisotropyMap, textureCache);\n const rotation = Number(physicalMaterial.anisotropyRotation);\n material.specularAnisotropyRotation = Number.isFinite(rotation) ? rotation : 0;\n }\n const sourceOpenPbr = standardMaterial.userData.mutracerOpenPBR as Record<string, unknown> | undefined;\n const openPbr = sourceOpenPbr ? normalizeMaterialParams(sourceOpenPbr) : undefined;\n const finite = (\n value: unknown,\n fallback: number,\n minimum = 0,\n maximum = 1\n ) => {\n const number = Number(value);\n return Number.isFinite(number)\n ? Math.min(maximum, Math.max(minimum, number))\n : fallback;\n };\n const color = (value: unknown, fallback: ColorRGB) => {\n const components = value as ArrayLike<number> | undefined;\n return components && components.length >= 3\n ? ([\n finite(components[0], fallback[0]),\n finite(components[1], fallback[1]),\n finite(components[2], fallback[2])\n ] as ColorRGB)\n : fallback;\n };\n if (openPbr) {\n for (const key of ['displacementScale', 'displacementBias', 'displacementStepSize'] as const) {\n const value = openPbr[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n material[key] = key === 'displacementStepSize' ? Math.max(0, value) : value;\n }\n }\n if (openPbr.specularAnisotropyModel !== undefined) {\n specularAnisotropyModelIndex(openPbr.specularAnisotropyModel);\n material.specularAnisotropyModel = openPbr.specularAnisotropyModel as 'openpbr' | 'gltf';\n }\n if (openPbr.specularAnisotropy !== undefined && openPbr.specularAnisotropyModel !== 'gltf') {\n material.specularAnisotropyModel = 'openpbr';\n material.anisotropyMap = undefined;\n material.specularAnisotropyRotation = 0;\n }\n // Only supported Texture inputs are accepted; arbitrary metadata objects\n // must never enter the atlas as textures. Explicit null clears an import.\n for (const name of ['coatWeightMap', 'coatRoughnessMap', 'fuzzColorMap',\n 'fuzzRoughnessMap', 'specularWeightMap', 'specularColorMap', 'anisotropyMap', 'coatNormalMap'] as const) {\n const texture = openPbr[name];\n if (texture === null) material[name] = undefined;\n else if (texture instanceof Texture) material[name] = texture;\n else if (texture && (texture as THREE.Texture).isTexture &&\n typeof (texture as THREE.Texture).clone === 'function') {\n material[name] = convertTexture(texture as THREE.Texture, textureCache);\n }\n }\n material.specularAnisotropyRotation = finite(openPbr.specularAnisotropyRotation, material.specularAnisotropyRotation, -Infinity, Infinity);\n material.coatAnisotropyRotation = finite(openPbr.coatAnisotropyRotation, material.coatAnisotropyRotation, -Infinity, Infinity);\n const coatScale = openPbr.coatNormalScale as ArrayLike<number> | undefined;\n if (coatScale && coatScale.length >= 2) {\n material.coatNormalScale = [\n finite(coatScale[0], material.coatNormalScale[0], -Infinity, Infinity),\n finite(coatScale[1], material.coatNormalScale[1], -Infinity, Infinity)\n ];\n }\n material.baseWeight = finite(openPbr.baseWeight, material.baseWeight);\n material.baseDiffuseRoughness = finite(\n openPbr.baseDiffuseRoughness,\n material.baseDiffuseRoughness\n );\n material.specularWeight = finite(\n openPbr.specularWeight,\n material.specularWeight\n );\n material.specularColor = color(\n openPbr.specularColor,\n material.specularColor\n );\n material.transmissionScatter = color(\n openPbr.transmissionScatter,\n material.transmissionScatter\n );\n material.transmissionScatterAnisotropy = finite(\n openPbr.transmissionScatterAnisotropy,\n material.transmissionScatterAnisotropy,\n -0.95,\n 0.95\n );\n material.transmissionDispersionScale = finite(\n openPbr.transmissionDispersionScale,\n material.transmissionDispersionScale,\n 0,\n Infinity\n );\n material.transmissionDispersionAbbeNumber = finite(\n openPbr.transmissionDispersionAbbeNumber,\n material.transmissionDispersionAbbeNumber,\n 1,\n 100\n );\n material.subsurfaceWeight = finite(\n openPbr.subsurfaceWeight,\n material.subsurfaceWeight\n );\n material.subsurfaceColor = color(\n openPbr.subsurfaceColor,\n material.subsurfaceColor\n );\n material.subsurfaceRadius = finite(\n openPbr.subsurfaceRadius,\n material.subsurfaceRadius,\n 0,\n Infinity\n );\n material.subsurfaceRadiusScale = color(\n openPbr.subsurfaceRadiusScale,\n material.subsurfaceRadiusScale\n );\n material.subsurfaceScatterAnisotropy = finite(\n openPbr.subsurfaceAnisotropy,\n material.subsurfaceAnisotropy,\n -0.95,\n 0.95\n );\n material.coatWeight = finite(openPbr.coatWeight, material.coatWeight);\n material.coatColor = color(openPbr.coatColor, material.coatColor);\n material.coatRoughness = finite(\n openPbr.coatRoughness,\n material.coatRoughness\n );\n material.coatRoughnessAnisotropy = finite(\n openPbr.coatAnisotropy,\n material.coatAnisotropy\n );\n material.coatIor = finite(openPbr.coatIor, material.coatIor, 1, 2.5);\n material.coatDarkening = finite(\n openPbr.coatDarkening,\n material.coatDarkening\n );\n material.fuzzWeight = finite(openPbr.fuzzWeight, material.fuzzWeight);\n material.fuzzColor = color(openPbr.fuzzColor, material.fuzzColor);\n material.fuzzRoughness = finite(\n openPbr.fuzzRoughness,\n material.fuzzRoughness\n );\n if ('thinWalled' in openPbr) {\n material.geometryThinWalled = openPbr.thinWalled === true;\n }\n material.thinFilmWeight = finite(\n openPbr.thinFilmWeight,\n material.thinFilmWeight\n );\n material.thinFilmThickness = finite(\n openPbr.thinFilmThickness,\n material.thinFilmThickness,\n 0,\n 20\n );\n material.thinFilmThicknessMinimum = finite(\n openPbr.thinFilmThicknessMinimum, material.thinFilmThicknessMinimum, 0, 20\n );\n if (openPbr.thinFilmMapChannel !== undefined) {\n material.thinFilmMapChannel = ['r', 'g', 'b', 'a'][thinFilmMapChannelIndex(openPbr.thinFilmMapChannel)] as OpenPBRMaterial['thinFilmMapChannel'];\n }\n if (openPbr.thinFilmMap instanceof Texture) material.thinFilmMap = openPbr.thinFilmMap;\n else if (openPbr.thinFilmMap && (openPbr.thinFilmMap as THREE.Texture).isTexture) {\n material.thinFilmMap = convertTexture(openPbr.thinFilmMap as THREE.Texture, textureCache);\n }\n material.thinFilmIor = finite(\n openPbr.thinFilmIor,\n material.thinFilmIor,\n 1,\n 2.5\n );\n }\n material.geometryOpacity = standardMaterial.opacity;\n // THREE.DoubleSide is the numeric enum value 2. Keep this module's Three.js\n // import type-only while preserving the source material's culling semantics.\n material.doubleSided = standardMaterial.side === 2;\n if (openPbr) {\n material.specularRoughnessAnisotropy = finite(openPbr.specularAnisotropy, material.specularRoughnessAnisotropy);\n material.geometryOpacity = finite(openPbr.opacity, material.geometryOpacity);\n }\n const bevelSize = Number(standardMaterial.userData.mutracerBevelSize);\n material.bevelSize = Number.isFinite(bevelSize) ? Math.max(0, bevelSize) : 0;\n material.mapAlphaUsage =\n standardMaterial.transparent ||\n !!standardMaterial.alphaMap ||\n standardMaterial.alphaTest > 0\n ? \"alpha\"\n : \"opaque\";\n material.alphaMode = standardMaterial.alphaTest > 0\n ? 'mask'\n : standardMaterial.transparent ||\n material.geometryOpacity < 1 ||\n !!standardMaterial.alphaMap\n ? 'blend'\n : 'opaque';\n\n if (standardMaterial.side === 1) {\n // BackSide normals are reversed in converted geometry. Keep the source\n // displacement direction and biased base surface unchanged.\n material.displacementScale = -material.displacementScale;\n material.displacementBias = -material.displacementBias;\n }\n return material;\n}\n\nfunction copyFloatAttribute(\n attribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n itemSize = attribute.itemSize\n) {\n const result = new Float32Array(attribute.count * itemSize);\n if (attribute.array instanceof Float32Array && !attribute.normalized) {\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n if (!interleaved.isInterleavedBufferAttribute && itemSize === attribute.itemSize) {\n result.set(attribute.array.subarray(0, result.length));\n } else {\n const stride = interleaved.isInterleavedBufferAttribute\n ? interleaved.data.stride : attribute.itemSize;\n const offset = interleaved.isInterleavedBufferAttribute ? interleaved.offset : 0;\n for (let index = 0; index < attribute.count; index++) {\n const sourceOffset = index * stride + offset;\n const targetOffset = index * itemSize;\n for (let component = 0; component < itemSize; component++) {\n result[targetOffset + component] = attribute.array[sourceOffset + component];\n }\n }\n }\n return result;\n }\n // Getters preserve normalized integer and Float16BufferAttribute decoding.\n const getters = [\n attribute.getX,\n attribute.getY,\n attribute.getZ,\n attribute.getW\n ];\n for (let index = 0; index < attribute.count; index++) {\n for (let component = 0; component < itemSize; component++) {\n result[index * itemSize + component] = getters[component].call(\n attribute,\n index\n );\n }\n }\n return result;\n}\n\nfunction convertGeometry(\n threeGeometry: THREE.BufferGeometry,\n drawRange: { start: number; count: number },\n vertexColors: boolean,\n backSide: boolean\n): Geometry | null {\n const positionAttrb = threeGeometry.getAttribute('position');\n const normalAttrb = threeGeometry.getAttribute('normal');\n const tangentAttrb = threeGeometry.getAttribute('tangent');\n const uvAttrb = threeGeometry.getAttribute('uv');\n const uv1Attrb = threeGeometry.getAttribute('uv1');\n const colorAttrb = vertexColors && threeGeometry.getAttribute('color');\n const indexAttrb = threeGeometry.getIndex();\n const sourceCount = indexAttrb ? indexAttrb.array.length : positionAttrb.count;\n // Match Array.slice range handling without expanding the complete index stream.\n const clampOffset = (offset: number) => {\n const integer = Math.trunc(offset) || 0;\n return integer < 0 ? Math.max(sourceCount + integer, 0) : Math.min(integer, sourceCount);\n };\n const start = drawRange ? clampOffset(drawRange.start) : 0;\n const end = drawRange ? clampOffset(drawRange.start + drawRange.count) : sourceCount;\n let indexCount = Math.max(end - start, 0);\n // WebGL's TRIANGLES draw mode ignores an incomplete final primitive. Keep\n // path tracing on the same index stream so valid BufferGeometry with a\n // dangling one or two elements cannot produce invalid BLAS input.\n indexCount -= indexCount % 3;\n if (indexCount === 0) return null;\n const indices = new Uint32Array(indexCount);\n if (indexAttrb) {\n indices.set(indexAttrb.array.subarray(start, start + indexCount));\n } else {\n for (let index = 0; index < indexCount; index++) indices[index] = start + index;\n }\n if (backSide) {\n for (let i = 0; i < indices.length; i += 3) {\n const tmp = indices[i + 1];\n indices[i + 1] = indices[i + 2];\n indices[i + 2] = tmp;\n }\n }\n const geometry = new Geometry({\n position: new Attribute(\n copyFloatAttribute(positionAttrb),\n positionAttrb.itemSize\n ),\n normal:\n normalAttrb &&\n new Attribute(copyFloatAttribute(normalAttrb), normalAttrb.itemSize),\n tangent: tangentAttrb && new Attribute(\n copyFloatAttribute(tangentAttrb, Math.min(4, tangentAttrb.itemSize)),\n Math.min(4, tangentAttrb.itemSize)\n ),\n uv: uvAttrb && new Attribute(copyFloatAttribute(uvAttrb), uvAttrb.itemSize),\n uv1:\n uv1Attrb &&\n new Attribute(copyFloatAttribute(uv1Attrb), uv1Attrb.itemSize),\n // MuTracer stores linear RGB only; omit Three.js's optional vertex alpha.\n color: colorAttrb ? new Attribute(copyFloatAttribute(colorAttrb, 3), 3) : undefined,\n indices: new Attribute(indices, 1)\n });\n // Generated normals already follow the reversed indices; authored normals do not.\n if (backSide) {\n if (normalAttrb) negateNormals(geometry);\n reverseTangentHandedness(geometry);\n }\n updateBoundingBox(geometry);\n return geometry;\n}\n\nfunction negateNormals(geometry: Geometry) {\n const normals = geometry.normal.array;\n for (let i = 0; i < normals.length; i++) normals[i] = -normals[i];\n}\n\nfunction reverseTangentHandedness(geometry: Geometry) {\n // Three.js FLIP_SIDED reverses N but preserves T and B. Reversing W\n // preserves that bitangent when the renderer reconstructs cross(N,T)*W.\n const tangent = geometry.tangent;\n if (tangent?.itemSize === 4) for (let i = 3; i < tangent.array.length; i += 4) tangent.array[i] *= -1;\n}\n\n/** Options for one-shot conversion and persistent Three.js synchronization. */\nexport interface FromTHREESceneOptions {\n /** Override scene.environment with a MuTracer equirectangular texture or ProceduralSky. Default undefined uses the Three.js environment. Intensity and rotation still use the Three.js scene values. */\n environment?: Texture;\n /** Custom material conversion. Default undefined uses built-in conversion; returning null skips every mesh using this material. THREESync invokes once per source material identity/version, so the result cannot depend on a particular mesh. Returned materials are caller-owned; engine.update detects parameter edits. */\n convertMaterial?(material: THREE.Material): OpenPBRMaterial | null | undefined;\n /** Custom light conversion. Default undefined uses built-in conversion; returning null skips this light. THREESync invokes once per source light identity and numeric userData.mutracerVersion (default undefined, never rerun). Returned lights are retained by identity and remain caller-owned. */\n convertLight?(light: THREE.Light): SceneLight | null | undefined;\n /** Receives each converted visible mesh/group on every update. Default: no callback. */\n onMeshConverted?(\n mesh: Mesh | InstancedMesh,\n source: THREE.Mesh,\n group: { start: number; count: number; materialIndex?: number },\n groupIndex: number\n ): void;\n}\n\ninterface MaterialVariant {\n material: OpenPBRMaterial;\n parameters: unknown[];\n hash?: string;\n base?: OpenPBRMaterial;\n autoUvProjection: boolean;\n autoDisplacementUvProjection: boolean;\n}\ninterface GeometryEntry { state: unknown[]; groups: Map<string, Geometry>; checkedAt: number }\ninterface ConversionStore {\n updateId: number;\n textures: TextureStore;\n // Equirectangular conversion normalizes rows; material textures retain source pixels and flipY.\n equirectTextures: TextureStore;\n materials: WeakMap<THREE.Material, { material: OpenPBRMaterial; hash: string }>;\n materialHooks: WeakMap<THREE.Material, {version: number; value: OpenPBRMaterial | null | undefined}>;\n lightHooks: WeakMap<THREE.Light, {version: number | undefined; value: SceneLight | null | undefined}>;\n geometries: WeakMap<THREE.BufferGeometry, GeometryEntry>;\n deformedGeometries: WeakMap<THREE.Mesh, GeometryEntry>;\n deformations: WeakMap<THREE.Mesh, THREEDeformation>;\n poseChanged: boolean;\n meshes: WeakMap<THREE.Mesh, Map<number, Mesh>>;\n lights: WeakMap<THREE.Object3D | THREE.Texture | Texture, SceneLight>;\n instanceMeshes: WeakMap<THREE.Mesh, Map<number, InstancedMesh>>;\n // Automatic-projection variants, pruned each update.\n projectionVariants: Map<THREE.Material, Map<string, MaterialVariant>>;\n warned: WeakSet<THREE.Object3D>;\n background?: Scene['background'];\n}\nfunction createConversionStore(): ConversionStore {\n return { updateId: 0, textures: new WeakMap(), equirectTextures: new WeakMap(),\n materials: new WeakMap(), geometries: new WeakMap(),\n materialHooks: new WeakMap(), lightHooks: new WeakMap(),\n poseChanged: false, meshes: new WeakMap(), lights: new WeakMap(), deformedGeometries: new WeakMap(), deformations: new WeakMap(),\n instanceMeshes: new WeakMap(), projectionVariants: new Map(), warned: new WeakSet() };\n}\nconst geometryAttributeNames = ['position', 'normal', 'tangent', 'uv', 'uv1', 'color', 'index'] as const;\nfunction geometryState(geometry: THREE.BufferGeometry, deformation: boolean) {\n const state: unknown[] = [];\n for (let i = 0; i < geometryAttributeNames.length; i++) {\n const name = geometryAttributeNames[i];\n const attribute = name === 'index' ? geometry.index : geometry.getAttribute(name);\n if (!attribute) { state.push(undefined); continue; }\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n const buffer = interleaved.isInterleavedBufferAttribute ? interleaved.data : attribute as THREE.BufferAttribute;\n state.push(attribute, buffer, deformation && i < 3 ? undefined : buffer.version, buffer.array, attribute.count, attribute.itemSize,\n attribute.normalized, interleaved.offset, interleaved.data?.stride);\n }\n return state;\n}\n/** Compare cached fields directly; unchanged geometry creates no snapshot arrays. */\nfunction geometryStateMatches(geometry: THREE.BufferGeometry, state: readonly unknown[], deformation: boolean) {\n let field = 0;\n for (let i = 0; i < geometryAttributeNames.length; i++) {\n const name = geometryAttributeNames[i];\n const attribute = name === 'index' ? geometry.index : geometry.getAttribute(name);\n if (!attribute) {\n if (state[field++] !== undefined) return false;\n continue;\n }\n const interleaved = attribute as THREE.InterleavedBufferAttribute;\n const buffer = interleaved.isInterleavedBufferAttribute ? interleaved.data : attribute as THREE.BufferAttribute;\n if (state[field++] !== attribute || state[field++] !== buffer ||\n !Object.is(state[field++], deformation && i < 3 ? undefined : buffer.version) ||\n state[field++] !== buffer.array || !Object.is(state[field++], attribute.count) ||\n !Object.is(state[field++], attribute.itemSize) || !Object.is(state[field++], attribute.normalized) ||\n !Object.is(state[field++], interleaved.offset) || !Object.is(state[field++], interleaved.data?.stride)) return false;\n }\n return field === state.length;\n}\nfunction retainLight(store: ConversionStore, source: THREE.Object3D | THREE.Texture | Texture, value: SceneLight) {\n const cached = store.lights.get(source);\n if (!cached || cached.type !== value.type) {\n store.lights.set(source, value);\n return value;\n }\n // Matrix and color arrays are retained when unchanged; light identity always is.\n for (const key of Object.keys(value)) {\n const previous = (cached as unknown as Record<string, unknown>)[key];\n const next = (value as unknown as Record<string, unknown>)[key];\n if (Array.isArray(previous) && Array.isArray(next) && snapshotsEqual(previous, next)) continue;\n (cached as unknown as Record<string, unknown>)[key] = next;\n }\n return cached;\n}\n\n/**\n * Converts a Three.js scene into a MuTracer {@link Scene}: meshes with\n * `MeshStandardMaterial` / `MeshPhysicalMaterial` (mapped to OpenPBR),\n * directional, ambient, rect-area, point and spot lights, and the scene\n * background / environment. Calls `scene.updateMatrixWorld()` and creates fresh objects on every call.\n * CPU-evaluates skinning/morph targets and batches InstancedMesh instances\n * with shared geometry, native colors and cached projection material variants. Unsupported batched\n * or instanced deformation falls back to an ordinary mesh with a warning.\n * For animation and editing, use {@link THREESync}.\n *\n * Renderer-specific material settings can be supplied through\n * `material.userData`, e.g. `userData.mutracerShadowCatcher = true` or\n * `userData.mutracerOpenPBR = { ... }` for OpenPBR inputs without a Three.js\n * equivalent.\n */\nexport function fromTHREEScene(\n scene: THREE.Scene,\n options: FromTHREESceneOptions = {}\n) : Scene {\n return convertScene(scene, options, createConversionStore());\n}\n\nfunction convertScene(scene: THREE.Scene, options: FromTHREESceneOptions, store: ConversionStore): Scene {\n const updateId = ++store.updateId;\n const meshes: Mesh[] = [];\n const lights: SceneLight[] = [];\n const textureCache = store.textures;\n const convertedMaterials = new Set<THREE.Material>();\n const baseHashes = new Map<OpenPBRMaterial, string>();\n function refreshVariant(entry: MaterialVariant, base: OpenPBRMaterial) {\n let hash = baseHashes.get(base);\n if (hash === undefined) { hash = getMaterialHashKey(base); baseHashes.set(base, hash); }\n if (entry.base === base && entry.hash === hash && materialParametersEqual(base, entry.parameters)) return;\n for (const field of materialKeys) (entry.material as unknown as Record<string, unknown>)[field] = base[field];\n if (entry.autoUvProjection) entry.material.uvProjection = 'triplanar';\n if (entry.autoDisplacementUvProjection) entry.material.displacementUvProjection = 'triplanar';\n entry.parameters = snapshotMaterialParameters(base); entry.hash = hash; entry.base = base;\n }\n function materialVariant(source: THREE.Material, base: OpenPBRMaterial,\n autoUvProjection: boolean, autoDisplacementUvProjection: boolean) {\n if (!autoUvProjection && !autoDisplacementUvProjection) return base;\n let variants = store.projectionVariants.get(source);\n if (!variants) { variants = new Map(); store.projectionVariants.set(source, variants); }\n const key = `${+autoUvProjection}:${+autoDisplacementUvProjection}`;\n let variant = variants.get(key);\n if (!variant) {\n variant = { material: new OpenPBRMaterial(), parameters: [],\n autoUvProjection, autoDisplacementUvProjection };\n variants.set(key, variant);\n }\n refreshVariant(variant, base);\n return variant.material;\n }\n\n function materialHook(source: THREE.Material) {\n if (!options.convertMaterial) return undefined;\n let entry = store.materialHooks.get(source);\n if (!entry || entry.version !== source.version) {\n entry = {version: source.version, value: options.convertMaterial(source)};\n store.materialHooks.set(source, entry);\n }\n return entry.value;\n }\n function lightHook(source: THREE.Light) {\n if (!options.convertLight) return undefined;\n // Three.js Light has no built-in version; applications revise it through userData.\n const revision = source.userData.mutracerVersion;\n const version = typeof revision === 'number' ? revision : undefined;\n let entry = store.lightHooks.get(source);\n if (!entry || entry.version !== version) {\n entry = {version, value: options.convertLight(source)};\n store.lightHooks.set(source, entry);\n }\n return entry.value;\n }\n function resolveMaterial(source: THREE.Material) {\n const custom = materialHook(source);\n if (custom !== undefined) return custom;\n const cached = store.materials.get(source);\n if (convertedMaterials.has(source)) return cached!.material;\n const converted = convertMaterial(source, textureCache);\n const hash = getMaterialHashKey(converted);\n let material = converted;\n if (cached) {\n if (cached.hash !== hash) {\n for (const key of materialKeys) (cached.material as unknown as Record<string, unknown>)[key] = converted[key];\n cached.hash = hash;\n }\n material = cached.material;\n } else store.materials.set(source, {material, hash});\n convertedMaterials.add(source);\n return material;\n }\n\n function isMesh(node: THREE.Object3D): node is THREE.Mesh {\n return (node as THREE.Mesh).isMesh;\n }\n function isDirectionalLight(\n node: THREE.Object3D\n ): node is THREE.DirectionalLight {\n return (node as THREE.DirectionalLight).isDirectionalLight;\n }\n function isAmbientLight(node: THREE.Object3D): node is THREE.AmbientLight {\n return (node as THREE.AmbientLight).isAmbientLight;\n }\n function isRectAreaLight(node: THREE.Object3D): node is THREE.RectAreaLight {\n return (node as THREE.RectAreaLight).isRectAreaLight;\n }\n function isPointLight(node: THREE.Object3D): node is THREE.PointLight {\n return node.type === 'PointLight';\n }\n function isSpotLight(node: THREE.Object3D): node is THREE.SpotLight {\n return node.type === 'SpotLight';\n }\n scene.updateMatrixWorld(true);\n scene.traverseVisible((child) => {\n if ((child as THREE.Light).isLight) {\n const custom = lightHook(child as THREE.Light);\n if (custom !== undefined) {\n if (custom !== null) lights.push(custom);\n return;\n }\n }\n if (isMesh(child)) {\n if (child.userData.viewerEnvironment) return;\n // Viewer-only proxy geometry is already represented by its source mesh.\n if (child.userData.viewerRealtimeDisplacement) return;\n const childMaterials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n // A null result rejects the source mesh, including all of its groups/instances.\n if (childMaterials.some(material => materialHook(material) === null)) return;\n if (!child.geometry) {\n console.warn(child, 'must have a geometry property');\n } else if (\n childMaterials.some(\n (material) =>\n materialHook(material) === undefined &&\n !(material as THREE.MeshStandardMaterial).isMeshStandardMaterial &&\n !(material as THREE.MeshBasicMaterial).isMeshBasicMaterial &&\n material.userData.mutracerShadowCatcher !== true\n )\n ) {\n console.warn(\n child,\n 'must use MeshStandardMaterial or MeshBasicMaterial in order to be rendered.'\n );\n } else {\n const instanced = child as THREE.InstancedMesh;\n const unsupported = (child as THREE.Mesh & { isBatchedMesh?: boolean }).isBatchedMesh ||\n instanced.isInstancedMesh && (!!instanced.morphTexture || (child as THREE.SkinnedMesh).isSkinnedMesh);\n if (unsupported && !store.warned.has(child)) {\n console.warn('MuTracer: BatchedMesh, instanced morph targets and skinned instancing are not supported; converting as an ordinary mesh.', child);\n store.warned.add(child);\n }\n const expand = instanced.isInstancedMesh && !unsupported;\n let deformation: THREEDeformation | undefined;\n let deformed = false;\n if (!unsupported && isDeformingMesh(child)) {\n deformation = store.deformations.get(child);\n if (!deformation?.matches(child.geometry)) {\n deformation = new THREEDeformation(child.geometry); store.deformations.set(child, deformation);\n store.deformedGeometries.delete(child);\n }\n deformed = deformation.update(child);\n store.poseChanged ||= deformed;\n }\n const threeMaterials = childMaterials;\n const groups =\n threeMaterials.length > 1 && child.geometry.groups.length\n ? child.geometry.groups\n : [{ start: 0, count: Infinity, materialIndex: 0 }];\n // Shared static geometry is checked once per update, before its groups.\n // Deforming meshes keep independent entries for their evaluated geometry.\n let entry = deformation ? store.deformedGeometries.get(child) : store.geometries.get(child.geometry);\n if (!entry || entry.checkedAt !== updateId) {\n if (!entry || !geometryStateMatches(child.geometry, entry.state, !!deformation)) {\n entry = { state: geometryState(child.geometry, !!deformation), groups: new Map(), checkedAt: updateId };\n if (deformation) store.deformedGeometries.set(child, entry);\n else store.geometries.set(child.geometry, entry);\n }\n entry.checkedAt = updateId;\n }\n const geometryEntry = entry;\n groups.forEach((group, groupIndex) => {\n const count = Number.isFinite(group.count)\n ? group.count\n : (child.geometry.getIndex()?.count ??\n child.geometry.getAttribute('position').count);\n const sourceMaterial = threeMaterials[group.materialIndex ?? 0];\n // Vertex colors and BackSide orientation are baked into geometry, so\n // groups with different switches cannot share the same cached variant.\n const vertexColors = sourceMaterial.vertexColors === true;\n const backSide = sourceMaterial.side === 1;\n const geometryKey = `${group.start}:${count}:${vertexColors}:${backSide}`;\n let geometry = geometryEntry.groups.get(geometryKey);\n const newGeometry = !geometry;\n if (!geometry) {\n const converted = convertGeometry(child.geometry, { start: group.start, count }, vertexColors, backSide);\n if (!converted) return;\n geometry = converted;\n geometryEntry.groups.set(geometryKey, geometry);\n }\n // A retained color/side variant may predate the current pose.\n if (deformation && (deformed || newGeometry || store.meshes.get(child)?.get(groupIndex)?.geometry !== geometry)) {\n geometry.dynamic = true;\n geometry.position.array.set(deformation.position);\n if (deformation.normal) {\n geometry.normal.array.set(deformation.normal);\n if (backSide) negateNormals(geometry);\n } else {\n // Retain resident attribute storage so a pose change can refit its BVH.\n const normal = geometry.normal;\n generateVertexNormals(geometry);\n normal.array.set(geometry.normal.array);\n geometry.normal = normal;\n }\n if (deformation.tangent && geometry.tangent) {\n geometry.tangent.array.set(deformation.tangent);\n if (backSide) reverseTangentHandedness(geometry);\n }\n if (!child.geometry.getAttribute('tangent')) updateDynamicTangents(geometry);\n updateBoundingBox(geometry);\n if (!newGeometry) markDeformedGeometry(geometry);\n }\n let material = resolveMaterial(sourceMaterial)!;\n const baseMaterial = material;\n const autoUvProjection = !geometry.uv && baseMaterial.uvProjection === 'none' &&\n !!(baseMaterial.map || baseMaterial.normalMap || baseMaterial.emissiveMap || baseMaterial.metallicRoughnessMap ||\n baseMaterial.roughnessMap || baseMaterial.metalnessMap || baseMaterial.thinFilmMap ||\n baseMaterial.coatWeightMap || baseMaterial.coatRoughnessMap || baseMaterial.fuzzColorMap ||\n baseMaterial.fuzzRoughnessMap || baseMaterial.specularWeightMap || baseMaterial.specularColorMap || baseMaterial.anisotropyMap || baseMaterial.coatNormalMap);\n const autoDisplacementUvProjection = !geometry.uv && !!baseMaterial.displacementMap &&\n baseMaterial.displacementUvProjection === 'none';\n const instanceCount = expand ? instanced.count : 1;\n if (expand) {\n let batchesByGroup = store.instanceMeshes.get(child);\n if (!batchesByGroup) { batchesByGroup = new Map(); store.instanceMeshes.set(child, batchesByGroup); }\n const variant = materialVariant(sourceMaterial, baseMaterial, autoUvProjection, autoDisplacementUvProjection);\n let batch = batchesByGroup.get(groupIndex);\n if (!batch) {\n batch = new InstancedMesh(geometry, variant, {count: instanceCount});\n batch.transform = child.matrixWorld.elements.slice() as number[];\n batchesByGroup.set(groupIndex, batch);\n }\n batch.geometry = geometry;\n if (batch.materials[0] !== variant) batch.materials = [variant];\n let changed = batch.count !== instanceCount;\n if (batch.transforms.length < instanceCount * 16) {\n batch.transforms = new Float32Array(instanceCount * 16); changed = true;\n }\n // Grow colors before count validation in either notification method.\n const sourceColors = instanced.instanceColor;\n let colorsChanged = false;\n if (sourceColors) {\n if (!batch.colors || batch.colors.length < instanceCount * 3) batch.colors = new Float32Array(instanceCount * 3);\n for (let i = 0; i < instanceCount; i++) {\n for (let k = 0; k < 3; k++) {\n const value = Math.fround(k === 0 ? sourceColors.getX(i) : k === 1 ? sourceColors.getY(i) : sourceColors.getZ(i));\n if (!Object.is(batch.colors[i * 3 + k], value)) { batch.colors[i * 3 + k] = value; colorsChanged = true; }\n }\n }\n } else batch.colors = undefined;\n batch.count = instanceCount;\n const matrices = instanced.instanceMatrix;\n for (let i = 0; i < instanceCount; i++) for (let k = 0; k < 16; k++) {\n const value = Math.fround(matrices.array[i * matrices.itemSize + k]);\n if (!Object.is(batch.transforms[i * 16 + k], value)) { batch.transforms[i * 16 + k] = value; changed = true; }\n }\n for (let i = 0; i < 16; i++) batch.transform[i] = child.matrixWorld.elements[i];\n if (changed) batch.markTransformsUpdated();\n if (colorsChanged) batch.markColorsUpdated();\n batch.name = child.name || `Mesh ${meshes.length + 1}${groups.length > 1 ? `.${groupIndex + 1}` : ''}`;\n if (instanceCount > 0) { meshes.push(batch); options.onMeshConverted?.(batch, child, group, groupIndex); }\n } else {\n material = materialVariant(sourceMaterial, baseMaterial, autoUvProjection, autoDisplacementUvProjection);\n let meshGroups = store.meshes.get(child);\n if (!meshGroups) { meshGroups = new Map(); store.meshes.set(child, meshGroups); }\n let mesh = meshGroups.get(groupIndex);\n if (!mesh) {\n mesh = new Mesh(geometry, material);\n mesh.transform = child.matrixWorld.elements.slice() as number[];\n meshGroups.set(groupIndex, mesh);\n }\n mesh.geometry = geometry;\n if (mesh.materials[0] !== material) mesh.materials = [material];\n mesh.name = child.name || `Mesh ${meshes.length + 1}${groups.length > 1 ? `.${groupIndex + 1}` : ''}`;\n for (let i = 0; i < 16; i++) mesh.transform[i] = child.matrixWorld.elements[i];\n meshes.push(mesh); options.onMeshConverted?.(mesh, child, group, groupIndex);\n }\n });\n }\n } else if (isDirectionalLight(child)) {\n const light = new DirectionalLight({color: child.color.toArray() as ColorRGB, intensity: child.intensity});\n light.transform = Array.from(light.transform);\n light.position = child.getWorldPosition(child.position.clone()).toArray();\n light.lookAt(child.target.getWorldPosition(child.target.position.clone()).toArray());\n lights.push(retainLight(store, child, light));\n } else if (isRectAreaLight(child)) {\n const worldMatrix = child.matrixWorld.clone();\n // Shear decomposition can return a non-unit quaternion. The size below\n // carries scale; this approximated rectangle's sampling frame is rigid.\n const worldRotation = child.getWorldQuaternion(child.quaternion.clone()).normalize();\n const worldPosition = child.getWorldPosition(child.position.clone());\n const elements = worldMatrix.elements;\n const widthScale = Math.hypot(elements[0], elements[1], elements[2]);\n const heightScale = Math.hypot(elements[4], elements[5], elements[6]);\n const light = new RectLight({\n size: [child.width * widthScale, child.height * heightScale],\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity\n });\n worldMatrix.compose(worldPosition, worldRotation, child.scale.clone().set(1, 1, 1));\n light.transform = worldMatrix.elements.slice() as number[];\n lights.push(retainLight(store, child, light));\n } else if (isSpotLight(child)) {\n const worldPosition = child.getWorldPosition(child.position.clone());\n const worldTarget = child.target.getWorldPosition(\n child.target.position.clone()\n );\n const outerAngle = (child.angle * 180) / Math.PI;\n const profile = child.userData.mutracerIesProfile;\n if (profile != null && !(profile instanceof IESProfile)) {\n throw new Error(\n `THREE.SpotLight \"${child.name || '<unnamed>'}\" has an invalid mutracerIesProfile`\n );\n }\n const light = new SpotLight({\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity,\n radius: child.userData.mutracerRadius ?? 0.01,\n innerAngle: outerAngle * (1 - child.penumbra),\n outerAngle,\n iesProfile: profile\n });\n light.transform = Array.from(light.transform);\n light.position = worldPosition.toArray();\n light.lookAt(worldTarget.toArray());\n const rotation = -(child.userData.mutracerIesRotation ?? 0) * Math.PI / 180;\n if (rotation) mat4.rotateZ(light.transform, light.transform, rotation);\n lights.push(retainLight(store, child, light));\n } else if (isPointLight(child)) {\n const world = child.matrixWorld.elements;\n const position: [number, number, number] = [\n world[12],\n world[13],\n world[14]\n ];\n lights.push(retainLight(store, child,\n Object.assign(new SphereLight({\n color: child.color.toArray() as ColorRGB,\n intensity: child.intensity,\n radius: child.userData.mutracerRadius ?? 0.25\n }), { transform: [1,0,0,0, 0,1,0,0, 0,0,1,0, ...position,1] })\n ));\n } else if (isAmbientLight(child)) {\n lights.push(retainLight(store, child,\n new AmbientLight({color: child.color.toArray() as ColorRGB, intensity: child.intensity})\n ));\n }\n });\n\n const threeEnvironment = scene.environment as THREE.DataTexture | null;\n const environmentMap = options.environment ?? convertDataTexture(threeEnvironment, store.equirectTextures);\n const environmentSource = options.environment ?? threeEnvironment;\n const environmentLight = environmentSource && environmentMap\n ? retainLight(store, environmentSource, new EnvironmentLight({map: environmentMap, intensity: scene.environmentIntensity})) as EnvironmentLight\n : undefined;\n if (environmentLight) {\n environmentLight.transform = scene.matrix.clone().makeRotationFromEuler(scene.environmentRotation).elements.slice();\n lights.push(environmentLight);\n }\n\n const grounded = scene.userData.mutracerGroundedSkybox as\n | {\n texture: THREE.DataTexture | Texture;\n height: number;\n radius: number;\n groundHeight?: number;\n center?: [number, number];\n rotation?: number;\n intensity?: number;\n }\n | undefined;\n const groundedTexture = grounded && (grounded.texture instanceof Texture ? grounded.texture : convertDataTexture(grounded.texture, store.equirectTextures));\n const hideEnvironmentBackground =\n scene.userData.mutracerHiddenBackground === true;\n let background: Scene['background'] =\n hideEnvironmentBackground\n ? [0, 0, 0, 0]\n : grounded && groundedTexture\n ? {\n type: 'GroundedSkybox',\n map: groundedTexture,\n height: grounded.height,\n radius: grounded.radius,\n groundHeight: grounded.groundHeight,\n center: grounded.center,\n rotation: grounded.rotation,\n intensity: grounded.intensity\n }\n : scene.background\n ? (scene.background as THREE.Color).isColor\n ? ([...(scene.background as THREE.Color).toArray(), 1] as ColorRGBA)\n : scene.background === scene.environment && environmentLight\n ? environmentLight.map\n : convertDataTexture(scene.background as THREE.DataTexture, store.equirectTextures)\n : undefined;\n\n // Grounded skyboxes own their level-ground yaw and intensity; Three.js\n // backgroundRotation and backgroundIntensity apply only to the explicit\n // equirectangular background.\n const rotation = scene.backgroundRotation;\n const rotated = !!rotation && (rotation.x !== 0 || rotation.y !== 0 || rotation.z !== 0);\n const intensity = scene.backgroundIntensity ?? 1;\n if (background instanceof Texture && (rotated || intensity !== 1)) {\n background = {type: 'Equirect', map: background,\n transform: rotated ? scene.matrix.clone().makeRotationFromEuler(rotation).elements.slice() : undefined,\n intensity: intensity !== 1 ? intensity : undefined};\n }\n\n const oldBackground = store.background;\n if (Array.isArray(background) && Array.isArray(oldBackground) && snapshotsEqual(background, oldBackground)) {\n background = oldBackground;\n } else if (background && oldBackground && !Array.isArray(background) && !Array.isArray(oldBackground)\n && !(background instanceof Texture) && !(oldBackground instanceof Texture)\n && background.type === oldBackground.type) {\n // Compare by values, ignoring the newly constructed wrapper's identity.\n if (snapshotsEqual(snapshotFields(background).slice(1), snapshotFields(oldBackground).slice(1))) background = oldBackground;\n else { Object.assign(oldBackground, background); background = oldBackground; }\n }\n store.background = background;\n // Inspect the final converted meshes, including onMeshConverted overrides.\n // Iterate across source materials so removed/hidden objects are pruned too.\n const usedMaterials = new Set(meshes.flatMap(mesh => mesh.materials));\n for (const [source, variants] of store.projectionVariants) {\n for (const [key, variant] of variants) if (!usedMaterials.has(variant.material)) variants.delete(key);\n if (!variants.size) store.projectionVariants.delete(source);\n }\n return {\n background,\n meshes,\n lights\n };\n}\n\n/** Structural control interface; no Three.js imports are needed in core APIs. */\nexport interface THREEControls {\n update(deltaTime?: number): boolean | void;\n addEventListener(type: 'start' | 'end', listener: () => void): void;\n removeEventListener(type: 'start' | 'end', listener: () => void): void;\n target?: THREE.Vector3;\n enableDamping?: boolean;\n /** Damping per 60 Hz frame; synchronization adjusts it for elapsed time. Default undefined uses the control's own timing. */\n dampingFactor?: number;\n autoRotate?: boolean;\n enabled?: boolean;\n /** Optional OrbitControls polar-angle accessor. Default undefined. */ getPolarAngle?(): number;\n /** Optional OrbitControls azimuthal-angle accessor. Default undefined. */ getAzimuthalAngle?(): number;\n}\n/** Three.js sources synchronized on each tick. */\nexport interface THREESyncOptions extends FromTHREESceneOptions {\n /** Scene source. Default undefined (engine.scene is untouched). */ scene?: THREE.Scene;\n /** Camera source. Default undefined (engine.camera is untouched). */ camera?: THREE.PerspectiveCamera | THREE.OrthographicCamera;\n /** Camera controls. Default undefined. */ controls?: THREEControls;\n /** Call controls.update during synchronization. Default true. */ updateControls?: boolean;\n}\n\n/** Inputs that can wake an idle OrbitControls instance, without inspecting its private inertia. */\nfunction orbitControlsState(camera: THREE.PerspectiveCamera | THREE.OrthographicCamera | undefined, controls: THREEControls): unknown[] | undefined {\n if (!camera || !controls.getPolarAngle || !controls.getAzimuthalAngle) return;\n camera.parent?.updateWorldMatrix(true, false);\n const state: unknown[] = [camera, controls.update, camera.parent, ...camera.position.toArray(), ...camera.quaternion.toArray(),\n ...camera.scale.toArray(), ...camera.up.toArray(), camera.zoom, ...(camera.parent?.matrixWorld.elements ?? [])];\n for (const [key, value] of Object.entries(controls)) {\n // Pointer-down changes the gesture state without changing the view.\n if (key.startsWith('_') || key === 'state') continue;\n const vector = value as THREE.Vector3 | undefined;\n if (vector?.isVector3) state.push(key, ...vector.toArray());\n else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') state.push(key, value);\n }\n return state;\n}\n/**\n * Keeps one MuTracer scene in sync with a Three.js scene, reusing unchanged objects.\n * Skinning/morph targets run on the CPU with per-source-mesh dynamic geometry.\n * InstancedMesh retains its prefix on count changes and shares geometry/BLAS;\n * Instance colors use native batch storage; automatic UV-less projections\n * share cached material variants per source material. Source edits refresh variants; unused variants\n * are removed after each update.\n */\nexport class THREESync extends Sync {\n /** Retained converted scene; absent when no scene source was supplied. */\n readonly scene: Scene | undefined;\n /** Retained converted camera; absent until the first camera update. */\n private _camera?: Camera;\n private _store = createConversionStore();\n private _disposed = false;\n private _started = false;\n private _gestureChanged = false;\n private _cameraState: unknown[] = [];\n private _lastUpdate?: number;\n private _idleControlsState?: unknown[];\n private _start = () => {this._started = true; this._gestureChanged = false;};\n private _end = () => {this._started = false;};\n /** Subscribes to controls without converting sources or modifying the engine. */\n constructor(engine: Engine, private _options: THREESyncOptions = {}) {\n super(engine);\n if (_options.scene) this.scene = {meshes: [], lights: []};\n _options.controls?.addEventListener('start', this._start);\n _options.controls?.addEventListener('end', this._end);\n }\n /** Updates controls, world matrices, retained instances and camera before engine.update. */\n update(): void {\n if (this._disposed) throw new Error('THREESync has been disposed');\n const now = performance.now(), controls = this._options.controls, sourceCamera = this._options.camera;\n const elapsed = this._lastUpdate === undefined ? 0 : Math.max(0, (now - this._lastUpdate) / 1000);\n const dt = Math.min(.1, elapsed);\n this._lastUpdate = now;\n let moving = false, settled = false;\n if (controls && this._options.updateControls !== false) {\n const orbitInputs = orbitControlsState(sourceCamera, controls);\n // OrbitControls applies pointer movement before synchronization. Keep a\n // settled camera untouched on pointer-down until its inputs actually change.\n const idle = (!this._started || !this._gestureChanged) && !controls.autoRotate && orbitInputs && this._idleControlsState && snapshotsEqual(orbitInputs, this._idleControlsState);\n if (!idle) {\n this._idleControlsState = undefined;\n const position = sourceCamera?.position.clone(), rotation = sourceCamera?.quaternion.clone(), zoom = sourceCamera?.zoom;\n const target = controls.target?.clone(), damping = controls.dampingFactor;\n const frameDamping = controls.enableDamping && damping !== undefined && damping >= 0 && damping <= 1\n ? 1 - Math.pow(1 - damping, elapsed * 60) : undefined;\n if (frameDamping !== undefined) controls.dampingFactor = frameDamping;\n try {moving = !!controls.update(dt);}\n finally {if (frameDamping !== undefined) controls.dampingFactor = damping;}\n if (!this._started && !controls.autoRotate && controls.enableDamping && position && sourceCamera && controls.target) {\n const referenceScale = frameDamping ? damping! / frameDamping : 1;\n const step = position.distanceTo(sourceCamera.position) * referenceScale;\n const zoomStep = Math.abs(Math.log(sourceCamera.zoom / zoom!)) * referenceScale;\n const poseChanged = step > 0 || sourceCamera.zoom !== zoom || !!(orbitInputs && (!rotation!.equals(sourceCamera.quaternion) || !target!.equals(controls.target)));\n // End the remaining inertia once its 60 Hz movement is imperceptible.\n // update() can return false before that tail has actually stopped.\n if ((moving || poseChanged) && step < 5e-4 * sourceCamera.position.distanceTo(controls.target) && zoomStep < 5e-4) {\n controls.enableDamping = false;\n try {controls.update(0);} finally {controls.enableDamping = true;}\n moving = false; settled = true;\n }\n // Once stopped, no more spherical/cartesian round trips occur until\n // a gesture, source pose, parent transform or public control option changes.\n if (orbitInputs && (settled || (!moving && !poseChanged))) this._idleControlsState = orbitControlsState(sourceCamera, controls);\n } else if (orbitInputs && !this._started && !controls.autoRotate && !moving) {\n this._idleControlsState = orbitControlsState(sourceCamera, controls);\n }\n }\n }\n this._store.poseChanged = false;\n if (this._options.scene && this.scene) {\n const next = convertScene(this._options.scene, this._options, this._store);\n if (!snapshotsEqual(this.scene.meshes, next.meshes)) this.scene.meshes = next.meshes;\n if (!snapshotsEqual(this.scene.lights, next.lights)) this.scene.lights = next.lights;\n this.scene.background = next.background;\n this.engine.scene = this.scene;\n }\n let cameraChanged = false;\n if (sourceCamera) {\n sourceCamera.updateWorldMatrix(true, false);\n const next = fromTHREECamera(sourceCamera);\n const state = snapshotFields(next).slice(1);\n cameraChanged = this._cameraState.length > 0 && !snapshotsEqual(state, this._cameraState);\n this._cameraState = state;\n if (!this._camera) this._camera = next; else this._camera.copy(next);\n this.engine.camera = this._camera;\n }\n if (this._started && (moving || cameraChanged)) this._gestureChanged = true;\n this.setActive((this._started && this._gestureChanged) || moving || this._store.poseChanged || (cameraChanged && !settled));\n }\n /** Removes control subscriptions and caches. The last converted objects remain usable. */\n dispose(): void {\n if (this._disposed) return;\n this._options.controls?.removeEventListener('start', this._start);\n this._options.controls?.removeEventListener('end', this._end);\n this._store = createConversionStore(); this._idleControlsState = undefined; this._disposed = true; super.dispose();\n }\n}\n\n/** Lens settings for {@link fromTHREECamera}. */\nexport interface FromTHREECameraOptions {\n /** Lens f-number; `0` disables depth of field. Default `0`. */\n fStop?: number;\n /**\n * Distance to the plane in focus in scene units. Default: the perspective\n * camera's `focus` (Three.js default `10`), otherwise `10`.\n */\n focusDistance?: number;\n /** Length of one scene unit in metres. Default `1`. */\n metersPerUnit?: number;\n}\n\n/**\n * Converts a Three.js perspective or orthographic camera. A perspective\n * camera's `focus` and film height (`filmGauge` and `aspect`) become\n * `focusDistance` and `sensorHeight`.\n */\nexport function fromTHREECamera(\n threeCamera: THREE.PerspectiveCamera | THREE.OrthographicCamera,\n options: FromTHREECameraOptions = {}\n) {\n const camera = (threeCamera as THREE.PerspectiveCamera).fov\n ? new Camera({projection: 'perspective', fov: (threeCamera as THREE.PerspectiveCamera).fov, aspect: (threeCamera as THREE.PerspectiveCamera).aspect, near: (threeCamera as THREE.PerspectiveCamera).near, far: (threeCamera as THREE.PerspectiveCamera).far})\n : new Camera({projection: 'orthographic', left: (threeCamera as THREE.OrthographicCamera).left, right: (threeCamera as THREE.OrthographicCamera).right, bottom: (threeCamera as THREE.OrthographicCamera).bottom, top: (threeCamera as THREE.OrthographicCamera).top, near: (threeCamera as THREE.OrthographicCamera).near, far: (threeCamera as THREE.OrthographicCamera).far});\n threeCamera.updateWorldMatrix(true, false);\n camera.zoom = threeCamera.zoom;\n camera.transform =\n threeCamera.matrixWorld.elements.slice() as number[];\n const perspective = threeCamera as THREE.PerspectiveCamera;\n if (perspective.isPerspectiveCamera) {\n if (perspective.focus > 0) camera.focusDistance = perspective.focus;\n const filmHeight = perspective.getFilmHeight();\n if (filmHeight > 0) camera.sensorHeight = filmHeight;\n }\n if (options.fStop !== undefined) camera.fStop = options.fStop;\n if (options.focusDistance !== undefined) {\n camera.focusDistance = options.focusDistance;\n }\n if (options.metersPerUnit !== undefined) {\n camera.metersPerUnit = options.metersPerUnit;\n }\n return camera;\n}\n"]}
|