@zephyr3d/scene 0.8.2 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +473 -60
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +2516 -0
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -0
- package/dist/animation/fixed_geometry_cache_track.js +138 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -0
- package/dist/animation/geometry_cache_utils.js +120 -0
- package/dist/animation/geometry_cache_utils.js.map +1 -0
- package/dist/animation/ik_modifier.js +9 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +469 -0
- package/dist/animation/joint_dynamics/collision.js.map +1 -0
- package/dist/animation/joint_dynamics/constraints.js +329 -0
- package/dist/animation/joint_dynamics/constraints.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +699 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +393 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +794 -0
- package/dist/animation/joint_dynamics/solver.js.map +1 -0
- package/dist/animation/joint_dynamics/types.js +19 -0
- package/dist/animation/joint_dynamics/types.js.map +1 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +46 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +1 -0
- package/dist/animation/joint_dynamics_modifier.js +51 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -0
- package/dist/animation/pca_geometry_cache_track.js +222 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -0
- package/dist/animation/skeleton.js +2011 -139
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +3 -5
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +2 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +3 -2
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +35 -5
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +325 -28
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/collision.js +469 -0
- package/dist/animation/spring2/collision.js.map +1 -0
- package/dist/animation/spring2/constraints.js +329 -0
- package/dist/animation/spring2/constraints.js.map +1 -0
- package/dist/animation/spring2/controller.js +434 -0
- package/dist/animation/spring2/controller.js.map +1 -0
- package/dist/animation/spring2/math.js +16 -0
- package/dist/animation/spring2/math.js.map +1 -0
- package/dist/animation/spring2/solver.js +624 -0
- package/dist/animation/spring2/solver.js.map +1 -0
- package/dist/animation/spring2/spring_system.js +118 -0
- package/dist/animation/spring2/spring_system.js.map +1 -0
- package/dist/animation/spring2/types.js +19 -0
- package/dist/animation/spring2/types.js.map +1 -0
- package/dist/animation/spring_modifier.js +17 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +42 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/runtimescript.js +132 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +3 -3
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +69 -37
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +14 -3
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js +570 -0
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -0
- package/dist/asset/model.js +192 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/base.js +26 -7
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +146 -24
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -2
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +2 -2
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +11728 -8535
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +9 -3
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +54 -7
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +7 -2
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +108 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +209 -14
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +24 -12
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +11 -8
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -5
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/pbrblueprint.js +148 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +115 -2
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +10 -4
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/water.js +2 -2
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/coloradjust.js +145 -0
- package/dist/posteffect/coloradjust.js.map +1 -0
- package/dist/posteffect/taa.js +68 -32
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +17 -12
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/deferredlightpass.js +510 -0
- package/dist/render/deferredlightpass.js.map +1 -0
- package/dist/render/deferredshadowlightpass.js +428 -0
- package/dist/render/deferredshadowlightpass.js.map +1 -0
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +21 -12
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +20 -22
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gbufferpass.js +50 -0
- package/dist/render/gbufferpass.js.map +1 -0
- package/dist/render/lightpass.js +1 -2
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/primitive.js +1 -1
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +3 -2
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +5 -358
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/executor.js +15 -12
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +144 -88
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +178 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +12 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +2 -2
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/sky.js +26 -9
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +4 -3
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +4 -4
- package/dist/scene/environment.js +7 -4
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +184 -18
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +30 -0
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +3 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +29 -3
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +86 -19
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +87 -31
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +59 -0
- package/dist/scene/script_attachment.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +3 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +3 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +2 -2
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/shadowmapper.js +74 -4
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +163 -0
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +216 -0
- package/dist/shapes/capsule.js.map +1 -0
- package/dist/shapes/cylinder.js +91 -0
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +32 -0
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +211 -0
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +173 -0
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +111 -1
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +235 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +154 -10
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +273 -19
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/json.js +12 -2
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +30 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +250 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -2
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +154 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth_script.js +834 -0
- package/dist/utility/serialization/scene/cloth_script.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +7 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +120 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +453 -1
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +4 -2
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +298 -10
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -2
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +100 -3
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +130 -3
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +66 -0
- package/dist/utility/serialization/scene/script.js.map +1 -0
- package/dist/utility/serialization/scene/spring_script.js +596 -0
- package/dist/utility/serialization/scene/spring_script.js.map +1 -0
- package/dist/utility/serialization/scene/sprite.js +5 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -2
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +5 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zabc_loader.js","sources":["../../../../src/asset/loaders/zabc/zabc_loader.ts"],"sourcesContent":["import { base64ToUint8Array, Vector3 } from '@zephyr3d/base';\r\nimport { FixedGeometryCacheTrack } from '../../../animation/fixed_geometry_cache_track';\r\nimport {\r\n PCAGeometryCacheTrack,\r\n type PCAGeometryCacheTrackData\r\n} from '../../../animation/pca_geometry_cache_track';\r\nimport type { AssetSubMeshData } from '../../model';\r\nimport type { VertexBufferInfo } from '@zephyr3d/device';\r\nimport { BoundingBox } from '../../../utility/bounding_volume';\r\nimport type { SceneNode } from '../../../scene/scene_node';\r\nimport type { Mesh } from '../../../scene/mesh';\r\n\r\ntype ZABCBinaryBufferRef = {\r\n offset: number;\r\n length: number;\r\n count?: number;\r\n};\r\n\r\ntype ZABCCacheTrackJSON = {\r\n codec?: 'fixed' | 'pca';\r\n node?: number;\r\n nodePath?: string;\r\n nodeName?: string;\r\n subMeshIndex?: number;\r\n times?: string | ZABCBinaryBufferRef;\r\n sampleRate?: number;\r\n positionFrames: Array<string | ZABCBinaryBufferRef>;\r\n normalFrames?: Array<string | ZABCBinaryBufferRef>;\r\n bounds: [number, number, number, number, number, number][];\r\n vectorLength?: number;\r\n positionReference?: string | ZABCBinaryBufferRef;\r\n positionComponents?: number;\r\n positionMean?: string | ZABCBinaryBufferRef;\r\n positionBases?: string | ZABCBinaryBufferRef;\r\n positionCoefficients?: string | ZABCBinaryBufferRef;\r\n normalComponents?: number;\r\n normalMean?: string | ZABCBinaryBufferRef;\r\n normalBases?: string | ZABCBinaryBufferRef;\r\n normalCoefficients?: string | ZABCBinaryBufferRef;\r\n};\r\n\r\ntype ZABCAnimationJSON = {\r\n name: string;\r\n tracks: ZABCCacheTrackJSON[];\r\n};\r\n\r\ntype ZABCFileJSON = {\r\n version: number;\r\n baseModel?: string;\r\n animations: ZABCAnimationJSON[];\r\n};\r\n\r\nexport type ParsedZABC = {\r\n content: ZABCFileJSON;\r\n binaryPayload: ArrayBuffer | null;\r\n payloadOffset: number;\r\n};\r\n\r\nexport async function parseZABCBlob(data: Blob): Promise<ParsedZABC> {\r\n const arrayBuffer = await data.arrayBuffer();\r\n if (isBinaryZABC(arrayBuffer)) {\r\n return parseBinaryZABC(arrayBuffer);\r\n }\r\n return parseLegacyZABC(arrayBuffer);\r\n}\r\n\r\nexport async function attachZABCAnimationsToSceneNode(\r\n node: SceneNode,\r\n parsed: ParsedZABC,\r\n options?: {\r\n sourcePath?: string;\r\n autoPlay?: boolean;\r\n replaceAnimationNames?: string[];\r\n }\r\n) {\r\n if (options?.replaceAnimationNames) {\r\n for (const name of options.replaceAnimationNames) {\r\n node.animationSet.deleteAnimation(name);\r\n }\r\n }\r\n const addedAnimationNames: string[] = [];\r\n for (const animation of parsed.content.animations ?? []) {\r\n const animationName = buildAnimationName(options?.sourcePath, animation.name ?? 'GeometryCache');\r\n node.animationSet.deleteAnimation(animationName);\r\n const clip = node.animationSet.createAnimation(animationName, true);\r\n if (!clip) {\r\n continue;\r\n }\r\n clip.autoPlay = !!options?.autoPlay;\r\n for (const track of animation.tracks ?? []) {\r\n const targetNode = findTargetNode(node, track);\r\n if (!targetNode) {\r\n console.error(\r\n `zabc track target not found: node=${track.node}, nodePath=${track.nodePath}, nodeName=${track.nodeName}`\r\n );\r\n continue;\r\n }\r\n const targetMesh = await getTargetMesh(targetNode, track, parsed);\r\n if (!targetMesh) {\r\n const subMeshLabel =\r\n typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0\r\n ? `${track.subMeshIndex}`\r\n : 'auto';\r\n console.error(`zabc target mesh not found: node=${targetNode.name}, subMeshIndex=${subMeshLabel}`);\r\n continue;\r\n }\r\n const assetSubMesh = getTargetAssetSubMesh(node, track);\r\n if (track.codec === 'pca') {\r\n const remapped = assetSubMesh\r\n ? remapPCAGeometryCacheData(assetSubMesh, toPCATrackData(track, parsed))\r\n : await remapPCAGeometryCacheDataForMesh(targetMesh, toPCATrackData(track, parsed));\r\n clip.addTrack(targetMesh, new PCAGeometryCacheTrack(remapped, true));\r\n } else {\r\n const frames = assetSubMesh\r\n ? remapGeometryCacheFrames(\r\n assetSubMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n )\r\n : await remapGeometryCacheFramesForMesh(\r\n targetMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n );\r\n clip.addTrack(targetMesh, new FixedGeometryCacheTrack(decodeTimes(track, parsed), frames, true));\r\n }\r\n }\r\n if (clip.tracks.size > 0) {\r\n addedAnimationNames.push(animationName);\r\n } else {\r\n node.animationSet.deleteAnimation(animationName);\r\n }\r\n }\r\n if (options?.autoPlay) {\r\n for (const animationName of addedAnimationNames) {\r\n node.animationSet.playAnimation(animationName, { repeat: 0 });\r\n }\r\n }\r\n return {\r\n animationNames: addedAnimationNames\r\n };\r\n}\r\n\r\nfunction buildAnimationName(sourcePath: string | undefined, animationName: string) {\r\n const fileName = sourcePath\r\n ? (sourcePath.replace(/\\\\/g, '/').split('/').filter(Boolean).pop() ?? 'cache')\r\n : 'cache';\r\n return `Cache:${fileName}:${animationName}`;\r\n}\r\n\r\nasync function getTargetMesh(node: SceneNode, track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n const directMeshes = collectMeshChildren(node, false);\r\n const candidateMeshes = directMeshes.length > 0 ? directMeshes : collectMeshChildren(node, true);\r\n if (candidateMeshes.length === 0) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0) {\r\n return candidateMeshes[track.subMeshIndex] ?? null;\r\n }\r\n if (candidateMeshes.length === 1) {\r\n return candidateMeshes[0];\r\n }\r\n const sourceVertexCount = getTrackSourceVertexCount(track, parsed);\r\n if (sourceVertexCount > 0) {\r\n const matched: Mesh[] = [];\r\n for (const mesh of candidateMeshes) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const targetVertexCount = rawPositions ? (rawPositions.length / 3) >> 0 : -1;\r\n if (targetVertexCount === sourceVertexCount) {\r\n matched.push(mesh);\r\n }\r\n }\r\n if (matched.length === 1) {\r\n return matched[0];\r\n }\r\n if (matched.length > 1) {\r\n console.warn(\r\n `zabc subMesh auto-match is ambiguous under node=${node.name}, matched=${matched.length}, fallback=first`\r\n );\r\n }\r\n }\r\n return candidateMeshes[0];\r\n}\r\n\r\nfunction collectMeshChildren(root: SceneNode, recursive: boolean) {\r\n const meshes: Mesh[] = [];\r\n if (recursive) {\r\n root.iterate((child) => {\r\n if (child !== root && child.isMesh()) {\r\n meshes.push(child);\r\n }\r\n return false;\r\n });\r\n return meshes;\r\n }\r\n for (const child of root.children) {\r\n const sceneNode = child;\r\n if (sceneNode?.isMesh()) {\r\n meshes.push(sceneNode);\r\n }\r\n }\r\n return meshes;\r\n}\r\n\r\nfunction getTrackSourceVertexCount(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n try {\r\n const first = track.positionFrames?.[0];\r\n if (!first) {\r\n return -1;\r\n }\r\n return (decodeFloat32Array(first, parsed).length / 3) >> 0;\r\n } catch {\r\n return -1;\r\n }\r\n}\r\n\r\nfunction getTargetAssetSubMesh(node: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = node.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex !== 'number' || track.subMeshIndex < 0) {\r\n return null;\r\n }\r\n const assetNode = findTargetAssetNode(node, track);\r\n return assetNode?.mesh?.subMeshes?.[track.subMeshIndex] ?? null;\r\n}\r\n\r\nfunction findTargetAssetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = root.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const scene of sharedModel.scenes) {\r\n for (const rootNode of scene.rootNodes) {\r\n const found = findAssetNodeByPath(rootNode, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = sharedModel.nodes.find((item) => item?.name === candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findAssetNodeByPath(\r\n node: { name: string; children: any[] },\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): any {\r\n if (!node) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findAssetNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findTargetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const hasExplicitTarget = !!track.nodePath || !!track.nodeName;\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const child of root.children) {\r\n const found = findSceneNodeByPath(child, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = root.findNodeByName(candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n if (hasExplicitTarget) {\r\n console.warn(\r\n `zabc track target fallback to attached node: nodePath=${track.nodePath ?? ''}, nodeName=${track.nodeName ?? ''}`\r\n );\r\n }\r\n return root;\r\n}\r\n\r\nfunction findSceneNodeByPath(\r\n node: SceneNode,\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): SceneNode | null {\r\n if (!node || node.isMesh()) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findSceneNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getNodePathCandidates(path: string) {\r\n const normalized = normalizeNodePath(path);\r\n const candidates = [normalized];\r\n if (normalized.endsWith('Shape')) {\r\n candidates.push(normalized.slice(0, -'Shape'.length));\r\n }\r\n const parts = normalized.split('/');\r\n const last = parts.length > 0 ? parts[parts.length - 1] : '';\r\n if (last.endsWith('Shape') && parts.length > 1) {\r\n parts[parts.length - 1] = last.slice(0, -'Shape'.length);\r\n candidates.push(parts.join('/'));\r\n parts.pop();\r\n candidates.push(parts.join('/'));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction getNodeNameCandidates(name: string) {\r\n const candidates = [name];\r\n if (name.endsWith('Shape')) {\r\n candidates.push(name.slice(0, -'Shape'.length));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction normalizeNodePath(path: string) {\r\n return path.replace(/\\\\/g, '/').split('/').filter(Boolean).join('/');\r\n}\r\n\r\nfunction decodeFloat32Array(data: string | ZABCBinaryBufferRef, parsed: ParsedZABC) {\r\n if (typeof data === 'string') {\r\n const bytes = base64ToUint8Array(data);\r\n return new Float32Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));\r\n }\r\n if (!parsed.binaryPayload) {\r\n throw new Error('Invalid binary zabc file: missing payload');\r\n }\r\n const start = parsed.payloadOffset + data.offset;\r\n const end = start + data.length;\r\n return new Float32Array(parsed.binaryPayload.slice(start, end));\r\n}\r\n\r\nfunction decodeTimes(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n if (track.times) {\r\n return decodeFloat32Array(track.times, parsed);\r\n }\r\n const sampleRate = track.sampleRate && track.sampleRate > 0 ? track.sampleRate : 30;\r\n const times = new Float32Array(track.positionFrames.length);\r\n for (let i = 0; i < times.length; i++) {\r\n times[i] = i / sampleRate;\r\n }\r\n return times;\r\n}\r\n\r\nfunction decodeBoundingBox(values: [number, number, number, number, number, number]) {\r\n return new BoundingBox(\r\n new Vector3(values[0], values[1], values[2]),\r\n new Vector3(values[3], values[4], values[5])\r\n );\r\n}\r\n\r\nfunction decodePCAFrames(\r\n data: string | ZABCBinaryBufferRef,\r\n rows: number,\r\n columns: number,\r\n parsed: ParsedZABC\r\n) {\r\n const values = decodeFloat32Array(data, parsed);\r\n const result: Float32Array[] = [];\r\n if (rows <= 0 || columns <= 0) {\r\n return result;\r\n }\r\n for (let i = 0; i < rows; i++) {\r\n result.push(values.slice(i * columns, i * columns + columns));\r\n }\r\n return result;\r\n}\r\n\r\nfunction toPCATrackData(track: ZABCCacheTrackJSON, parsed: ParsedZABC): PCAGeometryCacheTrackData {\r\n return {\r\n times: decodeTimes(track, parsed),\r\n bounds: track.bounds ?? [],\r\n positionReference: track.positionReference ? decodeFloat32Array(track.positionReference, parsed) : null,\r\n positionMean: decodeFloat32Array(track.positionMean!, parsed),\r\n positionBases: decodePCAFrames(\r\n track.positionBases!,\r\n track.positionComponents ?? 0,\r\n track.vectorLength ?? 0,\r\n parsed\r\n ),\r\n positionCoefficients: decodePCAFrames(\r\n track.positionCoefficients!,\r\n track.bounds?.length ?? 0,\r\n track.positionComponents ?? 0,\r\n parsed\r\n ),\r\n normalMean: track.normalMean ? decodeFloat32Array(track.normalMean, parsed) : null,\r\n normalBases:\r\n track.normalBases && track.normalComponents\r\n ? decodePCAFrames(track.normalBases, track.normalComponents, track.vectorLength ?? 0, parsed)\r\n : null,\r\n normalCoefficients:\r\n track.normalCoefficients && track.normalComponents\r\n ? decodePCAFrames(track.normalCoefficients, track.bounds?.length ?? 0, track.normalComponents, parsed)\r\n : null\r\n };\r\n}\r\n\r\nfunction parseLegacyZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const text = new TextDecoder().decode(arrayBuffer);\r\n return {\r\n content: JSON.parse(text) as ZABCFileJSON,\r\n binaryPayload: null,\r\n payloadOffset: 0\r\n };\r\n}\r\n\r\nfunction parseBinaryZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const view = new DataView(arrayBuffer);\r\n const version = view.getUint32(4, true);\r\n if (version !== 2 && version !== 3) {\r\n throw new Error(`Unsupported binary zabc version: ${version}`);\r\n }\r\n const manifestLength = view.getUint32(8, true);\r\n const manifestOffset = 12;\r\n const payloadOffset = manifestOffset + manifestLength;\r\n const manifestText = new TextDecoder().decode(arrayBuffer.slice(manifestOffset, payloadOffset));\r\n return {\r\n content: JSON.parse(manifestText) as ZABCFileJSON,\r\n binaryPayload: arrayBuffer,\r\n payloadOffset\r\n };\r\n}\r\n\r\nfunction isBinaryZABC(arrayBuffer: ArrayBuffer) {\r\n if (arrayBuffer.byteLength < 12) {\r\n return false;\r\n }\r\n const magic = new Uint8Array(arrayBuffer, 0, 4);\r\n return magic[0] === 0x5a && magic[1] === 0x41 && magic[2] === 0x42 && magic[3] === 0x43;\r\n}\r\n\r\nfunction remapGeometryCacheFrames(\r\n subMesh: AssetSubMeshData,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n if (!subMesh.rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nasync function remapGeometryCacheFramesForMesh(\r\n mesh: Mesh,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n if (!rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nfunction remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: PCAGeometryCacheTrackData\r\n): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function remapPCAGeometryCacheDataForMesh(\r\n mesh: Mesh,\r\n track: PCAGeometryCacheTrackData\r\n): Promise<PCAGeometryCacheTrackData> {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function getMeshRawPositions(mesh: Mesh) {\r\n const primitive = mesh.primitive;\r\n const info = primitive?.getVertexBufferInfo('position');\r\n if (!primitive || !info) {\r\n return null;\r\n }\r\n const bytes = await info.buffer.getBufferSubData();\r\n return extractPositionArray(bytes, info);\r\n}\r\n\r\nfunction extractPositionArray(bytes: Uint8Array<ArrayBuffer>, info: VertexBufferInfo) {\r\n const componentSize =\r\n ((info.type as unknown as { getSize(): number }).getSize?.() ?? 0) / Math.max(1, info.type.cols);\r\n if (componentSize !== 4) {\r\n return null;\r\n }\r\n const drawOffset = info.drawOffset ?? 0;\r\n const byteOffset = bytes.byteOffset + drawOffset;\r\n const byteLength = bytes.byteLength - drawOffset;\r\n const vertexCount = Math.max(0, Math.floor(byteLength / info.stride));\r\n const positions = new Float32Array(vertexCount * 3);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const base = byteOffset + i * info.stride + info.offset;\r\n const values = new Float32Array(bytes.buffer, base, Math.max(3, info.type.cols));\r\n positions[i * 3] = values[0] ?? 0;\r\n positions[i * 3 + 1] = values[1] ?? 0;\r\n positions[i * 3 + 2] = values[2] ?? 0;\r\n }\r\n return positions;\r\n}\r\n\r\nfunction reconstructPCAGeometryCacheReference(track: PCAGeometryCacheTrackData) {\r\n const reference = new Float32Array(track.positionMean);\r\n const coefficients = track.positionCoefficients[0];\r\n if (!coefficients) {\r\n return reference;\r\n }\r\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\r\n for (let component = 0; component < componentCount; component++) {\r\n const basis = track.positionBases[component];\r\n const coefficient = coefficients[component];\r\n if (!basis || coefficient === 0) {\r\n continue;\r\n }\r\n const count = Math.min(reference.length, basis.length);\r\n for (let i = 0; i < count; i++) {\r\n reference[i] += basis[i] * coefficient;\r\n }\r\n }\r\n return reference;\r\n}\r\n\r\nfunction buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\r\n const sourceCount = (sourcePositions.length / 3) >> 0;\r\n const targetCount = (targetPositions.length / 3) >> 0;\r\n const buckets = new Map<string, number[]>();\r\n for (let i = 0; i < sourceCount; i++) {\r\n const key = geometryCachePositionKey(\r\n sourcePositions[i * 3],\r\n sourcePositions[i * 3 + 1],\r\n sourcePositions[i * 3 + 2]\r\n );\r\n const bucket = buckets.get(key);\r\n if (bucket) {\r\n bucket.push(i);\r\n } else {\r\n buckets.set(key, [i]);\r\n }\r\n }\r\n const remap = new Uint32Array(targetCount);\r\n for (let i = 0; i < targetCount; i++) {\r\n const x = targetPositions[i * 3];\r\n const y = targetPositions[i * 3 + 1];\r\n const z = targetPositions[i * 3 + 2];\r\n let sourceIndex = findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\r\n }\r\n if (sourceIndex < 0) {\r\n return null;\r\n }\r\n remap[i] = sourceIndex;\r\n }\r\n return remap;\r\n}\r\n\r\nfunction expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\r\n const expanded = new Float32Array(remap.length * 3);\r\n for (let i = 0; i < remap.length; i++) {\r\n const sourceOffset = remap[i] * 3;\r\n const targetOffset = i * 3;\r\n expanded[targetOffset] = source[sourceOffset];\r\n expanded[targetOffset + 1] = source[sourceOffset + 1];\r\n expanded[targetOffset + 2] = source[sourceOffset + 2];\r\n }\r\n return expanded;\r\n}\r\n\r\nfunction findGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n buckets: Map<string, number[]>,\r\n x: number,\r\n y: number,\r\n z: number\r\n) {\r\n const bucket = buckets.get(geometryCachePositionKey(x, y, z));\r\n if (!bucket) {\r\n return -1;\r\n }\r\n const epsilon = 1e-5;\r\n for (const index of bucket) {\r\n const offset = index * 3;\r\n if (\r\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\r\n ) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction findNearestGeometryCacheSourceIndex(sourcePositions: Float32Array, x: number, y: number, z: number) {\r\n const epsilonSquared = 1e-8;\r\n let bestIndex = -1;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n for (let i = 0; i < sourcePositions.length; i += 3) {\r\n const dx = sourcePositions[i] - x;\r\n const dy = sourcePositions[i + 1] - y;\r\n const dz = sourcePositions[i + 2] - z;\r\n const distance = dx * dx + dy * dy + dz * dz;\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestIndex = i / 3;\r\n }\r\n }\r\n return bestDistance <= epsilonSquared ? bestIndex : -1;\r\n}\r\n\r\nfunction geometryCachePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\r\n}\r\n"],"names":["parseZABCBlob","data","arrayBuffer","isBinaryZABC","parseBinaryZABC","parseLegacyZABC","attachZABCAnimationsToSceneNode","node","parsed","options","replaceAnimationNames","name","animationSet","deleteAnimation","addedAnimationNames","animation","content","animations","animationName","buildAnimationName","sourcePath","clip","createAnimation","autoPlay","track","tracks","targetNode","findTargetNode","console","error","nodePath","nodeName","targetMesh","getTargetMesh","subMeshLabel","subMeshIndex","assetSubMesh","getTargetAssetSubMesh","codec","remapped","remapPCAGeometryCacheData","toPCATrackData","remapPCAGeometryCacheDataForMesh","addTrack","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","positionFrames","map","positionsRef","index","positions","decodeFloat32Array","normals","normalFrames","boundingBox","decodeBoundingBox","bounds","remapGeometryCacheFramesForMesh","FixedGeometryCacheTrack","decodeTimes","size","push","playAnimation","repeat","animationNames","fileName","replace","split","filter","Boolean","pop","directMeshes","collectMeshChildren","candidateMeshes","length","sourceVertexCount","getTrackSourceVertexCount","matched","mesh","rawPositions","getMeshRawPositions","targetVertexCount","warn","root","recursive","meshes","iterate","child","isMesh","children","sceneNode","first","sharedModel","assetNode","findTargetAssetNode","subMeshes","candidatePath","getNodePathCandidates","scene","scenes","rootNode","rootNodes","found","findAssetNodeByPath","candidateName","getNodeNameCandidates","nodes","find","item","normalizedTrackPath","currentPath","path","normalizedCurrent","normalizeNodePath","hasExplicitTarget","findSceneNodeByPath","findNodeByName","normalized","candidates","endsWith","slice","parts","last","join","value","array","indexOf","bytes","base64ToUint8Array","Float32Array","buffer","byteOffset","byteLength","binaryPayload","Error","start","payloadOffset","offset","end","times","sampleRate","i","values","BoundingBox","Vector3","decodePCAFrames","rows","columns","result","positionReference","positionMean","positionBases","positionComponents","vectorLength","positionCoefficients","normalMean","normalBases","normalComponents","normalCoefficients","text","TextDecoder","decode","JSON","parse","view","DataView","version","getUint32","manifestLength","manifestOffset","manifestText","magic","Uint8Array","subMesh","sourcePositions","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","remapReference","reconstructPCAGeometryCacheReference","basis","primitive","info","getVertexBufferInfo","getBufferSubData","extractPositionArray","componentSize","type","getSize","Math","max","cols","drawOffset","vertexCount","floor","stride","base","reference","coefficients","componentCount","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","Map","key","geometryCachePositionKey","bucket","get","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round"],"mappings":"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"}
|
package/dist/asset/model.js
CHANGED
|
@@ -7,6 +7,12 @@ import { NodeTranslationTrack } from '../animation/translationtrack.js';
|
|
|
7
7
|
import { NodeScaleTrack } from '../animation/scaletrack.js';
|
|
8
8
|
import { Skeleton } from '../animation/skeleton.js';
|
|
9
9
|
import { MorphTargetTrack } from '../animation/morphtrack.js';
|
|
10
|
+
import { FixedGeometryCacheTrack } from '../animation/fixed_geometry_cache_track.js';
|
|
11
|
+
import { PCAGeometryCacheTrack } from '../animation/pca_geometry_cache_track.js';
|
|
12
|
+
import '@zephyr3d/device';
|
|
13
|
+
import '../animation/joint_dynamics/collision.js';
|
|
14
|
+
import '../animation/joint_dynamics/solver.js';
|
|
15
|
+
import '../animation/joint_dynamics/joint_dynamics_system.js';
|
|
10
16
|
import { processMorphData } from '../animation/morphtarget.js';
|
|
11
17
|
import { MAX_MORPH_TARGETS } from '../values.js';
|
|
12
18
|
|
|
@@ -319,6 +325,19 @@ import { MAX_MORPH_TARGETS } from '../values.js';
|
|
|
319
325
|
animation.addTrack(m.mesh, morphTrack);
|
|
320
326
|
}
|
|
321
327
|
}
|
|
328
|
+
} else if (track.type === 'geometry-cache') {
|
|
329
|
+
const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];
|
|
330
|
+
if (!subMesh?.mesh) {
|
|
331
|
+
console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);
|
|
332
|
+
} else {
|
|
333
|
+
if (track.codec === 'pca') {
|
|
334
|
+
const pcaData = this.remapPCAGeometryCacheData(subMesh, track);
|
|
335
|
+
animation.addTrack(subMesh.mesh, new PCAGeometryCacheTrack(pcaData, true));
|
|
336
|
+
} else {
|
|
337
|
+
const frames = this.remapGeometryCacheFrames(subMesh, track.frames);
|
|
338
|
+
animation.addTrack(subMesh.mesh, new FixedGeometryCacheTrack(track.times, frames, true));
|
|
339
|
+
}
|
|
340
|
+
}
|
|
322
341
|
} else {
|
|
323
342
|
console.error(`Invalid animation track type: ${track.type}`);
|
|
324
343
|
}
|
|
@@ -353,6 +372,179 @@ import { MAX_MORPH_TARGETS } from '../values.js';
|
|
|
353
372
|
group.sharedModel = this;
|
|
354
373
|
return group;
|
|
355
374
|
}
|
|
375
|
+
remapGeometryCacheFrames(subMesh, frames) {
|
|
376
|
+
if (!subMesh.rawPositions || frames.length === 0) {
|
|
377
|
+
return frames;
|
|
378
|
+
}
|
|
379
|
+
const sourcePositions = frames[0].positions;
|
|
380
|
+
const sourceVertexCount = sourcePositions.length / 3 >> 0;
|
|
381
|
+
const targetVertexCount = subMesh.rawPositions.length / 3 >> 0;
|
|
382
|
+
if (sourceVertexCount === targetVertexCount) {
|
|
383
|
+
return frames;
|
|
384
|
+
}
|
|
385
|
+
const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);
|
|
386
|
+
if (!remap) {
|
|
387
|
+
console.error(`Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` + `Export the base glb and zabc from the same final mesh layout.`);
|
|
388
|
+
return frames;
|
|
389
|
+
}
|
|
390
|
+
return frames.map((frame)=>({
|
|
391
|
+
positions: this.expandGeometryCacheData(frame.positions, remap),
|
|
392
|
+
normals: frame.normals && frame.normals.length / 3 >> 0 === sourceVertexCount ? this.expandGeometryCacheData(frame.normals, remap) : null,
|
|
393
|
+
boundingBox: frame.boundingBox
|
|
394
|
+
}));
|
|
395
|
+
}
|
|
396
|
+
remapPCAGeometryCacheData(subMesh, track) {
|
|
397
|
+
const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);
|
|
398
|
+
if (!subMesh.rawPositions || remapReference.length === 0) {
|
|
399
|
+
return {
|
|
400
|
+
times: track.times,
|
|
401
|
+
bounds: track.bounds,
|
|
402
|
+
positionReference: track.positionReference ?? null,
|
|
403
|
+
positionMean: track.positionMean,
|
|
404
|
+
positionBases: track.positionBases,
|
|
405
|
+
positionCoefficients: track.positionCoefficients,
|
|
406
|
+
normalMean: track.normalMean ?? null,
|
|
407
|
+
normalBases: track.normalBases ?? null,
|
|
408
|
+
normalCoefficients: track.normalCoefficients ?? null
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
const sourceVertexCount = remapReference.length / 3 >> 0;
|
|
412
|
+
const targetVertexCount = subMesh.rawPositions.length / 3 >> 0;
|
|
413
|
+
if (sourceVertexCount === targetVertexCount) {
|
|
414
|
+
return {
|
|
415
|
+
times: track.times,
|
|
416
|
+
bounds: track.bounds,
|
|
417
|
+
positionReference: track.positionReference ?? null,
|
|
418
|
+
positionMean: track.positionMean,
|
|
419
|
+
positionBases: track.positionBases,
|
|
420
|
+
positionCoefficients: track.positionCoefficients,
|
|
421
|
+
normalMean: track.normalMean ?? null,
|
|
422
|
+
normalBases: track.normalBases ?? null,
|
|
423
|
+
normalCoefficients: track.normalCoefficients ?? null
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, remapReference);
|
|
427
|
+
if (!remap) {
|
|
428
|
+
console.error(`Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` + `Export the base glb and zabc from the same final mesh layout.`);
|
|
429
|
+
return {
|
|
430
|
+
times: track.times,
|
|
431
|
+
bounds: track.bounds,
|
|
432
|
+
positionReference: track.positionReference ?? null,
|
|
433
|
+
positionMean: track.positionMean,
|
|
434
|
+
positionBases: track.positionBases,
|
|
435
|
+
positionCoefficients: track.positionCoefficients,
|
|
436
|
+
normalMean: track.normalMean ?? null,
|
|
437
|
+
normalBases: track.normalBases ?? null,
|
|
438
|
+
normalCoefficients: track.normalCoefficients ?? null
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
return {
|
|
442
|
+
times: track.times,
|
|
443
|
+
bounds: track.bounds,
|
|
444
|
+
positionReference: this.expandGeometryCacheData(remapReference, remap),
|
|
445
|
+
positionMean: this.expandGeometryCacheData(track.positionMean, remap),
|
|
446
|
+
positionBases: track.positionBases.map((basis)=>this.expandGeometryCacheData(basis, remap)),
|
|
447
|
+
positionCoefficients: track.positionCoefficients,
|
|
448
|
+
normalMean: track.normalMean && track.normalMean.length / 3 >> 0 === sourceVertexCount ? this.expandGeometryCacheData(track.normalMean, remap) : null,
|
|
449
|
+
normalBases: track.normalBases?.map((basis)=>basis.length / 3 >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis) ?? null,
|
|
450
|
+
normalCoefficients: track.normalCoefficients ?? null
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
reconstructPCAGeometryCacheReference(track) {
|
|
454
|
+
const reference = new Float32Array(track.positionMean);
|
|
455
|
+
const coefficients = track.positionCoefficients[0];
|
|
456
|
+
if (!coefficients) {
|
|
457
|
+
return reference;
|
|
458
|
+
}
|
|
459
|
+
const componentCount = Math.min(track.positionBases.length, coefficients.length);
|
|
460
|
+
for(let component = 0; component < componentCount; component++){
|
|
461
|
+
const basis = track.positionBases[component];
|
|
462
|
+
const coefficient = coefficients[component];
|
|
463
|
+
if (!basis || coefficient === 0) {
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
const count = Math.min(reference.length, basis.length);
|
|
467
|
+
for(let i = 0; i < count; i++){
|
|
468
|
+
reference[i] += basis[i] * coefficient;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return reference;
|
|
472
|
+
}
|
|
473
|
+
buildGeometryCacheRemap(targetPositions, sourcePositions) {
|
|
474
|
+
const sourceCount = sourcePositions.length / 3 >> 0;
|
|
475
|
+
const targetCount = targetPositions.length / 3 >> 0;
|
|
476
|
+
const buckets = new Map();
|
|
477
|
+
for(let i = 0; i < sourceCount; i++){
|
|
478
|
+
const key = this.geometryCachePositionKey(sourcePositions[i * 3], sourcePositions[i * 3 + 1], sourcePositions[i * 3 + 2]);
|
|
479
|
+
const bucket = buckets.get(key);
|
|
480
|
+
if (bucket) {
|
|
481
|
+
bucket.push(i);
|
|
482
|
+
} else {
|
|
483
|
+
buckets.set(key, [
|
|
484
|
+
i
|
|
485
|
+
]);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
const remap = new Uint32Array(targetCount);
|
|
489
|
+
for(let i = 0; i < targetCount; i++){
|
|
490
|
+
const x = targetPositions[i * 3];
|
|
491
|
+
const y = targetPositions[i * 3 + 1];
|
|
492
|
+
const z = targetPositions[i * 3 + 2];
|
|
493
|
+
let sourceIndex = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);
|
|
494
|
+
if (sourceIndex < 0) {
|
|
495
|
+
sourceIndex = this.findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);
|
|
496
|
+
}
|
|
497
|
+
if (sourceIndex < 0) {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
remap[i] = sourceIndex;
|
|
501
|
+
}
|
|
502
|
+
return remap;
|
|
503
|
+
}
|
|
504
|
+
expandGeometryCacheData(source, remap) {
|
|
505
|
+
const expanded = new Float32Array(remap.length * 3);
|
|
506
|
+
for(let i = 0; i < remap.length; i++){
|
|
507
|
+
const sourceOffset = remap[i] * 3;
|
|
508
|
+
const targetOffset = i * 3;
|
|
509
|
+
expanded[targetOffset] = source[sourceOffset];
|
|
510
|
+
expanded[targetOffset + 1] = source[sourceOffset + 1];
|
|
511
|
+
expanded[targetOffset + 2] = source[sourceOffset + 2];
|
|
512
|
+
}
|
|
513
|
+
return expanded;
|
|
514
|
+
}
|
|
515
|
+
findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z) {
|
|
516
|
+
const bucket = buckets.get(this.geometryCachePositionKey(x, y, z));
|
|
517
|
+
if (!bucket) {
|
|
518
|
+
return -1;
|
|
519
|
+
}
|
|
520
|
+
const epsilon = 1e-5;
|
|
521
|
+
for (const index of bucket){
|
|
522
|
+
const offset = index * 3;
|
|
523
|
+
if (Math.abs(sourcePositions[offset] - x) <= epsilon && Math.abs(sourcePositions[offset + 1] - y) <= epsilon && Math.abs(sourcePositions[offset + 2] - z) <= epsilon) {
|
|
524
|
+
return index;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return -1;
|
|
528
|
+
}
|
|
529
|
+
findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z) {
|
|
530
|
+
const epsilonSquared = 1e-8;
|
|
531
|
+
let bestIndex = -1;
|
|
532
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
533
|
+
for(let i = 0; i < sourcePositions.length; i += 3){
|
|
534
|
+
const dx = sourcePositions[i] - x;
|
|
535
|
+
const dy = sourcePositions[i + 1] - y;
|
|
536
|
+
const dz = sourcePositions[i + 2] - z;
|
|
537
|
+
const distance = dx * dx + dy * dy + dz * dz;
|
|
538
|
+
if (distance < bestDistance) {
|
|
539
|
+
bestDistance = distance;
|
|
540
|
+
bestIndex = i / 3;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
return bestDistance <= epsilonSquared ? bestIndex : -1;
|
|
544
|
+
}
|
|
545
|
+
geometryCachePositionKey(x, y, z) {
|
|
546
|
+
return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;
|
|
547
|
+
}
|
|
356
548
|
onDispose() {
|
|
357
549
|
super.onDispose();
|
|
358
550
|
const nodes = [
|
package/dist/asset/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Nullable<Texture2D>;\r\n sampler: Nullable<TextureSampler>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: Nullable<MaterialTextureInfo>;\r\n bumpScale?: number;\r\n emissiveMap?: Nullable<MaterialTextureInfo>;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: Nullable<MaterialTextureInfo>;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: Nullable<MaterialTextureInfo>;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: Nullable<MaterialTextureInfo>;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: Nullable<MaterialTextureInfo>;\r\n thicknessFactor?: number;\r\n thicknessMap?: Nullable<MaterialTextureInfo>;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: Nullable<MaterialTextureInfo>;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: Nullable<MaterialTextureInfo>;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: Nullable<MaterialTextureInfo>;\r\n specularColorMap?: Nullable<MaterialTextureInfo>;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: Nullable<number[]>;\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: AssetAnimationTrack[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _meshAttached: boolean;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent() {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances ?? null;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position() {\r\n return this._position;\r\n }\r\n set position(val) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(val) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n set scaling(val) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached() {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children() {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes() {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations() {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene() {\r\n return this._activeScene;\r\n }\r\n set activeScene(val) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean) {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true)!;\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh!.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh!, morphTrack);\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)!),\r\n sk.inverseBindMatrices,\r\n sk.bindPose\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node!.children);\r\n const mesh = node!.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances!) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.skinAnimation = !!skeleton;\r\n meshNode.morphAnimation = subMesh.numTargets > 0;\r\n meshNode.primitive = subMesh.primitive.get()!;\r\n meshNode.material =\r\n instancing && !meshNode.skinAnimation && !meshNode.morphAnimation\r\n ? subMesh.material.get()!.createInstance()\r\n : subMesh.material.get()!.clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights!);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","onDispose","shift","subMesh","primitive","dispose","material","assetNode","set","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\nimport {\r\n FixedGeometryCacheTrack,\r\n type FixedGeometryCacheFrame\r\n} from '../animation/fixed_geometry_cache_track';\r\nimport { PCAGeometryCacheTrack, type PCAGeometryCacheTrackData } from '../animation/pca_geometry_cache_track';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Nullable<Texture2D>;\r\n sampler: Nullable<TextureSampler>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: Nullable<MaterialTextureInfo>;\r\n bumpScale?: number;\r\n emissiveMap?: Nullable<MaterialTextureInfo>;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: Nullable<MaterialTextureInfo>;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: Nullable<MaterialTextureInfo>;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: Nullable<MaterialTextureInfo>;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: Nullable<MaterialTextureInfo>;\r\n thicknessFactor?: number;\r\n thicknessMap?: Nullable<MaterialTextureInfo>;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: Nullable<MaterialTextureInfo>;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: Nullable<MaterialTextureInfo>;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: Nullable<MaterialTextureInfo>;\r\n specularColorMap?: Nullable<MaterialTextureInfo>;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: Nullable<number[]>;\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\nexport interface AssetFixedGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec?: 'fixed';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n frames: FixedGeometryCacheFrame[];\r\n}\r\n\r\nexport interface AssetPCAGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec: 'pca';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n bounds: [number, number, number, number, number, number][];\r\n positionReference?: Nullable<Float32Array>;\r\n positionMean: Float32Array;\r\n positionBases: Float32Array[];\r\n positionCoefficients: Float32Array[];\r\n normalMean?: Nullable<Float32Array>;\r\n normalBases?: Nullable<Float32Array[]>;\r\n normalCoefficients?: Nullable<Float32Array[]>;\r\n}\r\n\r\nexport type AssetGeometryCacheAnimationTrack =\r\n | AssetFixedGeometryCacheAnimationTrack\r\n | AssetPCAGeometryCacheAnimationTrack;\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: (AssetAnimationTrack | AssetGeometryCacheAnimationTrack)[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _meshAttached: boolean;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent() {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances ?? null;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position() {\r\n return this._position;\r\n }\r\n set position(val) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(val) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n set scaling(val) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached() {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children() {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes() {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations() {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene() {\r\n return this._activeScene;\r\n }\r\n set activeScene(val) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean) {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true)!;\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh!.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh!, morphTrack);\r\n }\r\n }\r\n } else if (track.type === 'geometry-cache') {\r\n const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];\r\n if (!subMesh?.mesh) {\r\n console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);\r\n } else {\r\n if (track.codec === 'pca') {\r\n const pcaData = this.remapPCAGeometryCacheData(subMesh, track);\r\n animation.addTrack(subMesh.mesh, new PCAGeometryCacheTrack(pcaData, true));\r\n } else {\r\n const frames = this.remapGeometryCacheFrames(subMesh, track.frames);\r\n animation.addTrack(subMesh.mesh, new FixedGeometryCacheTrack(track.times, frames, true));\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)!),\r\n sk.inverseBindMatrices,\r\n sk.bindPose\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n\r\n private remapGeometryCacheFrames(subMesh: AssetSubMeshData, frames: FixedGeometryCacheFrame[]) {\r\n if (!subMesh.rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: this.expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n }\r\n\r\n private remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: AssetPCAGeometryCacheAnimationTrack\r\n ): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: this.expandGeometryCacheData(remapReference, remap),\r\n positionMean: this.expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => this.expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n\r\n private reconstructPCAGeometryCacheReference(track: AssetPCAGeometryCacheAnimationTrack) {\r\n const reference = new Float32Array(track.positionMean);\r\n const coefficients = track.positionCoefficients[0];\r\n if (!coefficients) {\r\n return reference;\r\n }\r\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\r\n for (let component = 0; component < componentCount; component++) {\r\n const basis = track.positionBases[component];\r\n const coefficient = coefficients[component];\r\n if (!basis || coefficient === 0) {\r\n continue;\r\n }\r\n const count = Math.min(reference.length, basis.length);\r\n for (let i = 0; i < count; i++) {\r\n reference[i] += basis[i] * coefficient;\r\n }\r\n }\r\n return reference;\r\n }\r\n\r\n private buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\r\n const sourceCount = (sourcePositions.length / 3) >> 0;\r\n const targetCount = (targetPositions.length / 3) >> 0;\r\n const buckets = new Map<string, number[]>();\r\n for (let i = 0; i < sourceCount; i++) {\r\n const key = this.geometryCachePositionKey(\r\n sourcePositions[i * 3],\r\n sourcePositions[i * 3 + 1],\r\n sourcePositions[i * 3 + 2]\r\n );\r\n const bucket = buckets.get(key);\r\n if (bucket) {\r\n bucket.push(i);\r\n } else {\r\n buckets.set(key, [i]);\r\n }\r\n }\r\n const remap = new Uint32Array(targetCount);\r\n for (let i = 0; i < targetCount; i++) {\r\n const x = targetPositions[i * 3];\r\n const y = targetPositions[i * 3 + 1];\r\n const z = targetPositions[i * 3 + 2];\r\n let sourceIndex = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = this.findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\r\n }\r\n if (sourceIndex < 0) {\r\n return null;\r\n }\r\n remap[i] = sourceIndex;\r\n }\r\n return remap;\r\n }\r\n\r\n private expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\r\n const expanded = new Float32Array(remap.length * 3);\r\n for (let i = 0; i < remap.length; i++) {\r\n const sourceOffset = remap[i] * 3;\r\n const targetOffset = i * 3;\r\n expanded[targetOffset] = source[sourceOffset];\r\n expanded[targetOffset + 1] = source[sourceOffset + 1];\r\n expanded[targetOffset + 2] = source[sourceOffset + 2];\r\n }\r\n return expanded;\r\n }\r\n\r\n private findGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n buckets: Map<string, number[]>,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const bucket = buckets.get(this.geometryCachePositionKey(x, y, z));\r\n if (!bucket) {\r\n return -1;\r\n }\r\n const epsilon = 1e-5;\r\n for (const index of bucket) {\r\n const offset = index * 3;\r\n if (\r\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\r\n ) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private findNearestGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const epsilonSquared = 1e-8;\r\n let bestIndex = -1;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n for (let i = 0; i < sourcePositions.length; i += 3) {\r\n const dx = sourcePositions[i] - x;\r\n const dy = sourcePositions[i + 1] - y;\r\n const dz = sourcePositions[i + 2] - z;\r\n const distance = dx * dx + dy * dy + dz * dz;\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestIndex = i / 3;\r\n }\r\n }\r\n return bestDistance <= epsilonSquared ? bestIndex : -1;\r\n }\r\n\r\n private geometryCachePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node!.children);\r\n const mesh = node!.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances!) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.skinAnimation = !!skeleton;\r\n meshNode.morphAnimation = subMesh.numTargets > 0;\r\n meshNode.primitive = subMesh.primitive.get()!;\r\n meshNode.material =\r\n instancing && !meshNode.skinAnimation && !meshNode.morphAnimation\r\n ? subMesh.material.get()!.createInstance()\r\n : subMesh.material.get()!.clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights!);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","subMesh","subMeshIndex","codec","pcaData","remapPCAGeometryCacheData","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","FixedGeometryCacheTrack","times","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","sourcePositions","sourceVertexCount","targetVertexCount","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","normals","boundingBox","remapReference","positionReference","reconstructPCAGeometryCacheReference","bounds","positionMean","positionBases","positionCoefficients","normalMean","normalBases","normalCoefficients","basis","reference","Float32Array","coefficients","componentCount","Math","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","key","geometryCachePositionKey","bucket","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","offset","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round","onDispose","shift","primitive","dispose","material","assetNode","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
|