@meimu/mutracer 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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];\n const cached = textureStore.get(threeTexture);\n if (cached && snapshotsEqual(cached.state, state)) return cached.texture;\n const image = threeTexture.image as Texture['image'];\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 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\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 source = threeTexture.image.data as ArrayBufferView;\n const data = source instanceof Uint16Array\n ? Float32Array.from(source, halfFloatToFloat)\n : source instanceof Float32Array || source instanceof Uint8Array || source instanceof Int32Array\n ? source : Float32Array.from(source as unknown as ArrayLike<number>);\n texture.image = { data, width: threeTexture.image.width, height: threeTexture.image.height };\n return texture;\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 displacementScale = Number(standardMaterial.displacementScale);\n material.displacementScale = Number.isFinite(displacementScale)\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.000001, 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 material.specularWeight = physicalMaterial.specularIntensity;\n if (physicalMaterial.specularColor) {\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 material.specularWeightMap = convertTexture(physicalMaterial.specularIntensityMap, textureCache);\n material.specularColorMap = convertTexture(physicalMaterial.specularColorMap, textureCache);\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 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 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): 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 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 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 indices: new Attribute(indices, 1)\n });\n if (!geometry.normal) {\n generateVertexNormals(geometry);\n }\n updateBoundingBox(geometry);\n return geometry;\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 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(), 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', '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 geometryKey = `${group.start}:${count}`;\n let geometry = geometryEntry.groups.get(geometryKey);\n const newGeometry = !geometry;\n if (!geometry) {\n const converted = convertGeometry(child.geometry, { start: group.start, count });\n if (!converted) return;\n geometry = converted;\n geometryEntry.groups.set(geometryKey, geometry);\n }\n if (deformation && (deformed || newGeometry)) {\n geometry.dynamic = true;\n geometry.position.array.set(deformation.position);\n if (deformation.normal) geometry.normal.array.set(deformation.normal);\n if (deformation.tangent && geometry.tangent) geometry.tangent.array.set(deformation.tangent);\n if (!child.geometry.getAttribute('tangent')) updateDynamicTangents(geometry);\n updateBoundingBox(geometry);\n if (!newGeometry) markDeformedGeometry(geometry);\n }\n const sourceMaterial = threeMaterials[group.materialIndex ?? 0];\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, textureCache);\n const environmentLight = threeEnvironment && environmentMap\n ? retainLight(store, threeEnvironment, new EnvironmentLight({map: environmentMap})) as EnvironmentLight\n : undefined;\n if (environmentLight) lights.push(environmentLight);\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 }\n | undefined;\n const groundedTexture = grounded && convertDataTexture(grounded.texture, textureCache);\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 }\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, textureCache)\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 autoRotate?: boolean;\n enabled?: boolean;\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 * 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 _cameraState: unknown[] = [];\n private _lastUpdate?: number;\n private _start = () => {this._started = true; this.setActive(true);};\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 dt = this._lastUpdate === undefined ? 0 : Math.min(.1, Math.max(0, (now - this._lastUpdate) / 1000));\n this._lastUpdate = now;\n let moving = false, settled = false;\n if (controls && this._options.updateControls !== false) {\n const position = sourceCamera?.position.clone(), zoom = sourceCamera?.zoom;\n moving = !!controls.update(dt);\n if (moving && !this._started && !controls.autoRotate && controls.enableDamping && position && sourceCamera && controls.target) {\n const step = position.distanceTo(sourceCamera.position);\n const zoomStep = Math.abs(Math.log(sourceCamera.zoom / zoom!));\n if (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 }\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 this.setActive(this._started || 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._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 { 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];\n const cached = textureStore.get(threeTexture);\n if (cached && snapshotsEqual(cached.state, state)) return cached.texture;\n const image = threeTexture.image as Texture['image'];\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 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\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 source = threeTexture.image.data as ArrayBufferView;\n const data = source instanceof Uint16Array\n ? Float32Array.from(source, halfFloatToFloat)\n : source instanceof Float32Array || source instanceof Uint8Array || source instanceof Int32Array\n ? source : Float32Array.from(source as unknown as ArrayLike<number>);\n texture.image = { data, width: threeTexture.image.width, height: threeTexture.image.height };\n return texture;\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 displacementScale = Number(standardMaterial.displacementScale);\n material.displacementScale = Number.isFinite(displacementScale)\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.000001, 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 material.specularWeight = physicalMaterial.specularIntensity;\n if (physicalMaterial.specularColor) {\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 material.specularWeightMap = convertTexture(physicalMaterial.specularIntensityMap, textureCache);\n material.specularColorMap = convertTexture(physicalMaterial.specularColorMap, textureCache);\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 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 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): 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 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 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 indices: new Attribute(indices, 1)\n });\n if (!geometry.normal) {\n generateVertexNormals(geometry);\n }\n updateBoundingBox(geometry);\n return geometry;\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 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(), 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', '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 geometryKey = `${group.start}:${count}`;\n let geometry = geometryEntry.groups.get(geometryKey);\n const newGeometry = !geometry;\n if (!geometry) {\n const converted = convertGeometry(child.geometry, { start: group.start, count });\n if (!converted) return;\n geometry = converted;\n geometryEntry.groups.set(geometryKey, geometry);\n }\n if (deformation && (deformed || newGeometry)) {\n geometry.dynamic = true;\n geometry.position.array.set(deformation.position);\n if (deformation.normal) geometry.normal.array.set(deformation.normal);\n if (deformation.tangent && geometry.tangent) geometry.tangent.array.set(deformation.tangent);\n if (!child.geometry.getAttribute('tangent')) updateDynamicTangents(geometry);\n updateBoundingBox(geometry);\n if (!newGeometry) markDeformedGeometry(geometry);\n }\n const sourceMaterial = threeMaterials[group.materialIndex ?? 0];\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, textureCache);\n const environmentLight = threeEnvironment && environmentMap\n ? retainLight(store, threeEnvironment, new EnvironmentLight({map: environmentMap})) as EnvironmentLight\n : undefined;\n if (environmentLight) lights.push(environmentLight);\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 }\n | undefined;\n const groundedTexture = grounded && convertDataTexture(grounded.texture, textureCache);\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 }\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, textureCache)\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 if (key.startsWith('_')) 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 _cameraState: unknown[] = [];\n private _lastUpdate?: number;\n private _idleControlsState?: unknown[];\n private _start = () => {this._started = true; this._idleControlsState = undefined; this.setActive(true);};\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 const idle = !this._started && !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 this.setActive(this._started || 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"]}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Library version. Kept in sync with package.json by a unit test. */
2
- export declare const VERSION = "0.1.0";
2
+ export declare const VERSION = "0.1.1";
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Library version. Kept in sync with package.json by a unit test. */
2
- export const VERSION = '0.1.0';
2
+ export const VERSION = '0.1.1';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["/** Library version. Kept in sync with package.json by a unit test. */\nexport const VERSION = '0.1.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["/** Library version. Kept in sync with package.json by a unit test. */\nexport const VERSION = '0.1.1';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meimu/mutracer",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "MuTracer: a physically based WebGPU path tracer with WebGL 2 fallback, OpenPBR materials, TinyBVH and OIDN denoising.",
5
5
  "keywords": [
6
6
  "path tracing",