@zephyr3d/editor 0.3.4 → 0.3.5
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/assets/{index-DzQzWsCG.js → index-DlnbO59X.js} +2 -2
- package/dist/assistant/zephyr-types-index.json +9 -10
- package/dist/index.html +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_base.js +152 -152
- package/dist/modules/zephyr3d_base.js.map +1 -1
- package/dist/modules/zephyr3d_device.js +15 -15
- package/dist/modules/zephyr3d_device.js.map +1 -1
- package/dist/modules/zephyr3d_loaders.js +6 -6
- package/dist/modules/zephyr3d_loaders.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +1382 -1385
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/base/dist/vfs/common.js +152 -152
- package/dist/vendor/zephyr3d/base/dist/vfs/common.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
- package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +6 -6
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +191 -194
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +119 -119
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js +62 -62
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +275 -275
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/package.json +3 -3
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zephyr3d_loaders.js","sources":["../../../../libs/loaders/src/importer.ts","../../../../libs/loaders/src/gltf/helpers.ts","../../../../libs/loaders/src/gltf/gltf_importer.ts","../../../../libs/loaders/src/fbx/parser.ts","../../../../libs/loaders/src/fbx/fbx_importer.ts"],"sourcesContent":["import type { SceneNode, Scene } from '@zephyr3d/scene';\r\nimport { getEngine, SharedModel } from '@zephyr3d/scene';\r\nimport { PathUtils, type VFS } from '@zephyr3d/base';\r\n\r\n/**\r\n * Generic model importer interface\r\n * @public\r\n */\r\nexport abstract class AbstractModelImporter {\r\n abstract import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS): void | Promise<void>;\r\n async loadModel(path: string, vfs?: VFS): Promise<SharedModel> {\r\n if (!vfs) {\r\n vfs = getEngine().VFS;\r\n }\r\n const mimeType = vfs.guessMIMEType(path);\r\n const data = (await vfs.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n const blob = new Blob([data], { type: mimeType });\r\n const model = new SharedModel();\r\n await this.import(blob, model, PathUtils.dirname(path), vfs);\r\n return model;\r\n }\r\n async loadModelToScene(scene: Scene, path: string, instancing?: boolean, vfs?: VFS): Promise<SceneNode> {\r\n const model = await this.loadModel(path, vfs);\r\n return model.createSceneNode(\r\n getEngine().resourceManager,\r\n scene,\r\n instancing ?? false,\r\n true,\r\n true,\r\n true,\r\n true,\r\n vfs ?? getEngine().VFS\r\n );\r\n }\r\n}\r\n","import type { Accessor, AccessorSparse } from './gltf_types';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { GLTFContent } from './gltf_importer';\r\n\r\n/** @internal */\r\nexport const enum ComponentType {\r\n UNKNOWN = 0,\r\n BYTE = 5120, // GL.BYTE\r\n UBYTE = 5121, // GL.UNSIGNED_BYTE\r\n SHORT = 5122, // GL.SHORT\r\n USHORT = 5123, // GL.UNSIGNED_SHORT\r\n INT = 5124, // GL.INT\r\n UINT = 5125, // GL.UNSIGNED_INT\r\n FLOAT = 5126 // GL.FLOAT\r\n}\r\n\r\n/** @internal */\r\nexport type GLTFComponentType = 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';\r\n\r\n/** @internal */\r\nexport class GLTFAccessor {\r\n bufferView: number;\r\n byteOffset: number;\r\n componentType: ComponentType;\r\n normalized: boolean;\r\n count: number;\r\n type: GLTFComponentType;\r\n max: number[];\r\n min: number[];\r\n sparse: AccessorSparse;\r\n name: string;\r\n private _typedView: Nullable<TypedArray>;\r\n private _filteredView: Nullable<TypedArray>;\r\n private _normalizedFilteredView: Nullable<TypedArray>;\r\n private _normalizedTypedView: Nullable<TypedArray>;\r\n constructor(accessorInfo: Accessor) {\r\n this.bufferView = accessorInfo.bufferView!;\r\n this.byteOffset = accessorInfo.byteOffset ?? 0;\r\n this.componentType = accessorInfo.componentType;\r\n this.normalized = !!accessorInfo.normalized;\r\n this.count = accessorInfo.count;\r\n this.type = accessorInfo.type;\r\n this.max = accessorInfo.max!;\r\n this.min = accessorInfo.min!;\r\n this.sparse = accessorInfo.sparse!;\r\n this.name = accessorInfo.name;\r\n this._typedView = null;\r\n this._filteredView = null;\r\n this._normalizedFilteredView = null;\r\n this._normalizedTypedView = null;\r\n }\r\n getTypedView(gltf: GLTFContent) {\r\n if (this._typedView) {\r\n return this._typedView;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews![this.bufferView];\r\n const buffer = gltf._loadedBuffers![bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n\r\n let arrayLength = 0;\r\n if (bufferView.byteStride !== undefined && bufferView.byteStride !== 0) {\r\n if (componentSize !== 0) {\r\n arrayLength = (bufferView.byteStride / componentSize) * (this.count - 1) + componentCount;\r\n } else {\r\n console.warn(\"Invalid component type in accessor '\" + (this.name ? this.name : '') + \"'\");\r\n }\r\n } else {\r\n arrayLength = this.count * componentCount;\r\n }\r\n\r\n if (arrayLength * componentSize > buffer.byteLength - byteOffset) {\r\n arrayLength = (buffer.byteLength - byteOffset) / componentSize;\r\n console.warn(\"Count in accessor '\" + (this.name ? this.name : '') + \"' is too large.\");\r\n }\r\n\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._typedView = new Int8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n this._typedView = new Uint8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n this._typedView = new Int16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n this._typedView = new Uint16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.INT:\r\n this._typedView = new Int32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n this._typedView = new Uint32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n this._typedView = new Float32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._typedView = this.createView()!;\r\n }\r\n\r\n if (!this._typedView) {\r\n console.warn('Failed to convert buffer view to typed view!: ' + this.bufferView);\r\n } else if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._typedView);\r\n }\r\n\r\n return this._typedView;\r\n }\r\n\r\n // getNormalizedTypedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedTypedView(gltf: GLTFContent) {\r\n if (this._normalizedTypedView) {\r\n return this._normalizedTypedView;\r\n }\r\n\r\n const typedView = this.getTypedView(gltf)!;\r\n this._normalizedTypedView = this.normalized\r\n ? GLTFAccessor.dequantize(typedView, this.componentType)\r\n : typedView;\r\n return this._normalizedTypedView;\r\n }\r\n\r\n // getDeinterlacedView provides a view to the accessors data in form of\r\n // a TypedArray. In contrast to getTypedView, getDeinterlacedView deinterlaces\r\n // data, i.e. stripping padding and unrelated components from the array. It then\r\n // only contains the data of the accessor\r\n getDeinterlacedView(gltf: GLTFContent) {\r\n if (this._filteredView) {\r\n return this._filteredView;\r\n }\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n const arrayLength = this.count * componentCount;\r\n\r\n let func = 'getFloat32';\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._filteredView = new Int8Array(arrayLength);\r\n func = 'getInt8';\r\n break;\r\n case ComponentType.UBYTE:\r\n this._filteredView = new Uint8Array(arrayLength);\r\n func = 'getUint8';\r\n break;\r\n case ComponentType.SHORT:\r\n this._filteredView = new Int16Array(arrayLength);\r\n func = 'getInt16';\r\n break;\r\n case ComponentType.USHORT:\r\n this._filteredView = new Uint16Array(arrayLength);\r\n func = 'getUint16';\r\n break;\r\n case ComponentType.INT:\r\n this._filteredView = new Int32Array(arrayLength);\r\n func = 'getInt32';\r\n break;\r\n case ComponentType.UINT:\r\n this._filteredView = new Uint32Array(arrayLength);\r\n func = 'getUint32';\r\n break;\r\n case ComponentType.FLOAT:\r\n this._filteredView = new Float32Array(arrayLength);\r\n func = 'getFloat32';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews![this.bufferView];\r\n const buffer = gltf._loadedBuffers![bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n const stride =\r\n bufferView.byteStride !== undefined && bufferView.byteStride !== 0\r\n ? bufferView.byteStride\r\n : componentCount * componentSize;\r\n const dataView = new DataView(buffer, byteOffset, this.count * stride);\r\n for (let i = 0; i < arrayLength; ++i) {\r\n const offset = Math.floor(i / componentCount) * stride + (i % componentCount) * componentSize;\r\n this._filteredView[i] = (dataView as any)[func](offset, true);\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._filteredView = this.createView()!;\r\n }\r\n\r\n if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._filteredView);\r\n }\r\n\r\n return this._filteredView;\r\n }\r\n\r\n createView() {\r\n const size = this.count * this.getComponentCount(this.type);\r\n if (this.componentType == ComponentType.BYTE) {\r\n return new Int8Array(size);\r\n }\r\n if (this.componentType == ComponentType.UBYTE) {\r\n return new Uint8Array(size);\r\n }\r\n if (this.componentType == ComponentType.SHORT) {\r\n return new Int16Array(size);\r\n }\r\n if (this.componentType == ComponentType.USHORT) {\r\n return new Uint16Array(size);\r\n }\r\n if (this.componentType == ComponentType.INT) {\r\n return new Int32Array(size);\r\n }\r\n if (this.componentType == ComponentType.UINT) {\r\n return new Uint32Array(size);\r\n }\r\n if (this.componentType == ComponentType.FLOAT) {\r\n return new Float32Array(size);\r\n }\r\n return undefined;\r\n }\r\n\r\n // getNormalizedDeinterlacedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedDeinterlacedView(gltf: GLTFContent) {\r\n if (this._normalizedFilteredView) {\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n const filteredView = this.getDeinterlacedView(gltf)!;\r\n this._normalizedFilteredView = this.normalized\r\n ? GLTFAccessor.dequantize(filteredView, this.componentType)\r\n : filteredView;\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n applySparse(gltf: GLTFContent, view: TypedArray) {\r\n // Gather indices.\r\n\r\n const indicesBufferView = gltf.bufferViews![this.sparse.indices.bufferView];\r\n const indicesBuffer = gltf._loadedBuffers![indicesBufferView.buffer];\r\n const indicesByteOffset = (this.sparse.indices.byteOffset ?? 0) + (indicesBufferView.byteOffset ?? 0);\r\n\r\n const indicesComponentSize = this.getComponentSize(this.sparse.indices.componentType);\r\n let indicesComponentCount = 1;\r\n\r\n if (indicesBufferView.byteStride !== undefined && indicesBufferView.byteStride !== 0) {\r\n indicesComponentCount = indicesBufferView.byteStride / indicesComponentSize;\r\n }\r\n\r\n const indicesArrayLength = this.sparse.count * indicesComponentCount;\r\n\r\n let indicesTypedView;\r\n switch (this.sparse.indices.componentType) {\r\n case ComponentType.UBYTE:\r\n indicesTypedView = new Uint8Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n indicesTypedView = new Uint16Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n indicesTypedView = new Uint32Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n }\r\n\r\n // Gather values.\r\n\r\n const valuesBufferView = gltf.bufferViews![this.sparse.values.bufferView];\r\n const valuesBuffer = gltf._loadedBuffers![valuesBufferView.buffer];\r\n const valuesByteOffset = (this.sparse.values.byteOffset ?? 0) + (valuesBufferView.byteOffset ?? 0);\r\n\r\n const valuesComponentSize = this.getComponentSize(this.componentType);\r\n let valuesComponentCount = this.getComponentCount(this.type);\r\n\r\n if (valuesBufferView.byteStride !== undefined && valuesBufferView.byteStride !== 0) {\r\n valuesComponentCount = valuesBufferView.byteStride / valuesComponentSize;\r\n }\r\n\r\n const valuesArrayLength = this.sparse.count * valuesComponentCount;\r\n\r\n let valuesTypedView: TypedArray;\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n valuesTypedView = new Int8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n valuesTypedView = new Uint8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n valuesTypedView = new Int16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n valuesTypedView = new Uint16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.INT:\r\n valuesTypedView = new Int32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n valuesTypedView = new Uint32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n valuesTypedView = new Float32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n }\r\n\r\n // Overwrite values.\r\n\r\n for (let i = 0; i < this.sparse.count; ++i) {\r\n for (let k = 0; k < valuesComponentCount; ++k) {\r\n view[indicesTypedView![i] * valuesComponentCount + k] =\r\n valuesTypedView![i * valuesComponentCount + k];\r\n }\r\n }\r\n }\r\n\r\n // dequantize can be used to perform the normalization from WebGL2 vertexAttribPointer explicitly\r\n static dequantize(typedArray: TypedArray, componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 127.0, -1.0));\r\n case ComponentType.UBYTE:\r\n return new Float32Array(typedArray).map((c) => c / 255.0);\r\n case ComponentType.SHORT:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 32767.0, -1.0));\r\n case ComponentType.USHORT:\r\n return new Float32Array(typedArray).map((c) => c / 65535.0);\r\n default:\r\n return typedArray;\r\n }\r\n }\r\n\r\n getComponentCount(type: GLTFComponentType) {\r\n switch (type) {\r\n case 'SCALAR':\r\n return 1;\r\n case 'VEC2':\r\n return 2;\r\n case 'VEC3':\r\n return 3;\r\n case 'VEC4':\r\n return 4;\r\n case 'MAT2':\r\n return 4;\r\n case 'MAT3':\r\n return 9;\r\n case 'MAT4':\r\n return 16;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n getComponentSize(componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n case ComponentType.UBYTE:\r\n return 1;\r\n case ComponentType.SHORT:\r\n case ComponentType.USHORT:\r\n return 2;\r\n case ComponentType.INT:\r\n case ComponentType.UINT:\r\n case ComponentType.FLOAT:\r\n return 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n}\r\n","import type * as draco3d from 'draco3d';\r\nimport type { DeepPartial, InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\r\nimport {\r\n Vector3,\r\n Vector4,\r\n Matrix4x4,\r\n Quaternion,\r\n Interpolator,\r\n InterpolatorScalar,\r\n ASSERT\r\n} from '@zephyr3d/base';\r\nimport { AssetHierarchyNode } from '@zephyr3d/scene';\r\nimport type {\r\n AssetJointDynamicsCollider,\r\n AssetJointDynamicsFlatPlane,\r\n AssetMeshData,\r\n AssetAnimationData,\r\n AssetSubMeshData,\r\n AssetMaterial,\r\n AssetUnlitMaterial,\r\n AssetPBRMaterialMR,\r\n AssetPBRMaterialSG,\r\n AssetMaterialCommon,\r\n AssetPBRMaterialCommon,\r\n AssetAnimationTrack,\r\n AssetMorphTargetBinding,\r\n AssetPrimitiveInfo,\r\n AssetTextureInfo,\r\n AssetSpringBoneCollider,\r\n AssetSpringBoneColliderGroup,\r\n AssetSpringBoneJoint,\r\n SharedModel,\r\n ControllerConfig\r\n} from '@zephyr3d/scene';\r\nimport { AssetSkeleton, AssetScene } from '@zephyr3d/scene';\r\nimport type { HumanoidJointMapping } from '@zephyr3d/scene';\r\nimport { HumanoidBodyRig, HumanoidHandRig } from '@zephyr3d/scene';\r\nimport {\r\n BoundingBox,\r\n DracoMeshDecoder,\r\n getEngine,\r\n MORPH_TARGET_COLOR,\r\n MORPH_TARGET_NORMAL,\r\n MORPH_TARGET_POSITION,\r\n MORPH_TARGET_TANGENT,\r\n MORPH_TARGET_TEX0,\r\n MORPH_TARGET_TEX1,\r\n MORPH_TARGET_TEX2,\r\n MORPH_TARGET_TEX3\r\n} from '@zephyr3d/scene';\r\nimport { ColliderForce, getDevice } from '@zephyr3d/scene';\r\nimport { ComponentType, GLTFAccessor } from './helpers';\r\nimport type { VertexAttribFormat } from '@zephyr3d/device';\r\nimport {\r\n type VertexSemantic,\r\n type TextureAddressMode,\r\n type TextureFilterMode,\r\n type AbstractDevice,\r\n getVertexFormatComponentCount,\r\n getVertexAttribName,\r\n getVertexAttributeIndex\r\n} from '@zephyr3d/device';\r\nimport type {\r\n AnimationChannel,\r\n AnimationSampler,\r\n GlTf,\r\n Material,\r\n MeshPrimitive,\r\n TextureInfo\r\n} from './gltf_types';\r\nimport { AbstractModelImporter } from '../importer';\r\n\r\ntype SpringBoneJointInfo = {\r\n node?: unknown;\r\n hitRadius?: number;\r\n stiffness?: number;\r\n gravityPower?: number;\r\n gravityDir?: unknown;\r\n dragForce?: number;\r\n};\r\n\r\ntype VRMC0BlendShapeBindInfo = {\r\n mesh?: unknown;\r\n index?: unknown;\r\n weight?: unknown;\r\n};\r\n\r\ntype VRMC0BlendShapeGroupInfo = {\r\n name?: unknown;\r\n presetName?: unknown;\r\n binds?: unknown;\r\n};\r\n\r\ntype VRMC1MorphTargetBindInfo = {\r\n node?: unknown;\r\n index?: unknown;\r\n weight?: unknown;\r\n};\r\n\r\ntype VRMC1ExpressionInfo = {\r\n isBinary?: unknown;\r\n morphTargetBinds?: unknown;\r\n};\r\n\r\ntype VRMCMToonTextureInfo = TextureInfo & {\r\n scale?: number;\r\n};\r\n\r\ntype VRMCMToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype VRMCMToonMaterialInfo = {\r\n transparentWithZWrite?: boolean;\r\n renderQueueOffsetNumber?: number;\r\n shadeColorFactor?: number[];\r\n shadeMultiplyTexture?: TextureInfo;\r\n shadingShiftFactor?: number;\r\n shadingShiftTexture?: VRMCMToonTextureInfo;\r\n shadingToonyFactor?: number;\r\n giEqualizationFactor?: number;\r\n matcapFactor?: number[];\r\n matcapTexture?: TextureInfo;\r\n parametricRimColorFactor?: number[];\r\n parametricRimFresnelPowerFactor?: number;\r\n parametricRimLiftFactor?: number;\r\n rimMultiplyTexture?: TextureInfo;\r\n rimLightingMixFactor?: number;\r\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\r\n outlineWidthFactor?: number;\r\n outlineWidthMultiplyTexture?: TextureInfo;\r\n outlineColorFactor?: number[];\r\n outlineLightingMixFactor?: number;\r\n uvAnimationMaskTexture?: TextureInfo;\r\n uvAnimationScrollXSpeedFactor?: number;\r\n uvAnimationScrollYSpeedFactor?: number;\r\n uvAnimationRotationSpeedFactor?: number;\r\n};\r\n\r\ntype GLTFMToonAssetMaterial = AssetUnlitMaterial & {\r\n shadeColorFactor?: Vector3;\r\n shadeMultiplyMap?: AssetTextureInfo;\r\n shadingShiftFactor?: number;\r\n shadingShiftMap?: AssetTextureInfo;\r\n shadingShiftTextureScale?: number;\r\n shadingToonyFactor?: number;\r\n giEqualizationFactor?: number;\r\n matcapFactor?: Vector3;\r\n matcapMap?: AssetTextureInfo;\r\n parametricRimColorFactor?: Vector3;\r\n parametricRimFresnelPowerFactor?: number;\r\n parametricRimLiftFactor?: number;\r\n rimMultiplyMap?: AssetTextureInfo;\r\n rimLightingMixFactor?: number;\r\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\r\n outlineWidthFactor?: number;\r\n outlineWidthMultiplyMap?: AssetTextureInfo;\r\n outlineColorFactor?: Vector3;\r\n outlineLightingMixFactor?: number;\r\n outlineUsesTangentNormals?: boolean;\r\n uvAnimationMaskMap?: AssetTextureInfo;\r\n uvAnimationScrollXSpeedFactor?: number;\r\n uvAnimationScrollYSpeedFactor?: number;\r\n uvAnimationRotationSpeedFactor?: number;\r\n transparentWithZWrite?: boolean;\r\n renderQueueOffsetNumber?: number;\r\n};\r\n\r\ntype GLTFLoadedMeshPrimitive = {\r\n source: MeshPrimitive;\r\n primitive: AssetPrimitiveInfo;\r\n subMeshData: AssetSubMeshData;\r\n materialInfo: Nullable<Material>;\r\n outlineUsesTangentNormals: boolean;\r\n};\r\n\r\ntype VRMAHumanoidBoneInfo = {\r\n node?: unknown;\r\n};\r\n\r\ntype VRMAHumanoidInfo = {\r\n humanBones?: Record<string, VRMAHumanoidBoneInfo>;\r\n};\r\n\r\ntype VRMCVRMAnimationInfo = {\r\n specVersion?: unknown;\r\n humanoid?: VRMAHumanoidInfo;\r\n};\r\n\r\nconst VRM_SPRING_BONE_SUBSTEPS = 3;\r\nconst VRM_GRAVITY_ACCELERATION_SCALE = 3;\r\nconst VRM_BASE_GRAVITY_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\r\nconst VRM_GRAVITY_POWER_TO_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\r\nconst VRM_STIFFNESS_TO_FRAME_HARDNESS = 0.05;\r\nconst VRM_DRAGFORCE_SCALE = 0.5;\r\n\r\n/** @internal */\r\nexport interface GLTFContent extends GlTf {\r\n _loadedBuffers: Nullable<ArrayBuffer[]>;\r\n _accessors: GLTFAccessor[];\r\n _nodes: AssetHierarchyNode[];\r\n _meshes: AssetMeshData[];\r\n _device: AbstractDevice;\r\n _dracoModule?: draco3d.DecoderModule;\r\n}\r\n\r\n/**\r\n * The GLTF/GLB model loader\r\n * @public\r\n */\r\nexport class GLTFImporter extends AbstractModelImporter {\r\n /** @internal */\r\n async initDraco3d(gltf: GLTFContent) {\r\n return new Promise<void>((resolve) => {\r\n const dracoDecoderModule = (window as any).DracoDecoderModule as draco3d.DracoDecoderModule;\r\n if (dracoDecoderModule) {\r\n dracoDecoderModule({\r\n onModuleLoaded: (module: any) => {\r\n gltf._dracoModule = module;\r\n resolve();\r\n }\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\r\n const buffer = await data.arrayBuffer();\r\n if (this.isGLB(buffer)) {\r\n await this.loadBinary(buffer, model, basePath, vfs);\r\n return;\r\n }\r\n const gltf = (await new Response(data).json()) as GLTFContent;\r\n gltf._loadedBuffers = null;\r\n await this.loadJson(gltf, model, basePath, vfs);\r\n }\r\n /** @internal */\r\n async loadBinary(buffer: ArrayBuffer, model: SharedModel, basePath: string, vfs?: VFS) {\r\n const jsonChunkType = 0x4e4f534a;\r\n const binaryChunkType = 0x004e4942;\r\n let gltf: Nullable<GLTFContent> = null;\r\n const buffers: ArrayBuffer[] = [];\r\n const chunkInfos = this.getGLBChunkInfos(buffer);\r\n for (const info of chunkInfos) {\r\n if (info.type === jsonChunkType && !gltf) {\r\n const jsonSlice = new Uint8Array(buffer, 20, info.length);\r\n const stringBuffer = new TextDecoder('utf-8').decode(jsonSlice);\r\n gltf = JSON.parse(stringBuffer);\r\n } else if (info.type === binaryChunkType) {\r\n buffers.push(buffer.slice(info.start, info.start + info.length));\r\n }\r\n }\r\n ASSERT(!!gltf, 'Invalid GLTF format');\r\n gltf._loadedBuffers = buffers;\r\n await this.loadJson(gltf, model, basePath, vfs);\r\n }\r\n /** @internal */\r\n async loadJson(gltf: GLTFContent, model: SharedModel, basePath: string, vfs?: VFS) {\r\n vfs = vfs ?? getEngine().VFS;\r\n // check extensions\r\n if (\r\n !gltf._dracoModule &&\r\n gltf.extensionsRequired &&\r\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\r\n ) {\r\n await this.initDraco3d(gltf);\r\n ASSERT(!!gltf._dracoModule, 'Draco3d is required for loading model');\r\n }\r\n gltf._accessors = [];\r\n gltf._nodes = [];\r\n gltf._meshes = [];\r\n // check asset property\r\n const asset = gltf.asset;\r\n if (asset) {\r\n const gltfVersion = asset.version;\r\n ASSERT(gltfVersion === '2.0', `Invalid GLTF version: ${gltfVersion}`);\r\n }\r\n gltf._baseURI = basePath;\r\n if (!gltf._loadedBuffers) {\r\n gltf._loadedBuffers = [];\r\n const buffers = gltf.buffers;\r\n if (buffers) {\r\n for (const buffer of buffers) {\r\n const uri =\r\n vfs.parseDataURI(buffer.uri!) || vfs.isAbsoluteURL(buffer.uri!)\r\n ? buffer.uri\r\n : vfs.normalizePath(vfs.join(gltf._baseURI, buffer.uri!));\r\n const buf = (await vfs.readFile(uri!, { encoding: 'binary' })) as ArrayBuffer;\r\n ASSERT(buffer.byteLength === buf.byteLength, 'Invalid GLTF: buffer byte length error.');\r\n gltf._loadedBuffers.push(buf);\r\n }\r\n }\r\n }\r\n const accessors = gltf.accessors;\r\n if (accessors) {\r\n for (const accessor of gltf.accessors!) {\r\n gltf._accessors.push(new GLTFAccessor(accessor));\r\n }\r\n }\r\n const scenes = gltf.scenes;\r\n ASSERT(!!scenes, 'No scenes found in model');\r\n const sharedModel = model;\r\n await this._loadMeshes(sharedModel, gltf, vfs);\r\n this._loadNodes(gltf, sharedModel);\r\n this._loadSkins(gltf, sharedModel);\r\n this._loadMorphTargetGroups(gltf, sharedModel);\r\n for (let i = 0; i < (gltf.nodes?.length ?? 0); i++) {\r\n if (typeof gltf.nodes![i].skin === 'number' && gltf.nodes![i].skin! >= 0) {\r\n gltf._nodes[i].skeleton = sharedModel.skeletons[gltf.nodes![i].skin!];\r\n }\r\n }\r\n this._loadSpringBones(gltf, sharedModel);\r\n this._loadAnimations(gltf, sharedModel);\r\n for (const scene of scenes) {\r\n const assetScene = new AssetScene(scene.name);\r\n for (const node of scene.nodes!) {\r\n assetScene.rootNodes.push(gltf._nodes[node]);\r\n }\r\n sharedModel.scenes.push(assetScene);\r\n }\r\n if (typeof gltf.scene === 'number') {\r\n sharedModel.activeScene = gltf.scene;\r\n }\r\n }\r\n /** @internal */\r\n private _loadSpringBones(gltf: GLTFContent, model: SharedModel) {\r\n this._loadVRMC0SpringBones(gltf, model);\r\n this._loadVRMC1SpringBones(gltf, model);\r\n this._buildJointDynamicsSpringBones(model);\r\n }\r\n\r\n /** @internal */\r\n private _loadMorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n model.clearMorphTargetGroups();\r\n const hasVRMC1 = !!gltf.extensions?.VRMC_vrm;\r\n const hasVRMC0 = !!gltf.extensions?.VRM;\r\n if (hasVRMC1) {\r\n this._loadVRMC1MorphTargetGroups(gltf, model);\r\n } else if (hasVRMC0) {\r\n this._loadVRMC0MorphTargetGroups(gltf, model);\r\n } else {\r\n model.buildMorphTargetGroupsByName();\r\n }\r\n }\r\n\r\n private _loadVRMC0MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n const groups = gltf.extensions?.VRM?.blendShapeMaster?.blendShapeGroups;\r\n if (!Array.isArray(groups)) {\r\n return;\r\n }\r\n for (const value of groups) {\r\n if (!value || typeof value !== 'object') {\r\n continue;\r\n }\r\n const groupInfo = value as VRMC0BlendShapeGroupInfo;\r\n const name = this._getVRMC0BlendShapeGroupName(groupInfo);\r\n if (!name) {\r\n continue;\r\n }\r\n const bindings: AssetMorphTargetBinding[] = [];\r\n const binds = Array.isArray(groupInfo.binds) ? groupInfo.binds : [];\r\n for (const bindValue of binds) {\r\n if (!bindValue || typeof bindValue !== 'object') {\r\n continue;\r\n }\r\n const bindInfo = bindValue as VRMC0BlendShapeBindInfo;\r\n const meshIndex = typeof bindInfo.mesh === 'number' ? bindInfo.mesh : -1;\r\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\r\n const mesh = meshIndex >= 0 ? gltf._meshes[meshIndex] : null;\r\n if (!mesh) {\r\n continue;\r\n }\r\n const targetName = this._getMorphTargetName(mesh, targetIndex);\r\n if (!targetName) {\r\n continue;\r\n }\r\n bindings.push({\r\n mesh,\r\n targetIndex,\r\n targetName,\r\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight / 100 : 1\r\n });\r\n }\r\n model.addMorphTargetGroup({ name, bindings });\r\n }\r\n }\r\n\r\n private _loadVRMC1MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n const expressions = gltf.extensions?.VRMC_vrm?.expressions;\r\n if (!expressions) {\r\n return;\r\n }\r\n this._loadVRMC1ExpressionMap(gltf, model, expressions.preset);\r\n this._loadVRMC1ExpressionMap(gltf, model, expressions.custom);\r\n }\r\n\r\n private _loadVRMC1ExpressionMap(gltf: GLTFContent, model: SharedModel, expressionMap: unknown) {\r\n if (!expressionMap || typeof expressionMap !== 'object') {\r\n return;\r\n }\r\n for (const [name, expressionInfo] of Object.entries(expressionMap)) {\r\n if (!expressionInfo || typeof expressionInfo !== 'object') {\r\n continue;\r\n }\r\n const expression = expressionInfo as VRMC1ExpressionInfo;\r\n const bindings: AssetMorphTargetBinding[] = [];\r\n const morphTargetBinds = Array.isArray(expression.morphTargetBinds) ? expression.morphTargetBinds : [];\r\n for (const bindValue of morphTargetBinds) {\r\n if (!bindValue || typeof bindValue !== 'object') {\r\n continue;\r\n }\r\n const bindInfo = bindValue as VRMC1MorphTargetBindInfo;\r\n const nodeIndex = typeof bindInfo.node === 'number' ? bindInfo.node : -1;\r\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\r\n const node = nodeIndex >= 0 ? gltf._nodes[nodeIndex] : null;\r\n const mesh = node?.mesh ?? null;\r\n if (!node || !mesh) {\r\n continue;\r\n }\r\n const targetName = this._getMorphTargetName(mesh, targetIndex);\r\n if (!targetName) {\r\n continue;\r\n }\r\n bindings.push({\r\n node,\r\n targetIndex,\r\n targetName,\r\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight : 1\r\n });\r\n }\r\n model.addMorphTargetGroup({\r\n name,\r\n bindings,\r\n isBinary: expression.isBinary === true\r\n });\r\n }\r\n }\r\n\r\n private _getVRMC0BlendShapeGroupName(groupInfo: VRMC0BlendShapeGroupInfo): Nullable<string> {\r\n const presetName = typeof groupInfo.presetName === 'string' ? groupInfo.presetName : '';\r\n if (presetName && presetName.toLowerCase() !== 'unknown') {\r\n return presetName;\r\n }\r\n const name = typeof groupInfo.name === 'string' ? groupInfo.name : '';\r\n return name || presetName || null;\r\n }\r\n\r\n private _getMorphTargetName(mesh: AssetMeshData, targetIndex: number): Nullable<string> {\r\n if (targetIndex < 0) {\r\n return null;\r\n }\r\n let count = 0;\r\n for (const subMesh of mesh.subMeshes) {\r\n count = Math.max(count, subMesh.numTargets);\r\n }\r\n return targetIndex < count ? (mesh.morphNames?.[targetIndex] ?? `Target${targetIndex}`) : null;\r\n }\r\n\r\n private _loadVRMC1SpringBones(gltf: GLTFContent, model: SharedModel) {\r\n const ext = gltf.extensions?.VRMC_springBone;\r\n if (!ext) {\r\n return;\r\n }\r\n\r\n const colliders: Nullable<AssetSpringBoneCollider>[] = [];\r\n for (let i = 0; i < (ext.colliders ?? []).length; i++) {\r\n const colliderInfo = ext.colliders[i];\r\n const node = this._getNode(gltf, colliderInfo.node);\r\n const extendedShape = colliderInfo.extensions?.VRMC_springBone_extended_collider?.shape;\r\n if (!node || (!colliderInfo.shape && !extendedShape)) {\r\n colliders[i] = null;\r\n continue;\r\n }\r\n const sphere = colliderInfo.shape?.sphere;\r\n const capsule = colliderInfo.shape?.capsule;\r\n const extendedSphere = extendedShape?.sphere;\r\n const extendedCapsule = extendedShape?.capsule;\r\n const extendedPlane = extendedShape?.plane;\r\n let collider: Nullable<AssetSpringBoneCollider> = null;\r\n if (sphere) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(sphere.offset, Vector3.zero()),\r\n radius: sphere.radius ?? 0,\r\n inside: sphere.inside\r\n }\r\n };\r\n } else if (extendedSphere) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(extendedSphere.offset, Vector3.zero()),\r\n radius: extendedSphere.radius ?? 0,\r\n inside: extendedSphere.inside\r\n }\r\n };\r\n } else if (capsule) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'capsule',\r\n offset: this._arrayToVector3(capsule.offset, Vector3.zero()),\r\n tail: this._arrayToVector3(capsule.tail, Vector3.zero()),\r\n radius: capsule.radius ?? 0,\r\n inside: capsule.inside\r\n }\r\n };\r\n } else if (extendedCapsule) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'capsule',\r\n offset: this._arrayToVector3(extendedCapsule.offset, Vector3.zero()),\r\n tail: this._arrayToVector3(extendedCapsule.tail, Vector3.zero()),\r\n radius: extendedCapsule.radius ?? 0,\r\n inside: extendedCapsule.inside\r\n }\r\n };\r\n } else if (extendedPlane) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'plane',\r\n offset: this._arrayToVector3(extendedPlane.offset, Vector3.zero()),\r\n normal: this._arrayToVector3(extendedPlane.normal, Vector3.axisPY())\r\n }\r\n };\r\n }\r\n if (collider) {\r\n colliders[i] = collider;\r\n model.springBoneColliders.push(collider);\r\n } else {\r\n colliders[i] = null;\r\n }\r\n }\r\n\r\n const colliderGroups: AssetSpringBoneColliderGroup[] = [];\r\n for (const groupInfo of ext.colliderGroups ?? []) {\r\n const group: AssetSpringBoneColliderGroup = {\r\n name: groupInfo.name,\r\n colliders: (groupInfo.colliders ?? [])\r\n .map((ref: unknown) => colliders[this._getIndex(ref, ['collider', 'index'])])\r\n .filter((collider: Nullable<AssetSpringBoneCollider>): collider is AssetSpringBoneCollider => {\r\n return !!collider;\r\n })\r\n };\r\n colliderGroups.push(group);\r\n model.springBoneColliderGroups.push(group);\r\n }\r\n\r\n for (const springInfo of ext.springs ?? []) {\r\n const joints: AssetSpringBoneJoint[] = [];\r\n for (const jointRef of springInfo.joints ?? []) {\r\n const jointInfo = this._getSpringBoneJointInfo(ext, jointRef);\r\n if (!jointInfo) {\r\n continue;\r\n }\r\n const node = this._getNode(gltf, jointInfo?.node);\r\n if (!node) {\r\n continue;\r\n }\r\n joints.push({\r\n node,\r\n hitRadius: jointInfo.hitRadius ?? 0,\r\n stiffness: jointInfo.stiffness ?? 0,\r\n gravityPower: jointInfo.gravityPower ?? 0,\r\n gravityDir: this._arrayToVector3(jointInfo.gravityDir, new Vector3(0, -1, 0)),\r\n dragForce: jointInfo.dragForce ?? 0\r\n });\r\n }\r\n model.springBones.push({\r\n name: springInfo.name,\r\n center: this._getNode(gltf, springInfo.center)!,\r\n joints,\r\n colliderGroups: (springInfo.colliderGroups ?? [])\r\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\r\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\r\n return !!group;\r\n })\r\n });\r\n }\r\n }\r\n\r\n private _loadVRMC0SpringBones(gltf: GLTFContent, model: SharedModel) {\r\n const secondaryAnimation = gltf.extensions?.VRM?.secondaryAnimation;\r\n if (!secondaryAnimation) {\r\n return;\r\n }\r\n\r\n const colliderGroups: Nullable<AssetSpringBoneColliderGroup>[] = [];\r\n for (let i = 0; i < (secondaryAnimation.colliderGroups ?? []).length; i++) {\r\n const groupInfo = secondaryAnimation.colliderGroups[i];\r\n const node = this._getNode(gltf, groupInfo.node);\r\n if (!node) {\r\n colliderGroups[i] = null;\r\n continue;\r\n }\r\n const group: AssetSpringBoneColliderGroup = {\r\n colliders: []\r\n };\r\n for (const colliderInfo of groupInfo.colliders ?? []) {\r\n const collider: AssetSpringBoneCollider = {\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(colliderInfo.offset, Vector3.zero()),\r\n radius: colliderInfo.radius ?? 0\r\n }\r\n };\r\n group.colliders.push(collider);\r\n model.springBoneColliders.push(collider);\r\n }\r\n colliderGroups[i] = group;\r\n model.springBoneColliderGroups.push(group);\r\n }\r\n\r\n for (const boneGroupInfo of secondaryAnimation.boneGroups ?? []) {\r\n const rootBones = (boneGroupInfo.bones ?? [])\r\n .map((index: number) => this._getNode(gltf, index))\r\n .filter((node: AssetHierarchyNode) => !!node);\r\n const joints: AssetSpringBoneJoint[] = rootBones.map((node: AssetHierarchyNode) => ({\r\n node,\r\n hitRadius: boneGroupInfo.hitRadius ?? 0,\r\n stiffness: boneGroupInfo.stiffiness ?? boneGroupInfo.stiffness ?? 0,\r\n gravityPower: boneGroupInfo.gravityPower ?? 0,\r\n gravityDir: this._arrayToVector3(boneGroupInfo.gravityDir, new Vector3(0, -1, 0)),\r\n dragForce: boneGroupInfo.dragForce ?? 0\r\n }));\r\n model.springBones.push({\r\n name: boneGroupInfo.comment,\r\n center: this._getNode(gltf, boneGroupInfo.center)!,\r\n joints,\r\n rootBones,\r\n colliderGroups: (boneGroupInfo.colliderGroups ?? [])\r\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\r\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\r\n return !!group;\r\n })\r\n });\r\n }\r\n }\r\n\r\n private _getNode(gltf: GLTFContent, index: unknown): Nullable<AssetHierarchyNode> {\r\n return typeof index === 'number' && index >= 0 ? gltf._nodes[index] : null;\r\n }\r\n\r\n private _arrayToVector3(value: unknown, fallback: Vector3): Vector3 {\r\n if (Array.isArray(value)) {\r\n return new Vector3(value[0] ?? fallback.x, value[1] ?? fallback.y, value[2] ?? fallback.z);\r\n }\r\n if (value && typeof value === 'object') {\r\n const obj = value as { x?: unknown; y?: unknown; z?: unknown };\r\n return new Vector3(\r\n typeof obj.x === 'number' ? obj.x : fallback.x,\r\n typeof obj.y === 'number' ? obj.y : fallback.y,\r\n typeof obj.z === 'number' ? obj.z : fallback.z\r\n );\r\n }\r\n return fallback.clone();\r\n }\r\n\r\n private _getIndex(value: unknown, keys: string[] = ['index']): number {\r\n if (typeof value === 'number' && value >= 0 && Number.isInteger(value)) {\r\n return value;\r\n }\r\n if (value && typeof value === 'object') {\r\n const obj = value as Record<string, unknown>;\r\n for (const key of keys) {\r\n const index = obj[key];\r\n if (typeof index === 'number' && index >= 0 && Number.isInteger(index)) {\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private _getSpringBoneJointInfo(\r\n ext: { joints?: SpringBoneJointInfo[] },\r\n jointRef: unknown\r\n ): Nullable<SpringBoneJointInfo> {\r\n const directIndex = this._getIndex(jointRef);\r\n if (directIndex >= 0) {\r\n return ext.joints?.[directIndex] ?? null;\r\n }\r\n if (jointRef && typeof jointRef === 'object') {\r\n const obj = jointRef as SpringBoneJointInfo;\r\n if (typeof obj.node === 'number') {\r\n return obj;\r\n }\r\n const jointIndex = this._getIndex(jointRef, ['joint', 'index']);\r\n if (jointIndex >= 0) {\r\n return ext.joints?.[jointIndex] ?? null;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _buildJointDynamicsSpringBones(model: SharedModel) {\r\n const colliderMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsCollider>();\r\n const flatPlaneMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsFlatPlane>();\r\n const nodeKeys = new Map<AssetHierarchyNode, number>();\r\n model.nodes.forEach((node, index) => nodeKeys.set(node, index));\r\n for (const collider of model.springBoneColliders) {\r\n const converted = this._toJointDynamicsCollider(collider);\r\n if (converted) {\r\n colliderMap.set(collider, converted);\r\n model.jointDynamicsColliders.push(converted);\r\n continue;\r\n }\r\n const flatPlane = this._toJointDynamicsFlatPlane(collider);\r\n if (flatPlane) {\r\n flatPlaneMap.set(collider, flatPlane);\r\n }\r\n }\r\n\r\n for (const spring of model.springBones) {\r\n const chains = spring.rootBones\r\n ? this._collectJointDynamicsChainsFromRoots(spring.rootBones)\r\n : this._collectJointDynamicsChains(spring.joints);\r\n if (chains.length === 0 || spring.joints.length === 0) {\r\n continue;\r\n }\r\n const colliders: AssetJointDynamicsCollider[] = [];\r\n const flatPlanes: AssetJointDynamicsFlatPlane[] = [];\r\n const colliderKeys = new Set<string>();\r\n const flatPlaneKeys = new Set<string>();\r\n for (const group of spring.colliderGroups) {\r\n for (const collider of group.colliders) {\r\n const converted = colliderMap.get(collider);\r\n const colliderKey = converted ? this._getJointDynamicsColliderKey(converted, nodeKeys) : '';\r\n if (converted && !colliderKeys.has(colliderKey)) {\r\n colliderKeys.add(colliderKey);\r\n colliders.push(converted);\r\n }\r\n const flatPlane = flatPlaneMap.get(collider);\r\n const flatPlaneKey = flatPlane ? this._getJointDynamicsFlatPlaneKey(flatPlane, nodeKeys) : '';\r\n if (flatPlane && !flatPlaneKeys.has(flatPlaneKey)) {\r\n flatPlaneKeys.add(flatPlaneKey);\r\n flatPlanes.push(flatPlane);\r\n }\r\n }\r\n }\r\n model.jointDynamicsSpringBones.push({\r\n name: spring.name,\r\n center: spring.center,\r\n chains,\r\n colliders,\r\n flatPlanes,\r\n controllerConfig: this._mapSpringJointsToControllerConfig(spring.joints, chains.length > 1)\r\n });\r\n }\r\n }\r\n\r\n private _collectJointDynamicsChains(joints: AssetSpringBoneJoint[]) {\r\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\r\n if (joints.length === 0) {\r\n return chains;\r\n }\r\n let chainStart = joints[0].node;\r\n let chainEnd = joints[0].node;\r\n for (let i = 1; i < joints.length; i++) {\r\n const node = joints[i].node;\r\n if (chainEnd.isParentOf(node)) {\r\n chainEnd = node;\r\n continue;\r\n }\r\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\r\n chainStart = node;\r\n chainEnd = node;\r\n }\r\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\r\n return chains;\r\n }\r\n\r\n private _collectJointDynamicsChainsFromRoots(rootBones: AssetHierarchyNode[]) {\r\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\r\n for (const start of rootBones) {\r\n const end = this._findSingleChildChainEnd(start);\r\n if (end && end !== start) {\r\n chains.push({ start, end });\r\n }\r\n }\r\n return chains;\r\n }\r\n\r\n private _pushJointDynamicsChain(\r\n chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[],\r\n start: AssetHierarchyNode,\r\n end: AssetHierarchyNode\r\n ) {\r\n if (start !== end) {\r\n chains.push({ start, end });\r\n return;\r\n }\r\n const inferredEnd = this._findSingleChildChainEnd(start);\r\n if (inferredEnd && inferredEnd !== start) {\r\n chains.push({ start, end: inferredEnd });\r\n }\r\n }\r\n\r\n private _findSingleChildChainEnd(start: AssetHierarchyNode): Nullable<AssetHierarchyNode> {\r\n let current = start;\r\n while (current.children.length > 0) {\r\n if (current.children.length !== 1) {\r\n return null;\r\n }\r\n current = current.children[0];\r\n }\r\n return current;\r\n }\r\n\r\n private _mapSpringJointsToControllerConfig(\r\n joints: AssetSpringBoneJoint[],\r\n loop: boolean\r\n ): DeepPartial<ControllerConfig> {\r\n let stiffness = 0;\r\n let dragForce = 0;\r\n let hitRadius = 0;\r\n const gravity = new Vector3(0, -VRM_BASE_GRAVITY_ACCELERATION, 0);\r\n const gravityPower = Vector3.zero();\r\n for (const joint of joints) {\r\n stiffness += joint.stiffness;\r\n dragForce += joint.dragForce;\r\n hitRadius = Math.max(hitRadius, joint.hitRadius);\r\n const gravityDir =\r\n joint.gravityDir.magnitudeSq > 0 ? Vector3.normalize(joint.gravityDir) : new Vector3(0, -1, 0);\r\n Vector3.add(\r\n gravityPower,\r\n Vector3.scale(gravityDir, Math.max(0, joint.gravityPower) * VRM_GRAVITY_POWER_TO_ACCELERATION),\r\n gravityPower\r\n );\r\n }\r\n const invCount = joints.length > 0 ? 1 / joints.length : 1;\r\n stiffness *= invCount;\r\n dragForce *= invCount;\r\n Vector3.scale(gravityPower, invCount, gravityPower);\r\n Vector3.add(gravity, gravityPower, gravity);\r\n const frameHardness = Math.max(0, Math.min(1, stiffness * VRM_STIFFNESS_TO_FRAME_HARDNESS));\r\n const frameResistance = Math.max(0, Math.min(1, 1 - dragForce * VRM_DRAGFORCE_SCALE));\r\n return {\r\n enableBroadPhase: false,\r\n enableSurfaceCollision: false,\r\n subSteps: VRM_SPRING_BONE_SUBSTEPS,\r\n gravity,\r\n curves: {\r\n hardness: InterpolatorScalar.constant(\r\n this._frameRatioToSubstepRatio(frameHardness, VRM_SPRING_BONE_SUBSTEPS)\r\n ),\r\n resistance: InterpolatorScalar.constant(\r\n this._frameRateToSubstepRate(frameResistance, VRM_SPRING_BONE_SUBSTEPS)\r\n ),\r\n pointRadius: InterpolatorScalar.constant(Math.max(0, hitRadius)),\r\n // ── KEY: stiff structural = inextensible fabric ──\r\n structuralShrinkVertical: InterpolatorScalar.constant(0.95),\r\n structuralStretchVertical: InterpolatorScalar.constant(0.95),\r\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.7),\r\n structuralStretchHorizontal: InterpolatorScalar.constant(0.7),\r\n // Moderate shear keeps the grid from collapsing diagonally\r\n shearShrink: InterpolatorScalar.constant(0.025),\r\n shearStretch: InterpolatorScalar.constant(0.025),\r\n // ── KEY: very soft bending = cloth folds/drapes freely ──\r\n bendingShrinkVertical: InterpolatorScalar.constant(0),\r\n bendingStretchVertical: InterpolatorScalar.constant(0),\r\n bendingShrinkHorizontal: InterpolatorScalar.constant(0),\r\n bendingStretchHorizontal: InterpolatorScalar.constant(0)\r\n },\r\n constraintOptions: {\r\n structuralVertical: true,\r\n structuralHorizontal: true,\r\n shear: false,\r\n bendingVertical: true,\r\n collideStructuralVertical: true,\r\n collideStructuralHorizontal: true,\r\n collideShear: true,\r\n isLoop: loop\r\n }\r\n };\r\n }\r\n\r\n private _frameRatioToSubstepRatio(frameRatio: number, subSteps: number): number {\r\n const ratio = Math.max(0, Math.min(1, frameRatio));\r\n return 1 - Math.pow(1 - ratio, 1 / Math.max(1, subSteps));\r\n }\r\n\r\n private _frameRateToSubstepRate(frameRate: number, subSteps: number): number {\r\n const rate = Math.max(0, Math.min(1, frameRate));\r\n return Math.pow(rate, 1 / Math.max(1, subSteps));\r\n }\r\n\r\n private _getJointDynamicsColliderKey(\r\n collider: AssetJointDynamicsCollider,\r\n nodeKeys: Map<AssetHierarchyNode, number>\r\n ): string {\r\n const r = collider.collider;\r\n return [\r\n this._getAssetNodeKey(collider.node, nodeKeys),\r\n this._vector3Key(collider.localPosition),\r\n this._quaternionKey(collider.localRotation),\r\n this._numberKey(r.radius),\r\n this._numberKey(r.radiusTailScale),\r\n this._numberKey(r.height),\r\n this._numberKey(r.friction),\r\n r.isInverseCollider ? 1 : 0,\r\n r.forceType\r\n ].join('|');\r\n }\r\n\r\n private _getJointDynamicsFlatPlaneKey(\r\n flatPlane: AssetJointDynamicsFlatPlane,\r\n nodeKeys: Map<AssetHierarchyNode, number>\r\n ): string {\r\n return [\r\n this._getAssetNodeKey(flatPlane.node, nodeKeys),\r\n this._vector3Key(flatPlane.position),\r\n this._vector3Key(flatPlane.up)\r\n ].join('|');\r\n }\r\n\r\n private _getAssetNodeKey(node: AssetHierarchyNode, nodeKeys: Map<AssetHierarchyNode, number>): number {\r\n let key = nodeKeys.get(node);\r\n if (key === undefined) {\r\n key = nodeKeys.size;\r\n nodeKeys.set(node, key);\r\n }\r\n return key;\r\n }\r\n\r\n private _vector3Key(value: Vector3): string {\r\n return [value.x, value.y, value.z].map((component) => this._numberKey(component)).join(',');\r\n }\r\n\r\n private _quaternionKey(value: Quaternion): string {\r\n return [value.x, value.y, value.z, value.w].map((component) => this._numberKey(component)).join(',');\r\n }\r\n\r\n private _numberKey(value: number): string {\r\n return `${Object.is(value, -0) ? 0 : value}`;\r\n }\r\n\r\n private _toJointDynamicsCollider(collider: AssetSpringBoneCollider): Nullable<AssetJointDynamicsCollider> {\r\n const shape = collider.shape;\r\n if (shape.type === 'plane') {\r\n return null;\r\n }\r\n if (shape.type === 'sphere') {\r\n return {\r\n name: collider.name,\r\n node: collider.node,\r\n localPosition: shape.offset.clone(),\r\n localRotation: Quaternion.identity(),\r\n collider: {\r\n radius: shape.radius,\r\n radiusTailScale: 1,\r\n height: 0,\r\n friction: 0,\r\n isInverseCollider: shape.inside ?? false,\r\n forceType: ColliderForce.Off\r\n }\r\n };\r\n }\r\n const localDirection = Vector3.sub(shape.tail, shape.offset);\r\n const height = localDirection.magnitude;\r\n const localRotation =\r\n height > 0\r\n ? Quaternion.unitVectorToUnitVector(Vector3.axisPY(), localDirection)\r\n : Quaternion.identity();\r\n const localPosition = Vector3.scale(Vector3.add(shape.offset, shape.tail), 0.5);\r\n return {\r\n name: collider.name,\r\n node: collider.node,\r\n localPosition,\r\n localRotation,\r\n collider: {\r\n radius: shape.radius,\r\n radiusTailScale: 1,\r\n height,\r\n friction: 0,\r\n isInverseCollider: shape.inside ?? false,\r\n forceType: ColliderForce.Off\r\n }\r\n };\r\n }\r\n\r\n private _toJointDynamicsFlatPlane(\r\n collider: AssetSpringBoneCollider\r\n ): Nullable<AssetJointDynamicsFlatPlane> {\r\n const shape = collider.shape;\r\n if (shape.type !== 'plane') {\r\n return null;\r\n }\r\n return {\r\n node: collider.node,\r\n position: shape.offset.clone(),\r\n up: shape.normal.magnitudeSq > 0 ? Vector3.normalize(shape.normal) : Vector3.axisPY()\r\n };\r\n }\r\n\r\n /** @internal */\r\n private _loadNodes(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.nodes) {\r\n for (let i = 0; i < gltf.nodes.length; i++) {\r\n this._loadNode(gltf, i, null, model);\r\n }\r\n for (const node of gltf._nodes) {\r\n if (!node.parent) {\r\n node.computeTransforms(null);\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private _loadSkins(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.skins) {\r\n for (let i = 0; i < gltf.skins.length; i++) {\r\n const skinInfo = gltf.skins[i];\r\n const skeleton = new AssetSkeleton(skinInfo.name);\r\n if (typeof skinInfo.skeleton === 'number') {\r\n skeleton.pivot = gltf._nodes[skinInfo.skeleton];\r\n }\r\n const accessor = gltf._accessors[skinInfo.inverseBindMatrices!];\r\n if (!accessor || accessor.type !== 'MAT4' || accessor.componentType !== ComponentType.FLOAT) {\r\n throw new Error('Invalid GLTF inverse bind matricies accessor');\r\n }\r\n const matrices =\r\n typeof skinInfo.inverseBindMatrices === 'number'\r\n ? (accessor.getDeinterlacedView(gltf) as Float32Array)\r\n : null;\r\n skinInfo.joints.forEach((joint, index) => {\r\n const m = index * 16;\r\n skeleton.addJoint(\r\n gltf._nodes[joint],\r\n matrices ? new Matrix4x4(matrices.subarray(m, m + 16)) : Matrix4x4.identity()\r\n );\r\n });\r\n model.addSkeleton(skeleton);\r\n }\r\n }\r\n this._loadVRMAHumanoidSkeleton(gltf, model);\r\n }\r\n /** @internal */\r\n private _loadVRMAHumanoidSkeleton(gltf: GLTFContent, model: SharedModel) {\r\n const ext = gltf.extensions?.VRMC_vrm_animation as VRMCVRMAnimationInfo | undefined;\r\n const humanBones = ext?.humanoid?.humanBones;\r\n if (!humanBones || typeof humanBones !== 'object') {\r\n return;\r\n }\r\n const mapping = this._getVRMAHumanoidMapping(gltf, humanBones);\r\n const hips = mapping?.body[HumanoidBodyRig.Hips];\r\n if (!mapping || !hips) {\r\n return;\r\n }\r\n const humanBoneNodes = this._getVRMAHumanoidNodes(mapping);\r\n if (humanBoneNodes.length === 0) {\r\n return;\r\n }\r\n const existingSkeleton = model.skeletons.find((skeleton) =>\r\n humanBoneNodes.every((node) => skeleton.joints.indexOf(node) >= 0)\r\n );\r\n if (existingSkeleton) {\r\n this._setAssetSkeletonHumanoidMapping(existingSkeleton, mapping);\r\n return;\r\n }\r\n const root = this._findCommonRoot(humanBoneNodes) ?? hips;\r\n const jointSet = new Set<AssetHierarchyNode>();\r\n for (const node of humanBoneNodes) {\r\n let current: Nullable<AssetHierarchyNode> = node;\r\n while (current) {\r\n jointSet.add(current);\r\n if (current === root) {\r\n break;\r\n }\r\n current = current.parent;\r\n }\r\n }\r\n const skeleton = new AssetSkeleton('VRMC_vrm_animation_humanoid');\r\n skeleton.pivot = root;\r\n this._setAssetSkeletonHumanoidMapping(skeleton, mapping);\r\n for (const joint of this._sortSkeletonJoints(root, jointSet)) {\r\n skeleton.addJoint(joint, Matrix4x4.identity());\r\n }\r\n if (skeleton.joints.length > 0) {\r\n model.addSkeleton(skeleton);\r\n }\r\n }\r\n\r\n private _setAssetSkeletonHumanoidMapping(\r\n skeleton: AssetSkeleton,\r\n mapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>\r\n ) {\r\n (\r\n skeleton as AssetSkeleton & {\r\n humanoidJointMapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>;\r\n }\r\n ).humanoidJointMapping = mapping;\r\n }\r\n\r\n private _getVRMAHumanoidMapping(\r\n gltf: GLTFContent,\r\n humanBones: Record<string, VRMAHumanoidBoneInfo>\r\n ): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\r\n const body = {} as Partial<Record<HumanoidBodyRig, AssetHierarchyNode>>;\r\n const leftHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\r\n const rightHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\r\n const setBody = (vrmaName: string, rig: HumanoidBodyRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\r\n if (node) {\r\n body[rig] = node;\r\n }\r\n };\r\n const setHand = (side: 'left' | 'right', vrmaName: string, rig: HumanoidHandRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\r\n if (node) {\r\n (side === 'left' ? leftHand : rightHand)[rig] = node;\r\n }\r\n };\r\n setBody('hips', HumanoidBodyRig.Hips);\r\n setBody('spine', HumanoidBodyRig.Spine);\r\n setBody('chest', HumanoidBodyRig.Chest);\r\n setBody('upperChest', HumanoidBodyRig.UpperChest);\r\n setBody('neck', HumanoidBodyRig.Neck);\r\n setBody('head', HumanoidBodyRig.Head);\r\n setBody('leftShoulder', HumanoidBodyRig.LeftShoulder);\r\n setBody('leftUpperArm', HumanoidBodyRig.LeftUpperArm);\r\n setBody('leftLowerArm', HumanoidBodyRig.LeftLowerArm);\r\n setBody('leftHand', HumanoidBodyRig.LeftHand);\r\n setBody('rightShoulder', HumanoidBodyRig.RightShoulder);\r\n setBody('rightUpperArm', HumanoidBodyRig.RightUpperArm);\r\n setBody('rightLowerArm', HumanoidBodyRig.RightLowerArm);\r\n setBody('rightHand', HumanoidBodyRig.RightHand);\r\n setBody('leftUpperLeg', HumanoidBodyRig.LeftUpperLeg);\r\n setBody('leftLowerLeg', HumanoidBodyRig.LeftLowerLeg);\r\n setBody('leftFoot', HumanoidBodyRig.LeftFoot);\r\n setBody('leftToes', HumanoidBodyRig.LeftToes);\r\n setBody('rightUpperLeg', HumanoidBodyRig.RightUpperLeg);\r\n setBody('rightLowerLeg', HumanoidBodyRig.RightLowerLeg);\r\n setBody('rightFoot', HumanoidBodyRig.RightFoot);\r\n setBody('rightToes', HumanoidBodyRig.RightToes);\r\n setHand('left', 'leftThumbMetacarpal', HumanoidHandRig.ThumbProximal);\r\n setHand('left', 'leftThumbProximal', HumanoidHandRig.ThumbIntermediate);\r\n setHand('left', 'leftThumbDistal', HumanoidHandRig.ThumbDistal);\r\n setHand('left', 'leftIndexProximal', HumanoidHandRig.IndexProximal);\r\n setHand('left', 'leftIndexIntermediate', HumanoidHandRig.IndexIntermediate);\r\n setHand('left', 'leftIndexDistal', HumanoidHandRig.IndexDistal);\r\n setHand('left', 'leftMiddleProximal', HumanoidHandRig.MiddleProximal);\r\n setHand('left', 'leftMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\r\n setHand('left', 'leftMiddleDistal', HumanoidHandRig.MiddleDistal);\r\n setHand('left', 'leftRingProximal', HumanoidHandRig.RingProximal);\r\n setHand('left', 'leftRingIntermediate', HumanoidHandRig.RingIntermediate);\r\n setHand('left', 'leftRingDistal', HumanoidHandRig.RingDistal);\r\n setHand('left', 'leftLittleProximal', HumanoidHandRig.PinkyProximal);\r\n setHand('left', 'leftLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\r\n setHand('left', 'leftLittleDistal', HumanoidHandRig.PinkyDistal);\r\n setHand('right', 'rightThumbMetacarpal', HumanoidHandRig.ThumbProximal);\r\n setHand('right', 'rightThumbProximal', HumanoidHandRig.ThumbIntermediate);\r\n setHand('right', 'rightThumbDistal', HumanoidHandRig.ThumbDistal);\r\n setHand('right', 'rightIndexProximal', HumanoidHandRig.IndexProximal);\r\n setHand('right', 'rightIndexIntermediate', HumanoidHandRig.IndexIntermediate);\r\n setHand('right', 'rightIndexDistal', HumanoidHandRig.IndexDistal);\r\n setHand('right', 'rightMiddleProximal', HumanoidHandRig.MiddleProximal);\r\n setHand('right', 'rightMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\r\n setHand('right', 'rightMiddleDistal', HumanoidHandRig.MiddleDistal);\r\n setHand('right', 'rightRingProximal', HumanoidHandRig.RingProximal);\r\n setHand('right', 'rightRingIntermediate', HumanoidHandRig.RingIntermediate);\r\n setHand('right', 'rightRingDistal', HumanoidHandRig.RingDistal);\r\n setHand('right', 'rightLittleProximal', HumanoidHandRig.PinkyProximal);\r\n setHand('right', 'rightLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\r\n setHand('right', 'rightLittleDistal', HumanoidHandRig.PinkyDistal);\r\n if (!body[HumanoidBodyRig.Hips]) {\r\n return null;\r\n }\r\n const result: HumanoidJointMapping<AssetHierarchyNode> = {\r\n body: body as Record<HumanoidBodyRig, AssetHierarchyNode>\r\n };\r\n if (Object.keys(leftHand).length > 0) {\r\n result.leftHand = leftHand as Record<HumanoidHandRig, AssetHierarchyNode>;\r\n }\r\n if (Object.keys(rightHand).length > 0) {\r\n result.rightHand = rightHand as Record<HumanoidHandRig, AssetHierarchyNode>;\r\n }\r\n return result;\r\n }\r\n\r\n private _getVRMAHumanBoneNode(\r\n gltf: GLTFContent,\r\n humanBones: Record<string, VRMAHumanoidBoneInfo>,\r\n boneName: string\r\n ): Nullable<AssetHierarchyNode> {\r\n const nodeIndex = humanBones[boneName]?.node;\r\n return this._getNode(gltf, nodeIndex);\r\n }\r\n\r\n private _getVRMAHumanoidNodes(mapping: HumanoidJointMapping<AssetHierarchyNode>): AssetHierarchyNode[] {\r\n const nodes: AssetHierarchyNode[] = [];\r\n const addMappedNodes = <T extends string>(mapped: Record<T, AssetHierarchyNode> | undefined) => {\r\n if (!mapped) {\r\n return;\r\n }\r\n for (const node of Object.values(mapped) as AssetHierarchyNode[]) {\r\n if (node && nodes.indexOf(node) < 0) {\r\n nodes.push(node);\r\n }\r\n }\r\n };\r\n addMappedNodes(mapping.body);\r\n addMappedNodes(mapping.leftHand);\r\n addMappedNodes(mapping.rightHand);\r\n return nodes;\r\n }\r\n\r\n private _findCommonRoot(nodes: AssetHierarchyNode[]): Nullable<AssetHierarchyNode> {\r\n let root: Nullable<AssetHierarchyNode> = nodes[0] ?? null;\r\n for (let i = 1; root && i < nodes.length; i++) {\r\n while (root && !root.isParentOf(nodes[i])) {\r\n root = root.parent;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private _sortSkeletonJoints(root: AssetHierarchyNode, joints: Set<AssetHierarchyNode>) {\r\n const sorted: AssetHierarchyNode[] = [];\r\n const visit = (node: AssetHierarchyNode) => {\r\n if (joints.has(node)) {\r\n sorted.push(node);\r\n }\r\n for (const child of node.children) {\r\n visit(child);\r\n }\r\n };\r\n visit(root);\r\n for (const joint of joints) {\r\n if (sorted.indexOf(joint) < 0) {\r\n sorted.push(joint);\r\n }\r\n }\r\n return sorted;\r\n }\r\n /** @internal */\r\n private _loadAnimations(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.animations) {\r\n for (let i = 0; i < gltf.animations.length; i++) {\r\n const animation = this._loadAnimation(gltf, i);\r\n model.addAnimation(animation);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private collectNodes(gltf: GLTFContent) {\r\n const collect: Map<\r\n AssetHierarchyNode,\r\n {\r\n translate: Vector3;\r\n scale: Vector3;\r\n rotation: Quaternion;\r\n worldTransform: Nullable<Matrix4x4>;\r\n }\r\n > = new Map();\r\n for (const node of gltf._nodes) {\r\n collect.set(node, {\r\n translate: node.position || Vector3.zero(),\r\n rotation: node.rotation || Quaternion.identity(),\r\n scale: node.scaling || Vector3.one(),\r\n worldTransform: null\r\n });\r\n }\r\n return collect;\r\n }\r\n /** @internal */\r\n private getAnimationInfo(\r\n gltf: GLTFContent,\r\n index: number\r\n ): {\r\n name: string;\r\n channels: AnimationChannel[];\r\n samplers: AnimationSampler[];\r\n interpolatorTypes: Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\r\n interpolators: Nullable<Interpolator>[];\r\n maxTime: number;\r\n nodes: Map<\r\n AssetHierarchyNode,\r\n {\r\n translate: Vector3;\r\n scale: Vector3;\r\n rotation: Quaternion;\r\n worldTransform: Nullable<Matrix4x4>;\r\n }\r\n >;\r\n } {\r\n const animationInfo = gltf.animations![index];\r\n const name = animationInfo.name || null;\r\n const channels = animationInfo.channels;\r\n const samplers = animationInfo.samplers;\r\n const interpolators = [] as Nullable<Interpolator>[];\r\n const interpolatorTypes = [] as Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\r\n const nodes = this.collectNodes(gltf);\r\n let maxTime = 0;\r\n for (let i = 0; i < channels.length; i++) {\r\n const channel = channels[i];\r\n const sampler = samplers[channel.sampler];\r\n if (!sampler) {\r\n interpolators.push(null);\r\n interpolatorTypes.push(null);\r\n continue;\r\n }\r\n const input = gltf._accessors[sampler.input].getNormalizedDeinterlacedView(gltf);\r\n const output = gltf._accessors[sampler.output].getNormalizedDeinterlacedView(gltf);\r\n if (!(input instanceof Float32Array) || !(output instanceof Float32Array)) {\r\n console.error('Input/output channel of animation must be Float32Array');\r\n interpolators.push(null);\r\n interpolatorTypes.push(null);\r\n continue;\r\n }\r\n const mode: InterpolationMode =\r\n sampler.interpolation === 'STEP'\r\n ? 'step'\r\n : sampler.interpolation === 'CUBICSPLINE'\r\n ? 'cubicspline'\r\n : 'linear';\r\n let interpolator: Nullable<Interpolator> = null;\r\n let interpolatorType: Nullable<'translation' | 'scale' | 'rotation' | 'weights'> = null;\r\n if (channel.target.path === 'rotation') {\r\n interpolator = new Interpolator(mode, 'quat', input, output);\r\n interpolatorType = 'rotation';\r\n } else if (channel.target.path === 'translation') {\r\n interpolator = new Interpolator(mode, 'vec3', input, output);\r\n interpolatorType = 'translation';\r\n } else if (channel.target.path === 'scale') {\r\n interpolator = new Interpolator(mode, 'vec3', input, output);\r\n interpolatorType = 'scale';\r\n } else if (channel.target.path === 'weights') {\r\n interpolator = new Interpolator(mode, null, input, output);\r\n interpolatorType = 'weights';\r\n }\r\n interpolators.push(interpolator);\r\n interpolatorTypes.push(interpolatorType);\r\n if (interpolator) {\r\n const max = input[input.length - 1];\r\n if (max > maxTime) {\r\n maxTime = max;\r\n }\r\n }\r\n }\r\n return { name, channels, samplers, interpolators, interpolatorTypes, maxTime, nodes };\r\n }\r\n /** @internal */\r\n private _loadAnimation(gltf: GLTFContent, index: number): AssetAnimationData {\r\n const animationInfo = this.getAnimationInfo(gltf, index);\r\n const animationData: AssetAnimationData = {\r\n name: animationInfo.name,\r\n tracks: [],\r\n skeletons: [],\r\n nodes: []\r\n };\r\n for (let i = 0; i < animationInfo.channels.length; i++) {\r\n const interpolator = animationInfo.interpolators[i];\r\n const interpolatorType = animationInfo.interpolatorTypes[i];\r\n const targetNodeIndex = animationInfo.channels[i].target.node;\r\n if (!interpolator || !interpolatorType || typeof targetNodeIndex !== 'number') {\r\n continue;\r\n }\r\n const targetNode = gltf._nodes[targetNodeIndex];\r\n if (!targetNode) {\r\n continue;\r\n }\r\n const track: AssetAnimationTrack = {\r\n node: targetNode,\r\n type: interpolatorType,\r\n interpolator\r\n };\r\n if (track.type === 'weights') {\r\n track.defaultMorphWeights = targetNode.weights!;\r\n }\r\n animationData.tracks.push(track);\r\n if (animationData.nodes.indexOf(targetNode) < 0) {\r\n animationData.nodes.push(targetNode);\r\n }\r\n if (targetNode.skeletonAttached) {\r\n for (const skeleton of targetNode.skeletonAttached) {\r\n if (animationData.skeletons.indexOf(skeleton) < 0) {\r\n animationData.skeletons.push(skeleton);\r\n }\r\n }\r\n }\r\n }\r\n return animationData;\r\n }\r\n /** @internal */\r\n private _loadNode(\r\n gltf: GLTFContent,\r\n nodeIndex: number,\r\n parent: Nullable<AssetHierarchyNode>,\r\n model: SharedModel\r\n ): AssetHierarchyNode {\r\n let node: AssetHierarchyNode = gltf._nodes[nodeIndex];\r\n if (node) {\r\n if (parent) {\r\n if (node.parent) {\r\n throw new Error('invalid node hierarchy');\r\n }\r\n parent.addChild(node);\r\n }\r\n return node;\r\n }\r\n const nodeInfo = gltf.nodes?.[nodeIndex];\r\n if (nodeInfo) {\r\n node = new AssetHierarchyNode(nodeInfo.name, model, parent!); //model.addNode(parent, nodeInfo.name);\r\n node.weights = nodeInfo.weights ?? null;\r\n if (typeof nodeInfo.mesh === 'number') {\r\n node.mesh = gltf._meshes[nodeInfo.mesh];\r\n if (node.mesh && nodeInfo.name) {\r\n const subMeshCount = node.mesh.subMeshes.length;\r\n for (let i = 0; i < subMeshCount; i++) {\r\n const primitive = node.mesh.subMeshes[i]?.primitive;\r\n if (primitive) {\r\n primitive.name = subMeshCount > 1 ? `${nodeInfo.name}_${i}` : nodeInfo.name;\r\n }\r\n }\r\n }\r\n if (!node.mesh.morphNames && nodeInfo.extras?.targetNames) {\r\n node.mesh.morphNames = nodeInfo.extras.targetNames;\r\n }\r\n const instancing = nodeInfo.extensions?.['EXT_mesh_gpu_instancing'];\r\n if (instancing) {\r\n const attributes = instancing.attributes;\r\n if (attributes) {\r\n const accessorTranslation =\r\n typeof attributes.TRANSLATION === 'number' ? gltf._accessors[attributes.TRANSLATION] : null;\r\n const accessorScale =\r\n typeof attributes.SCALE === 'number' ? gltf._accessors[attributes.SCALE] : null;\r\n const accessorRotation =\r\n typeof attributes.ROTATION === 'number' ? gltf._accessors[attributes.ROTATION] : null;\r\n const count = accessorTranslation?.count ?? accessorScale?.count ?? accessorRotation?.count ?? 0;\r\n const translationValues = accessorTranslation?.getNormalizedDeinterlacedView(\r\n gltf\r\n ) as Float32Array;\r\n const scaleValues = accessorScale?.getNormalizedDeinterlacedView(gltf) as Float32Array;\r\n const rotationValues = accessorRotation?.getNormalizedDeinterlacedView(gltf) as Float32Array;\r\n for (let i = 0; i < count; i++) {\r\n const t = translationValues\r\n ? new Vector3(\r\n translationValues[i * 3],\r\n translationValues[i * 3 + 1],\r\n translationValues[i * 3 + 2]\r\n )\r\n : Vector3.zero();\r\n const s = scaleValues\r\n ? new Vector3(scaleValues[i * 3], scaleValues[i * 3 + 1], scaleValues[i * 3 + 2])\r\n : Vector3.one();\r\n const r = rotationValues\r\n ? new Quaternion(\r\n rotationValues[i * 4],\r\n rotationValues[i * 4 + 1],\r\n rotationValues[i * 4 + 2],\r\n rotationValues[i * 4 + 3]\r\n )\r\n : Quaternion.identity();\r\n node.instances.push({ t, s, r });\r\n }\r\n }\r\n } else {\r\n node.instances.push({ t: Vector3.zero(), s: Vector3.one(), r: Quaternion.identity() });\r\n }\r\n }\r\n if (!(typeof nodeInfo.skin === 'number') || nodeInfo.skin < 0) {\r\n // GLTF spec: Only the joint transforms are applied to the skinned mesh; the transform of the skinned mesh node MUST be ignored.\r\n if (nodeInfo.matrix) {\r\n const matrix = new Matrix4x4(nodeInfo.matrix);\r\n matrix.decompose(node.scaling, node.rotation, node.position);\r\n } else {\r\n if (nodeInfo.rotation) {\r\n node.rotation.set(nodeInfo.rotation);\r\n }\r\n if (nodeInfo.scale) {\r\n node.scaling.set(nodeInfo.scale);\r\n }\r\n if (nodeInfo.translation) {\r\n node.position.set(nodeInfo.translation);\r\n }\r\n }\r\n }\r\n gltf._nodes[nodeIndex] = node;\r\n if (nodeInfo.children) {\r\n for (const childIndex of nodeInfo.children) {\r\n this._loadNode(gltf, childIndex, node, model);\r\n }\r\n }\r\n } else {\r\n throw new Error(`invalid GLTF node: ${nodeIndex}`);\r\n }\r\n return node;\r\n }\r\n /** @internal */\r\n private async _loadMeshes(model: SharedModel, gltf: GLTFContent, vfs: VFS) {\r\n if (gltf.meshes) {\r\n for (let i = 0; i < gltf.meshes.length; i++) {\r\n gltf._meshes[i] = (await this._loadMesh(model, gltf, i, vfs))!;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private async _loadMesh(model: SharedModel, gltf: GLTFContent, meshIndex: number, vfs: VFS) {\r\n const meshInfo = gltf.meshes && gltf.meshes[meshIndex];\r\n let mesh: Nullable<AssetMeshData> = null;\r\n if (meshInfo) {\r\n mesh = {\r\n morphWeights: meshInfo.weights ?? undefined,\r\n morphNames: meshInfo['extras']?.targetNames ?? null,\r\n subMeshes: []\r\n };\r\n const primitives = meshInfo.primitives;\r\n const meshName = meshInfo.name || null;\r\n if (primitives) {\r\n const loadedPrimitives: GLTFLoadedMeshPrimitive[] = [];\r\n for (let i = 0; i < primitives.length; i++) {\r\n const p = primitives[i];\r\n const subMeshName = meshName\r\n ? primitives.length > 1\r\n ? `${meshName}_${i}`\r\n : meshName\r\n : `mesh_${meshIndex}_${i}`;\r\n const subMeshData: AssetSubMeshData = {\r\n name: subMeshName,\r\n primitive: null,\r\n material: null,\r\n rawPositions: null,\r\n rawBlendIndices: null,\r\n rawJointWeights: null,\r\n numTargets: 0\r\n };\r\n const primitive: AssetPrimitiveInfo = {\r\n name: subMeshName,\r\n vertices: {} as any,\r\n type: 'triangle-list',\r\n indexCount: 0,\r\n indices: null,\r\n boxMax: Vector3.zero(),\r\n boxMin: Vector3.zero()\r\n };\r\n const attributes = p.attributes;\r\n const dracoExtension = gltf._dracoModule ? p.extensions?.['KHR_draco_mesh_compression'] : null;\r\n let dracoMeshDecoder: Nullable<DracoMeshDecoder> = null;\r\n if (dracoExtension) {\r\n const bufferView = gltf.bufferViews && gltf.bufferViews[dracoExtension.bufferView];\r\n if (!bufferView) {\r\n throw new Error('Draco buffer view not set');\r\n }\r\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\r\n if (!arrayBuffer) {\r\n throw new Error('Draco buffer view does not point to a valid ArrayBuffer');\r\n }\r\n dracoMeshDecoder = new DracoMeshDecoder(\r\n new Int8Array(arrayBuffer, bufferView.byteOffset ?? 0, bufferView.byteLength),\r\n gltf._dracoModule!\r\n );\r\n }\r\n for (const attrib in attributes) {\r\n this._loadVertexBuffer(\r\n gltf,\r\n attrib,\r\n attributes[attrib],\r\n primitive,\r\n subMeshData,\r\n dracoExtension,\r\n dracoMeshDecoder!\r\n );\r\n }\r\n if (p.targets) {\r\n if (getDevice().type === 'webgl') {\r\n // Emulate vertexID for WebGL1 device\r\n if (attributes['TEXCOORD_7'] !== undefined) {\r\n console.error(`Could not load morph target animation`);\r\n p.targets = undefined;\r\n } else {\r\n const positionInfo = primitive.vertices['position'];\r\n const numVertices = positionInfo\r\n ? (positionInfo.data.length / getVertexFormatComponentCount(positionInfo.format)) >> 0\r\n : 0;\r\n const vertexIndices = new Float32Array(numVertices);\r\n for (let i = 0; i < vertexIndices.length; i++) {\r\n vertexIndices[i] = i;\r\n }\r\n primitive.vertices['texCoord7'] = { format: 'tex7_f32', data: vertexIndices };\r\n }\r\n }\r\n }\r\n if (p.targets) {\r\n const targets: AssetSubMeshData['targets'] = {};\r\n const targetBox: AssetSubMeshData['targetBox'] = [];\r\n const targetMap = {\r\n POSITION: MORPH_TARGET_POSITION,\r\n NORMAL: MORPH_TARGET_NORMAL,\r\n TANGENT: MORPH_TARGET_TANGENT,\r\n TEXCOORD_0: MORPH_TARGET_TEX0,\r\n TEXCOORD_1: MORPH_TARGET_TEX1,\r\n TEXCOORD_2: MORPH_TARGET_TEX2,\r\n TEXCOORD_3: MORPH_TARGET_TEX3,\r\n COLOR_0: MORPH_TARGET_COLOR\r\n };\r\n const morphAttribSet = new Set<number>();\r\n for (const target of p.targets) {\r\n for (const k in target) {\r\n const t = targetMap[k as keyof typeof targetMap];\r\n if (t !== undefined) {\r\n targets[t] = targets[t] ?? { numComponents: 0, data: [] };\r\n const accessorIndex = target[k] as number;\r\n const accessor = gltf._accessors[accessorIndex];\r\n targets[t].numComponents = accessor.getComponentCount(accessor.type);\r\n targets[t].data.push(accessor.getNormalizedDeinterlacedView(gltf) as Float32Array);\r\n if (k === 'POSITION') {\r\n const min = accessor.min\r\n ? new Vector3(accessor.min[0], accessor.min[1], accessor.min[2])\r\n : Vector3.zero();\r\n const max = accessor.max\r\n ? new Vector3(accessor.max[0], accessor.max[1], accessor.max[2])\r\n : Vector3.zero();\r\n targetBox.push(new BoundingBox(min, max));\r\n }\r\n morphAttribSet.add(t);\r\n }\r\n }\r\n }\r\n subMeshData.numTargets = p.targets.length;\r\n subMeshData.targets = targets;\r\n subMeshData.targetBox = targetBox;\r\n subMeshData.morphAttribCount = morphAttribSet.size;\r\n }\r\n const indices = p.indices;\r\n if (typeof indices === 'number') {\r\n this._loadIndexBuffer(gltf, indices, primitive, subMeshData, dracoExtension, dracoMeshDecoder!);\r\n }\r\n let primitiveType = p.mode;\r\n if (typeof primitiveType !== 'number') {\r\n primitiveType = 4;\r\n }\r\n primitive.type = this._primitiveType(primitiveType)!;\r\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\r\n const outlineUsesTangentNormals = this._shouldGenerateMToonOutlineNormals(\r\n materialInfo,\r\n p,\r\n primitive\r\n );\r\n loadedPrimitives.push({\r\n source: p,\r\n primitive,\r\n subMeshData,\r\n materialInfo,\r\n outlineUsesTangentNormals\r\n });\r\n }\r\n this._generateMToonOutlineNormals(loadedPrimitives);\r\n for (const loaded of loadedPrimitives) {\r\n const { source: p, primitive, subMeshData, materialInfo, outlineUsesTangentNormals } = loaded;\r\n const hasVertexNormal = !!primitive.vertices['normal'];\r\n const hasVertexColor = !!primitive.vertices['diffuse'];\r\n const hasVertexTangent = !!primitive.vertices['tangent'];\r\n const flagsHash = [\r\n hasVertexNormal ? 'N' : '',\r\n hasVertexColor ? 'C' : '',\r\n hasVertexTangent ? 'T' : '',\r\n outlineUsesTangentNormals ? 'OTN' : ''\r\n ]\r\n .filter((v) => !!v)\r\n .join('');\r\n const materialHash = [p.material ?? 'default', flagsHash].filter((v) => !!v).join('.');\r\n let material = model.getMaterial(materialHash);\r\n if (!material) {\r\n material = await this._loadMaterial(\r\n model,\r\n gltf,\r\n materialInfo!,\r\n hasVertexColor,\r\n hasVertexNormal,\r\n hasVertexTangent,\r\n outlineUsesTangentNormals,\r\n vfs\r\n );\r\n model.setMaterial(materialHash, material);\r\n } else if (outlineUsesTangentNormals && material.type === 'mtoon') {\r\n (material as GLTFMToonAssetMaterial).outlineUsesTangentNormals = true;\r\n }\r\n subMeshData.primitive = primitive;\r\n subMeshData.material = material;\r\n mesh.subMeshes.push(subMeshData);\r\n model.addPrimitive(primitive);\r\n }\r\n }\r\n }\r\n return mesh;\r\n }\r\n private _shouldGenerateMToonOutlineNormals(\r\n materialInfo: Nullable<Material>,\r\n primitiveInfo: MeshPrimitive,\r\n primitive: AssetPrimitiveInfo\r\n ) {\r\n if (!materialInfo?.extensions?.VRMC_materials_mtoon) {\r\n return false;\r\n }\r\n if (materialInfo.normalTexture) {\r\n return false;\r\n }\r\n if (primitiveInfo.targets?.some((target) => target.TANGENT !== undefined)) {\r\n return false;\r\n }\r\n return (\r\n primitive.type === 'triangle-list' && !!primitive.vertices['position'] && !!primitive.vertices['normal']\r\n );\r\n }\r\n private _generateMToonOutlineNormals(primitives: GLTFLoadedMeshPrimitive[]) {\r\n const targets = primitives.filter((p) => p.outlineUsesTangentNormals);\r\n if (targets.length === 0) {\r\n return;\r\n }\r\n const sums = new Map<string, [number, number, number]>();\r\n for (const { primitive } of targets) {\r\n const positionInfo = primitive.vertices['position'];\r\n if (!positionInfo) {\r\n continue;\r\n }\r\n const positions = positionInfo.data as Float32Array;\r\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\r\n const vertexCount = (positions.length / positionStride) >> 0;\r\n const indices = this._getTriangleIndices(primitive, vertexCount);\r\n if (!indices) {\r\n continue;\r\n }\r\n for (let i = 0; i + 2 < indices.length; i += 3) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n const p0 = i0 * positionStride;\r\n const p1 = i1 * positionStride;\r\n const p2 = i2 * positionStride;\r\n const ax = positions[p1] - positions[p0];\r\n const ay = positions[p1 + 1] - positions[p0 + 1];\r\n const az = positions[p1 + 2] - positions[p0 + 2];\r\n const bx = positions[p2] - positions[p0];\r\n const by = positions[p2 + 1] - positions[p0 + 1];\r\n const bz = positions[p2 + 2] - positions[p0 + 2];\r\n const nx = ay * bz - az * by;\r\n const ny = az * bx - ax * bz;\r\n const nz = ax * by - ay * bx;\r\n if (nx * nx + ny * ny + nz * nz <= 1e-20) {\r\n continue;\r\n }\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i0, nx, ny, nz);\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i1, nx, ny, nz);\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i2, nx, ny, nz);\r\n }\r\n }\r\n for (const { primitive } of targets) {\r\n const positionInfo = primitive.vertices['position'];\r\n const normalInfo = primitive.vertices['normal'];\r\n if (!positionInfo || !normalInfo) {\r\n continue;\r\n }\r\n const positions = positionInfo.data as Float32Array;\r\n const normals = normalInfo.data as Float32Array;\r\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\r\n const normalStride = getVertexFormatComponentCount(normalInfo.format);\r\n const vertexCount = (positions.length / positionStride) >> 0;\r\n const tangents = new Float32Array(vertexCount * 4);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const key = this._outlinePositionKey(\r\n positions[i * positionStride],\r\n positions[i * positionStride + 1],\r\n positions[i * positionStride + 2]\r\n );\r\n const sum = sums.get(key);\r\n let nx = sum?.[0] ?? normals[i * normalStride];\r\n let ny = sum?.[1] ?? normals[i * normalStride + 1];\r\n let nz = sum?.[2] ?? normals[i * normalStride + 2];\r\n const len = Math.hypot(nx, ny, nz);\r\n if (len > 1e-10) {\r\n nx /= len;\r\n ny /= len;\r\n nz /= len;\r\n } else {\r\n nx = normals[i * normalStride];\r\n ny = normals[i * normalStride + 1];\r\n nz = normals[i * normalStride + 2];\r\n const fallbackLen = Math.hypot(nx, ny, nz);\r\n if (fallbackLen > 1e-10) {\r\n nx /= fallbackLen;\r\n ny /= fallbackLen;\r\n nz /= fallbackLen;\r\n } else {\r\n nx = 0;\r\n ny = 1;\r\n nz = 0;\r\n }\r\n }\r\n tangents[i * 4] = nx;\r\n tangents[i * 4 + 1] = ny;\r\n tangents[i * 4 + 2] = nz;\r\n tangents[i * 4 + 3] = 1;\r\n }\r\n primitive.vertices['tangent'] = { format: 'tangent_f32x4', data: tangents };\r\n }\r\n }\r\n private _accumulateOutlineNormal(\r\n sums: Map<string, [number, number, number]>,\r\n positions: Float32Array,\r\n stride: number,\r\n index: number,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const offset = index * stride;\r\n const key = this._outlinePositionKey(positions[offset], positions[offset + 1], positions[offset + 2]);\r\n const sum = sums.get(key);\r\n if (sum) {\r\n sum[0] += x;\r\n sum[1] += y;\r\n sum[2] += z;\r\n } else {\r\n sums.set(key, [x, y, z]);\r\n }\r\n }\r\n private _getTriangleIndices(primitive: AssetPrimitiveInfo, vertexCount: number) {\r\n if (primitive.indices) {\r\n return primitive.indices;\r\n }\r\n const indices = new Uint32Array(vertexCount);\r\n for (let i = 0; i < vertexCount; i++) {\r\n indices[i] = i;\r\n }\r\n return indices;\r\n }\r\n private _outlinePositionKey(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 /** @internal */\r\n private async _loadMaterial(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n materialInfo: Material,\r\n vertexColor: boolean,\r\n vertexNormal: boolean,\r\n useTangent: boolean,\r\n outlineUsesTangentNormals: boolean,\r\n vfs: VFS\r\n ): Promise<AssetMaterial> {\r\n const materialName = materialInfo?.name || 'material';\r\n let assetMaterial: Nullable<AssetMaterial> = null;\r\n let pbrMetallicRoughness: Nullable<AssetPBRMaterialMR> = null;\r\n let pbrSpecularGlossness: Nullable<AssetPBRMaterialSG> = null;\r\n const pbrCommon: AssetMaterialCommon = {\r\n useTangent,\r\n vertexColor,\r\n vertexNormal,\r\n bumpScale: 1,\r\n emissiveColor: Vector3.zero(),\r\n emissiveStrength: 1,\r\n occlusionStrength: 1\r\n };\r\n switch (materialInfo?.alphaMode) {\r\n case 'BLEND': {\r\n pbrCommon.alphaMode = 'blend';\r\n break;\r\n }\r\n case 'MASK': {\r\n pbrCommon.alphaMode = 'mask';\r\n pbrCommon.alphaCutoff = materialInfo.alphaCutoff ?? 0.5;\r\n break;\r\n }\r\n }\r\n if (materialInfo?.doubleSided) {\r\n pbrCommon.doubleSided = true;\r\n }\r\n const mtoonExtension = materialInfo?.extensions?.VRMC_materials_mtoon as\r\n | VRMCMToonMaterialInfo\r\n | undefined;\r\n if (\r\n materialInfo?.pbrMetallicRoughness ||\r\n materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness ||\r\n mtoonExtension\r\n ) {\r\n pbrCommon.normalMap = materialInfo.normalTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.normalTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\r\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.occlusionTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\r\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.emissiveTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.emissiveStrength =\r\n materialInfo?.extensions?.KHR_materials_emissive_strength?.emissiveStrength ?? 1;\r\n pbrCommon.emissiveColor = materialInfo.emissiveFactor\r\n ? new Vector3(materialInfo.emissiveFactor)\r\n : Vector3.zero();\r\n }\r\n if (materialInfo?.pbrMetallicRoughness) {\r\n pbrMetallicRoughness = {\r\n name: materialName,\r\n type: 'pbrMetallicRoughness',\r\n ior: 1.5,\r\n common: pbrCommon\r\n };\r\n pbrMetallicRoughness.diffuse = new Vector4(\r\n materialInfo.pbrMetallicRoughness.baseColorFactor ?? [1, 1, 1, 1]\r\n );\r\n pbrMetallicRoughness.metallic = materialInfo.pbrMetallicRoughness.metallicFactor ?? 1;\r\n pbrMetallicRoughness.roughness = materialInfo.pbrMetallicRoughness.roughnessFactor ?? 1;\r\n pbrMetallicRoughness.diffuseMap = materialInfo.pbrMetallicRoughness.baseColorTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true, vfs)\r\n : undefined;\r\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.pbrMetallicRoughness.metallicRoughnessTexture,\r\n false,\r\n vfs\r\n )\r\n : undefined;\r\n pbrMetallicRoughness.metallicIndex = 2;\r\n pbrMetallicRoughness.roughnessIndex = 1;\r\n }\r\n if (mtoonExtension) {\r\n return this._loadMToonMaterial(\r\n model,\r\n gltf,\r\n materialName,\r\n materialInfo,\r\n pbrCommon,\r\n mtoonExtension,\r\n outlineUsesTangentNormals,\r\n vfs\r\n );\r\n }\r\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\r\n pbrSpecularGlossness = {\r\n name: materialName,\r\n type: 'pbrSpecularGlossiness',\r\n ior: 1.5,\r\n common: pbrCommon\r\n };\r\n pbrSpecularGlossness.diffuse = new Vector4(sg.diffuseFactor ?? [1, 1, 1, 1]);\r\n pbrSpecularGlossness.specular = new Vector3(sg.specularFactor ?? [1, 1, 1]);\r\n pbrSpecularGlossness.glossness = sg.glossnessFactor ?? 1;\r\n pbrSpecularGlossness.diffuseMap = sg.diffuseTexture\r\n ? await this._loadTexture(model, gltf, sg.diffuseTexture, true, vfs)\r\n : undefined;\r\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\r\n ? await this._loadTexture(model, gltf, sg.specularGlossinessTexture, true, vfs)\r\n : undefined;\r\n }\r\n assetMaterial = pbrSpecularGlossness || pbrMetallicRoughness;\r\n if (!assetMaterial || materialInfo?.extensions?.KHR_materials_unlit) {\r\n if (materialInfo?.extensions?.KHR_materials_unlit) {\r\n assetMaterial = {\r\n name: materialName,\r\n type: 'unlit',\r\n common: pbrCommon,\r\n diffuse: pbrMetallicRoughness?.diffuse ?? Vector4.one(),\r\n diffuseMap: pbrMetallicRoughness?.diffuseMap ?? null\r\n } as AssetUnlitMaterial;\r\n } else {\r\n assetMaterial = {\r\n name: materialName,\r\n type: 'pbrMetallicRoughness',\r\n common: pbrCommon,\r\n diffuse: Vector4.one(),\r\n metallic: 1,\r\n roughness: 1,\r\n diffuseMap: undefined,\r\n metallicMap: undefined,\r\n metallicIndex: 2,\r\n roughnessIndex: 1\r\n } as AssetPBRMaterialMR;\r\n }\r\n }\r\n if (assetMaterial.type !== 'unlit' && materialInfo?.extensions?.KHR_materials_ior) {\r\n (assetMaterial as AssetPBRMaterialCommon).ior = materialInfo.extensions.KHR_materials_ior.ior ?? 1.5;\r\n }\r\n if (assetMaterial.type === 'pbrMetallicRoughness') {\r\n pbrMetallicRoughness = assetMaterial;\r\n // KHR_materials_specular extension\r\n const specularColorFactor = (materialInfo?.extensions?.KHR_materials_specular?.specularColorFactor ?? [\r\n 1, 1, 1\r\n ]) as [number, number, number];\r\n pbrMetallicRoughness.specularFactor = new Vector4(\r\n ...specularColorFactor,\r\n materialInfo?.extensions?.KHR_materials_specular?.specularFactor ?? 1\r\n );\r\n pbrMetallicRoughness.specularMap = materialInfo?.extensions?.KHR_materials_specular?.specularTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularTexture,\r\n false,\r\n vfs\r\n )\r\n : undefined;\r\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\r\n ?.specularColorTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\r\n true,\r\n vfs\r\n )\r\n : undefined;\r\n // KHR_materials_iridescence\r\n const iridescence = materialInfo?.extensions?.KHR_materials_iridescence;\r\n if (iridescence) {\r\n pbrMetallicRoughness.iridescence = {\r\n iridescenceFactor: iridescence.iridescenceFactor ?? 0,\r\n iridescenceMap: iridescence.iridescenceTexture\r\n ? await this._loadTexture(model, gltf, iridescence.iridescenceTexture, false, vfs)\r\n : undefined,\r\n iridescenceIor: iridescence.iridescenceIor ?? 1.3,\r\n iridescenceThicknessMinimum: iridescence.iridescenceThicknessMinimum ?? 100,\r\n iridescenceThicknessMaximum: iridescence.iridescenceThicknessMaximum ?? 400,\r\n iridescenceThicknessMap: iridescence.iridescenceThicknessTexture\r\n ? await this._loadTexture(model, gltf, iridescence.iridescenceThicknessTexture, false, vfs)\r\n : undefined\r\n };\r\n }\r\n // KHR_materials_transmission\r\n const transmission = materialInfo?.extensions?.KHR_materials_transmission;\r\n if (transmission) {\r\n pbrMetallicRoughness.transmission = {\r\n transmissionFactor: transmission.transmissionFactor ?? 0,\r\n transmissionMap: transmission.transmissionTexture\r\n ? await this._loadTexture(model, gltf, transmission.transmissionTexture, false, vfs)\r\n : undefined,\r\n thicknessFactor: 0,\r\n thicknessMap: undefined,\r\n attenuationDistance: 99999,\r\n attenuationColor: Vector3.one()\r\n };\r\n const volume = materialInfo?.extensions?.KHR_materials_volume;\r\n if (volume) {\r\n pbrMetallicRoughness.transmission.thicknessFactor = volume.thicknessFactor ?? 0;\r\n pbrMetallicRoughness.transmission.thicknessMap = volume.thicknessTexture\r\n ? await this._loadTexture(model, gltf, volume.thicknessTexture, false, vfs)\r\n : undefined;\r\n pbrMetallicRoughness.transmission.attenuationDistance = volume.attenuationDistance ?? 99999;\r\n const attenuationColor = (volume.attenuationColor ?? [1, 1, 1]) as [number, number, number];\r\n pbrMetallicRoughness.transmission.attenuationColor = new Vector3(...attenuationColor);\r\n }\r\n }\r\n // KHR_materials_sheen\r\n const sheen = materialInfo?.extensions?.KHR_materials_sheen;\r\n if (sheen) {\r\n pbrMetallicRoughness.sheen = {\r\n sheenColorFactor: new Vector3(sheen.sheenColorFactor ?? [0, 0, 0]),\r\n sheenColorMap: sheen.sheenColorTexture\r\n ? await this._loadTexture(model, gltf, sheen.sheenColorTexture, true, vfs)\r\n : undefined,\r\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\r\n sheenRoughnessMap: sheen.sheenRoughnessTexture\r\n ? await this._loadTexture(model, gltf, sheen.sheenRoughnessTexture, true, vfs)\r\n : undefined\r\n };\r\n }\r\n // KHR_materials_clearcoat\r\n const cc = materialInfo?.extensions?.KHR_materials_clearcoat;\r\n if (cc) {\r\n pbrMetallicRoughness.clearcoat = {\r\n clearCoatFactor: cc.clearcoatFactor ?? 0,\r\n clearCoatIntensityMap: cc.clearcoatTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatTexture, false, vfs)\r\n : undefined,\r\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\r\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatRoughnessTexture, false, vfs)\r\n : undefined,\r\n clearCoatNormalMap: cc.clearcoatNormalTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatNormalTexture, false, vfs)\r\n : undefined\r\n };\r\n }\r\n }\r\n return assetMaterial;\r\n }\r\n /** @internal */\r\n private async _loadMToonMaterial(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n materialName: string,\r\n materialInfo: Material,\r\n common: AssetMaterialCommon,\r\n mtoon: VRMCMToonMaterialInfo,\r\n outlineUsesTangentNormals: boolean,\r\n vfs: VFS\r\n ): Promise<GLTFMToonAssetMaterial> {\r\n const pbr = materialInfo?.pbrMetallicRoughness;\r\n const mtoonMaterial: GLTFMToonAssetMaterial = {\r\n name: materialName,\r\n type: 'mtoon',\r\n common,\r\n diffuse: new Vector4(pbr?.baseColorFactor ?? [1, 1, 1, 1]),\r\n diffuseMap: pbr?.baseColorTexture\r\n ? await this._loadTexture(model, gltf, pbr.baseColorTexture, true, vfs)\r\n : undefined,\r\n shadeColorFactor: mtoon.shadeColorFactor ? new Vector3(mtoon.shadeColorFactor) : undefined,\r\n shadeMultiplyMap: mtoon.shadeMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.shadeMultiplyTexture, true, vfs)\r\n : undefined,\r\n shadingShiftFactor: mtoon.shadingShiftFactor,\r\n shadingShiftMap: mtoon.shadingShiftTexture\r\n ? await this._loadTexture(model, gltf, mtoon.shadingShiftTexture, false, vfs)\r\n : undefined,\r\n shadingShiftTextureScale: mtoon.shadingShiftTexture?.scale,\r\n shadingToonyFactor: mtoon.shadingToonyFactor,\r\n giEqualizationFactor: mtoon.giEqualizationFactor,\r\n matcapFactor: mtoon.matcapFactor ? new Vector3(mtoon.matcapFactor) : undefined,\r\n matcapMap: mtoon.matcapTexture\r\n ? await this._loadTexture(model, gltf, mtoon.matcapTexture, true, vfs)\r\n : undefined,\r\n parametricRimColorFactor: mtoon.parametricRimColorFactor\r\n ? new Vector3(mtoon.parametricRimColorFactor)\r\n : undefined,\r\n parametricRimFresnelPowerFactor: mtoon.parametricRimFresnelPowerFactor,\r\n parametricRimLiftFactor: mtoon.parametricRimLiftFactor,\r\n rimMultiplyMap: mtoon.rimMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.rimMultiplyTexture, true, vfs)\r\n : undefined,\r\n rimLightingMixFactor: mtoon.rimLightingMixFactor,\r\n outlineWidthMode: mtoon.outlineWidthMode,\r\n outlineWidthFactor: mtoon.outlineWidthFactor,\r\n outlineWidthMultiplyMap: mtoon.outlineWidthMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.outlineWidthMultiplyTexture, false, vfs)\r\n : undefined,\r\n outlineColorFactor: mtoon.outlineColorFactor ? new Vector3(mtoon.outlineColorFactor) : undefined,\r\n outlineLightingMixFactor: mtoon.outlineLightingMixFactor,\r\n outlineUsesTangentNormals,\r\n uvAnimationMaskMap: mtoon.uvAnimationMaskTexture\r\n ? await this._loadTexture(model, gltf, mtoon.uvAnimationMaskTexture, false, vfs)\r\n : undefined,\r\n uvAnimationScrollXSpeedFactor: mtoon.uvAnimationScrollXSpeedFactor,\r\n uvAnimationScrollYSpeedFactor: mtoon.uvAnimationScrollYSpeedFactor,\r\n uvAnimationRotationSpeedFactor: mtoon.uvAnimationRotationSpeedFactor,\r\n transparentWithZWrite: mtoon.transparentWithZWrite,\r\n renderQueueOffsetNumber: mtoon.renderQueueOffsetNumber\r\n };\r\n return mtoonMaterial;\r\n }\r\n /** @internal */\r\n private async _loadTexture(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n info: Partial<TextureInfo>,\r\n sRGB: boolean,\r\n vfs: VFS\r\n ): Promise<AssetTextureInfo> {\r\n const mt: AssetTextureInfo = {\r\n image: null,\r\n sampler: null,\r\n texCoord: info.texCoord ?? 0,\r\n transform: null\r\n };\r\n const textureInfo = gltf.textures![info.index!];\r\n if (textureInfo) {\r\n if (info.extensions?.KHR_texture_transform) {\r\n const uvTransform = info.extensions.KHR_texture_transform;\r\n if (uvTransform.texCoord !== undefined) {\r\n mt.texCoord = uvTransform.texCoord;\r\n }\r\n const rotation =\r\n uvTransform.rotation !== undefined\r\n ? Matrix4x4.rotationZ(-uvTransform.rotation)\r\n : Matrix4x4.identity();\r\n const scale =\r\n uvTransform.scale !== undefined\r\n ? new Vector3(uvTransform.scale[0], uvTransform.scale[1], 1)\r\n : Vector3.one();\r\n const translation =\r\n uvTransform.offset !== undefined\r\n ? new Vector3(uvTransform.offset[0], uvTransform.offset[1], 0)\r\n : Vector3.zero();\r\n mt.transform = Matrix4x4.scaling(scale).multiplyLeft(rotation).translateLeft(translation);\r\n }\r\n mt.name = textureInfo.name || undefined;\r\n let wrapS: TextureAddressMode = 'repeat';\r\n let wrapT: TextureAddressMode = 'repeat';\r\n let magFilter: TextureFilterMode = 'linear';\r\n let minFilter: TextureFilterMode = 'linear';\r\n let mipFilter: TextureFilterMode = 'linear';\r\n const samplerIndex: number = textureInfo.sampler!;\r\n const sampler = gltf.samplers && gltf.samplers[samplerIndex];\r\n if (sampler) {\r\n switch (sampler.wrapS) {\r\n case 0x2901: // gl.REPEAT\r\n wrapS = 'repeat';\r\n break;\r\n case 0x8370: // gl.MIRRORED_REPEAT\r\n wrapS = 'mirrored-repeat';\r\n break;\r\n case 0x812f: // gl.CLAMP_TO_EDGE\r\n wrapS = 'clamp';\r\n break;\r\n }\r\n switch (sampler.wrapT) {\r\n case 0x2901: // gl.REPEAT\r\n wrapT = 'repeat';\r\n break;\r\n case 0x8370: // gl.MIRRORED_REPEAT\r\n wrapT = 'mirrored-repeat';\r\n break;\r\n case 0x812f: // gl.CLAMP_TO_EDGE\r\n wrapT = 'clamp';\r\n break;\r\n }\r\n switch (sampler.magFilter) {\r\n case 0x2600: // gl.NEAREST\r\n magFilter = 'nearest';\r\n break;\r\n case 0x2601: // gl.LINEAR\r\n magFilter = 'linear';\r\n break;\r\n }\r\n switch (sampler.minFilter) {\r\n case 0x2600: // gl.NEAREST\r\n minFilter = 'nearest';\r\n mipFilter = 'none';\r\n break;\r\n case 0x2601: // gl.LINEAR\r\n minFilter = 'linear';\r\n mipFilter = 'none';\r\n break;\r\n case 0x2700: // gl.NEAREST_MIPMAP_NEAREST\r\n minFilter = 'nearest';\r\n mipFilter = 'nearest';\r\n break;\r\n case 0x2701: // gl.LINEAR_MIPMAP_NEAREST\r\n minFilter = 'linear';\r\n mipFilter = 'nearest';\r\n break;\r\n case 0x2702: // gl.NEAREST_MIPMAP_LINEAR\r\n minFilter = 'nearest';\r\n mipFilter = 'linear';\r\n break;\r\n case 0x2703: // gl.LINEAR_MIPMAP_LINEAR\r\n minFilter = 'linear';\r\n mipFilter = 'linear';\r\n break;\r\n }\r\n }\r\n const imageIndex: number = textureInfo.source!;\r\n mt.image = model.getImage(imageIndex);\r\n if (!mt.image) {\r\n const image = gltf.images![imageIndex];\r\n if (image) {\r\n if (image.uri) {\r\n const imageUrl = vfs.normalizePath(vfs.join(gltf._baseURI, image.uri));\r\n mt.image = {\r\n name: image.name || textureInfo.name || undefined,\r\n uri: imageUrl\r\n };\r\n } else if (typeof image.bufferView === 'number' && image.mimeType) {\r\n const bufferView = gltf.bufferViews && gltf.bufferViews[image.bufferView];\r\n if (bufferView) {\r\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\r\n if (arrayBuffer) {\r\n const view = new Uint8Array(arrayBuffer, bufferView.byteOffset || 0, bufferView.byteLength);\r\n const mimeType = image.mimeType;\r\n mt.image = {\r\n name: image.name || textureInfo.name || undefined,\r\n data: view,\r\n mimeType\r\n };\r\n }\r\n }\r\n }\r\n }\r\n if (mt.image) {\r\n model.setImage(imageIndex, mt.image);\r\n }\r\n }\r\n if (mt.image) {\r\n mt.sRGB = !!sRGB;\r\n mt.sampler = {\r\n wrapS,\r\n wrapT,\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n };\r\n }\r\n }\r\n return mt;\r\n }\r\n /** @internal */\r\n private _primitiveType(type: number) {\r\n switch (type) {\r\n case 0: // GL_POINTS\r\n return 'point-list';\r\n case 1: // GL_LINES\r\n return 'line-list';\r\n /* FIXME:\r\n case 2: // GL_LINE_LOOP\r\n return PrimitiveType.LineLoop;\r\n */\r\n case 3: // GL_LINE_STRIP\r\n return 'line-strip';\r\n case 4: // GL_TRIANGLES\r\n return 'triangle-list';\r\n case 5: // GL_TRIANGLE_STRIP\r\n return 'triangle-strip';\r\n case 6: // GL_TRIANGLE_FAN\r\n return 'triangle-fan';\r\n default:\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private _loadIndexBuffer(\r\n gltf: GLTFContent,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n meshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: DracoMeshDecoder\r\n ) {\r\n const accessor = gltf._accessors[accessorIndex];\r\n if (dracoMeshDecoder) {\r\n const indices = dracoMeshDecoder.getIndexBuffer();\r\n if (!indices || indices.length !== accessor.count) {\r\n throw new Error(`Decode index buffer failed`);\r\n }\r\n if (indices.length !== accessor.count) {\r\n throw new Error(`Decode index buffer failed`);\r\n }\r\n gltf._loadedBuffers!.push(indices.buffer);\r\n if (!gltf.bufferViews) {\r\n gltf.bufferViews = [];\r\n }\r\n gltf.bufferViews.push({\r\n buffer: gltf._loadedBuffers!.length - 1,\r\n byteOffset: 0,\r\n byteLength: indices.byteLength\r\n });\r\n accessor.componentType = ComponentType.UINT;\r\n accessor.bufferView = gltf.bufferViews.length - 1;\r\n }\r\n this._setBuffer(gltf, accessorIndex, primitive, null, meshData);\r\n }\r\n /** @internal */\r\n private _loadVertexBuffer(\r\n gltf: GLTFContent,\r\n attribName: string,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n subMeshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: DracoMeshDecoder\r\n ) {\r\n const dracoId = dracoExtension?.attributes?.[attribName];\r\n if (dracoId !== undefined) {\r\n const accessor = gltf._accessors[accessorIndex];\r\n let buffer: Nullable<TypedArray> = null;\r\n const numElements = accessor.count * accessor.getComponentCount(accessor.type);\r\n switch (accessor.componentType) {\r\n case ComponentType.FLOAT:\r\n buffer = new Float32Array(numElements);\r\n break;\r\n case ComponentType.BYTE:\r\n buffer = new Int8Array(numElements);\r\n break;\r\n case ComponentType.SHORT:\r\n buffer = new Int16Array(numElements);\r\n break;\r\n case ComponentType.INT:\r\n buffer = new Int32Array(numElements);\r\n break;\r\n case ComponentType.UBYTE:\r\n buffer = new Uint8Array(numElements);\r\n break;\r\n case ComponentType.USHORT:\r\n buffer = new Uint16Array(numElements);\r\n break;\r\n case ComponentType.UINT:\r\n buffer = new Uint32Array(numElements);\r\n break;\r\n default:\r\n throw new Error(`Invalid component type: ${accessor.componentType}`);\r\n }\r\n if (!dracoMeshDecoder!.getAttributeBuffer(dracoId, buffer)) {\r\n throw new Error(`Decode draco mesh failed`);\r\n }\r\n gltf._loadedBuffers!.push(buffer.buffer);\r\n if (!gltf.bufferViews) {\r\n gltf.bufferViews = [];\r\n }\r\n gltf.bufferViews.push({\r\n buffer: gltf._loadedBuffers!.length - 1,\r\n byteOffset: 0,\r\n byteLength: buffer.byteLength\r\n });\r\n accessor.bufferView = gltf.bufferViews.length - 1;\r\n }\r\n let semantic: Nullable<VertexSemantic> = null;\r\n switch (attribName) {\r\n case 'POSITION':\r\n semantic = 'position';\r\n break;\r\n case 'NORMAL':\r\n semantic = 'normal';\r\n break;\r\n case 'TANGENT':\r\n semantic = 'tangent';\r\n break;\r\n case 'TEXCOORD_0':\r\n semantic = 'texCoord0';\r\n break;\r\n case 'TEXCOORD_1':\r\n semantic = 'texCoord1';\r\n break;\r\n case 'TEXCOORD_2':\r\n semantic = 'texCoord2';\r\n break;\r\n case 'TEXCOORD_3':\r\n semantic = 'texCoord3';\r\n break;\r\n case 'TEXCOORD_4':\r\n semantic = 'texCoord4';\r\n break;\r\n case 'TEXCOORD_5':\r\n semantic = 'texCoord5';\r\n break;\r\n case 'TEXCOORD_6':\r\n semantic = 'texCoord6';\r\n break;\r\n case 'TEXCOORD_7':\r\n semantic = 'texCoord7';\r\n break;\r\n case 'COLOR_0':\r\n semantic = 'diffuse';\r\n break;\r\n case 'JOINTS_0':\r\n semantic = 'blendIndices';\r\n break;\r\n case 'WEIGHTS_0':\r\n semantic = 'blendWeights';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this._setBuffer(gltf, accessorIndex, primitive, semantic, subMeshData);\r\n }\r\n /** @internal */\r\n private _setBuffer(\r\n gltf: GLTFContent,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n semantic: Nullable<VertexSemantic>,\r\n subMeshData: AssetSubMeshData\r\n ) {\r\n const device = getDevice();\r\n const accessor = gltf._accessors[accessorIndex];\r\n const componentCount = accessor.getComponentCount(accessor.type);\r\n let data = accessor.getNormalizedDeinterlacedView(gltf);\r\n let buffer: Nullable<TypedArray> = null;\r\n let attribFormat: Nullable<VertexAttribFormat> = null;\r\n if (semantic && !(data instanceof Float32Array)) {\r\n const floatData = new Float32Array(data.length);\r\n floatData.set(data);\r\n data = floatData;\r\n }\r\n if (!semantic) {\r\n if (!(data instanceof Uint8Array) && !(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n console.error('Invalid index buffer component type');\r\n return;\r\n }\r\n if (data instanceof Uint32Array && !device.getDeviceCaps().miscCaps.support32BitIndex) {\r\n console.error('Device does not support 32bit vertex index');\r\n return;\r\n }\r\n if (data instanceof Uint8Array) {\r\n const uint16Data = new Uint16Array(data.length);\r\n uint16Data.set(data);\r\n data = uint16Data;\r\n }\r\n }\r\n if (!semantic) {\r\n buffer = data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n } else {\r\n attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\r\n buffer = data;\r\n }\r\n if (buffer) {\r\n if (!semantic) {\r\n primitive.indices = buffer as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n primitive.indexCount = buffer.length;\r\n } else {\r\n const semantic = getVertexAttribName(getVertexAttributeIndex(attribFormat!));\r\n primitive.vertices[semantic] = { format: attribFormat!, data: buffer };\r\n if (semantic === 'position') {\r\n if (!primitive.indices) {\r\n primitive.indexCount = Math.floor(buffer.byteLength / 12);\r\n }\r\n const data = accessor.getNormalizedDeinterlacedView(gltf);\r\n subMeshData.rawPositions = data as Float32Array;\r\n const min = accessor.min;\r\n const max = accessor.max;\r\n if (min && max) {\r\n primitive.boxMin.set(min);\r\n primitive.boxMax.set(max);\r\n } else {\r\n const bbox = new BoundingBox();\r\n bbox.beginExtend();\r\n for (let i = 0; i < data.length; i++) {\r\n const v = new Vector3(\r\n data[i * componentCount],\r\n data[i * componentCount + 1],\r\n data[i * componentCount + 2]\r\n );\r\n bbox.extend(v);\r\n }\r\n if (bbox.isValid()) {\r\n primitive.boxMin.set(bbox.minPoint);\r\n primitive.boxMax.set(bbox.maxPoint);\r\n }\r\n }\r\n } else if (semantic === 'blendIndices') {\r\n subMeshData.rawBlendIndices = accessor.getNormalizedDeinterlacedView(gltf);\r\n } else if (semantic === 'blendWeights') {\r\n subMeshData.rawJointWeights = accessor.getNormalizedDeinterlacedView(gltf);\r\n }\r\n }\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n private isGLB(data: ArrayBuffer): boolean {\r\n if (data.byteLength > 12) {\r\n const p = new Uint32Array(data, 0, 3);\r\n if (p[0] === 0x46546c67 && p[1] === 2 && p[2] === data.byteLength) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private getGLBChunkInfo(\r\n data: ArrayBuffer,\r\n offset: number\r\n ): { start: number; length: number; type: number } {\r\n const header = new Uint32Array(data, offset, 2);\r\n const start = offset + 8;\r\n const length = header[0];\r\n const type = header[1];\r\n return { start, length, type };\r\n }\r\n /** @internal */\r\n private getGLBChunkInfos(data: ArrayBuffer): { start: number; length: number; type: number }[] {\r\n const infos: { start: number; length: number; type: number }[] = [];\r\n let offset = 12;\r\n while (offset < data.byteLength) {\r\n const info = this.getGLBChunkInfo(data, offset);\r\n infos.push(info);\r\n offset += info.length + 8;\r\n }\r\n return infos;\r\n }\r\n}\r\n","import type { FbxConnection, FbxDocument, FbxNode, FbxObjectMap, FbxPropertyValue } from './types';\r\n\r\nconst FBX_BINARY_MAGIC = 'Kaydara FBX Binary \\0';\r\n\r\nfunction stripQuotes(text: string) {\r\n return text.length >= 2 && text[0] === '\"' && text[text.length - 1] === '\"' ? text.slice(1, -1) : text;\r\n}\r\n\r\nfunction toNumber(value: string) {\r\n if (/^[+-]?\\d+$/.test(value)) {\r\n return Number.parseInt(value, 10);\r\n }\r\n return Number.parseFloat(value);\r\n}\r\n\r\nfunction splitAsciiProperties(text: string) {\r\n const result: string[] = [];\r\n let current = '';\r\n let inString = false;\r\n let depth = 0;\r\n for (let i = 0; i < text.length; i++) {\r\n const ch = text[i];\r\n if (ch === '\"') {\r\n inString = !inString;\r\n current += ch;\r\n continue;\r\n }\r\n if (!inString) {\r\n if (ch === '{' || ch === '[' || ch === '(') {\r\n depth++;\r\n } else if (ch === '}' || ch === ']' || ch === ')') {\r\n depth--;\r\n } else if (ch === ',' && depth === 0) {\r\n result.push(current.trim());\r\n current = '';\r\n continue;\r\n }\r\n }\r\n current += ch;\r\n }\r\n if (current.trim()) {\r\n result.push(current.trim());\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseAsciiScalar(text: string): FbxPropertyValue {\r\n const trimmed = text.trim();\r\n if (!trimmed) {\r\n return '';\r\n }\r\n if (trimmed[0] === '\"' && trimmed[trimmed.length - 1] === '\"') {\r\n return stripQuotes(trimmed);\r\n }\r\n if (trimmed === 'Y' || trimmed === 'T') {\r\n return true;\r\n }\r\n if (trimmed === 'N' || trimmed === 'F') {\r\n return false;\r\n }\r\n if (trimmed[0] === '*' && trimmed.includes('{')) {\r\n const begin = trimmed.indexOf('{');\r\n const end = trimmed.lastIndexOf('}');\r\n if (begin >= 0 && end > begin) {\r\n const body = trimmed.slice(begin + 1, end);\r\n const colon = body.indexOf(':');\r\n const valuesText = colon >= 0 ? body.slice(colon + 1) : body;\r\n const tokens = splitAsciiProperties(valuesText);\r\n const values = tokens.map((token) => toNumber(token));\r\n return Float64Array.from(values);\r\n }\r\n }\r\n if (/^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(trimmed) || /^[+-]?\\d+$/.test(trimmed)) {\r\n return toNumber(trimmed);\r\n }\r\n return trimmed;\r\n}\r\n\r\nfunction parseAsciiNodeHeader(line: string) {\r\n const colon = line.indexOf(':');\r\n if (colon < 0) {\r\n return { name: line.trim(), properties: [] as FbxPropertyValue[] };\r\n }\r\n const name = line.slice(0, colon).trim();\r\n const propsText = line.slice(colon + 1).trim();\r\n const properties = propsText ? splitAsciiProperties(propsText).map(parseAsciiScalar) : [];\r\n return { name, properties };\r\n}\r\n\r\nfunction parseAscii(text: string): FbxNode {\r\n const root: FbxNode = {\r\n name: 'Root',\r\n properties: [],\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n const stack: FbxNode[] = [root];\r\n const lines = text.split(/\\r?\\n/);\r\n for (let rawLine of lines) {\r\n const comment = rawLine.indexOf(';');\r\n if (comment >= 0) {\r\n rawLine = rawLine.slice(0, comment);\r\n }\r\n const line = rawLine.trim();\r\n if (!line) {\r\n continue;\r\n }\r\n if (line === '}') {\r\n if (stack.length > 1) {\r\n stack.pop();\r\n }\r\n continue;\r\n }\r\n if (line.endsWith('{')) {\r\n const header = line.slice(0, -1).trim();\r\n const { name, properties } = parseAsciiNodeHeader(header);\r\n const node: FbxNode = {\r\n name,\r\n properties,\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n stack[stack.length - 1].children.push(node);\r\n stack.push(node);\r\n continue;\r\n }\r\n const { name, properties } = parseAsciiNodeHeader(line);\r\n stack[stack.length - 1].children.push({\r\n name,\r\n properties,\r\n propertyListLength: 0,\r\n children: []\r\n });\r\n }\r\n return root;\r\n}\r\n\r\nclass BinaryReader {\r\n private readonly _view: DataView;\r\n private readonly _buffer: ArrayBuffer;\r\n private readonly _decoder: TextDecoder;\r\n private _offset: number;\r\n constructor(buffer: ArrayBuffer) {\r\n this._buffer = buffer;\r\n this._view = new DataView(buffer);\r\n this._decoder = new TextDecoder('utf-8');\r\n this._offset = 0;\r\n }\r\n get offset() {\r\n return this._offset;\r\n }\r\n set offset(value: number) {\r\n this._offset = value;\r\n }\r\n skip(bytes: number) {\r\n this._offset += bytes;\r\n }\r\n getUint8() {\r\n const value = this._view.getUint8(this._offset);\r\n this._offset += 1;\r\n return value;\r\n }\r\n getInt16() {\r\n const value = this._view.getInt16(this._offset, true);\r\n this._offset += 2;\r\n return value;\r\n }\r\n getInt32() {\r\n const value = this._view.getInt32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getUint32() {\r\n const value = this._view.getUint32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getFloat32() {\r\n const value = this._view.getFloat32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getFloat64() {\r\n const value = this._view.getFloat64(this._offset, true);\r\n this._offset += 8;\r\n return value;\r\n }\r\n getBigInt64() {\r\n const value = this._view.getBigInt64(this._offset, true);\r\n this._offset += 8;\r\n return value;\r\n }\r\n getBoolean() {\r\n return this.getUint8() === 1;\r\n }\r\n getString(length: number) {\r\n const value = this._decoder.decode(new Uint8Array(this._buffer, this._offset, length));\r\n this._offset += length;\r\n return value.replace(/\\0+$/, '');\r\n }\r\n getArrayBuffer(length: number) {\r\n const value = this._buffer.slice(this._offset, this._offset + length);\r\n this._offset += length;\r\n return value;\r\n }\r\n}\r\n\r\nasync function inflateDeflate(data: Uint8Array, expectedLength: number) {\r\n if (typeof DecompressionStream !== 'undefined') {\r\n const stream = new Blob([\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n ])\r\n .stream()\r\n .pipeThrough(new DecompressionStream('deflate'));\r\n const buffer = await new Response(stream).arrayBuffer();\r\n if (expectedLength > 0 && buffer.byteLength !== expectedLength) {\r\n console.warn(`FBX inflate length mismatch: expected=${expectedLength} actual=${buffer.byteLength}`);\r\n }\r\n return buffer;\r\n }\r\n throw new Error('Compressed FBX arrays are not supported in this runtime');\r\n}\r\n\r\nasync function readArray(\r\n reader: BinaryReader,\r\n elementByteLength: number,\r\n arrayFactory: (buffer: ArrayBuffer) => ArrayBufferView\r\n) {\r\n const length = reader.getUint32();\r\n const encoding = reader.getUint32();\r\n const compressedLength = reader.getUint32();\r\n if (encoding === 0) {\r\n const byteLength = length * elementByteLength;\r\n const buffer = reader.getArrayBuffer(byteLength);\r\n return arrayFactory(buffer);\r\n }\r\n const compressed = new Uint8Array(reader.getArrayBuffer(compressedLength));\r\n const buffer = await inflateDeflate(compressed, length * elementByteLength);\r\n return arrayFactory(buffer);\r\n}\r\n\r\nasync function readBinaryProperty(reader: BinaryReader, type: string): Promise<FbxPropertyValue> {\r\n switch (type) {\r\n case 'C':\r\n return reader.getBoolean();\r\n case 'D':\r\n return reader.getFloat64();\r\n case 'F':\r\n return reader.getFloat32();\r\n case 'I':\r\n return reader.getInt32();\r\n case 'L':\r\n return reader.getBigInt64();\r\n case 'R': {\r\n const length = reader.getUint32();\r\n return reader.getArrayBuffer(length);\r\n }\r\n case 'S': {\r\n const length = reader.getUint32();\r\n return reader.getString(length);\r\n }\r\n case 'Y':\r\n return reader.getInt16();\r\n case 'b':\r\n return (await readArray(reader, 1, (buffer) => new Uint8Array(buffer))) as Uint8Array<ArrayBuffer>;\r\n case 'c':\r\n return (await readArray(reader, 1, (buffer) => new Uint8Array(buffer))) as Uint8Array<ArrayBuffer>;\r\n case 'd':\r\n return (await readArray(reader, 8, (buffer) => new Float64Array(buffer))) as Float64Array<ArrayBuffer>;\r\n case 'f':\r\n return (await readArray(reader, 4, (buffer) => new Float32Array(buffer))) as Float32Array<ArrayBuffer>;\r\n case 'i':\r\n return (await readArray(reader, 4, (buffer) => new Int32Array(buffer))) as Int32Array<ArrayBuffer>;\r\n case 'l':\r\n return (await readArray(\r\n reader,\r\n 8,\r\n (buffer) => new BigInt64Array(buffer)\r\n )) as BigInt64Array<ArrayBuffer>;\r\n default:\r\n throw new Error(`Unsupported FBX property type: ${type}`);\r\n }\r\n}\r\n\r\nasync function parseBinaryNode(reader: BinaryReader, version: number): Promise<FbxNode | null> {\r\n const use64 = version >= 7500;\r\n const endOffset = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const numProperties = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const propertyListLength = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const nameLength = reader.getUint8();\r\n if (endOffset === 0 && numProperties === 0 && propertyListLength === 0 && nameLength === 0) {\r\n return null;\r\n }\r\n const name = reader.getString(nameLength);\r\n const properties: FbxPropertyValue[] = [];\r\n for (let i = 0; i < numProperties; i++) {\r\n properties.push(await readBinaryProperty(reader, String.fromCharCode(reader.getUint8())));\r\n }\r\n const node: FbxNode = {\r\n name,\r\n properties,\r\n propertyListLength,\r\n children: []\r\n };\r\n while (reader.offset < endOffset) {\r\n const child = await parseBinaryNode(reader, version);\r\n if (!child) {\r\n break;\r\n }\r\n node.children.push(child);\r\n }\r\n reader.offset = endOffset;\r\n return node;\r\n}\r\n\r\nfunction isBinaryFbx(buffer: ArrayBuffer) {\r\n const magic = new TextDecoder('ascii').decode(new Uint8Array(buffer, 0, FBX_BINARY_MAGIC.length));\r\n return magic === FBX_BINARY_MAGIC;\r\n}\r\n\r\nfunction getChild(node: FbxNode, name: string) {\r\n return node.children.find((child) => child.name === name) ?? null;\r\n}\r\n\r\nfunction getChildren(node: FbxNode, name: string) {\r\n return node.children.filter((child) => child.name === name);\r\n}\r\n\r\nfunction buildObjectMap(root: FbxNode): FbxObjectMap {\r\n const objectsNode = getChild(root, 'Objects');\r\n const map: FbxObjectMap = {};\r\n if (!objectsNode) {\r\n return map;\r\n }\r\n for (const child of objectsNode.children) {\r\n const id = child.properties[0];\r\n const idNumber = typeof id === 'bigint' ? Number(id) : typeof id === 'number' ? id : NaN;\r\n if (!Number.isFinite(idNumber)) {\r\n continue;\r\n }\r\n if (!map[child.name]) {\r\n map[child.name] = new Map();\r\n }\r\n map[child.name].set(idNumber, child);\r\n }\r\n return map;\r\n}\r\n\r\nfunction buildConnections(root: FbxNode): FbxConnection[] {\r\n const result: FbxConnection[] = [];\r\n const connectionsNode = getChild(root, 'Connections');\r\n if (!connectionsNode) {\r\n return result;\r\n }\r\n for (const child of getChildren(connectionsNode, 'C')) {\r\n const type = String(child.properties[0] ?? '');\r\n const from = Number(child.properties[1] ?? 0);\r\n const to = Number(child.properties[2] ?? 0);\r\n const property = child.properties.length > 3 ? String(child.properties[3]) : undefined;\r\n result.push({ type, from, to, property });\r\n }\r\n return result;\r\n}\r\n\r\nfunction getVersion(root: FbxNode) {\r\n const header = getChild(root, 'FBXHeaderExtension');\r\n const versionNode = header ? getChild(header, 'FBXVersion') : null;\r\n const version = Number(versionNode?.properties[0] ?? 0);\r\n return Number.isFinite(version) ? version : 0;\r\n}\r\n\r\nexport async function parseFbx(buffer: ArrayBuffer): Promise<FbxDocument> {\r\n let root: FbxNode;\r\n if (isBinaryFbx(buffer)) {\r\n const reader = new BinaryReader(buffer);\r\n reader.skip(FBX_BINARY_MAGIC.length);\r\n reader.skip(2);\r\n const version = reader.getUint32();\r\n root = {\r\n name: 'Root',\r\n properties: [],\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n while (reader.offset < buffer.byteLength) {\r\n const node = await parseBinaryNode(reader, version);\r\n if (!node) {\r\n break;\r\n }\r\n root.children.push(node);\r\n }\r\n } else {\r\n root = parseAscii(new TextDecoder('utf-8').decode(buffer));\r\n }\r\n return {\r\n version: getVersion(root),\r\n root,\r\n objects: buildObjectMap(root),\r\n connections: buildConnections(root)\r\n };\r\n}\r\n","import type { EulerAngleOrder, Nullable, VFS } from '@zephyr3d/base';\r\nimport { ASSERT, Matrix4x4, PathUtils, Quaternion, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n PrimitiveType,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n VertexAttribFormat,\r\n VertexSemantic\r\n} from '@zephyr3d/device';\r\nimport {\r\n AssetHierarchyNode,\r\n AssetScene,\r\n AssetSkeleton,\r\n getEngine,\r\n SharedModel,\r\n type AssetImageInfo,\r\n type AssetMaterial,\r\n type AssetMeshData,\r\n type AssetPBRMaterialMR,\r\n type AssetPrimitiveInfo,\r\n type AssetSubMeshData,\r\n type AssetTextureInfo\r\n} from '@zephyr3d/scene';\r\nimport { AbstractModelImporter } from '../importer';\r\nimport { parseFbx } from './parser';\r\nimport type {\r\n FbxClusterData,\r\n FbxConnection,\r\n FbxDocument,\r\n FbxGeometryData,\r\n FbxLayerElementData,\r\n FbxMaterialData,\r\n FbxModelData,\r\n FbxNode,\r\n FbxObjectMap,\r\n FbxPrimitiveBuildData,\r\n FbxSkinData,\r\n FbxTextureData,\r\n FbxTransformData,\r\n FbxVideoData\r\n} from './types';\r\n\r\ntype FbxImportContext = {\r\n document: FbxDocument;\r\n objects: FbxObjectMap;\r\n connectionChildren: Map<number, FbxConnection[]>;\r\n connectionParents: Map<number, FbxConnection[]>;\r\n modelMap: Map<number, FbxModelData>;\r\n geometryMap: Map<number, FbxGeometryData>;\r\n materialMap: Map<number, FbxMaterialData>;\r\n textureMap: Map<number, FbxTextureData>;\r\n videoMap: Map<number, FbxVideoData>;\r\n skinMap: Map<number, FbxSkinData>;\r\n skeletonMap: Map<number, AssetSkeleton>;\r\n jointBindMatrices: Map<string, Matrix4x4>;\r\n skeletonJointIds: Set<number>;\r\n imageSet: Set<AssetImageInfo>;\r\n nextImageIndex: number;\r\n nodeMap: Map<number, AssetHierarchyNode>;\r\n basePath: string;\r\n vfs: VFS;\r\n};\r\n\r\nfunction toUint8Array(data: Uint8Array<ArrayBufferLike>) {\r\n return new Uint8Array(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer);\r\n}\r\n\r\nfunction toUint16Array(data: Uint16Array<ArrayBufferLike>) {\r\n return new Uint16Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toUint32Array(data: Uint32Array<ArrayBufferLike>) {\r\n return new Uint32Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toFloat32Array(data: Float32Array<ArrayBufferLike>) {\r\n return new Float32Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toVertexRecord(\r\n vertices: Partial<\r\n Record<VertexSemantic, { format: VertexAttribFormat; data: Float32Array | Uint16Array | Uint32Array }>\r\n >\r\n) {\r\n const record = {} as Record<\r\n VertexSemantic,\r\n { format: VertexAttribFormat; data: Float32Array | Uint16Array | Uint32Array }\r\n >;\r\n for (const key of Object.keys(vertices) as VertexSemantic[]) {\r\n record[key] = vertices[key]!;\r\n }\r\n return record;\r\n}\r\n\r\nconst TMP_VEC3 = new Vector3();\r\nconst TMP_VEC3_B = new Vector3();\r\nconst TMP_VEC4 = new Vector4();\r\n\r\nfunction asNumber(value: unknown, fallback = 0) {\r\n if (typeof value === 'bigint') {\r\n return Number(value);\r\n }\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : fallback;\r\n }\r\n return fallback;\r\n}\r\n\r\nfunction asString(value: unknown, fallback = '') {\r\n return typeof value === 'string' ? value : fallback;\r\n}\r\n\r\nfunction getChild(node: Nullable<FbxNode>, name: string) {\r\n return node?.children.find((child) => child.name === name) ?? null;\r\n}\r\n\r\nfunction getChildren(node: Nullable<FbxNode>, name: string) {\r\n return node?.children.filter((child) => child.name === name) ?? [];\r\n}\r\n\r\nfunction getProperty70(node: Nullable<FbxNode>, name: string) {\r\n if (!node) {\r\n return null;\r\n }\r\n const props70 = getChild(node, 'Properties70');\r\n if (!props70) {\r\n return null;\r\n }\r\n for (const prop of getChildren(props70, 'P')) {\r\n if (asString(prop.properties[0]) === name) {\r\n return prop;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getProperty70Value(\r\n node: Nullable<FbxNode>,\r\n name: string,\r\n fallback: [number, number, number] | number\r\n): [number, number, number] | number {\r\n const prop = getProperty70(node, name);\r\n if (!prop) {\r\n return fallback;\r\n }\r\n const values = prop.properties.slice(4);\r\n if (typeof fallback === 'number') {\r\n return values.length > 0 ? asNumber(values[0], fallback) : fallback;\r\n }\r\n if (values.length >= 3) {\r\n return [asNumber(values[0]), asNumber(values[1]), asNumber(values[2])];\r\n }\r\n return fallback;\r\n}\r\n\r\nfunction getNodeId(node: FbxNode) {\r\n return asNumber(node.properties[0], Number.NaN);\r\n}\r\n\r\nfunction getObjectName(node: FbxNode) {\r\n const raw = asString(node.properties[1], '');\r\n if (!raw) {\r\n return '';\r\n }\r\n const parts = raw.split('\\0');\r\n return parts[0] || raw;\r\n}\r\n\r\nfunction toRadiansTuple(value: [number, number, number]): [number, number, number] {\r\n return [(value[0] * Math.PI) / 180, (value[1] * Math.PI) / 180, (value[2] * Math.PI) / 180];\r\n}\r\n\r\nfunction getEulerOrder(order: number): EulerAngleOrder {\r\n // FBX stores extrinsic Euler orders; Quaternion.fromEulerAngle expects the equivalent\r\n // intrinsic order, matching the conversion used by three.js FBXLoader.\r\n switch (order) {\r\n case 0:\r\n return 'ZYX';\r\n case 1:\r\n return 'YZX';\r\n case 2:\r\n return 'XZY';\r\n case 3:\r\n return 'YXZ';\r\n case 4:\r\n return 'ZXY';\r\n case 5:\r\n return 'XYZ';\r\n default:\r\n return 'ZYX';\r\n }\r\n}\r\n\r\nfunction quaternionFromDegrees(euler: [number, number, number], order: number) {\r\n const r = toRadiansTuple(euler);\r\n return Quaternion.fromEulerAngle(r[0], r[1], r[2], getEulerOrder(order));\r\n}\r\n\r\nfunction quaternionFromDegreesXYZ(euler: [number, number, number]) {\r\n const r = toRadiansTuple(euler);\r\n return Quaternion.fromEulerAngle(r[0], r[1], r[2], 'XYZ');\r\n}\r\n\r\nfunction matrixFromTRS(\r\n translation: [number, number, number],\r\n rotationDegrees: [number, number, number],\r\n scale: [number, number, number],\r\n rotationOrder: number\r\n) {\r\n return new Matrix4x4().compose(\r\n new Vector3(scale[0], scale[1], scale[2]),\r\n quaternionFromDegrees(rotationDegrees, rotationOrder),\r\n new Vector3(translation[0], translation[1], translation[2])\r\n );\r\n}\r\n\r\nfunction readTransformData(node: FbxNode): FbxTransformData {\r\n const lclTranslation = getProperty70Value(node, 'Lcl Translation', [0, 0, 0]) as [number, number, number];\r\n const lclRotation = getProperty70Value(node, 'Lcl Rotation', [0, 0, 0]) as [number, number, number];\r\n const lclScaling = getProperty70Value(node, 'Lcl Scaling', [1, 1, 1]) as [number, number, number];\r\n return {\r\n translation: lclTranslation,\r\n rotation: lclRotation,\r\n scale: lclScaling,\r\n preRotation: getProperty70Value(node, 'PreRotation', [0, 0, 0]) as [number, number, number],\r\n postRotation: getProperty70Value(node, 'PostRotation', [0, 0, 0]) as [number, number, number],\r\n rotationOffset: getProperty70Value(node, 'RotationOffset', [0, 0, 0]) as [number, number, number],\r\n rotationPivot: getProperty70Value(node, 'RotationPivot', [0, 0, 0]) as [number, number, number],\r\n scalingOffset: getProperty70Value(node, 'ScalingOffset', [0, 0, 0]) as [number, number, number],\r\n scalingPivot: getProperty70Value(node, 'ScalingPivot', [0, 0, 0]) as [number, number, number],\r\n rotationOrder: asNumber(getProperty70Value(node, 'RotationOrder', 0), 0),\r\n geometricTranslation: getProperty70Value(node, 'GeometricTranslation', [0, 0, 0]) as [\r\n number,\r\n number,\r\n number\r\n ],\r\n geometricRotation: getProperty70Value(node, 'GeometricRotation', [0, 0, 0]) as [number, number, number],\r\n geometricScaling: getProperty70Value(node, 'GeometricScaling', [1, 1, 1]) as [number, number, number],\r\n inheritType: asNumber(getProperty70Value(node, 'InheritType', 0), 0)\r\n };\r\n}\r\n\r\nfunction readConnections(connections: FbxConnection[]) {\r\n const children = new Map<number, FbxConnection[]>();\r\n const parents = new Map<number, FbxConnection[]>();\r\n for (const connection of connections) {\r\n const listA = children.get(connection.to);\r\n if (listA) {\r\n listA.push(connection);\r\n } else {\r\n children.set(connection.to, [connection]);\r\n }\r\n const listB = parents.get(connection.from);\r\n if (listB) {\r\n listB.push(connection);\r\n } else {\r\n parents.set(connection.from, [connection]);\r\n }\r\n }\r\n return { children, parents };\r\n}\r\n\r\nfunction readVideoData(node: FbxNode) {\r\n const contentNode = getChild(node, 'Content');\r\n const contentProp = contentNode?.properties[0];\r\n let content: Uint8Array | null = null;\r\n if (contentProp instanceof ArrayBuffer) {\r\n content = new Uint8Array(contentProp);\r\n } else if (contentProp instanceof Uint8Array) {\r\n content = contentProp;\r\n }\r\n return {\r\n id: getNodeId(node),\r\n name: getObjectName(node),\r\n relativeFilename: asString(getChild(node, 'RelativeFilename')?.properties[0], ''),\r\n filename: asString(getChild(node, 'Filename')?.properties[0], ''),\r\n content\r\n } as FbxVideoData;\r\n}\r\n\r\nfunction readTextureData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const linkedVideoConnection = ctx.connectionChildren\r\n .get(id)\r\n ?.find((connection) => ctx.objects.Video?.has(connection.from));\r\n const video = linkedVideoConnection ? (ctx.videoMap.get(linkedVideoConnection.from) ?? null) : null;\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n fileName: asString(getChild(node, 'FileName')?.properties[0], ''),\r\n relativeFilename: asString(getChild(node, 'RelativeFilename')?.properties[0], ''),\r\n video,\r\n uvSet: asString(getProperty70(node, 'UVSet')?.properties[4], ''),\r\n wrapModeU: asNumber(getChild(node, 'WrapModeU')?.properties[0], 0),\r\n wrapModeV: asNumber(getChild(node, 'WrapModeV')?.properties[0], 0),\r\n translation: [\r\n asNumber(getProperty70(node, 'Translation')?.properties[4], 0),\r\n asNumber(getProperty70(node, 'Translation')?.properties[5], 0)\r\n ],\r\n scale: [\r\n asNumber(getProperty70(node, 'Scaling')?.properties[4], 1),\r\n asNumber(getProperty70(node, 'Scaling')?.properties[5], 1)\r\n ]\r\n } as FbxTextureData;\r\n}\r\n\r\nfunction normalizeTextureSlot(name: string) {\r\n switch (name) {\r\n case 'DiffuseColor':\r\n case 'Maya|baseColor':\r\n return 'diffuse';\r\n case 'NormalMap':\r\n case 'Bump':\r\n case 'Maya|normalCamera':\r\n return 'normal';\r\n case 'TransparentColor':\r\n case 'TransparencyFactor':\r\n return 'opacity';\r\n case 'EmissiveColor':\r\n case 'Maya|emissionColor':\r\n return 'emissive';\r\n default:\r\n return name;\r\n }\r\n}\r\n\r\nfunction readMaterialData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const textures: Record<string, FbxTextureData> = {};\r\n for (const connection of ctx.connectionChildren.get(id) ?? []) {\r\n const texture = ctx.textureMap.get(connection.from);\r\n if (texture) {\r\n textures[normalizeTextureSlot(connection.property ?? '')] = texture;\r\n }\r\n }\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n shadingModel: asString(getChild(node, 'ShadingModel')?.properties[0], 'phong').toLowerCase(),\r\n diffuseColor: getProperty70Value(node, 'DiffuseColor', [1, 1, 1]) as [number, number, number],\r\n emissiveColor: getProperty70Value(node, 'EmissiveColor', [0, 0, 0]) as [number, number, number],\r\n transparentColor: getProperty70Value(node, 'TransparentColor', [0, 0, 0]) as [number, number, number],\r\n opacity: asNumber(getProperty70Value(node, 'Opacity', 1), 1),\r\n transparencyFactor: asNumber(getProperty70Value(node, 'TransparencyFactor', 0), 0),\r\n shininess: asNumber(getProperty70Value(node, 'Shininess', 0), 0),\r\n bumpFactor: asNumber(getProperty70Value(node, 'BumpFactor', 1), 1),\r\n textures\r\n } as FbxMaterialData;\r\n}\r\n\r\nfunction readClusterData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const boneConnection = ctx.connectionChildren\r\n .get(id)\r\n ?.find((connection) => ctx.objects.Model?.has(connection.from));\r\n return {\r\n id,\r\n indices: (getChild(node, 'Indexes')?.properties[0] as Int32Array) ?? new Int32Array(),\r\n weights: (getChild(node, 'Weights')?.properties[0] as Float64Array) ?? new Float64Array(),\r\n transform: (getChild(node, 'Transform')?.properties[0] as Float64Array) ?? null,\r\n transformLink: (getChild(node, 'TransformLink')?.properties[0] as Float64Array) ?? null,\r\n linkMode: asString(getChild(node, 'Mode')?.properties[0], ''),\r\n boneModelId: boneConnection?.from ?? null\r\n } as FbxClusterData;\r\n}\r\n\r\nfunction readSkinData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const clusters: FbxClusterData[] = [];\r\n for (const connection of ctx.connectionChildren.get(id) ?? []) {\r\n const clusterNode = ctx.objects.Deformer?.get(connection.from);\r\n if (clusterNode?.properties[2] === 'Cluster') {\r\n clusters.push(readClusterData(clusterNode, ctx));\r\n }\r\n }\r\n return { id, clusters } as FbxSkinData;\r\n}\r\n\r\nfunction readLayerElementFloat(node: Nullable<FbxNode>) {\r\n if (!node) {\r\n return null;\r\n }\r\n const mapping = asString(getChild(node, 'MappingInformationType')?.properties[0], '');\r\n const reference = asString(getChild(node, 'ReferenceInformationType')?.properties[0], '');\r\n const dataNode =\r\n getChild(node, 'Normals') ??\r\n getChild(node, 'Tangents') ??\r\n getChild(node, 'Colors') ??\r\n getChild(node, 'UV');\r\n const indexNode =\r\n getChild(node, 'NormalsIndex') ?? getChild(node, 'ColorIndex') ?? getChild(node, 'UVIndex');\r\n const source = dataNode?.properties[0];\r\n let data: Float32Array;\r\n if (source instanceof Float64Array) {\r\n data = Float32Array.from(source);\r\n } else if (source instanceof Float32Array) {\r\n data = source;\r\n } else {\r\n data = new Float32Array();\r\n }\r\n const indices = indexNode?.properties[0];\r\n return {\r\n mapping,\r\n reference,\r\n data,\r\n indices: indices instanceof Int32Array || indices instanceof Uint32Array ? indices : null\r\n } as FbxLayerElementData<Float32Array>;\r\n}\r\n\r\nfunction readLayerElementInt(node: Nullable<FbxNode>) {\r\n if (!node) {\r\n return null;\r\n }\r\n const mapping = asString(getChild(node, 'MappingInformationType')?.properties[0], '');\r\n const reference = asString(getChild(node, 'ReferenceInformationType')?.properties[0], '');\r\n const dataNode = getChild(node, 'Materials');\r\n const indexNode = getChild(node, 'MaterialsIndex');\r\n const source = (dataNode?.properties[0] ?? indexNode?.properties[0]) as\r\n | Int32Array\r\n | Uint32Array\r\n | undefined;\r\n let data: Int32Array;\r\n if (source instanceof Int32Array) {\r\n data = source;\r\n } else if (source instanceof Uint32Array) {\r\n data = Int32Array.from(source);\r\n } else {\r\n data = new Int32Array();\r\n }\r\n return {\r\n mapping,\r\n reference,\r\n data\r\n } as FbxLayerElementData<Int32Array>;\r\n}\r\n\r\nfunction readGeometryData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const skinConnection = ctx.connectionChildren.get(id)?.find((connection) => {\r\n const deformerNode = ctx.objects.Deformer?.get(connection.from);\r\n return !!deformerNode && deformerNode.properties[2] === 'Skin';\r\n });\r\n const skin = skinConnection ? (ctx.skinMap.get(skinConnection.from) ?? null) : null;\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n vertices: (getChild(node, 'Vertices')?.properties[0] as Float64Array) ?? new Float64Array(),\r\n polygonVertexIndex:\r\n (getChild(node, 'PolygonVertexIndex')?.properties[0] as Int32Array) ?? new Int32Array(),\r\n normals: readLayerElementFloat(getChild(node, 'LayerElementNormal')),\r\n tangents: readLayerElementFloat(getChild(node, 'LayerElementTangent')),\r\n colors: readLayerElementFloat(getChild(node, 'LayerElementColor')),\r\n uvLayers: getChildren(node, 'LayerElementUV')\r\n .map((layer) => readLayerElementFloat(layer))\r\n .filter((layer): layer is FbxLayerElementData<Float32Array> => !!layer),\r\n materialLayer: readLayerElementInt(getChild(node, 'LayerElementMaterial')),\r\n skin\r\n } as FbxGeometryData;\r\n}\r\n\r\nfunction readModelData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const parentConnection = ctx.connectionParents\r\n .get(id)\r\n ?.find((connection) => connection.to !== 0 && ctx.objects.Model?.has(connection.to));\r\n const childConnections =\r\n ctx.connectionChildren.get(id)?.filter((connection) => ctx.objects.Model?.has(connection.from)) ?? [];\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n type: asString(node.properties[2], ''),\r\n parentId: parentConnection?.to ?? null,\r\n children: childConnections.map((connection) => connection.from),\r\n transform: readTransformData(node)\r\n } as FbxModelData;\r\n}\r\n\r\nfunction wrapModeFromFbx(value: number): TextureAddressMode {\r\n return value === 0 ? 'repeat' : 'clamp';\r\n}\r\n\r\nfunction createSamplerInfo(texture: FbxTextureData) {\r\n return {\r\n wrapS: wrapModeFromFbx(texture.wrapModeU ?? 0),\r\n wrapT: wrapModeFromFbx(texture.wrapModeV ?? 0),\r\n magFilter: 'linear' as TextureFilterMode,\r\n minFilter: 'linear' as TextureFilterMode,\r\n mipFilter: 'linear' as TextureFilterMode\r\n };\r\n}\r\n\r\nfunction resolveTextureImage(basePath: string, texture: FbxTextureData, vfs: VFS): AssetImageInfo | null {\r\n const video = texture.video;\r\n if (video?.content?.byteLength) {\r\n const filename =\r\n video.relativeFilename || video.filename || texture.relativeFilename || texture.fileName || '';\r\n const mimeType = filename ? vfs.guessMIMEType(filename) : '';\r\n return {\r\n data: toUint8Array(video.content),\r\n mimeType\r\n };\r\n }\r\n const rawPath =\r\n texture.relativeFilename || texture.fileName || video?.relativeFilename || video?.filename || '';\r\n if (!rawPath) {\r\n return null;\r\n }\r\n const normalized = rawPath.replace(/\\\\/g, '/');\r\n const uri =\r\n vfs.parseDataURI(normalized) || vfs.isAbsoluteURL(normalized)\r\n ? normalized\r\n : vfs.normalizePath(vfs.join(basePath, normalized));\r\n return { uri };\r\n}\r\n\r\nfunction createTextureInfo(basePath: string, texture: Nullable<FbxTextureData>, vfs: VFS, sRGB: boolean) {\r\n if (!texture) {\r\n return null;\r\n }\r\n const image = resolveTextureImage(basePath, texture, vfs);\r\n if (!image) {\r\n return null;\r\n }\r\n const transform = new Matrix4x4().identity();\r\n const uvScale = texture.scale ?? [1, 1];\r\n const uvOffset = texture.translation ?? [0, 0];\r\n transform.scaleLeft(new Vector3(uvScale[0], uvScale[1], 1));\r\n transform.translateLeft(new Vector3(uvOffset[0], uvOffset[1], 0));\r\n return {\r\n image,\r\n sRGB,\r\n sampler: createSamplerInfo(texture),\r\n texCoord: 0,\r\n transform\r\n } as AssetTextureInfo;\r\n}\r\n\r\nfunction registerTextureInfo(\r\n model: SharedModel,\r\n ctx: FbxImportContext,\r\n textureInfo: Nullable<AssetTextureInfo>\r\n) {\r\n const image = textureInfo?.image;\r\n if (!image || ctx.imageSet.has(image)) {\r\n return;\r\n }\r\n ctx.imageSet.add(image);\r\n model.setImage(ctx.nextImageIndex++, image);\r\n}\r\n\r\nfunction registerMaterialImages(model: SharedModel, ctx: FbxImportContext, material: AssetMaterial) {\r\n if (material.type !== 'pbrMetallicRoughness') {\r\n return;\r\n }\r\n const pbr = material as AssetPBRMaterialMR;\r\n registerTextureInfo(model, ctx, pbr.diffuseMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.normalMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.emissiveMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.occlusionMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.metallicMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.specularMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.specularColorMap ?? null);\r\n}\r\n\r\nfunction createMaterialAsset(\r\n material: Nullable<FbxMaterialData>,\r\n ctx: FbxImportContext,\r\n vertexColor: boolean,\r\n useTangent: boolean\r\n): AssetMaterial {\r\n const diffuse = material?.diffuseColor ?? [0.8, 0.8, 0.8];\r\n const opacity = material?.opacity ?? 1;\r\n const transparencyFactor = material?.transparencyFactor ?? 0;\r\n const transparentColor = material?.transparentColor ?? [0, 0, 0];\r\n const transparentStrength = Math.max(\r\n 0,\r\n Math.min(1, (transparentColor[0] + transparentColor[1] + transparentColor[2]) / 3)\r\n );\r\n const alpha = Math.max(0, Math.min(1, opacity * (1 - transparencyFactor * transparentStrength)));\r\n const assetMaterial: AssetPBRMaterialMR = {\r\n type: 'pbrMetallicRoughness',\r\n common: {\r\n vertexColor,\r\n vertexNormal: true,\r\n useTangent,\r\n alphaMode: alpha < 0.999 ? 'blend' : undefined,\r\n doubleSided: false,\r\n bumpScale: material?.bumpFactor ?? 1,\r\n emissiveColor: material?.emissiveColor ? new Vector3(...material.emissiveColor) : Vector3.zero(),\r\n emissiveStrength: 1,\r\n occlusionStrength: 1,\r\n normalMap:\r\n createTextureInfo(ctx.basePath, material?.textures.normal ?? null, ctx.vfs, false) ?? undefined,\r\n emissiveMap:\r\n createTextureInfo(ctx.basePath, material?.textures.emissive ?? null, ctx.vfs, true) ?? undefined\r\n },\r\n ior: 1.5,\r\n diffuse: new Vector4(diffuse[0], diffuse[1], diffuse[2], alpha),\r\n metallic: 0,\r\n roughness: material?.shininess ? Math.max(0.04, 1 - Math.min(material.shininess / 100, 1)) : 1,\r\n diffuseMap:\r\n createTextureInfo(ctx.basePath, material?.textures.diffuse ?? null, ctx.vfs, true) ?? undefined,\r\n specularFactor: Vector4.one()\r\n };\r\n return assetMaterial;\r\n}\r\n\r\nfunction getElementIndex(\r\n layer: Nullable<FbxLayerElementData<Float32Array> | FbxLayerElementData<Int32Array>>,\r\n polygonIndex: number,\r\n polygonVertexIndex: number,\r\n controlPointIndex: number\r\n) {\r\n if (!layer) {\r\n return -1;\r\n }\r\n switch (layer.mapping) {\r\n case 'ByControlPoint':\r\n case 'ByVertice':\r\n case 'ByVertex':\r\n return controlPointIndex;\r\n case 'ByPolygonVertex':\r\n return polygonVertexIndex;\r\n case 'ByPolygon':\r\n return polygonIndex;\r\n case 'AllSame':\r\n return 0;\r\n default:\r\n return polygonVertexIndex;\r\n }\r\n}\r\n\r\nfunction resolveLayerElement(\r\n layer: Nullable<FbxLayerElementData<Float32Array>>,\r\n polygonIndex: number,\r\n polygonVertexIndex: number,\r\n controlPointIndex: number,\r\n componentCount: number,\r\n out: number[]\r\n) {\r\n if (!layer) {\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = 0;\r\n }\r\n return;\r\n }\r\n let index = getElementIndex(layer, polygonIndex, polygonVertexIndex, controlPointIndex);\r\n if (index < 0) {\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = 0;\r\n }\r\n return;\r\n }\r\n if (layer.reference === 'IndexToDirect' && layer.indices) {\r\n index = asNumber(layer.indices[index], index);\r\n }\r\n const offset = index * componentCount;\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = layer.data[offset + i] ?? 0;\r\n }\r\n}\r\n\r\nfunction resolveMaterialIndex(layer: Nullable<FbxLayerElementData<Int32Array>>, polygonIndex: number) {\r\n if (!layer) {\r\n return 0;\r\n }\r\n const index = getElementIndex(layer, polygonIndex, polygonIndex, polygonIndex);\r\n return index >= 0 ? asNumber(layer.data[index], 0) : 0;\r\n}\r\n\r\nfunction getGeometryTransform(model: FbxModelData) {\r\n return matrixFromTRS(\r\n model.transform.geometricTranslation,\r\n model.transform.geometricRotation,\r\n model.transform.geometricScaling,\r\n model.transform.rotationOrder\r\n );\r\n}\r\n\r\nfunction buildSkinData(geometry: FbxGeometryData) {\r\n const clusterList = geometry.skin?.clusters ?? [];\r\n if (clusterList.length === 0) {\r\n return null;\r\n }\r\n const controlPointCount = (geometry.vertices.length / 3) >> 0;\r\n const influences = Array.from(\r\n { length: controlPointCount },\r\n () => [] as { joint: number; weight: number }[]\r\n );\r\n for (let jointIndex = 0; jointIndex < clusterList.length; jointIndex++) {\r\n const cluster = clusterList[jointIndex];\r\n const count = Math.min(cluster.indices.length, cluster.weights.length);\r\n for (let i = 0; i < count; i++) {\r\n const controlPoint = cluster.indices[i];\r\n if (controlPoint >= 0 && controlPoint < controlPointCount) {\r\n influences[controlPoint].push({ joint: jointIndex, weight: Number(cluster.weights[i]) });\r\n }\r\n }\r\n }\r\n return { clusterList, influences };\r\n}\r\n\r\nfunction buildPrimitives(geometry: FbxGeometryData, model: FbxModelData): FbxPrimitiveBuildData[] {\r\n const materialBuckets = new Map<\r\n number,\r\n {\r\n positions: number[];\r\n normals: number[];\r\n tangents: number[];\r\n colors: number[];\r\n texCoords: number[][];\r\n blendIndices: number[];\r\n blendWeights: number[];\r\n indices: number[];\r\n rawPositions: number[];\r\n rawBlendIndices: number[];\r\n rawJointWeights: number[];\r\n }\r\n >();\r\n const geometryTransform = getGeometryTransform(model);\r\n const normalTransform = new Matrix4x4(geometryTransform).inplaceInvertAffine().transpose();\r\n const positionScratch = [0, 0, 0];\r\n const normalScratch = [0, 0, 0];\r\n const tangentScratch = [0, 0, 0];\r\n const colorScratch = [1, 1, 1, 1];\r\n const uvScratch = Array.from({ length: Math.max(1, geometry.uvLayers.length) }, () => [0, 0]);\r\n const skinData = buildSkinData(geometry);\r\n let polygon: number[] = [];\r\n let polygonIndex = 0;\r\n let polygonVertexStart = 0;\r\n\r\n function getBucket(materialIndex: number) {\r\n let bucket = materialBuckets.get(materialIndex);\r\n if (!bucket) {\r\n bucket = {\r\n positions: [],\r\n normals: [],\r\n tangents: [],\r\n colors: [],\r\n texCoords: geometry.uvLayers.map(() => []),\r\n blendIndices: [],\r\n blendWeights: [],\r\n indices: [],\r\n rawPositions: [],\r\n rawBlendIndices: [],\r\n rawJointWeights: []\r\n };\r\n materialBuckets.set(materialIndex, bucket);\r\n }\r\n return bucket;\r\n }\r\n\r\n const controlPoints = geometry.vertices;\r\n for (let i = 0; i < geometry.polygonVertexIndex.length; i++) {\r\n const controlPointIndexRaw = geometry.polygonVertexIndex[i];\r\n const controlPointIndex = controlPointIndexRaw < 0 ? -controlPointIndexRaw - 1 : controlPointIndexRaw;\r\n polygon.push(controlPointIndex);\r\n if (controlPointIndexRaw >= 0) {\r\n continue;\r\n }\r\n const materialIndex = resolveMaterialIndex(geometry.materialLayer ?? null, polygonIndex);\r\n const bucket = getBucket(materialIndex);\r\n const baseIndex = bucket.positions.length / 3;\r\n for (let localIndex = 0; localIndex < polygon.length; localIndex++) {\r\n const cpIndex = polygon[localIndex];\r\n positionScratch[0] = controlPoints[cpIndex * 3] ?? 0;\r\n positionScratch[1] = controlPoints[cpIndex * 3 + 1] ?? 0;\r\n positionScratch[2] = controlPoints[cpIndex * 3 + 2] ?? 0;\r\n TMP_VEC3.setXYZ(positionScratch[0], positionScratch[1], positionScratch[2]);\r\n geometryTransform.transformPointAffine(TMP_VEC3, TMP_VEC3_B);\r\n bucket.positions.push(TMP_VEC3_B.x, TMP_VEC3_B.y, TMP_VEC3_B.z);\r\n bucket.rawPositions.push(TMP_VEC3_B.x, TMP_VEC3_B.y, TMP_VEC3_B.z);\r\n\r\n resolveLayerElement(\r\n geometry.normals ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 3,\r\n normalScratch\r\n );\r\n TMP_VEC3.setXYZ(normalScratch[0], normalScratch[1], normalScratch[2]);\r\n normalTransform.transformVector(TMP_VEC3, TMP_VEC4);\r\n TMP_VEC3.setXYZ(TMP_VEC4.x, TMP_VEC4.y, TMP_VEC4.z).inplaceNormalize();\r\n bucket.normals.push(TMP_VEC3.x, TMP_VEC3.y, TMP_VEC3.z);\r\n\r\n if (geometry.tangents) {\r\n resolveLayerElement(\r\n geometry.tangents ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 3,\r\n tangentScratch\r\n );\r\n TMP_VEC3.setXYZ(tangentScratch[0], tangentScratch[1], tangentScratch[2]);\r\n normalTransform.transformVector(TMP_VEC3, TMP_VEC4);\r\n TMP_VEC3.setXYZ(TMP_VEC4.x, TMP_VEC4.y, TMP_VEC4.z).inplaceNormalize();\r\n bucket.tangents.push(TMP_VEC3.x, TMP_VEC3.y, TMP_VEC3.z, 1);\r\n }\r\n\r\n if (geometry.colors) {\r\n resolveLayerElement(\r\n geometry.colors ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 4,\r\n colorScratch\r\n );\r\n bucket.colors.push(colorScratch[0], colorScratch[1], colorScratch[2], colorScratch[3]);\r\n }\r\n\r\n for (let uvIndex = 0; uvIndex < geometry.uvLayers.length; uvIndex++) {\r\n resolveLayerElement(\r\n geometry.uvLayers[uvIndex],\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 2,\r\n uvScratch[uvIndex]\r\n );\r\n bucket.texCoords[uvIndex].push(uvScratch[uvIndex][0], uvScratch[uvIndex][1]);\r\n }\r\n\r\n if (skinData) {\r\n const vertexInfluences = skinData.influences[cpIndex]\r\n .slice()\r\n .sort((a, b) => b.weight - a.weight)\r\n .slice(0, 4);\r\n while (vertexInfluences.length < 4) {\r\n vertexInfluences.push({ joint: 0, weight: 0 });\r\n }\r\n let total = 0;\r\n for (const influence of vertexInfluences) {\r\n total += influence.weight;\r\n }\r\n const denom = total > 0 ? total : 1;\r\n for (const influence of vertexInfluences) {\r\n bucket.blendIndices.push(influence.joint);\r\n bucket.blendWeights.push(influence.weight / denom);\r\n bucket.rawBlendIndices.push(influence.joint);\r\n bucket.rawJointWeights.push(influence.weight / denom);\r\n }\r\n }\r\n }\r\n const polygonSize = polygon.length;\r\n for (let local = 1; local < polygonSize - 1; local++) {\r\n bucket.indices.push(baseIndex, baseIndex + local, baseIndex + local + 1);\r\n }\r\n polygon = [];\r\n polygonVertexStart += polygonSize;\r\n polygonIndex++;\r\n }\r\n\r\n const result: FbxPrimitiveBuildData[] = [];\r\n for (const [materialIndex, bucket] of materialBuckets) {\r\n const vertices: Partial<FbxPrimitiveBuildData['vertices']> = {\r\n position: { format: 'position_f32x3', data: new Float32Array(bucket.positions) },\r\n normal: { format: 'normal_f32x3', data: new Float32Array(bucket.normals) }\r\n };\r\n if (bucket.tangents.length > 0) {\r\n vertices.tangent = { format: 'tangent_f32x4', data: new Float32Array(bucket.tangents) };\r\n }\r\n if (bucket.colors.length > 0) {\r\n vertices.diffuse = { format: 'diffuse_f32x4', data: new Float32Array(bucket.colors) };\r\n }\r\n for (let uvIndex = 0; uvIndex < bucket.texCoords.length; uvIndex++) {\r\n const uv = bucket.texCoords[uvIndex];\r\n if (uv.length === 0) {\r\n continue;\r\n }\r\n const semantic = `texCoord${uvIndex}` as VertexSemantic;\r\n const format = `tex${uvIndex}_f32x2` as VertexAttribFormat;\r\n vertices[semantic] = { format, data: new Float32Array(uv) };\r\n }\r\n if (bucket.blendIndices.length > 0) {\r\n vertices.blendIndices = {\r\n format: 'blendindices_f32x4' as VertexAttribFormat,\r\n data: new Float32Array(bucket.blendIndices)\r\n };\r\n vertices.blendWeights = {\r\n format: 'blendweights_f32x4' as VertexAttribFormat,\r\n data: new Float32Array(bucket.blendWeights)\r\n };\r\n }\r\n result.push({\r\n primitiveType: 'triangle-list',\r\n indices: toUint32Array(new Uint32Array(bucket.indices)),\r\n vertices: vertices as FbxPrimitiveBuildData['vertices'],\r\n rawPositions: toFloat32Array(new Float32Array(bucket.rawPositions)),\r\n rawBlendIndices:\r\n bucket.rawBlendIndices.length > 0 ? toUint16Array(new Uint16Array(bucket.rawBlendIndices)) : null,\r\n rawJointWeights:\r\n bucket.rawJointWeights.length > 0 ? toFloat32Array(new Float32Array(bucket.rawJointWeights)) : null,\r\n materialIndex,\r\n name: materialBuckets.size > 1 ? `${geometry.name}_${materialIndex}` : geometry.name\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nfunction getBounds(positions: Float32Array) {\r\n const min = new Vector3(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY);\r\n const max = new Vector3(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY);\r\n for (let i = 0; i < positions.length; i += 3) {\r\n min.x = Math.min(min.x, positions[i]);\r\n min.y = Math.min(min.y, positions[i + 1]);\r\n min.z = Math.min(min.z, positions[i + 2]);\r\n max.x = Math.max(max.x, positions[i]);\r\n max.y = Math.max(max.y, positions[i + 1]);\r\n max.z = Math.max(max.z, positions[i + 2]);\r\n }\r\n if (!Number.isFinite(min.x)) {\r\n min.setXYZ(0, 0, 0);\r\n max.setXYZ(0, 0, 0);\r\n }\r\n return { min, max };\r\n}\r\n\r\nfunction composeFbxLocalMatrix(transform: FbxTransformData, hasParent: boolean) {\r\n const scale = hasParent && transform.inheritType === 2 ? Vector3.one() : new Vector3(...transform.scale);\r\n const local = new Matrix4x4().identity();\r\n local.translateLeft(\r\n new Vector3(-transform.scalingPivot[0], -transform.scalingPivot[1], -transform.scalingPivot[2])\r\n );\r\n local.scaleLeft(scale);\r\n local.translateLeft(new Vector3(...transform.scalingPivot));\r\n local.translateLeft(new Vector3(...transform.scalingOffset));\r\n local.translateLeft(\r\n new Vector3(-transform.rotationPivot[0], -transform.rotationPivot[1], -transform.rotationPivot[2])\r\n );\r\n local.rotateLeft(Quaternion.inverse(quaternionFromDegreesXYZ(transform.postRotation)));\r\n local.rotateLeft(quaternionFromDegrees(transform.rotation, transform.rotationOrder));\r\n local.rotateLeft(quaternionFromDegreesXYZ(transform.preRotation));\r\n local.translateLeft(new Vector3(...transform.rotationPivot));\r\n local.translateLeft(new Vector3(...transform.rotationOffset));\r\n local.translateLeft(new Vector3(...transform.translation));\r\n return local;\r\n}\r\n\r\nfunction matrixFromFloat64Array(array: Nullable<Float64Array | Float32Array>) {\r\n if (!array || array.length < 16) {\r\n return Matrix4x4.identity();\r\n }\r\n const matrix = new Matrix4x4();\r\n for (let i = 0; i < 16; i++) {\r\n matrix[i] = array[i];\r\n }\r\n return matrix;\r\n}\r\n\r\nfunction resolveClusterInverseBind(cluster: FbxClusterData, jointNode: Nullable<AssetHierarchyNode>) {\r\n // FBX cluster Transform is the geometry node bind matrix. We already bake the geometry\r\n // transform into mesh vertices, so inverse bind should come from the link node only.\r\n if (cluster.transformLink) {\r\n return matrixFromFloat64Array(cluster.transformLink).inplaceInvertAffine();\r\n }\r\n if (jointNode?.worldMatrix) {\r\n return new Matrix4x4(jointNode.worldMatrix).inplaceInvertAffine();\r\n }\r\n return Matrix4x4.identity();\r\n}\r\n\r\nfunction computeModelWorldMatrix(\r\n modelId: number,\r\n ctx: FbxImportContext,\r\n bindWorldOverrides: Map<number, Matrix4x4>,\r\n cache: Map<number, Matrix4x4>\r\n): Matrix4x4 {\r\n const cached = cache.get(modelId);\r\n if (cached) {\r\n return cached;\r\n }\r\n const override = bindWorldOverrides.get(modelId);\r\n if (override) {\r\n cache.set(modelId, override);\r\n return override;\r\n }\r\n const model = ctx.modelMap.get(modelId);\r\n if (!model) {\r\n return Matrix4x4.identity();\r\n }\r\n const local = composeFbxLocalMatrix(model.transform, model.parentId != null);\r\n const world: Matrix4x4 =\r\n model.parentId != null\r\n ? Matrix4x4.multiply(computeModelWorldMatrix(model.parentId, ctx, bindWorldOverrides, cache), local)\r\n : local;\r\n cache.set(modelId, world);\r\n return world;\r\n}\r\n\r\nfunction applyClusterBindPose(\r\n cluster: FbxClusterData,\r\n jointNode: AssetHierarchyNode,\r\n ctx: FbxImportContext,\r\n bindWorldOverrides: Map<number, Matrix4x4>,\r\n worldCache: Map<number, Matrix4x4>\r\n) {\r\n if (!cluster.transformLink || cluster.boneModelId == null) {\r\n return;\r\n }\r\n const bindWorld = matrixFromFloat64Array(cluster.transformLink);\r\n const source = ctx.modelMap.get(cluster.boneModelId);\r\n const parentWorld =\r\n source?.parentId != null\r\n ? computeModelWorldMatrix(source.parentId, ctx, bindWorldOverrides, worldCache)\r\n : null;\r\n const local = parentWorld\r\n ? Matrix4x4.multiply(new Matrix4x4(parentWorld).inplaceInvertAffine(), bindWorld)\r\n : bindWorld;\r\n local.decompose(jointNode.scaling, jointNode.rotation, jointNode.position);\r\n worldCache.set(cluster.boneModelId, bindWorld);\r\n}\r\n\r\nfunction hasAncestorOfType(model: FbxModelData, ctx: FbxImportContext, type: string) {\r\n let parentId = model.parentId;\r\n while (parentId != null) {\r\n const parent = ctx.modelMap.get(parentId);\r\n if (!parent) {\r\n break;\r\n }\r\n if (parent.type === type) {\r\n return true;\r\n }\r\n parentId = parent.parentId;\r\n }\r\n return false;\r\n}\r\n\r\nfunction hasDescendantOfType(model: FbxModelData, ctx: FbxImportContext, type: string) {\r\n for (const childId of model.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (!child) {\r\n continue;\r\n }\r\n if (child.type === type || hasDescendantOfType(child, ctx, type)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction collectDescendantIds(model: FbxModelData, ctx: FbxImportContext, out: number[]) {\r\n out.push(model.id);\r\n for (const childId of model.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (child) {\r\n collectDescendantIds(child, ctx, out);\r\n }\r\n }\r\n}\r\n\r\nfunction buildSkeleton(geometry: FbxGeometryData, model: SharedModel, ctx: FbxImportContext) {\r\n const cached = ctx.skeletonMap.get(geometry.id);\r\n if (cached) {\r\n return cached;\r\n }\r\n const skin = geometry.skin;\r\n if (!skin || skin.clusters.length === 0) {\r\n return null;\r\n }\r\n const skeleton = new AssetSkeleton(`${geometry.name}_skeleton`);\r\n const bindWorldOverrides = new Map<number, Matrix4x4>();\r\n for (const cluster of skin.clusters) {\r\n if (cluster.boneModelId != null && cluster.transformLink) {\r\n bindWorldOverrides.set(cluster.boneModelId, matrixFromFloat64Array(cluster.transformLink));\r\n }\r\n }\r\n const bindWorldCache = new Map<number, Matrix4x4>();\r\n for (const cluster of skin.clusters) {\r\n if (cluster.boneModelId == null) {\r\n continue;\r\n }\r\n const jointNode =\r\n ctx.nodeMap.get(cluster.boneModelId) ?? createAssetNode(cluster.boneModelId, model, ctx);\r\n if (!jointNode) {\r\n continue;\r\n }\r\n applyClusterBindPose(cluster, jointNode, ctx, bindWorldOverrides, bindWorldCache);\r\n const cacheKey = `${geometry.id}:${cluster.boneModelId}`;\r\n const inverseBind = ctx.jointBindMatrices.get(cacheKey) ?? resolveClusterInverseBind(cluster, jointNode);\r\n ctx.skeletonJointIds.add(cluster.boneModelId);\r\n ctx.jointBindMatrices.set(cacheKey, inverseBind);\r\n skeleton.addJoint(jointNode, inverseBind);\r\n }\r\n if (skeleton.joints.length === 0) {\r\n return null;\r\n }\r\n model.addSkeleton(skeleton);\r\n ctx.skeletonMap.set(geometry.id, skeleton);\r\n return skeleton;\r\n}\r\n\r\nfunction buildSkeletonFromLimbRoot(root: FbxModelData, model: SharedModel, ctx: FbxImportContext) {\r\n const cached = ctx.skeletonMap.get(root.id);\r\n if (cached) {\r\n return cached;\r\n }\r\n const descendantIds: number[] = [];\r\n collectDescendantIds(root, ctx, descendantIds);\r\n if (descendantIds.some((id) => ctx.skeletonJointIds.has(id))) {\r\n return null;\r\n }\r\n const skeleton = new AssetSkeleton(`${root.name || `${root.type}_${root.id}`}_skeleton`);\r\n const visit = (source: FbxModelData) => {\r\n if (source.type === 'LimbNode') {\r\n const jointNode = ctx.nodeMap.get(source.id) ?? createAssetNode(source.id, model, ctx);\r\n if (jointNode) {\r\n const cacheKey = `${root.id}:${source.id}`;\r\n const inverseBind =\r\n ctx.jointBindMatrices.get(cacheKey) ??\r\n (jointNode.worldMatrix\r\n ? new Matrix4x4(jointNode.worldMatrix).inplaceInvertAffine()\r\n : Matrix4x4.identity());\r\n ctx.jointBindMatrices.set(cacheKey, inverseBind);\r\n skeleton.addJoint(jointNode, inverseBind);\r\n }\r\n }\r\n for (const childId of source.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (child) {\r\n visit(child);\r\n }\r\n }\r\n };\r\n visit(root);\r\n if (skeleton.joints.length === 0) {\r\n return null;\r\n }\r\n model.addSkeleton(skeleton);\r\n ctx.skeletonMap.set(root.id, skeleton);\r\n return skeleton;\r\n}\r\n\r\nfunction buildSkeletonsFromLimbRoots(model: SharedModel, ctx: FbxImportContext) {\r\n const roots = [...(ctx.objects.Model?.values() ?? [])]\r\n .map((node) => ctx.modelMap.get(getNodeId(node)))\r\n .filter(\r\n (node): node is FbxModelData =>\r\n !!node && hasDescendantOfType(node, ctx, 'LimbNode') && !hasAncestorOfType(node, ctx, 'LimbNode')\r\n )\r\n .sort((a, b) => a.id - b.id);\r\n for (const root of roots) {\r\n buildSkeletonFromLimbRoot(root, model, ctx);\r\n }\r\n}\r\n\r\nfunction createMeshData(\r\n geometry: FbxGeometryData,\r\n modelData: FbxModelData,\r\n model: SharedModel,\r\n ctx: FbxImportContext\r\n) {\r\n const primitives = buildPrimitives(geometry, modelData);\r\n const materials = (ctx.connectionChildren.get(modelData.id) ?? [])\r\n .filter((connection) => ctx.materialMap.has(connection.from))\r\n .map((connection) => ctx.materialMap.get(connection.from)!)\r\n .sort((a, b) => a.id - b.id);\r\n const subMeshes: AssetSubMeshData[] = [];\r\n for (const primitiveData of primitives) {\r\n const bounds = getBounds(primitiveData.rawPositions);\r\n const primitive: AssetPrimitiveInfo = {\r\n vertices: toVertexRecord(primitiveData.vertices) as AssetPrimitiveInfo['vertices'],\r\n indices: toUint32Array(primitiveData.indices),\r\n indexCount: primitiveData.indices.length,\r\n type: primitiveData.primitiveType as PrimitiveType,\r\n boxMin: bounds.min,\r\n boxMax: bounds.max\r\n };\r\n model.addPrimitive(primitive);\r\n const materialSource = materials[primitiveData.materialIndex] ?? materials[0] ?? null;\r\n const hasVertexColor = !!primitive.vertices.diffuse;\r\n const hasVertexTangent = !!primitive.vertices.tangent;\r\n let material: AssetMaterial;\r\n if (materialSource) {\r\n const materialHash = `fbx_${materialSource.id}_${hasVertexColor ? 'C' : 'N'}_${hasVertexTangent ? 'T' : 'NT'}`;\r\n material =\r\n model.getMaterial(materialHash) ??\r\n createMaterialAsset(materialSource, ctx, hasVertexColor, hasVertexTangent);\r\n if (!model.getMaterial(materialHash)) {\r\n registerMaterialImages(model, ctx, material);\r\n model.setMaterial(materialHash, material);\r\n }\r\n } else {\r\n material = createMaterialAsset(null, ctx, hasVertexColor, hasVertexTangent);\r\n }\r\n const subMesh: AssetSubMeshData = {\r\n primitive,\r\n material,\r\n rawPositions: toFloat32Array(primitiveData.rawPositions),\r\n rawBlendIndices: primitiveData.rawBlendIndices ? toUint16Array(primitiveData.rawBlendIndices) : null,\r\n rawJointWeights: primitiveData.rawJointWeights ? toFloat32Array(primitiveData.rawJointWeights) : null,\r\n name: primitiveData.name || geometry.name,\r\n numTargets: 0\r\n };\r\n subMeshes.push(subMesh);\r\n }\r\n return {\r\n morphWeights: [],\r\n morphNames: [],\r\n subMeshes\r\n } as AssetMeshData;\r\n}\r\n\r\nfunction buildModelMaps(ctx: FbxImportContext) {\r\n for (const node of ctx.objects.Video?.values() ?? []) {\r\n const data = readVideoData(node);\r\n ctx.videoMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Texture?.values() ?? []) {\r\n const data = readTextureData(node, ctx);\r\n ctx.textureMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Material?.values() ?? []) {\r\n const data = readMaterialData(node, ctx);\r\n ctx.materialMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Deformer?.values() ?? []) {\r\n if (node.properties[2] === 'Skin') {\r\n const data = readSkinData(node, ctx);\r\n ctx.skinMap.set(data.id, data);\r\n }\r\n }\r\n for (const node of ctx.objects.Geometry?.values() ?? []) {\r\n const data = readGeometryData(node, ctx);\r\n ctx.geometryMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Model?.values() ?? []) {\r\n const data = readModelData(node, ctx);\r\n ctx.modelMap.set(data.id, data);\r\n }\r\n}\r\n\r\nfunction populateNodeTransforms(modelNode: AssetHierarchyNode, source: FbxModelData) {\r\n const local = composeFbxLocalMatrix(source.transform, source.parentId != null);\r\n local.decompose(modelNode.scaling, modelNode.rotation, modelNode.position);\r\n if (source.parentId != null && source.transform.inheritType === 2) {\r\n modelNode.scaling.setXYZ(1, 1, 1);\r\n }\r\n}\r\n\r\nfunction createAssetNode(modelId: number, model: SharedModel, ctx: FbxImportContext) {\r\n const source = ctx.modelMap.get(modelId);\r\n if (!source) {\r\n return null;\r\n }\r\n const existing = ctx.nodeMap.get(modelId);\r\n if (existing) {\r\n return existing;\r\n }\r\n const parent = source.parentId != null ? createAssetNode(source.parentId, model, ctx) : null;\r\n const node: AssetHierarchyNode = new AssetHierarchyNode(\r\n source.name || `${source.type}_${modelId}`,\r\n model,\r\n parent ?? undefined\r\n );\r\n ctx.nodeMap.set(modelId, node);\r\n populateNodeTransforms(node, source);\r\n const geometryConnection = (ctx.connectionChildren.get(modelId) ?? []).find((connection) =>\r\n ctx.geometryMap.has(connection.from)\r\n );\r\n if (geometryConnection) {\r\n const geometry = ctx.geometryMap.get(geometryConnection.from)!;\r\n node.mesh = createMeshData(geometry, source, model, ctx);\r\n node.skeleton = buildSkeleton(geometry, model, ctx);\r\n }\r\n for (const childId of source.children) {\r\n createAssetNode(childId, model, ctx);\r\n }\r\n return node;\r\n}\r\n\r\nfunction createImportContext(document: FbxDocument, basePath: string, vfs: VFS): FbxImportContext {\r\n const connectionMaps = readConnections(document.connections);\r\n return {\r\n document,\r\n objects: document.objects,\r\n connectionChildren: connectionMaps.children,\r\n connectionParents: connectionMaps.parents,\r\n modelMap: new Map(),\r\n geometryMap: new Map(),\r\n materialMap: new Map(),\r\n textureMap: new Map(),\r\n videoMap: new Map(),\r\n skinMap: new Map(),\r\n skeletonMap: new Map(),\r\n jointBindMatrices: new Map(),\r\n skeletonJointIds: new Set(),\r\n imageSet: new Set(),\r\n nextImageIndex: 0,\r\n nodeMap: new Map(),\r\n basePath,\r\n vfs\r\n };\r\n}\r\n\r\n/**\r\n * FBX importer that converts common FBX 7.x scene data into SharedModel.\r\n * Current scope targets hierarchy, mesh, material, embedded/external textures,\r\n * and basic skinning data. Animation is intentionally not mapped yet.\r\n * @public\r\n */\r\nexport class FBXImporter extends AbstractModelImporter {\r\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\r\n ASSERT(!!vfs, 'FBXImporter requires a VFS');\r\n const buffer = await data.arrayBuffer();\r\n const document = await parseFbx(buffer);\r\n const ctx = createImportContext(document, basePath, vfs!);\r\n buildModelMaps(ctx);\r\n\r\n const scene = new AssetScene('Scene');\r\n for (const [modelId, modelData] of ctx.modelMap) {\r\n if (modelData.parentId != null) {\r\n continue;\r\n }\r\n const node = createAssetNode(modelId, model, ctx);\r\n if (\r\n node &&\r\n (modelData.type === 'Root' ||\r\n modelData.type === 'Null' ||\r\n modelData.type === 'Mesh' ||\r\n modelData.type === 'LimbNode')\r\n ) {\r\n scene.rootNodes.push(node);\r\n }\r\n }\r\n if (scene.rootNodes.length === 0) {\r\n for (const [modelId] of ctx.modelMap) {\r\n const node = createAssetNode(modelId, model, ctx);\r\n if (node && !node.parent) {\r\n scene.rootNodes.push(node);\r\n }\r\n }\r\n }\r\n for (const node of model.nodes) {\r\n if (!node.parent) {\r\n node.computeTransforms(null);\r\n }\r\n }\r\n buildSkeletonsFromLimbRoots(model, ctx);\r\n model.scenes.push(scene);\r\n model.activeScene = 0;\r\n }\r\n\r\n async loadModel(path: string, vfs?: VFS): Promise<SharedModel> {\r\n if (!vfs) {\r\n vfs = getEngine().VFS;\r\n }\r\n\r\n const mimeType = vfs.guessMIMEType(path);\r\n const data = (await vfs.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n const blob = new Blob([data], { type: mimeType });\r\n const model = new SharedModel();\r\n await this.import(blob, model, PathUtils.dirname(path), vfs);\r\n return model;\r\n }\r\n}\r\n"],"names":["AbstractModelImporter","loadModel","path","vfs","getEngine","VFS","mimeType","guessMIMEType","data","readFile","encoding","blob","Blob","type","model","SharedModel","import","PathUtils","dirname","loadModelToScene","scene","instancing","createSceneNode","resourceManager","ComponentType","GLTFAccessor","bufferView","byteOffset","componentType","normalized","count","max","min","sparse","name","_typedView","_filteredView","_normalizedFilteredView","_normalizedTypedView","accessorInfo","getTypedView","gltf","undefined","bufferViews","buffer","_loadedBuffers","componentSize","getComponentSize","componentCount","getComponentCount","arrayLength","byteStride","console","warn","byteLength","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","createView","applySparse","getNormalizedTypedView","typedView","dequantize","getDeinterlacedView","func","stride","dataView","DataView","i","offset","Math","floor","size","getNormalizedDeinterlacedView","filteredView","view","indicesBufferView","indices","indicesBuffer","indicesByteOffset","indicesComponentSize","indicesComponentCount","indicesArrayLength","indicesTypedView","valuesBufferView","values","valuesBuffer","valuesByteOffset","valuesComponentSize","valuesComponentCount","valuesArrayLength","valuesTypedView","k","typedArray","map","c","VRM_SPRING_BONE_SUBSTEPS","VRM_GRAVITY_ACCELERATION_SCALE","VRM_GRAVITY_POWER_TO_ACCELERATION","VRM_STIFFNESS_TO_FRAME_HARDNESS","VRM_DRAGFORCE_SCALE","GLTFImporter","initDraco3d","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","basePath","arrayBuffer","isGLB","loadBinary","Response","json","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","jsonSlice","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","accessors","accessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","assetScene","AssetScene","node","rootNodes","activeScene","_loadVRMC0SpringBones","_loadVRMC1SpringBones","_buildJointDynamicsSpringBones","clearMorphTargetGroups","hasVRMC1","extensions","VRMC_vrm","hasVRMC0","VRM","_loadVRMC1MorphTargetGroups","_loadVRMC0MorphTargetGroups","buildMorphTargetGroupsByName","groups","blendShapeMaster","blendShapeGroups","Array","isArray","value","groupInfo","_getVRMC0BlendShapeGroupName","bindings","binds","bindValue","bindInfo","meshIndex","mesh","targetIndex","index","targetName","_getMorphTargetName","weight","addMorphTargetGroup","expressions","_loadVRMC1ExpressionMap","preset","custom","expressionMap","expressionInfo","Object","entries","expression","morphTargetBinds","nodeIndex","isBinary","presetName","toLowerCase","subMesh","subMeshes","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","ref","_getIndex","filter","springBoneColliderGroups","springInfo","springs","joints","jointRef","jointInfo","_getSpringBoneJointInfo","hitRadius","stiffness","gravityPower","gravityDir","dragForce","springBones","center","secondaryAnimation","boneGroupInfo","boneGroups","rootBones","bones","stiffiness","comment","fallback","x","y","z","obj","clone","keys","Number","isInteger","key","directIndex","jointIndex","colliderMap","Map","flatPlaneMap","nodeKeys","forEach","set","converted","_toJointDynamicsCollider","jointDynamicsColliders","flatPlane","_toJointDynamicsFlatPlane","spring","chains","_collectJointDynamicsChainsFromRoots","_collectJointDynamicsChains","flatPlanes","colliderKeys","Set","flatPlaneKeys","get","colliderKey","_getJointDynamicsColliderKey","has","add","flatPlaneKey","_getJointDynamicsFlatPlaneKey","jointDynamicsSpringBones","controllerConfig","_mapSpringJointsToControllerConfig","chainStart","chainEnd","isParentOf","_pushJointDynamicsChain","end","_findSingleChildChainEnd","inferredEnd","current","children","loop","gravity","joint","magnitudeSq","normalize","scale","invCount","frameHardness","frameResistance","enableBroadPhase","enableSurfaceCollision","subSteps","curves","hardness","InterpolatorScalar","constant","_frameRatioToSubstepRatio","resistance","_frameRateToSubstepRate","pointRadius","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","constraintOptions","structuralVertical","structuralHorizontal","shear","bendingVertical","collideStructuralVertical","collideStructuralHorizontal","collideShear","isLoop","frameRatio","ratio","pow","frameRate","rate","r","_getAssetNodeKey","_vector3Key","localPosition","_quaternionKey","localRotation","_numberKey","radiusTailScale","height","friction","isInverseCollider","forceType","position","up","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","FLOAT","Error","matrices","m","addJoint","Matrix4x4","subarray","addSkeleton","_loadVRMAHumanoidSkeleton","VRMC_vrm_animation","humanBones","humanoid","mapping","_getVRMAHumanoidMapping","hips","body","HumanoidBodyRig","Hips","humanBoneNodes","_getVRMAHumanoidNodes","existingSkeleton","find","every","_setAssetSkeletonHumanoidMapping","root","_findCommonRoot","jointSet","_sortSkeletonJoints","humanoidJointMapping","leftHand","rightHand","setBody","vrmaName","rig","_getVRMAHumanBoneNode","setHand","side","Spine","Chest","UpperChest","Neck","Head","LeftShoulder","LeftUpperArm","LeftLowerArm","LeftHand","RightShoulder","RightUpperArm","RightLowerArm","RightHand","LeftUpperLeg","LeftLowerLeg","LeftFoot","LeftToes","RightUpperLeg","RightLowerLeg","RightFoot","RightToes","HumanoidHandRig","ThumbProximal","ThumbIntermediate","ThumbDistal","IndexProximal","IndexIntermediate","IndexDistal","MiddleProximal","MiddleIntermediate","MiddleDistal","RingProximal","RingIntermediate","RingDistal","PinkyProximal","PinkyIntermediate","PinkyDistal","result","boneName","addMappedNodes","mapped","sorted","visit","child","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","translate","rotation","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","output","error","mode","interpolation","interpolator","interpolatorType","target","Interpolator","animationData","tracks","targetNodeIndex","targetNode","track","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","translationValues","scaleValues","rotationValues","t","s","instances","matrix","decompose","translation","childIndex","meshes","_loadMesh","meshInfo","morphWeights","primitives","meshName","loadedPrimitives","p","subMeshName","subMeshData","material","rawPositions","rawBlendIndices","rawJointWeights","vertices","indexCount","boxMax","boxMin","dracoExtension","dracoMeshDecoder","DracoMeshDecoder","attrib","_loadVertexBuffer","targets","getDevice","positionInfo","numVertices","getVertexFormatComponentCount","format","vertexIndices","targetBox","targetMap","POSITION","MORPH_TARGET_POSITION","NORMAL","MORPH_TARGET_NORMAL","TANGENT","MORPH_TARGET_TANGENT","TEXCOORD_0","MORPH_TARGET_TEX0","TEXCOORD_1","MORPH_TARGET_TEX1","TEXCOORD_2","MORPH_TARGET_TEX2","TEXCOORD_3","MORPH_TARGET_TEX3","COLOR_0","MORPH_TARGET_COLOR","morphAttribSet","numComponents","accessorIndex","BoundingBox","morphAttribCount","_loadIndexBuffer","primitiveType","_primitiveType","materialInfo","materials","outlineUsesTangentNormals","_shouldGenerateMToonOutlineNormals","source","_generateMToonOutlineNormals","loaded","hasVertexNormal","hasVertexColor","hasVertexTangent","flagsHash","v","materialHash","getMaterial","_loadMaterial","setMaterial","addPrimitive","primitiveInfo","VRMC_materials_mtoon","normalTexture","some","sums","positions","positionStride","vertexCount","_getTriangleIndices","i0","i1","i2","p0","p1","p2","ax","ay","az","bx","by","bz","nx","ny","nz","_accumulateOutlineNormal","normalInfo","normals","normalStride","tangents","_outlinePositionKey","sum","len","hypot","fallbackLen","round","vertexColor","vertexNormal","useTangent","materialName","assetMaterial","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","bumpScale","emissiveColor","emissiveStrength","occlusionStrength","alphaMode","alphaCutoff","doubleSided","mtoonExtension","KHR_materials_pbrSpecularGlossiness","normalMap","_loadTexture","occlusionMap","occlusionTexture","strength","emissiveMap","emissiveTexture","KHR_materials_emissive_strength","emissiveFactor","ior","common","diffuse","Vector4","baseColorFactor","metallic","metallicFactor","roughness","roughnessFactor","diffuseMap","baseColorTexture","metallicMap","metallicRoughnessTexture","metallicIndex","roughnessIndex","_loadMToonMaterial","sg","diffuseFactor","specular","specularFactor","glossness","glossnessFactor","diffuseTexture","specularGlossnessMap","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","specularMap","specularTexture","specularColorMap","specularColorTexture","iridescence","KHR_materials_iridescence","iridescenceFactor","iridescenceMap","iridescenceTexture","iridescenceIor","iridescenceThicknessMinimum","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","transmission","KHR_materials_transmission","transmissionFactor","transmissionMap","transmissionTexture","thicknessFactor","thicknessMap","attenuationDistance","attenuationColor","volume","KHR_materials_volume","thicknessTexture","sheen","KHR_materials_sheen","sheenColorFactor","sheenColorMap","sheenColorTexture","sheenRoughnessFactor","sheenRoughnessMap","sheenRoughnessTexture","cc","KHR_materials_clearcoat","clearcoat","clearCoatFactor","clearcoatFactor","clearCoatIntensityMap","clearcoatTexture","clearCoatRoughnessFactor","clearcoatRoughnessFactor","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearCoatNormalMap","clearcoatNormalTexture","mtoon","pbr","mtoonMaterial","shadeColorFactor","shadeMultiplyMap","shadeMultiplyTexture","shadingShiftFactor","shadingShiftMap","shadingShiftTexture","shadingShiftTextureScale","shadingToonyFactor","giEqualizationFactor","matcapFactor","matcapMap","matcapTexture","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimMultiplyMap","rimMultiplyTexture","rimLightingMixFactor","outlineWidthMode","outlineWidthFactor","outlineWidthMultiplyMap","outlineWidthMultiplyTexture","outlineColorFactor","outlineLightingMixFactor","uvAnimationMaskMap","uvAnimationMaskTexture","uvAnimationScrollXSpeedFactor","uvAnimationScrollYSpeedFactor","uvAnimationRotationSpeedFactor","transparentWithZWrite","renderQueueOffsetNumber","sRGB","mt","image","texCoord","transform","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","getImage","images","imageUrl","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","INT","UBYTE","USHORT","getAttributeBuffer","semantic","device","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos","FBX_BINARY_MAGIC","stripQuotes","text","toNumber","test","parseInt","parseFloat","splitAsciiProperties","inString","depth","ch","trim","parseAsciiScalar","trimmed","includes","begin","lastIndexOf","colon","valuesText","tokens","token","Float64Array","from","parseAsciiNodeHeader","line","properties","propsText","parseAscii","propertyListLength","stack","lines","split","rawLine","pop","endsWith","BinaryReader","_view","_buffer","_decoder","_offset","skip","bytes","getUint8","getInt16","getInt32","getUint32","getFloat32","getFloat64","getBigInt64","getBoolean","getString","replace","getArrayBuffer","inflateDeflate","expectedLength","DecompressionStream","stream","pipeThrough","readArray","reader","elementByteLength","arrayFactory","compressedLength","compressed","readBinaryProperty","BigInt64Array","parseBinaryNode","use64","endOffset","numProperties","nameLength","String","fromCharCode","isBinaryFbx","magic","getChild","getChildren","buildObjectMap","objectsNode","id","idNumber","NaN","isFinite","buildConnections","connectionsNode","to","property","getVersion","versionNode","parseFbx","objects","connections","toUint8Array","toUint16Array","toUint32Array","toFloat32Array","toVertexRecord","record","TMP_VEC3","TMP_VEC3_B","TMP_VEC4","asNumber","asString","getProperty70","props70","prop","getProperty70Value","getNodeId","getObjectName","raw","parts","toRadiansTuple","PI","getEulerOrder","order","quaternionFromDegrees","euler","fromEulerAngle","quaternionFromDegreesXYZ","matrixFromTRS","rotationDegrees","rotationOrder","compose","readTransformData","lclTranslation","lclRotation","lclScaling","preRotation","postRotation","rotationOffset","rotationPivot","scalingOffset","scalingPivot","geometricTranslation","geometricRotation","geometricScaling","inheritType","readConnections","parents","connection","listA","listB","readVideoData","contentNode","contentProp","content","ArrayBuffer","relativeFilename","filename","readTextureData","ctx","linkedVideoConnection","connectionChildren","Video","video","videoMap","fileName","uvSet","wrapModeU","wrapModeV","normalizeTextureSlot","readMaterialData","texture","textureMap","shadingModel","diffuseColor","transparentColor","opacity","transparencyFactor","shininess","bumpFactor","readClusterData","boneConnection","Model","transformLink","linkMode","boneModelId","readSkinData","clusters","clusterNode","Deformer","readLayerElementFloat","reference","dataNode","indexNode","readLayerElementInt","readGeometryData","skinConnection","deformerNode","skinMap","polygonVertexIndex","colors","uvLayers","layer","materialLayer","readModelData","parentConnection","connectionParents","childConnections","parentId","wrapModeFromFbx","createSamplerInfo","resolveTextureImage","rawPath","createTextureInfo","uvScale","uvOffset","scaleLeft","registerTextureInfo","imageSet","nextImageIndex","registerMaterialImages","createMaterialAsset","transparentStrength","alpha","emissive","getElementIndex","polygonIndex","controlPointIndex","resolveLayerElement","out","resolveMaterialIndex","getGeometryTransform","buildSkinData","geometry","clusterList","controlPointCount","influences","cluster","controlPoint","buildPrimitives","materialBuckets","geometryTransform","normalTransform","inplaceInvertAffine","transpose","positionScratch","normalScratch","tangentScratch","colorScratch","uvScratch","skinData","polygon","polygonVertexStart","getBucket","materialIndex","bucket","texCoords","blendIndices","blendWeights","controlPoints","controlPointIndexRaw","baseIndex","localIndex","cpIndex","setXYZ","transformPointAffine","transformVector","inplaceNormalize","uvIndex","vertexInfluences","sort","a","b","total","influence","denom","polygonSize","local","tangent","uv","getBounds","POSITIVE_INFINITY","NEGATIVE_INFINITY","composeFbxLocalMatrix","hasParent","rotateLeft","inverse","matrixFromFloat64Array","array","resolveClusterInverseBind","jointNode","worldMatrix","computeModelWorldMatrix","modelId","bindWorldOverrides","cache","cached","override","modelMap","world","multiply","applyClusterBindPose","worldCache","bindWorld","parentWorld","hasAncestorOfType","hasDescendantOfType","childId","collectDescendantIds","buildSkeleton","skeletonMap","bindWorldCache","nodeMap","createAssetNode","cacheKey","inverseBind","jointBindMatrices","skeletonJointIds","buildSkeletonFromLimbRoot","descendantIds","buildSkeletonsFromLimbRoots","roots","createMeshData","modelData","materialMap","primitiveData","bounds","materialSource","buildModelMaps","Texture","Material","Geometry","geometryMap","populateNodeTransforms","modelNode","existing","geometryConnection","createImportContext","document","connectionMaps","FBXImporter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zephyr3d_loaders.js","sources":["../../../../libs/loaders/src/importer.ts","../../../../libs/loaders/src/gltf/helpers.ts","../../../../libs/loaders/src/gltf/gltf_importer.ts","../../../../libs/loaders/src/fbx/parser.ts","../../../../libs/loaders/src/fbx/fbx_importer.ts"],"sourcesContent":["import type { SceneNode, Scene } from '@zephyr3d/scene';\r\nimport { getEngine, SharedModel } from '@zephyr3d/scene';\r\nimport { PathUtils, type VFS } from '@zephyr3d/base';\r\n\r\n/**\r\n * Generic model importer interface\r\n * @public\r\n */\r\nexport abstract class AbstractModelImporter {\r\n abstract import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS): void | Promise<void>;\r\n async loadModel(path: string, vfs?: VFS): Promise<SharedModel> {\r\n if (!vfs) {\r\n vfs = getEngine().VFS;\r\n }\r\n const mimeType = vfs.guessMIMEType(path);\r\n const data = (await vfs.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n const blob = new Blob([data], { type: mimeType });\r\n const model = new SharedModel();\r\n await this.import(blob, model, PathUtils.dirname(path), vfs);\r\n return model;\r\n }\r\n async loadModelToScene(scene: Scene, path: string, instancing?: boolean, vfs?: VFS): Promise<SceneNode> {\r\n const model = await this.loadModel(path, vfs);\r\n return model.createSceneNode(\r\n getEngine().resourceManager,\r\n scene,\r\n instancing ?? false,\r\n true,\r\n true,\r\n true,\r\n true,\r\n vfs ?? getEngine().VFS\r\n );\r\n }\r\n}\r\n","import type { Accessor, AccessorSparse } from './gltf_types';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { GLTFContent } from './gltf_importer';\r\n\r\n/** @internal */\r\nexport const enum ComponentType {\r\n UNKNOWN = 0,\r\n BYTE = 5120, // GL.BYTE\r\n UBYTE = 5121, // GL.UNSIGNED_BYTE\r\n SHORT = 5122, // GL.SHORT\r\n USHORT = 5123, // GL.UNSIGNED_SHORT\r\n INT = 5124, // GL.INT\r\n UINT = 5125, // GL.UNSIGNED_INT\r\n FLOAT = 5126 // GL.FLOAT\r\n}\r\n\r\n/** @internal */\r\nexport type GLTFComponentType = 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';\r\n\r\n/** @internal */\r\nexport class GLTFAccessor {\r\n bufferView: number;\r\n byteOffset: number;\r\n componentType: ComponentType;\r\n normalized: boolean;\r\n count: number;\r\n type: GLTFComponentType;\r\n max: number[];\r\n min: number[];\r\n sparse: AccessorSparse;\r\n name: string;\r\n private _typedView: Nullable<TypedArray>;\r\n private _filteredView: Nullable<TypedArray>;\r\n private _normalizedFilteredView: Nullable<TypedArray>;\r\n private _normalizedTypedView: Nullable<TypedArray>;\r\n constructor(accessorInfo: Accessor) {\r\n this.bufferView = accessorInfo.bufferView!;\r\n this.byteOffset = accessorInfo.byteOffset ?? 0;\r\n this.componentType = accessorInfo.componentType;\r\n this.normalized = !!accessorInfo.normalized;\r\n this.count = accessorInfo.count;\r\n this.type = accessorInfo.type;\r\n this.max = accessorInfo.max!;\r\n this.min = accessorInfo.min!;\r\n this.sparse = accessorInfo.sparse!;\r\n this.name = accessorInfo.name;\r\n this._typedView = null;\r\n this._filteredView = null;\r\n this._normalizedFilteredView = null;\r\n this._normalizedTypedView = null;\r\n }\r\n getTypedView(gltf: GLTFContent) {\r\n if (this._typedView) {\r\n return this._typedView;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews![this.bufferView];\r\n const buffer = gltf._loadedBuffers![bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n\r\n let arrayLength = 0;\r\n if (bufferView.byteStride !== undefined && bufferView.byteStride !== 0) {\r\n if (componentSize !== 0) {\r\n arrayLength = (bufferView.byteStride / componentSize) * (this.count - 1) + componentCount;\r\n } else {\r\n console.warn(\"Invalid component type in accessor '\" + (this.name ? this.name : '') + \"'\");\r\n }\r\n } else {\r\n arrayLength = this.count * componentCount;\r\n }\r\n\r\n if (arrayLength * componentSize > buffer.byteLength - byteOffset) {\r\n arrayLength = (buffer.byteLength - byteOffset) / componentSize;\r\n console.warn(\"Count in accessor '\" + (this.name ? this.name : '') + \"' is too large.\");\r\n }\r\n\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._typedView = new Int8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n this._typedView = new Uint8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n this._typedView = new Int16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n this._typedView = new Uint16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.INT:\r\n this._typedView = new Int32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n this._typedView = new Uint32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n this._typedView = new Float32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._typedView = this.createView()!;\r\n }\r\n\r\n if (!this._typedView) {\r\n console.warn('Failed to convert buffer view to typed view!: ' + this.bufferView);\r\n } else if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._typedView);\r\n }\r\n\r\n return this._typedView;\r\n }\r\n\r\n // getNormalizedTypedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedTypedView(gltf: GLTFContent) {\r\n if (this._normalizedTypedView) {\r\n return this._normalizedTypedView;\r\n }\r\n\r\n const typedView = this.getTypedView(gltf)!;\r\n this._normalizedTypedView = this.normalized\r\n ? GLTFAccessor.dequantize(typedView, this.componentType)\r\n : typedView;\r\n return this._normalizedTypedView;\r\n }\r\n\r\n // getDeinterlacedView provides a view to the accessors data in form of\r\n // a TypedArray. In contrast to getTypedView, getDeinterlacedView deinterlaces\r\n // data, i.e. stripping padding and unrelated components from the array. It then\r\n // only contains the data of the accessor\r\n getDeinterlacedView(gltf: GLTFContent) {\r\n if (this._filteredView) {\r\n return this._filteredView;\r\n }\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n const arrayLength = this.count * componentCount;\r\n\r\n let func = 'getFloat32';\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._filteredView = new Int8Array(arrayLength);\r\n func = 'getInt8';\r\n break;\r\n case ComponentType.UBYTE:\r\n this._filteredView = new Uint8Array(arrayLength);\r\n func = 'getUint8';\r\n break;\r\n case ComponentType.SHORT:\r\n this._filteredView = new Int16Array(arrayLength);\r\n func = 'getInt16';\r\n break;\r\n case ComponentType.USHORT:\r\n this._filteredView = new Uint16Array(arrayLength);\r\n func = 'getUint16';\r\n break;\r\n case ComponentType.INT:\r\n this._filteredView = new Int32Array(arrayLength);\r\n func = 'getInt32';\r\n break;\r\n case ComponentType.UINT:\r\n this._filteredView = new Uint32Array(arrayLength);\r\n func = 'getUint32';\r\n break;\r\n case ComponentType.FLOAT:\r\n this._filteredView = new Float32Array(arrayLength);\r\n func = 'getFloat32';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews![this.bufferView];\r\n const buffer = gltf._loadedBuffers![bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n const stride =\r\n bufferView.byteStride !== undefined && bufferView.byteStride !== 0\r\n ? bufferView.byteStride\r\n : componentCount * componentSize;\r\n const dataView = new DataView(buffer, byteOffset, this.count * stride);\r\n for (let i = 0; i < arrayLength; ++i) {\r\n const offset = Math.floor(i / componentCount) * stride + (i % componentCount) * componentSize;\r\n this._filteredView[i] = (dataView as any)[func](offset, true);\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._filteredView = this.createView()!;\r\n }\r\n\r\n if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._filteredView);\r\n }\r\n\r\n return this._filteredView;\r\n }\r\n\r\n createView() {\r\n const size = this.count * this.getComponentCount(this.type);\r\n if (this.componentType == ComponentType.BYTE) {\r\n return new Int8Array(size);\r\n }\r\n if (this.componentType == ComponentType.UBYTE) {\r\n return new Uint8Array(size);\r\n }\r\n if (this.componentType == ComponentType.SHORT) {\r\n return new Int16Array(size);\r\n }\r\n if (this.componentType == ComponentType.USHORT) {\r\n return new Uint16Array(size);\r\n }\r\n if (this.componentType == ComponentType.INT) {\r\n return new Int32Array(size);\r\n }\r\n if (this.componentType == ComponentType.UINT) {\r\n return new Uint32Array(size);\r\n }\r\n if (this.componentType == ComponentType.FLOAT) {\r\n return new Float32Array(size);\r\n }\r\n return undefined;\r\n }\r\n\r\n // getNormalizedDeinterlacedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedDeinterlacedView(gltf: GLTFContent) {\r\n if (this._normalizedFilteredView) {\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n const filteredView = this.getDeinterlacedView(gltf)!;\r\n this._normalizedFilteredView = this.normalized\r\n ? GLTFAccessor.dequantize(filteredView, this.componentType)\r\n : filteredView;\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n applySparse(gltf: GLTFContent, view: TypedArray) {\r\n // Gather indices.\r\n\r\n const indicesBufferView = gltf.bufferViews![this.sparse.indices.bufferView];\r\n const indicesBuffer = gltf._loadedBuffers![indicesBufferView.buffer];\r\n const indicesByteOffset = (this.sparse.indices.byteOffset ?? 0) + (indicesBufferView.byteOffset ?? 0);\r\n\r\n const indicesComponentSize = this.getComponentSize(this.sparse.indices.componentType);\r\n let indicesComponentCount = 1;\r\n\r\n if (indicesBufferView.byteStride !== undefined && indicesBufferView.byteStride !== 0) {\r\n indicesComponentCount = indicesBufferView.byteStride / indicesComponentSize;\r\n }\r\n\r\n const indicesArrayLength = this.sparse.count * indicesComponentCount;\r\n\r\n let indicesTypedView;\r\n switch (this.sparse.indices.componentType) {\r\n case ComponentType.UBYTE:\r\n indicesTypedView = new Uint8Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n indicesTypedView = new Uint16Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n indicesTypedView = new Uint32Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n }\r\n\r\n // Gather values.\r\n\r\n const valuesBufferView = gltf.bufferViews![this.sparse.values.bufferView];\r\n const valuesBuffer = gltf._loadedBuffers![valuesBufferView.buffer];\r\n const valuesByteOffset = (this.sparse.values.byteOffset ?? 0) + (valuesBufferView.byteOffset ?? 0);\r\n\r\n const valuesComponentSize = this.getComponentSize(this.componentType);\r\n let valuesComponentCount = this.getComponentCount(this.type);\r\n\r\n if (valuesBufferView.byteStride !== undefined && valuesBufferView.byteStride !== 0) {\r\n valuesComponentCount = valuesBufferView.byteStride / valuesComponentSize;\r\n }\r\n\r\n const valuesArrayLength = this.sparse.count * valuesComponentCount;\r\n\r\n let valuesTypedView: TypedArray;\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n valuesTypedView = new Int8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n valuesTypedView = new Uint8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n valuesTypedView = new Int16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n valuesTypedView = new Uint16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.INT:\r\n valuesTypedView = new Int32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n valuesTypedView = new Uint32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n valuesTypedView = new Float32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n }\r\n\r\n // Overwrite values.\r\n\r\n for (let i = 0; i < this.sparse.count; ++i) {\r\n for (let k = 0; k < valuesComponentCount; ++k) {\r\n view[indicesTypedView![i] * valuesComponentCount + k] =\r\n valuesTypedView![i * valuesComponentCount + k];\r\n }\r\n }\r\n }\r\n\r\n // dequantize can be used to perform the normalization from WebGL2 vertexAttribPointer explicitly\r\n static dequantize(typedArray: TypedArray, componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 127.0, -1.0));\r\n case ComponentType.UBYTE:\r\n return new Float32Array(typedArray).map((c) => c / 255.0);\r\n case ComponentType.SHORT:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 32767.0, -1.0));\r\n case ComponentType.USHORT:\r\n return new Float32Array(typedArray).map((c) => c / 65535.0);\r\n default:\r\n return typedArray;\r\n }\r\n }\r\n\r\n getComponentCount(type: GLTFComponentType) {\r\n switch (type) {\r\n case 'SCALAR':\r\n return 1;\r\n case 'VEC2':\r\n return 2;\r\n case 'VEC3':\r\n return 3;\r\n case 'VEC4':\r\n return 4;\r\n case 'MAT2':\r\n return 4;\r\n case 'MAT3':\r\n return 9;\r\n case 'MAT4':\r\n return 16;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n getComponentSize(componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n case ComponentType.UBYTE:\r\n return 1;\r\n case ComponentType.SHORT:\r\n case ComponentType.USHORT:\r\n return 2;\r\n case ComponentType.INT:\r\n case ComponentType.UINT:\r\n case ComponentType.FLOAT:\r\n return 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n}\r\n","import type * as draco3d from 'draco3d';\nimport type { DeepPartial, InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\nimport {\n Vector3,\n Vector4,\n Matrix4x4,\n Quaternion,\n Interpolator,\n InterpolatorScalar,\n ASSERT\n} from '@zephyr3d/base';\nimport { AssetHierarchyNode } from '@zephyr3d/scene';\nimport type {\n AssetJointDynamicsCollider,\n AssetJointDynamicsFlatPlane,\n AssetMeshData,\n AssetAnimationData,\n AssetSubMeshData,\n AssetMaterial,\n AssetUnlitMaterial,\n AssetPBRMaterialMR,\n AssetPBRMaterialSG,\n AssetMaterialCommon,\n AssetPBRMaterialCommon,\n AssetAnimationTrack,\n AssetMorphTargetBinding,\n AssetPrimitiveInfo,\n AssetTextureInfo,\n AssetSpringBoneCollider,\n AssetSpringBoneColliderGroup,\n AssetSpringBoneJoint,\n SharedModel,\n ControllerConfig\n} from '@zephyr3d/scene';\nimport { AssetSkeleton, AssetScene } from '@zephyr3d/scene';\nimport type { HumanoidJointMapping } from '@zephyr3d/scene';\nimport { HumanoidBodyRig, HumanoidHandRig } from '@zephyr3d/scene';\nimport {\n BoundingBox,\n DracoMeshDecoder,\n getEngine,\n MORPH_TARGET_COLOR,\n MORPH_TARGET_NORMAL,\n MORPH_TARGET_POSITION,\n MORPH_TARGET_TANGENT,\n MORPH_TARGET_TEX0,\n MORPH_TARGET_TEX1,\n MORPH_TARGET_TEX2,\n MORPH_TARGET_TEX3\n} from '@zephyr3d/scene';\nimport { ColliderForce, getDevice } from '@zephyr3d/scene';\nimport { ComponentType, GLTFAccessor } from './helpers';\nimport type { VertexAttribFormat } from '@zephyr3d/device';\nimport {\n type VertexSemantic,\n type TextureAddressMode,\n type TextureFilterMode,\n type AbstractDevice,\n getVertexFormatComponentCount,\n getVertexAttribName,\n getVertexAttributeIndex\n} from '@zephyr3d/device';\nimport type {\n AnimationChannel,\n AnimationSampler,\n GlTf,\n Material,\n MeshPrimitive,\n TextureInfo\n} from './gltf_types';\nimport { AbstractModelImporter } from '../importer';\n\ntype SpringBoneJointInfo = {\n node?: unknown;\n hitRadius?: number;\n stiffness?: number;\n gravityPower?: number;\n gravityDir?: unknown;\n dragForce?: number;\n};\n\ntype VRMC0BlendShapeBindInfo = {\n mesh?: unknown;\n index?: unknown;\n weight?: unknown;\n};\n\ntype VRMC0BlendShapeGroupInfo = {\n name?: unknown;\n presetName?: unknown;\n binds?: unknown;\n};\n\ntype VRMC1MorphTargetBindInfo = {\n node?: unknown;\n index?: unknown;\n weight?: unknown;\n};\n\ntype VRMC1ExpressionInfo = {\n isBinary?: unknown;\n morphTargetBinds?: unknown;\n};\n\ntype VRMCMToonTextureInfo = TextureInfo & {\n scale?: number;\n};\n\ntype VRMCMToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\n\ntype VRMCMToonMaterialInfo = {\n transparentWithZWrite?: boolean;\n renderQueueOffsetNumber?: number;\n shadeColorFactor?: number[];\n shadeMultiplyTexture?: TextureInfo;\n shadingShiftFactor?: number;\n shadingShiftTexture?: VRMCMToonTextureInfo;\n shadingToonyFactor?: number;\n giEqualizationFactor?: number;\n matcapFactor?: number[];\n matcapTexture?: TextureInfo;\n parametricRimColorFactor?: number[];\n parametricRimFresnelPowerFactor?: number;\n parametricRimLiftFactor?: number;\n rimMultiplyTexture?: TextureInfo;\n rimLightingMixFactor?: number;\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\n outlineWidthFactor?: number;\n outlineWidthMultiplyTexture?: TextureInfo;\n outlineColorFactor?: number[];\n outlineLightingMixFactor?: number;\n uvAnimationMaskTexture?: TextureInfo;\n uvAnimationScrollXSpeedFactor?: number;\n uvAnimationScrollYSpeedFactor?: number;\n uvAnimationRotationSpeedFactor?: number;\n};\n\ntype GLTFMToonAssetMaterial = AssetUnlitMaterial & {\n shadeColorFactor?: Vector3;\n shadeMultiplyMap?: AssetTextureInfo;\n shadingShiftFactor?: number;\n shadingShiftMap?: AssetTextureInfo;\n shadingShiftTextureScale?: number;\n shadingToonyFactor?: number;\n giEqualizationFactor?: number;\n matcapFactor?: Vector3;\n matcapMap?: AssetTextureInfo;\n parametricRimColorFactor?: Vector3;\n parametricRimFresnelPowerFactor?: number;\n parametricRimLiftFactor?: number;\n rimMultiplyMap?: AssetTextureInfo;\n rimLightingMixFactor?: number;\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\n outlineWidthFactor?: number;\n outlineWidthMultiplyMap?: AssetTextureInfo;\n outlineColorFactor?: Vector3;\n outlineLightingMixFactor?: number;\n outlineUsesTangentNormals?: boolean;\n uvAnimationMaskMap?: AssetTextureInfo;\n uvAnimationScrollXSpeedFactor?: number;\n uvAnimationScrollYSpeedFactor?: number;\n uvAnimationRotationSpeedFactor?: number;\n transparentWithZWrite?: boolean;\n renderQueueOffsetNumber?: number;\n};\n\ntype GLTFLoadedMeshPrimitive = {\n source: MeshPrimitive;\n primitive: AssetPrimitiveInfo;\n subMeshData: AssetSubMeshData;\n materialInfo: Nullable<Material>;\n outlineUsesTangentNormals: boolean;\n};\n\ntype VRMAHumanoidBoneInfo = {\n node?: unknown;\n};\n\ntype VRMAHumanoidInfo = {\n humanBones?: Record<string, VRMAHumanoidBoneInfo>;\n};\n\ntype VRMCVRMAnimationInfo = {\n specVersion?: unknown;\n humanoid?: VRMAHumanoidInfo;\n};\n\nconst VRM_SPRING_BONE_SUBSTEPS = 3;\nconst VRM_GRAVITY_ACCELERATION_SCALE = 3;\nconst VRM_BASE_GRAVITY_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\nconst VRM_GRAVITY_POWER_TO_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\nconst VRM_STIFFNESS_TO_FRAME_HARDNESS = 0.05;\nconst VRM_DRAGFORCE_SCALE = 0.5;\n\n/** @internal */\nexport interface GLTFContent extends GlTf {\n _loadedBuffers: Nullable<ArrayBuffer[]>;\n _accessors: GLTFAccessor[];\n _nodes: AssetHierarchyNode[];\n _meshes: AssetMeshData[];\n _device: AbstractDevice;\n _dracoModule?: draco3d.DecoderModule;\n}\n\n/**\n * The GLTF/GLB model loader\n * @public\n */\nexport class GLTFImporter extends AbstractModelImporter {\n /** @internal */\n async initDraco3d(gltf: GLTFContent) {\n return new Promise<void>((resolve) => {\n const dracoDecoderModule = (window as any).DracoDecoderModule as draco3d.DracoDecoderModule;\n if (dracoDecoderModule) {\n dracoDecoderModule({\n onModuleLoaded: (module: any) => {\n gltf._dracoModule = module;\n resolve();\n }\n });\n } else {\n resolve();\n }\n });\n }\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\n const buffer = await data.arrayBuffer();\n if (this.isGLB(buffer)) {\n await this.loadBinary(buffer, model, basePath, vfs);\n return;\n }\n const gltf = (await new Response(data).json()) as GLTFContent;\n gltf._loadedBuffers = null;\n await this.loadJson(gltf, model, basePath, vfs);\n }\n /** @internal */\n async loadBinary(buffer: ArrayBuffer, model: SharedModel, basePath: string, vfs?: VFS) {\n const jsonChunkType = 0x4e4f534a;\n const binaryChunkType = 0x004e4942;\n let gltf: Nullable<GLTFContent> = null;\n const buffers: ArrayBuffer[] = [];\n const chunkInfos = this.getGLBChunkInfos(buffer);\n for (const info of chunkInfos) {\n if (info.type === jsonChunkType && !gltf) {\n const jsonSlice = new Uint8Array(buffer, 20, info.length);\n const stringBuffer = new TextDecoder('utf-8').decode(jsonSlice);\n gltf = JSON.parse(stringBuffer);\n } else if (info.type === binaryChunkType) {\n buffers.push(buffer.slice(info.start, info.start + info.length));\n }\n }\n ASSERT(!!gltf, 'Invalid GLTF format');\n gltf._loadedBuffers = buffers;\n await this.loadJson(gltf, model, basePath, vfs);\n }\n /** @internal */\n async loadJson(gltf: GLTFContent, model: SharedModel, basePath: string, vfs?: VFS) {\n vfs = vfs ?? getEngine().VFS;\n // check extensions\n if (\n !gltf._dracoModule &&\n gltf.extensionsRequired &&\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\n ) {\n await this.initDraco3d(gltf);\n ASSERT(!!gltf._dracoModule, 'Draco3d is required for loading model');\n }\n gltf._accessors = [];\n gltf._nodes = [];\n gltf._meshes = [];\n // check asset property\n const asset = gltf.asset;\n if (asset) {\n const gltfVersion = asset.version;\n ASSERT(gltfVersion === '2.0', `Invalid GLTF version: ${gltfVersion}`);\n }\n gltf._baseURI = basePath;\n if (!gltf._loadedBuffers) {\n gltf._loadedBuffers = [];\n const buffers = gltf.buffers;\n if (buffers) {\n for (const buffer of buffers) {\n const uri =\n vfs.parseDataURI(buffer.uri!) || vfs.isAbsoluteURL(buffer.uri!)\n ? buffer.uri\n : vfs.normalizePath(vfs.join(gltf._baseURI, buffer.uri!));\n const buf = (await vfs.readFile(uri!, { encoding: 'binary' })) as ArrayBuffer;\n ASSERT(buffer.byteLength === buf.byteLength, 'Invalid GLTF: buffer byte length error.');\n gltf._loadedBuffers.push(buf);\n }\n }\n }\n const accessors = gltf.accessors;\n if (accessors) {\n for (const accessor of gltf.accessors!) {\n gltf._accessors.push(new GLTFAccessor(accessor));\n }\n }\n const scenes = gltf.scenes;\n ASSERT(!!scenes, 'No scenes found in model');\n const sharedModel = model;\n await this._loadMeshes(sharedModel, gltf, vfs);\n this._loadNodes(gltf, sharedModel);\n this._loadSkins(gltf, sharedModel);\n this._loadMorphTargetGroups(gltf, sharedModel);\n for (let i = 0; i < (gltf.nodes?.length ?? 0); i++) {\n if (typeof gltf.nodes![i].skin === 'number' && gltf.nodes![i].skin! >= 0) {\n gltf._nodes[i].skeleton = sharedModel.skeletons[gltf.nodes![i].skin!];\n }\n }\n this._loadSpringBones(gltf, sharedModel);\n this._loadAnimations(gltf, sharedModel);\n for (const scene of scenes) {\n const assetScene = new AssetScene(scene.name);\n for (const node of scene.nodes!) {\n assetScene.rootNodes.push(gltf._nodes[node]);\n }\n sharedModel.scenes.push(assetScene);\n }\n if (typeof gltf.scene === 'number') {\n sharedModel.activeScene = gltf.scene;\n }\n }\n /** @internal */\n private _loadSpringBones(gltf: GLTFContent, model: SharedModel) {\n this._loadVRMC0SpringBones(gltf, model);\n this._loadVRMC1SpringBones(gltf, model);\n this._buildJointDynamicsSpringBones(model);\n }\n\n /** @internal */\n private _loadMorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n model.clearMorphTargetGroups();\n const hasVRMC1 = !!gltf.extensions?.VRMC_vrm;\n const hasVRMC0 = !!gltf.extensions?.VRM;\n if (hasVRMC1) {\n this._loadVRMC1MorphTargetGroups(gltf, model);\n } else if (hasVRMC0) {\n this._loadVRMC0MorphTargetGroups(gltf, model);\n } else {\n model.buildMorphTargetGroupsByName();\n }\n }\n\n private _loadVRMC0MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n const groups = gltf.extensions?.VRM?.blendShapeMaster?.blendShapeGroups;\n if (!Array.isArray(groups)) {\n return;\n }\n for (const value of groups) {\n if (!value || typeof value !== 'object') {\n continue;\n }\n const groupInfo = value as VRMC0BlendShapeGroupInfo;\n const name = this._getVRMC0BlendShapeGroupName(groupInfo);\n if (!name) {\n continue;\n }\n const bindings: AssetMorphTargetBinding[] = [];\n const binds = Array.isArray(groupInfo.binds) ? groupInfo.binds : [];\n for (const bindValue of binds) {\n if (!bindValue || typeof bindValue !== 'object') {\n continue;\n }\n const bindInfo = bindValue as VRMC0BlendShapeBindInfo;\n const meshIndex = typeof bindInfo.mesh === 'number' ? bindInfo.mesh : -1;\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\n const mesh = meshIndex >= 0 ? gltf._meshes[meshIndex] : null;\n if (!mesh) {\n continue;\n }\n const targetName = this._getMorphTargetName(mesh, targetIndex);\n if (!targetName) {\n continue;\n }\n bindings.push({\n mesh,\n targetIndex,\n targetName,\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight / 100 : 1\n });\n }\n model.addMorphTargetGroup({ name, bindings });\n }\n }\n\n private _loadVRMC1MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n const expressions = gltf.extensions?.VRMC_vrm?.expressions;\n if (!expressions) {\n return;\n }\n this._loadVRMC1ExpressionMap(gltf, model, expressions.preset);\n this._loadVRMC1ExpressionMap(gltf, model, expressions.custom);\n }\n\n private _loadVRMC1ExpressionMap(gltf: GLTFContent, model: SharedModel, expressionMap: unknown) {\n if (!expressionMap || typeof expressionMap !== 'object') {\n return;\n }\n for (const [name, expressionInfo] of Object.entries(expressionMap)) {\n if (!expressionInfo || typeof expressionInfo !== 'object') {\n continue;\n }\n const expression = expressionInfo as VRMC1ExpressionInfo;\n const bindings: AssetMorphTargetBinding[] = [];\n const morphTargetBinds = Array.isArray(expression.morphTargetBinds) ? expression.morphTargetBinds : [];\n for (const bindValue of morphTargetBinds) {\n if (!bindValue || typeof bindValue !== 'object') {\n continue;\n }\n const bindInfo = bindValue as VRMC1MorphTargetBindInfo;\n const nodeIndex = typeof bindInfo.node === 'number' ? bindInfo.node : -1;\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\n const node = nodeIndex >= 0 ? gltf._nodes[nodeIndex] : null;\n const mesh = node?.mesh ?? null;\n if (!node || !mesh) {\n continue;\n }\n const targetName = this._getMorphTargetName(mesh, targetIndex);\n if (!targetName) {\n continue;\n }\n bindings.push({\n node,\n targetIndex,\n targetName,\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight : 1\n });\n }\n model.addMorphTargetGroup({\n name,\n bindings,\n isBinary: expression.isBinary === true\n });\n }\n }\n\n private _getVRMC0BlendShapeGroupName(groupInfo: VRMC0BlendShapeGroupInfo): Nullable<string> {\n const presetName = typeof groupInfo.presetName === 'string' ? groupInfo.presetName : '';\n if (presetName && presetName.toLowerCase() !== 'unknown') {\n return presetName;\n }\n const name = typeof groupInfo.name === 'string' ? groupInfo.name : '';\n return name || presetName || null;\n }\n\n private _getMorphTargetName(mesh: AssetMeshData, targetIndex: number): Nullable<string> {\n if (targetIndex < 0) {\n return null;\n }\n let count = 0;\n for (const subMesh of mesh.subMeshes) {\n count = Math.max(count, subMesh.numTargets);\n }\n return targetIndex < count ? (mesh.morphNames?.[targetIndex] ?? `Target${targetIndex}`) : null;\n }\n\n private _loadVRMC1SpringBones(gltf: GLTFContent, model: SharedModel) {\n const ext = gltf.extensions?.VRMC_springBone;\n if (!ext) {\n return;\n }\n\n const colliders: Nullable<AssetSpringBoneCollider>[] = [];\n for (let i = 0; i < (ext.colliders ?? []).length; i++) {\n const colliderInfo = ext.colliders[i];\n const node = this._getNode(gltf, colliderInfo.node);\n const extendedShape = colliderInfo.extensions?.VRMC_springBone_extended_collider?.shape;\n if (!node || (!colliderInfo.shape && !extendedShape)) {\n colliders[i] = null;\n continue;\n }\n const sphere = colliderInfo.shape?.sphere;\n const capsule = colliderInfo.shape?.capsule;\n const extendedSphere = extendedShape?.sphere;\n const extendedCapsule = extendedShape?.capsule;\n const extendedPlane = extendedShape?.plane;\n let collider: Nullable<AssetSpringBoneCollider> = null;\n if (sphere) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(sphere.offset, Vector3.zero()),\n radius: sphere.radius ?? 0,\n inside: sphere.inside\n }\n };\n } else if (extendedSphere) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(extendedSphere.offset, Vector3.zero()),\n radius: extendedSphere.radius ?? 0,\n inside: extendedSphere.inside\n }\n };\n } else if (capsule) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'capsule',\n offset: this._arrayToVector3(capsule.offset, Vector3.zero()),\n tail: this._arrayToVector3(capsule.tail, Vector3.zero()),\n radius: capsule.radius ?? 0,\n inside: capsule.inside\n }\n };\n } else if (extendedCapsule) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'capsule',\n offset: this._arrayToVector3(extendedCapsule.offset, Vector3.zero()),\n tail: this._arrayToVector3(extendedCapsule.tail, Vector3.zero()),\n radius: extendedCapsule.radius ?? 0,\n inside: extendedCapsule.inside\n }\n };\n } else if (extendedPlane) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'plane',\n offset: this._arrayToVector3(extendedPlane.offset, Vector3.zero()),\n normal: this._arrayToVector3(extendedPlane.normal, Vector3.axisPY())\n }\n };\n }\n if (collider) {\n colliders[i] = collider;\n model.springBoneColliders.push(collider);\n } else {\n colliders[i] = null;\n }\n }\n\n const colliderGroups: AssetSpringBoneColliderGroup[] = [];\n for (const groupInfo of ext.colliderGroups ?? []) {\n const group: AssetSpringBoneColliderGroup = {\n name: groupInfo.name,\n colliders: (groupInfo.colliders ?? [])\n .map((ref: unknown) => colliders[this._getIndex(ref, ['collider', 'index'])])\n .filter((collider: Nullable<AssetSpringBoneCollider>): collider is AssetSpringBoneCollider => {\n return !!collider;\n })\n };\n colliderGroups.push(group);\n model.springBoneColliderGroups.push(group);\n }\n\n for (const springInfo of ext.springs ?? []) {\n const joints: AssetSpringBoneJoint[] = [];\n for (const jointRef of springInfo.joints ?? []) {\n const jointInfo = this._getSpringBoneJointInfo(ext, jointRef);\n if (!jointInfo) {\n continue;\n }\n const node = this._getNode(gltf, jointInfo?.node);\n if (!node) {\n continue;\n }\n joints.push({\n node,\n hitRadius: jointInfo.hitRadius ?? 0,\n stiffness: jointInfo.stiffness ?? 0,\n gravityPower: jointInfo.gravityPower ?? 0,\n gravityDir: this._arrayToVector3(jointInfo.gravityDir, new Vector3(0, -1, 0)),\n dragForce: jointInfo.dragForce ?? 0\n });\n }\n model.springBones.push({\n name: springInfo.name,\n center: this._getNode(gltf, springInfo.center)!,\n joints,\n colliderGroups: (springInfo.colliderGroups ?? [])\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\n return !!group;\n })\n });\n }\n }\n\n private _loadVRMC0SpringBones(gltf: GLTFContent, model: SharedModel) {\n const secondaryAnimation = gltf.extensions?.VRM?.secondaryAnimation;\n if (!secondaryAnimation) {\n return;\n }\n\n const colliderGroups: Nullable<AssetSpringBoneColliderGroup>[] = [];\n for (let i = 0; i < (secondaryAnimation.colliderGroups ?? []).length; i++) {\n const groupInfo = secondaryAnimation.colliderGroups[i];\n const node = this._getNode(gltf, groupInfo.node);\n if (!node) {\n colliderGroups[i] = null;\n continue;\n }\n const group: AssetSpringBoneColliderGroup = {\n colliders: []\n };\n for (const colliderInfo of groupInfo.colliders ?? []) {\n const collider: AssetSpringBoneCollider = {\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(colliderInfo.offset, Vector3.zero()),\n radius: colliderInfo.radius ?? 0\n }\n };\n group.colliders.push(collider);\n model.springBoneColliders.push(collider);\n }\n colliderGroups[i] = group;\n model.springBoneColliderGroups.push(group);\n }\n\n for (const boneGroupInfo of secondaryAnimation.boneGroups ?? []) {\n const rootBones = (boneGroupInfo.bones ?? [])\n .map((index: number) => this._getNode(gltf, index))\n .filter((node: AssetHierarchyNode) => !!node);\n const joints: AssetSpringBoneJoint[] = rootBones.map((node: AssetHierarchyNode) => ({\n node,\n hitRadius: boneGroupInfo.hitRadius ?? 0,\n stiffness: boneGroupInfo.stiffiness ?? boneGroupInfo.stiffness ?? 0,\n gravityPower: boneGroupInfo.gravityPower ?? 0,\n gravityDir: this._arrayToVector3(boneGroupInfo.gravityDir, new Vector3(0, -1, 0)),\n dragForce: boneGroupInfo.dragForce ?? 0\n }));\n model.springBones.push({\n name: boneGroupInfo.comment,\n center: this._getNode(gltf, boneGroupInfo.center)!,\n joints,\n rootBones,\n colliderGroups: (boneGroupInfo.colliderGroups ?? [])\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\n return !!group;\n })\n });\n }\n }\n\n private _getNode(gltf: GLTFContent, index: unknown): Nullable<AssetHierarchyNode> {\n return typeof index === 'number' && index >= 0 ? gltf._nodes[index] : null;\n }\n\n private _arrayToVector3(value: unknown, fallback: Vector3): Vector3 {\n if (Array.isArray(value)) {\n return new Vector3(value[0] ?? fallback.x, value[1] ?? fallback.y, value[2] ?? fallback.z);\n }\n if (value && typeof value === 'object') {\n const obj = value as { x?: unknown; y?: unknown; z?: unknown };\n return new Vector3(\n typeof obj.x === 'number' ? obj.x : fallback.x,\n typeof obj.y === 'number' ? obj.y : fallback.y,\n typeof obj.z === 'number' ? obj.z : fallback.z\n );\n }\n return fallback.clone();\n }\n\n private _getIndex(value: unknown, keys: string[] = ['index']): number {\n if (typeof value === 'number' && value >= 0 && Number.isInteger(value)) {\n return value;\n }\n if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n for (const key of keys) {\n const index = obj[key];\n if (typeof index === 'number' && index >= 0 && Number.isInteger(index)) {\n return index;\n }\n }\n }\n return -1;\n }\n\n private _getSpringBoneJointInfo(\n ext: { joints?: SpringBoneJointInfo[] },\n jointRef: unknown\n ): Nullable<SpringBoneJointInfo> {\n const directIndex = this._getIndex(jointRef);\n if (directIndex >= 0) {\n return ext.joints?.[directIndex] ?? null;\n }\n if (jointRef && typeof jointRef === 'object') {\n const obj = jointRef as SpringBoneJointInfo;\n if (typeof obj.node === 'number') {\n return obj;\n }\n const jointIndex = this._getIndex(jointRef, ['joint', 'index']);\n if (jointIndex >= 0) {\n return ext.joints?.[jointIndex] ?? null;\n }\n }\n return null;\n }\n\n private _buildJointDynamicsSpringBones(model: SharedModel) {\n const colliderMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsCollider>();\n const flatPlaneMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsFlatPlane>();\n const nodeKeys = new Map<AssetHierarchyNode, number>();\n model.nodes.forEach((node, index) => nodeKeys.set(node, index));\n for (const collider of model.springBoneColliders) {\n const converted = this._toJointDynamicsCollider(collider);\n if (converted) {\n colliderMap.set(collider, converted);\n model.jointDynamicsColliders.push(converted);\n continue;\n }\n const flatPlane = this._toJointDynamicsFlatPlane(collider);\n if (flatPlane) {\n flatPlaneMap.set(collider, flatPlane);\n }\n }\n\n for (const spring of model.springBones) {\n const chains = spring.rootBones\n ? this._collectJointDynamicsChainsFromRoots(spring.rootBones)\n : this._collectJointDynamicsChains(spring.joints);\n if (chains.length === 0 || spring.joints.length === 0) {\n continue;\n }\n const colliders: AssetJointDynamicsCollider[] = [];\n const flatPlanes: AssetJointDynamicsFlatPlane[] = [];\n const colliderKeys = new Set<string>();\n const flatPlaneKeys = new Set<string>();\n for (const group of spring.colliderGroups) {\n for (const collider of group.colliders) {\n const converted = colliderMap.get(collider);\n const colliderKey = converted ? this._getJointDynamicsColliderKey(converted, nodeKeys) : '';\n if (converted && !colliderKeys.has(colliderKey)) {\n colliderKeys.add(colliderKey);\n colliders.push(converted);\n }\n const flatPlane = flatPlaneMap.get(collider);\n const flatPlaneKey = flatPlane ? this._getJointDynamicsFlatPlaneKey(flatPlane, nodeKeys) : '';\n if (flatPlane && !flatPlaneKeys.has(flatPlaneKey)) {\n flatPlaneKeys.add(flatPlaneKey);\n flatPlanes.push(flatPlane);\n }\n }\n }\n model.jointDynamicsSpringBones.push({\n name: spring.name,\n center: spring.center,\n chains,\n colliders,\n flatPlanes,\n controllerConfig: this._mapSpringJointsToControllerConfig(spring.joints, chains.length > 1)\n });\n }\n }\n\n private _collectJointDynamicsChains(joints: AssetSpringBoneJoint[]) {\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\n if (joints.length === 0) {\n return chains;\n }\n let chainStart = joints[0].node;\n let chainEnd = joints[0].node;\n for (let i = 1; i < joints.length; i++) {\n const node = joints[i].node;\n if (chainEnd.isParentOf(node)) {\n chainEnd = node;\n continue;\n }\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\n chainStart = node;\n chainEnd = node;\n }\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\n return chains;\n }\n\n private _collectJointDynamicsChainsFromRoots(rootBones: AssetHierarchyNode[]) {\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\n for (const start of rootBones) {\n const end = this._findSingleChildChainEnd(start);\n if (end && end !== start) {\n chains.push({ start, end });\n }\n }\n return chains;\n }\n\n private _pushJointDynamicsChain(\n chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[],\n start: AssetHierarchyNode,\n end: AssetHierarchyNode\n ) {\n if (start !== end) {\n chains.push({ start, end });\n return;\n }\n const inferredEnd = this._findSingleChildChainEnd(start);\n if (inferredEnd && inferredEnd !== start) {\n chains.push({ start, end: inferredEnd });\n }\n }\n\n private _findSingleChildChainEnd(start: AssetHierarchyNode): Nullable<AssetHierarchyNode> {\n let current = start;\n while (current.children.length > 0) {\n if (current.children.length !== 1) {\n return null;\n }\n current = current.children[0];\n }\n return current;\n }\n\n private _mapSpringJointsToControllerConfig(\n joints: AssetSpringBoneJoint[],\n loop: boolean\n ): DeepPartial<ControllerConfig> {\n let stiffness = 0;\n let dragForce = 0;\n let hitRadius = 0;\n const gravity = new Vector3(0, -VRM_BASE_GRAVITY_ACCELERATION, 0);\n const gravityPower = Vector3.zero();\n for (const joint of joints) {\n stiffness += joint.stiffness;\n dragForce += joint.dragForce;\n hitRadius = Math.max(hitRadius, joint.hitRadius);\n const gravityDir =\n joint.gravityDir.magnitudeSq > 0 ? Vector3.normalize(joint.gravityDir) : new Vector3(0, -1, 0);\n Vector3.add(\n gravityPower,\n Vector3.scale(gravityDir, Math.max(0, joint.gravityPower) * VRM_GRAVITY_POWER_TO_ACCELERATION),\n gravityPower\n );\n }\n const invCount = joints.length > 0 ? 1 / joints.length : 1;\n stiffness *= invCount;\n dragForce *= invCount;\n Vector3.scale(gravityPower, invCount, gravityPower);\n Vector3.add(gravity, gravityPower, gravity);\n const frameHardness = Math.max(0, Math.min(1, stiffness * VRM_STIFFNESS_TO_FRAME_HARDNESS));\n const frameResistance = Math.max(0, Math.min(1, 1 - dragForce * VRM_DRAGFORCE_SCALE));\n return {\n enableBroadPhase: false,\n enableSurfaceCollision: false,\n subSteps: VRM_SPRING_BONE_SUBSTEPS,\n gravity,\n curves: {\n hardness: InterpolatorScalar.constant(\n this._frameRatioToSubstepRatio(frameHardness, VRM_SPRING_BONE_SUBSTEPS)\n ),\n resistance: InterpolatorScalar.constant(\n this._frameRateToSubstepRate(frameResistance, VRM_SPRING_BONE_SUBSTEPS)\n ),\n pointRadius: InterpolatorScalar.constant(Math.max(0, hitRadius)),\n // ── KEY: stiff structural = inextensible fabric ──\n structuralShrinkVertical: InterpolatorScalar.constant(0.95),\n structuralStretchVertical: InterpolatorScalar.constant(0.95),\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.7),\n structuralStretchHorizontal: InterpolatorScalar.constant(0.7),\n // Moderate shear keeps the grid from collapsing diagonally\n shearShrink: InterpolatorScalar.constant(0.025),\n shearStretch: InterpolatorScalar.constant(0.025),\n // ── KEY: very soft bending = cloth folds/drapes freely ──\n bendingShrinkVertical: InterpolatorScalar.constant(0),\n bendingStretchVertical: InterpolatorScalar.constant(0),\n bendingShrinkHorizontal: InterpolatorScalar.constant(0),\n bendingStretchHorizontal: InterpolatorScalar.constant(0)\n },\n constraintOptions: {\n structuralVertical: true,\n structuralHorizontal: true,\n shear: false,\n bendingVertical: true,\n collideStructuralVertical: true,\n collideStructuralHorizontal: true,\n collideShear: true,\n isLoop: loop\n }\n };\n }\n\n private _frameRatioToSubstepRatio(frameRatio: number, subSteps: number): number {\n const ratio = Math.max(0, Math.min(1, frameRatio));\n return 1 - Math.pow(1 - ratio, 1 / Math.max(1, subSteps));\n }\n\n private _frameRateToSubstepRate(frameRate: number, subSteps: number): number {\n const rate = Math.max(0, Math.min(1, frameRate));\n return Math.pow(rate, 1 / Math.max(1, subSteps));\n }\n\n private _getJointDynamicsColliderKey(\n collider: AssetJointDynamicsCollider,\n nodeKeys: Map<AssetHierarchyNode, number>\n ): string {\n const r = collider.collider;\n return [\n this._getAssetNodeKey(collider.node, nodeKeys),\n this._vector3Key(collider.localPosition),\n this._quaternionKey(collider.localRotation),\n this._numberKey(r.radius),\n this._numberKey(r.radiusTailScale),\n this._numberKey(r.height),\n this._numberKey(r.friction),\n r.isInverseCollider ? 1 : 0,\n r.forceType\n ].join('|');\n }\n\n private _getJointDynamicsFlatPlaneKey(\n flatPlane: AssetJointDynamicsFlatPlane,\n nodeKeys: Map<AssetHierarchyNode, number>\n ): string {\n return [\n this._getAssetNodeKey(flatPlane.node, nodeKeys),\n this._vector3Key(flatPlane.position),\n this._vector3Key(flatPlane.up)\n ].join('|');\n }\n\n private _getAssetNodeKey(node: AssetHierarchyNode, nodeKeys: Map<AssetHierarchyNode, number>): number {\n let key = nodeKeys.get(node);\n if (key === undefined) {\n key = nodeKeys.size;\n nodeKeys.set(node, key);\n }\n return key;\n }\n\n private _vector3Key(value: Vector3): string {\n return [value.x, value.y, value.z].map((component) => this._numberKey(component)).join(',');\n }\n\n private _quaternionKey(value: Quaternion): string {\n return [value.x, value.y, value.z, value.w].map((component) => this._numberKey(component)).join(',');\n }\n\n private _numberKey(value: number): string {\n return `${Object.is(value, -0) ? 0 : value}`;\n }\n\n private _toJointDynamicsCollider(collider: AssetSpringBoneCollider): Nullable<AssetJointDynamicsCollider> {\n const shape = collider.shape;\n if (shape.type === 'plane') {\n return null;\n }\n if (shape.type === 'sphere') {\n return {\n name: collider.name,\n node: collider.node,\n localPosition: shape.offset.clone(),\n localRotation: Quaternion.identity(),\n collider: {\n radius: shape.radius,\n radiusTailScale: 1,\n height: 0,\n friction: 0,\n isInverseCollider: shape.inside ?? false,\n forceType: ColliderForce.Off\n }\n };\n }\n const localDirection = Vector3.sub(shape.tail, shape.offset);\n const height = localDirection.magnitude;\n const localRotation =\n height > 0\n ? Quaternion.unitVectorToUnitVector(Vector3.axisPY(), localDirection)\n : Quaternion.identity();\n const localPosition = Vector3.scale(Vector3.add(shape.offset, shape.tail), 0.5);\n return {\n name: collider.name,\n node: collider.node,\n localPosition,\n localRotation,\n collider: {\n radius: shape.radius,\n radiusTailScale: 1,\n height,\n friction: 0,\n isInverseCollider: shape.inside ?? false,\n forceType: ColliderForce.Off\n }\n };\n }\n\n private _toJointDynamicsFlatPlane(\n collider: AssetSpringBoneCollider\n ): Nullable<AssetJointDynamicsFlatPlane> {\n const shape = collider.shape;\n if (shape.type !== 'plane') {\n return null;\n }\n return {\n node: collider.node,\n position: shape.offset.clone(),\n up: shape.normal.magnitudeSq > 0 ? Vector3.normalize(shape.normal) : Vector3.axisPY()\n };\n }\n\n /** @internal */\n private _loadNodes(gltf: GLTFContent, model: SharedModel) {\n if (gltf.nodes) {\n for (let i = 0; i < gltf.nodes.length; i++) {\n this._loadNode(gltf, i, null, model);\n }\n for (const node of gltf._nodes) {\n if (!node.parent) {\n node.computeTransforms(null);\n }\n }\n }\n }\n /** @internal */\n private _loadSkins(gltf: GLTFContent, model: SharedModel) {\n if (gltf.skins) {\n for (let i = 0; i < gltf.skins.length; i++) {\n const skinInfo = gltf.skins[i];\n const skeleton = new AssetSkeleton(skinInfo.name);\n if (typeof skinInfo.skeleton === 'number') {\n skeleton.pivot = gltf._nodes[skinInfo.skeleton];\n }\n const accessor = gltf._accessors[skinInfo.inverseBindMatrices!];\n if (!accessor || accessor.type !== 'MAT4' || accessor.componentType !== ComponentType.FLOAT) {\n throw new Error('Invalid GLTF inverse bind matricies accessor');\n }\n const matrices =\n typeof skinInfo.inverseBindMatrices === 'number'\n ? (accessor.getDeinterlacedView(gltf) as Float32Array)\n : null;\n skinInfo.joints.forEach((joint, index) => {\n const m = index * 16;\n skeleton.addJoint(\n gltf._nodes[joint],\n matrices ? new Matrix4x4(matrices.subarray(m, m + 16)) : Matrix4x4.identity()\n );\n });\n model.addSkeleton(skeleton);\n }\n }\n this._loadVRMAHumanoidSkeleton(gltf, model);\n }\n /** @internal */\n private _loadVRMAHumanoidSkeleton(gltf: GLTFContent, model: SharedModel) {\n const ext = gltf.extensions?.VRMC_vrm_animation as VRMCVRMAnimationInfo | undefined;\n const humanBones = ext?.humanoid?.humanBones;\n if (!humanBones || typeof humanBones !== 'object') {\n return;\n }\n const mapping = this._getVRMAHumanoidMapping(gltf, humanBones);\n const hips = mapping?.body[HumanoidBodyRig.Hips];\n if (!mapping || !hips) {\n return;\n }\n const humanBoneNodes = this._getVRMAHumanoidNodes(mapping);\n if (humanBoneNodes.length === 0) {\n return;\n }\n const existingSkeleton = model.skeletons.find((skeleton) =>\n humanBoneNodes.every((node) => skeleton.joints.indexOf(node) >= 0)\n );\n if (existingSkeleton) {\n this._setAssetSkeletonHumanoidMapping(existingSkeleton, mapping);\n return;\n }\n const root = this._findCommonRoot(humanBoneNodes) ?? hips;\n const jointSet = new Set<AssetHierarchyNode>();\n for (const node of humanBoneNodes) {\n let current: Nullable<AssetHierarchyNode> = node;\n while (current) {\n jointSet.add(current);\n if (current === root) {\n break;\n }\n current = current.parent;\n }\n }\n const skeleton = new AssetSkeleton('VRMC_vrm_animation_humanoid');\n skeleton.pivot = root;\n this._setAssetSkeletonHumanoidMapping(skeleton, mapping);\n for (const joint of this._sortSkeletonJoints(root, jointSet)) {\n skeleton.addJoint(joint, Matrix4x4.identity());\n }\n if (skeleton.joints.length > 0) {\n model.addSkeleton(skeleton);\n }\n }\n\n private _setAssetSkeletonHumanoidMapping(\n skeleton: AssetSkeleton,\n mapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>\n ) {\n (\n skeleton as AssetSkeleton & {\n humanoidJointMapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>;\n }\n ).humanoidJointMapping = mapping;\n }\n\n private _getVRMAHumanoidMapping(\n gltf: GLTFContent,\n humanBones: Record<string, VRMAHumanoidBoneInfo>\n ): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\n const body = {} as Partial<Record<HumanoidBodyRig, AssetHierarchyNode>>;\n const leftHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\n const rightHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\n const setBody = (vrmaName: string, rig: HumanoidBodyRig) => {\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\n if (node) {\n body[rig] = node;\n }\n };\n const setHand = (side: 'left' | 'right', vrmaName: string, rig: HumanoidHandRig) => {\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\n if (node) {\n (side === 'left' ? leftHand : rightHand)[rig] = node;\n }\n };\n setBody('hips', HumanoidBodyRig.Hips);\n setBody('spine', HumanoidBodyRig.Spine);\n setBody('chest', HumanoidBodyRig.Chest);\n setBody('upperChest', HumanoidBodyRig.UpperChest);\n setBody('neck', HumanoidBodyRig.Neck);\n setBody('head', HumanoidBodyRig.Head);\n setBody('leftShoulder', HumanoidBodyRig.LeftShoulder);\n setBody('leftUpperArm', HumanoidBodyRig.LeftUpperArm);\n setBody('leftLowerArm', HumanoidBodyRig.LeftLowerArm);\n setBody('leftHand', HumanoidBodyRig.LeftHand);\n setBody('rightShoulder', HumanoidBodyRig.RightShoulder);\n setBody('rightUpperArm', HumanoidBodyRig.RightUpperArm);\n setBody('rightLowerArm', HumanoidBodyRig.RightLowerArm);\n setBody('rightHand', HumanoidBodyRig.RightHand);\n setBody('leftUpperLeg', HumanoidBodyRig.LeftUpperLeg);\n setBody('leftLowerLeg', HumanoidBodyRig.LeftLowerLeg);\n setBody('leftFoot', HumanoidBodyRig.LeftFoot);\n setBody('leftToes', HumanoidBodyRig.LeftToes);\n setBody('rightUpperLeg', HumanoidBodyRig.RightUpperLeg);\n setBody('rightLowerLeg', HumanoidBodyRig.RightLowerLeg);\n setBody('rightFoot', HumanoidBodyRig.RightFoot);\n setBody('rightToes', HumanoidBodyRig.RightToes);\n setHand('left', 'leftThumbMetacarpal', HumanoidHandRig.ThumbProximal);\n setHand('left', 'leftThumbProximal', HumanoidHandRig.ThumbIntermediate);\n setHand('left', 'leftThumbDistal', HumanoidHandRig.ThumbDistal);\n setHand('left', 'leftIndexProximal', HumanoidHandRig.IndexProximal);\n setHand('left', 'leftIndexIntermediate', HumanoidHandRig.IndexIntermediate);\n setHand('left', 'leftIndexDistal', HumanoidHandRig.IndexDistal);\n setHand('left', 'leftMiddleProximal', HumanoidHandRig.MiddleProximal);\n setHand('left', 'leftMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\n setHand('left', 'leftMiddleDistal', HumanoidHandRig.MiddleDistal);\n setHand('left', 'leftRingProximal', HumanoidHandRig.RingProximal);\n setHand('left', 'leftRingIntermediate', HumanoidHandRig.RingIntermediate);\n setHand('left', 'leftRingDistal', HumanoidHandRig.RingDistal);\n setHand('left', 'leftLittleProximal', HumanoidHandRig.PinkyProximal);\n setHand('left', 'leftLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\n setHand('left', 'leftLittleDistal', HumanoidHandRig.PinkyDistal);\n setHand('right', 'rightThumbMetacarpal', HumanoidHandRig.ThumbProximal);\n setHand('right', 'rightThumbProximal', HumanoidHandRig.ThumbIntermediate);\n setHand('right', 'rightThumbDistal', HumanoidHandRig.ThumbDistal);\n setHand('right', 'rightIndexProximal', HumanoidHandRig.IndexProximal);\n setHand('right', 'rightIndexIntermediate', HumanoidHandRig.IndexIntermediate);\n setHand('right', 'rightIndexDistal', HumanoidHandRig.IndexDistal);\n setHand('right', 'rightMiddleProximal', HumanoidHandRig.MiddleProximal);\n setHand('right', 'rightMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\n setHand('right', 'rightMiddleDistal', HumanoidHandRig.MiddleDistal);\n setHand('right', 'rightRingProximal', HumanoidHandRig.RingProximal);\n setHand('right', 'rightRingIntermediate', HumanoidHandRig.RingIntermediate);\n setHand('right', 'rightRingDistal', HumanoidHandRig.RingDistal);\n setHand('right', 'rightLittleProximal', HumanoidHandRig.PinkyProximal);\n setHand('right', 'rightLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\n setHand('right', 'rightLittleDistal', HumanoidHandRig.PinkyDistal);\n if (!body[HumanoidBodyRig.Hips]) {\n return null;\n }\n const result: HumanoidJointMapping<AssetHierarchyNode> = {\n body: body as Record<HumanoidBodyRig, AssetHierarchyNode>\n };\n if (Object.keys(leftHand).length > 0) {\n result.leftHand = leftHand as Record<HumanoidHandRig, AssetHierarchyNode>;\n }\n if (Object.keys(rightHand).length > 0) {\n result.rightHand = rightHand as Record<HumanoidHandRig, AssetHierarchyNode>;\n }\n return result;\n }\n\n private _getVRMAHumanBoneNode(\n gltf: GLTFContent,\n humanBones: Record<string, VRMAHumanoidBoneInfo>,\n boneName: string\n ): Nullable<AssetHierarchyNode> {\n const nodeIndex = humanBones[boneName]?.node;\n return this._getNode(gltf, nodeIndex);\n }\n\n private _getVRMAHumanoidNodes(mapping: HumanoidJointMapping<AssetHierarchyNode>): AssetHierarchyNode[] {\n const nodes: AssetHierarchyNode[] = [];\n const addMappedNodes = <T extends string>(mapped: Record<T, AssetHierarchyNode> | undefined) => {\n if (!mapped) {\n return;\n }\n for (const node of Object.values(mapped) as AssetHierarchyNode[]) {\n if (node && nodes.indexOf(node) < 0) {\n nodes.push(node);\n }\n }\n };\n addMappedNodes(mapping.body);\n addMappedNodes(mapping.leftHand);\n addMappedNodes(mapping.rightHand);\n return nodes;\n }\n\n private _findCommonRoot(nodes: AssetHierarchyNode[]): Nullable<AssetHierarchyNode> {\n let root: Nullable<AssetHierarchyNode> = nodes[0] ?? null;\n for (let i = 1; root && i < nodes.length; i++) {\n while (root && !root.isParentOf(nodes[i])) {\n root = root.parent;\n }\n }\n return root;\n }\n\n private _sortSkeletonJoints(root: AssetHierarchyNode, joints: Set<AssetHierarchyNode>) {\n const sorted: AssetHierarchyNode[] = [];\n const visit = (node: AssetHierarchyNode) => {\n if (joints.has(node)) {\n sorted.push(node);\n }\n for (const child of node.children) {\n visit(child);\n }\n };\n visit(root);\n for (const joint of joints) {\n if (sorted.indexOf(joint) < 0) {\n sorted.push(joint);\n }\n }\n return sorted;\n }\n /** @internal */\n private _loadAnimations(gltf: GLTFContent, model: SharedModel) {\n if (gltf.animations) {\n for (let i = 0; i < gltf.animations.length; i++) {\n const animation = this._loadAnimation(gltf, i);\n model.addAnimation(animation);\n }\n }\n }\n /** @internal */\n private collectNodes(gltf: GLTFContent) {\n const collect: Map<\n AssetHierarchyNode,\n {\n translate: Vector3;\n scale: Vector3;\n rotation: Quaternion;\n worldTransform: Nullable<Matrix4x4>;\n }\n > = new Map();\n for (const node of gltf._nodes) {\n collect.set(node, {\n translate: node.position || Vector3.zero(),\n rotation: node.rotation || Quaternion.identity(),\n scale: node.scaling || Vector3.one(),\n worldTransform: null\n });\n }\n return collect;\n }\n /** @internal */\n private getAnimationInfo(\n gltf: GLTFContent,\n index: number\n ): {\n name: string;\n channels: AnimationChannel[];\n samplers: AnimationSampler[];\n interpolatorTypes: Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\n interpolators: Nullable<Interpolator>[];\n maxTime: number;\n nodes: Map<\n AssetHierarchyNode,\n {\n translate: Vector3;\n scale: Vector3;\n rotation: Quaternion;\n worldTransform: Nullable<Matrix4x4>;\n }\n >;\n } {\n const animationInfo = gltf.animations![index];\n const name = animationInfo.name || null;\n const channels = animationInfo.channels;\n const samplers = animationInfo.samplers;\n const interpolators = [] as Nullable<Interpolator>[];\n const interpolatorTypes = [] as Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\n const nodes = this.collectNodes(gltf);\n let maxTime = 0;\n for (let i = 0; i < channels.length; i++) {\n const channel = channels[i];\n const sampler = samplers[channel.sampler];\n if (!sampler) {\n interpolators.push(null);\n interpolatorTypes.push(null);\n continue;\n }\n const input = gltf._accessors[sampler.input].getNormalizedDeinterlacedView(gltf);\n const output = gltf._accessors[sampler.output].getNormalizedDeinterlacedView(gltf);\n if (!(input instanceof Float32Array) || !(output instanceof Float32Array)) {\n console.error('Input/output channel of animation must be Float32Array');\n interpolators.push(null);\n interpolatorTypes.push(null);\n continue;\n }\n const mode: InterpolationMode =\n sampler.interpolation === 'STEP'\n ? 'step'\n : sampler.interpolation === 'CUBICSPLINE'\n ? 'cubicspline'\n : 'linear';\n let interpolator: Nullable<Interpolator> = null;\n let interpolatorType: Nullable<'translation' | 'scale' | 'rotation' | 'weights'> = null;\n if (channel.target.path === 'rotation') {\n interpolator = new Interpolator(mode, 'quat', input, output);\n interpolatorType = 'rotation';\n } else if (channel.target.path === 'translation') {\n interpolator = new Interpolator(mode, 'vec3', input, output);\n interpolatorType = 'translation';\n } else if (channel.target.path === 'scale') {\n interpolator = new Interpolator(mode, 'vec3', input, output);\n interpolatorType = 'scale';\n } else if (channel.target.path === 'weights') {\n interpolator = new Interpolator(mode, null, input, output);\n interpolatorType = 'weights';\n }\n interpolators.push(interpolator);\n interpolatorTypes.push(interpolatorType);\n if (interpolator) {\n const max = input[input.length - 1];\n if (max > maxTime) {\n maxTime = max;\n }\n }\n }\n return { name, channels, samplers, interpolators, interpolatorTypes, maxTime, nodes };\n }\n /** @internal */\n private _loadAnimation(gltf: GLTFContent, index: number): AssetAnimationData {\n const animationInfo = this.getAnimationInfo(gltf, index);\n const animationData: AssetAnimationData = {\n name: animationInfo.name,\n tracks: [],\n skeletons: [],\n nodes: []\n };\n for (let i = 0; i < animationInfo.channels.length; i++) {\n const interpolator = animationInfo.interpolators[i];\n const interpolatorType = animationInfo.interpolatorTypes[i];\n const targetNodeIndex = animationInfo.channels[i].target.node;\n if (!interpolator || !interpolatorType || typeof targetNodeIndex !== 'number') {\n continue;\n }\n const targetNode = gltf._nodes[targetNodeIndex];\n if (!targetNode) {\n continue;\n }\n const track: AssetAnimationTrack = {\n node: targetNode,\n type: interpolatorType,\n interpolator\n };\n if (track.type === 'weights') {\n track.defaultMorphWeights = targetNode.weights!;\n }\n animationData.tracks.push(track);\n if (animationData.nodes.indexOf(targetNode) < 0) {\n animationData.nodes.push(targetNode);\n }\n if (targetNode.skeletonAttached) {\n for (const skeleton of targetNode.skeletonAttached) {\n if (animationData.skeletons.indexOf(skeleton) < 0) {\n animationData.skeletons.push(skeleton);\n }\n }\n }\n }\n return animationData;\n }\n /** @internal */\n private _loadNode(\n gltf: GLTFContent,\n nodeIndex: number,\n parent: Nullable<AssetHierarchyNode>,\n model: SharedModel\n ): AssetHierarchyNode {\n let node: AssetHierarchyNode = gltf._nodes[nodeIndex];\n if (node) {\n if (parent) {\n if (node.parent) {\n throw new Error('invalid node hierarchy');\n }\n parent.addChild(node);\n }\n return node;\n }\n const nodeInfo = gltf.nodes?.[nodeIndex];\n if (nodeInfo) {\n node = new AssetHierarchyNode(nodeInfo.name, model, parent!); //model.addNode(parent, nodeInfo.name);\n node.weights = nodeInfo.weights ?? null;\n if (typeof nodeInfo.mesh === 'number') {\n node.mesh = gltf._meshes[nodeInfo.mesh];\n if (node.mesh && nodeInfo.name) {\n const subMeshCount = node.mesh.subMeshes.length;\n for (let i = 0; i < subMeshCount; i++) {\n const primitive = node.mesh.subMeshes[i]?.primitive;\n if (primitive) {\n primitive.name = subMeshCount > 1 ? `${nodeInfo.name}_${i}` : nodeInfo.name;\n }\n }\n }\n if (!node.mesh.morphNames && nodeInfo.extras?.targetNames) {\n node.mesh.morphNames = nodeInfo.extras.targetNames;\n }\n const instancing = nodeInfo.extensions?.['EXT_mesh_gpu_instancing'];\n if (instancing) {\n const attributes = instancing.attributes;\n if (attributes) {\n const accessorTranslation =\n typeof attributes.TRANSLATION === 'number' ? gltf._accessors[attributes.TRANSLATION] : null;\n const accessorScale =\n typeof attributes.SCALE === 'number' ? gltf._accessors[attributes.SCALE] : null;\n const accessorRotation =\n typeof attributes.ROTATION === 'number' ? gltf._accessors[attributes.ROTATION] : null;\n const count = accessorTranslation?.count ?? accessorScale?.count ?? accessorRotation?.count ?? 0;\n const translationValues = accessorTranslation?.getNormalizedDeinterlacedView(\n gltf\n ) as Float32Array;\n const scaleValues = accessorScale?.getNormalizedDeinterlacedView(gltf) as Float32Array;\n const rotationValues = accessorRotation?.getNormalizedDeinterlacedView(gltf) as Float32Array;\n for (let i = 0; i < count; i++) {\n const t = translationValues\n ? new Vector3(\n translationValues[i * 3],\n translationValues[i * 3 + 1],\n translationValues[i * 3 + 2]\n )\n : Vector3.zero();\n const s = scaleValues\n ? new Vector3(scaleValues[i * 3], scaleValues[i * 3 + 1], scaleValues[i * 3 + 2])\n : Vector3.one();\n const r = rotationValues\n ? new Quaternion(\n rotationValues[i * 4],\n rotationValues[i * 4 + 1],\n rotationValues[i * 4 + 2],\n rotationValues[i * 4 + 3]\n )\n : Quaternion.identity();\n node.instances.push({ t, s, r });\n }\n }\n } else {\n node.instances.push({ t: Vector3.zero(), s: Vector3.one(), r: Quaternion.identity() });\n }\n }\n if (!(typeof nodeInfo.skin === 'number') || nodeInfo.skin < 0) {\n // GLTF spec: Only the joint transforms are applied to the skinned mesh; the transform of the skinned mesh node MUST be ignored.\n if (nodeInfo.matrix) {\n const matrix = new Matrix4x4(nodeInfo.matrix);\n matrix.decompose(node.scaling, node.rotation, node.position);\n } else {\n if (nodeInfo.rotation) {\n node.rotation.set(nodeInfo.rotation);\n }\n if (nodeInfo.scale) {\n node.scaling.set(nodeInfo.scale);\n }\n if (nodeInfo.translation) {\n node.position.set(nodeInfo.translation);\n }\n }\n }\n gltf._nodes[nodeIndex] = node;\n if (nodeInfo.children) {\n for (const childIndex of nodeInfo.children) {\n this._loadNode(gltf, childIndex, node, model);\n }\n }\n } else {\n throw new Error(`invalid GLTF node: ${nodeIndex}`);\n }\n return node;\n }\n /** @internal */\n private async _loadMeshes(model: SharedModel, gltf: GLTFContent, vfs: VFS) {\n if (gltf.meshes) {\n for (let i = 0; i < gltf.meshes.length; i++) {\n gltf._meshes[i] = (await this._loadMesh(model, gltf, i, vfs))!;\n }\n }\n }\n /** @internal */\n private async _loadMesh(model: SharedModel, gltf: GLTFContent, meshIndex: number, vfs: VFS) {\n const meshInfo = gltf.meshes && gltf.meshes[meshIndex];\n let mesh: Nullable<AssetMeshData> = null;\n if (meshInfo) {\n mesh = {\n morphWeights: meshInfo.weights ?? undefined,\n morphNames: meshInfo['extras']?.targetNames ?? null,\n subMeshes: []\n };\n const primitives = meshInfo.primitives;\n const meshName = meshInfo.name || null;\n if (primitives) {\n const loadedPrimitives: GLTFLoadedMeshPrimitive[] = [];\n for (let i = 0; i < primitives.length; i++) {\n const p = primitives[i];\n const subMeshName = meshName\n ? primitives.length > 1\n ? `${meshName}_${i}`\n : meshName\n : `mesh_${meshIndex}_${i}`;\n const subMeshData: AssetSubMeshData = {\n name: subMeshName,\n primitive: null,\n material: null,\n rawPositions: null,\n rawBlendIndices: null,\n rawJointWeights: null,\n numTargets: 0\n };\n const primitive: AssetPrimitiveInfo = {\n name: subMeshName,\n vertices: {} as any,\n type: 'triangle-list',\n indexCount: 0,\n indices: null,\n boxMax: Vector3.zero(),\n boxMin: Vector3.zero()\n };\n const attributes = p.attributes;\n const dracoExtension = gltf._dracoModule ? p.extensions?.['KHR_draco_mesh_compression'] : null;\n let dracoMeshDecoder: Nullable<DracoMeshDecoder> = null;\n if (dracoExtension) {\n const bufferView = gltf.bufferViews && gltf.bufferViews[dracoExtension.bufferView];\n if (!bufferView) {\n throw new Error('Draco buffer view not set');\n }\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\n if (!arrayBuffer) {\n throw new Error('Draco buffer view does not point to a valid ArrayBuffer');\n }\n dracoMeshDecoder = new DracoMeshDecoder(\n new Int8Array(arrayBuffer, bufferView.byteOffset ?? 0, bufferView.byteLength),\n gltf._dracoModule!\n );\n }\n for (const attrib in attributes) {\n this._loadVertexBuffer(\n gltf,\n attrib,\n attributes[attrib],\n primitive,\n subMeshData,\n dracoExtension,\n dracoMeshDecoder!\n );\n }\n if (p.targets) {\n if (getDevice().type === 'webgl') {\n // Emulate vertexID for WebGL1 device\n if (attributes['TEXCOORD_7'] !== undefined) {\n console.error(`Could not load morph target animation`);\n p.targets = undefined;\n } else {\n const positionInfo = primitive.vertices['position'];\n const numVertices = positionInfo\n ? (positionInfo.data.length / getVertexFormatComponentCount(positionInfo.format)) >> 0\n : 0;\n const vertexIndices = new Float32Array(numVertices);\n for (let i = 0; i < vertexIndices.length; i++) {\n vertexIndices[i] = i;\n }\n primitive.vertices['texCoord7'] = { format: 'tex7_f32', data: vertexIndices };\n }\n }\n }\n if (p.targets) {\n const targets: AssetSubMeshData['targets'] = {};\n const targetBox: AssetSubMeshData['targetBox'] = [];\n const targetMap = {\n POSITION: MORPH_TARGET_POSITION,\n NORMAL: MORPH_TARGET_NORMAL,\n TANGENT: MORPH_TARGET_TANGENT,\n TEXCOORD_0: MORPH_TARGET_TEX0,\n TEXCOORD_1: MORPH_TARGET_TEX1,\n TEXCOORD_2: MORPH_TARGET_TEX2,\n TEXCOORD_3: MORPH_TARGET_TEX3,\n COLOR_0: MORPH_TARGET_COLOR\n };\n const morphAttribSet = new Set<number>();\n for (const target of p.targets) {\n for (const k in target) {\n const t = targetMap[k as keyof typeof targetMap];\n if (t !== undefined) {\n targets[t] = targets[t] ?? { numComponents: 0, data: [] };\n const accessorIndex = target[k] as number;\n const accessor = gltf._accessors[accessorIndex];\n targets[t].numComponents = accessor.getComponentCount(accessor.type);\n targets[t].data.push(accessor.getNormalizedDeinterlacedView(gltf) as Float32Array);\n if (k === 'POSITION') {\n const min = accessor.min\n ? new Vector3(accessor.min[0], accessor.min[1], accessor.min[2])\n : Vector3.zero();\n const max = accessor.max\n ? new Vector3(accessor.max[0], accessor.max[1], accessor.max[2])\n : Vector3.zero();\n targetBox.push(new BoundingBox(min, max));\n }\n morphAttribSet.add(t);\n }\n }\n }\n subMeshData.numTargets = p.targets.length;\n subMeshData.targets = targets;\n subMeshData.targetBox = targetBox;\n subMeshData.morphAttribCount = morphAttribSet.size;\n }\n const indices = p.indices;\n if (typeof indices === 'number') {\n this._loadIndexBuffer(gltf, indices, primitive, subMeshData, dracoExtension, dracoMeshDecoder!);\n }\n let primitiveType = p.mode;\n if (typeof primitiveType !== 'number') {\n primitiveType = 4;\n }\n primitive.type = this._primitiveType(primitiveType)!;\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\n const outlineUsesTangentNormals = this._shouldGenerateMToonOutlineNormals(\n materialInfo,\n p,\n primitive\n );\n loadedPrimitives.push({\n source: p,\n primitive,\n subMeshData,\n materialInfo,\n outlineUsesTangentNormals\n });\n }\n this._generateMToonOutlineNormals(loadedPrimitives);\n for (const loaded of loadedPrimitives) {\n const { source: p, primitive, subMeshData, materialInfo, outlineUsesTangentNormals } = loaded;\n const hasVertexNormal = !!primitive.vertices['normal'];\n const hasVertexColor = !!primitive.vertices['diffuse'];\n const hasVertexTangent = !!primitive.vertices['tangent'];\n const flagsHash = [\n hasVertexNormal ? 'N' : '',\n hasVertexColor ? 'C' : '',\n hasVertexTangent ? 'T' : '',\n outlineUsesTangentNormals ? 'OTN' : ''\n ]\n .filter((v) => !!v)\n .join('');\n const materialHash = [p.material ?? 'default', flagsHash].filter((v) => !!v).join('.');\n let material = model.getMaterial(materialHash);\n if (!material) {\n material = await this._loadMaterial(\n model,\n gltf,\n materialInfo!,\n hasVertexColor,\n hasVertexNormal,\n hasVertexTangent,\n outlineUsesTangentNormals,\n vfs\n );\n model.setMaterial(materialHash, material);\n } else if (outlineUsesTangentNormals && material.type === 'mtoon') {\n (material as GLTFMToonAssetMaterial).outlineUsesTangentNormals = true;\n }\n subMeshData.primitive = primitive;\n subMeshData.material = material;\n mesh.subMeshes.push(subMeshData);\n model.addPrimitive(primitive);\n }\n }\n }\n return mesh;\n }\n private _shouldGenerateMToonOutlineNormals(\n materialInfo: Nullable<Material>,\n primitiveInfo: MeshPrimitive,\n primitive: AssetPrimitiveInfo\n ) {\n if (!materialInfo?.extensions?.VRMC_materials_mtoon) {\n return false;\n }\n if (materialInfo.normalTexture) {\n return false;\n }\n if (primitiveInfo.targets?.some((target) => target.TANGENT !== undefined)) {\n return false;\n }\n return (\n primitive.type === 'triangle-list' && !!primitive.vertices['position'] && !!primitive.vertices['normal']\n );\n }\n private _generateMToonOutlineNormals(primitives: GLTFLoadedMeshPrimitive[]) {\n const targets = primitives.filter((p) => p.outlineUsesTangentNormals);\n if (targets.length === 0) {\n return;\n }\n const sums = new Map<string, [number, number, number]>();\n for (const { primitive } of targets) {\n const positionInfo = primitive.vertices['position'];\n if (!positionInfo) {\n continue;\n }\n const positions = positionInfo.data as Float32Array;\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\n const vertexCount = (positions.length / positionStride) >> 0;\n const indices = this._getTriangleIndices(primitive, vertexCount);\n if (!indices) {\n continue;\n }\n for (let i = 0; i + 2 < indices.length; i += 3) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n const i2 = indices[i + 2];\n const p0 = i0 * positionStride;\n const p1 = i1 * positionStride;\n const p2 = i2 * positionStride;\n const ax = positions[p1] - positions[p0];\n const ay = positions[p1 + 1] - positions[p0 + 1];\n const az = positions[p1 + 2] - positions[p0 + 2];\n const bx = positions[p2] - positions[p0];\n const by = positions[p2 + 1] - positions[p0 + 1];\n const bz = positions[p2 + 2] - positions[p0 + 2];\n const nx = ay * bz - az * by;\n const ny = az * bx - ax * bz;\n const nz = ax * by - ay * bx;\n if (nx * nx + ny * ny + nz * nz <= 1e-20) {\n continue;\n }\n this._accumulateOutlineNormal(sums, positions, positionStride, i0, nx, ny, nz);\n this._accumulateOutlineNormal(sums, positions, positionStride, i1, nx, ny, nz);\n this._accumulateOutlineNormal(sums, positions, positionStride, i2, nx, ny, nz);\n }\n }\n for (const { primitive } of targets) {\n const positionInfo = primitive.vertices['position'];\n const normalInfo = primitive.vertices['normal'];\n if (!positionInfo || !normalInfo) {\n continue;\n }\n const positions = positionInfo.data as Float32Array;\n const normals = normalInfo.data as Float32Array;\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\n const normalStride = getVertexFormatComponentCount(normalInfo.format);\n const vertexCount = (positions.length / positionStride) >> 0;\n const tangents = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n const key = this._outlinePositionKey(\n positions[i * positionStride],\n positions[i * positionStride + 1],\n positions[i * positionStride + 2]\n );\n const sum = sums.get(key);\n let nx = sum?.[0] ?? normals[i * normalStride];\n let ny = sum?.[1] ?? normals[i * normalStride + 1];\n let nz = sum?.[2] ?? normals[i * normalStride + 2];\n const len = Math.hypot(nx, ny, nz);\n if (len > 1e-10) {\n nx /= len;\n ny /= len;\n nz /= len;\n } else {\n nx = normals[i * normalStride];\n ny = normals[i * normalStride + 1];\n nz = normals[i * normalStride + 2];\n const fallbackLen = Math.hypot(nx, ny, nz);\n if (fallbackLen > 1e-10) {\n nx /= fallbackLen;\n ny /= fallbackLen;\n nz /= fallbackLen;\n } else {\n nx = 0;\n ny = 1;\n nz = 0;\n }\n }\n tangents[i * 4] = nx;\n tangents[i * 4 + 1] = ny;\n tangents[i * 4 + 2] = nz;\n tangents[i * 4 + 3] = 1;\n }\n primitive.vertices['tangent'] = { format: 'tangent_f32x4', data: tangents };\n }\n }\n private _accumulateOutlineNormal(\n sums: Map<string, [number, number, number]>,\n positions: Float32Array,\n stride: number,\n index: number,\n x: number,\n y: number,\n z: number\n ) {\n const offset = index * stride;\n const key = this._outlinePositionKey(positions[offset], positions[offset + 1], positions[offset + 2]);\n const sum = sums.get(key);\n if (sum) {\n sum[0] += x;\n sum[1] += y;\n sum[2] += z;\n } else {\n sums.set(key, [x, y, z]);\n }\n }\n private _getTriangleIndices(primitive: AssetPrimitiveInfo, vertexCount: number) {\n if (primitive.indices) {\n return primitive.indices;\n }\n const indices = new Uint32Array(vertexCount);\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n return indices;\n }\n private _outlinePositionKey(x: number, y: number, z: number) {\n return `${Math.round(x * 100000)},${Math.round(y * 100000)},${Math.round(z * 100000)}`;\n }\n /** @internal */\n private async _loadMaterial(\n model: SharedModel,\n gltf: GLTFContent,\n materialInfo: Material,\n vertexColor: boolean,\n vertexNormal: boolean,\n useTangent: boolean,\n outlineUsesTangentNormals: boolean,\n vfs: VFS\n ): Promise<AssetMaterial> {\n const materialName = materialInfo?.name || 'material';\n let assetMaterial: Nullable<AssetMaterial> = null;\n let pbrMetallicRoughness: Nullable<AssetPBRMaterialMR> = null;\n let pbrSpecularGlossness: Nullable<AssetPBRMaterialSG> = null;\n const pbrCommon: AssetMaterialCommon = {\n useTangent,\n vertexColor,\n vertexNormal,\n bumpScale: 1,\n emissiveColor: Vector3.zero(),\n emissiveStrength: 1,\n occlusionStrength: 1\n };\n switch (materialInfo?.alphaMode) {\n case 'BLEND': {\n pbrCommon.alphaMode = 'blend';\n break;\n }\n case 'MASK': {\n pbrCommon.alphaMode = 'mask';\n pbrCommon.alphaCutoff = materialInfo.alphaCutoff ?? 0.5;\n break;\n }\n }\n if (materialInfo?.doubleSided) {\n pbrCommon.doubleSided = true;\n }\n const mtoonExtension = materialInfo?.extensions?.VRMC_materials_mtoon as\n | VRMCMToonMaterialInfo\n | undefined;\n if (\n materialInfo?.pbrMetallicRoughness ||\n materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness ||\n mtoonExtension\n ) {\n pbrCommon.normalMap = materialInfo.normalTexture\n ? await this._loadTexture(model, gltf, materialInfo.normalTexture, false, vfs)\n : undefined;\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\n ? await this._loadTexture(model, gltf, materialInfo.occlusionTexture, false, vfs)\n : undefined;\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\n ? await this._loadTexture(model, gltf, materialInfo.emissiveTexture, false, vfs)\n : undefined;\n pbrCommon.emissiveStrength =\n materialInfo?.extensions?.KHR_materials_emissive_strength?.emissiveStrength ?? 1;\n pbrCommon.emissiveColor = materialInfo.emissiveFactor\n ? new Vector3(materialInfo.emissiveFactor)\n : Vector3.zero();\n }\n if (materialInfo?.pbrMetallicRoughness) {\n pbrMetallicRoughness = {\n name: materialName,\n type: 'pbrMetallicRoughness',\n ior: 1.5,\n common: pbrCommon\n };\n pbrMetallicRoughness.diffuse = new Vector4(\n materialInfo.pbrMetallicRoughness.baseColorFactor ?? [1, 1, 1, 1]\n );\n pbrMetallicRoughness.metallic = materialInfo.pbrMetallicRoughness.metallicFactor ?? 1;\n pbrMetallicRoughness.roughness = materialInfo.pbrMetallicRoughness.roughnessFactor ?? 1;\n pbrMetallicRoughness.diffuseMap = materialInfo.pbrMetallicRoughness.baseColorTexture\n ? await this._loadTexture(model, gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true, vfs)\n : undefined;\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.pbrMetallicRoughness.metallicRoughnessTexture,\n false,\n vfs\n )\n : undefined;\n pbrMetallicRoughness.metallicIndex = 2;\n pbrMetallicRoughness.roughnessIndex = 1;\n }\n if (mtoonExtension) {\n return this._loadMToonMaterial(\n model,\n gltf,\n materialName,\n materialInfo,\n pbrCommon,\n mtoonExtension,\n outlineUsesTangentNormals,\n vfs\n );\n }\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\n pbrSpecularGlossness = {\n name: materialName,\n type: 'pbrSpecularGlossiness',\n ior: 1.5,\n common: pbrCommon\n };\n pbrSpecularGlossness.diffuse = new Vector4(sg.diffuseFactor ?? [1, 1, 1, 1]);\n pbrSpecularGlossness.specular = new Vector3(sg.specularFactor ?? [1, 1, 1]);\n pbrSpecularGlossness.glossness = sg.glossnessFactor ?? 1;\n pbrSpecularGlossness.diffuseMap = sg.diffuseTexture\n ? await this._loadTexture(model, gltf, sg.diffuseTexture, true, vfs)\n : undefined;\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\n ? await this._loadTexture(model, gltf, sg.specularGlossinessTexture, true, vfs)\n : undefined;\n }\n assetMaterial = pbrSpecularGlossness || pbrMetallicRoughness;\n if (!assetMaterial || materialInfo?.extensions?.KHR_materials_unlit) {\n if (materialInfo?.extensions?.KHR_materials_unlit) {\n assetMaterial = {\n name: materialName,\n type: 'unlit',\n common: pbrCommon,\n diffuse: pbrMetallicRoughness?.diffuse ?? Vector4.one(),\n diffuseMap: pbrMetallicRoughness?.diffuseMap ?? null\n } as AssetUnlitMaterial;\n } else {\n assetMaterial = {\n name: materialName,\n type: 'pbrMetallicRoughness',\n common: pbrCommon,\n diffuse: Vector4.one(),\n metallic: 1,\n roughness: 1,\n diffuseMap: undefined,\n metallicMap: undefined,\n metallicIndex: 2,\n roughnessIndex: 1\n } as AssetPBRMaterialMR;\n }\n }\n if (assetMaterial.type !== 'unlit' && materialInfo?.extensions?.KHR_materials_ior) {\n (assetMaterial as AssetPBRMaterialCommon).ior = materialInfo.extensions.KHR_materials_ior.ior ?? 1.5;\n }\n if (assetMaterial.type === 'pbrMetallicRoughness') {\n pbrMetallicRoughness = assetMaterial;\n // KHR_materials_specular extension\n const specularColorFactor = (materialInfo?.extensions?.KHR_materials_specular?.specularColorFactor ?? [\n 1, 1, 1\n ]) as [number, number, number];\n pbrMetallicRoughness.specularFactor = new Vector4(\n ...specularColorFactor,\n materialInfo?.extensions?.KHR_materials_specular?.specularFactor ?? 1\n );\n pbrMetallicRoughness.specularMap = materialInfo?.extensions?.KHR_materials_specular?.specularTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.extensions.KHR_materials_specular.specularTexture,\n false,\n vfs\n )\n : undefined;\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\n ?.specularColorTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\n true,\n vfs\n )\n : undefined;\n // KHR_materials_iridescence\n const iridescence = materialInfo?.extensions?.KHR_materials_iridescence;\n if (iridescence) {\n pbrMetallicRoughness.iridescence = {\n iridescenceFactor: iridescence.iridescenceFactor ?? 0,\n iridescenceMap: iridescence.iridescenceTexture\n ? await this._loadTexture(model, gltf, iridescence.iridescenceTexture, false, vfs)\n : undefined,\n iridescenceIor: iridescence.iridescenceIor ?? 1.3,\n iridescenceThicknessMinimum: iridescence.iridescenceThicknessMinimum ?? 100,\n iridescenceThicknessMaximum: iridescence.iridescenceThicknessMaximum ?? 400,\n iridescenceThicknessMap: iridescence.iridescenceThicknessTexture\n ? await this._loadTexture(model, gltf, iridescence.iridescenceThicknessTexture, false, vfs)\n : undefined\n };\n }\n // KHR_materials_transmission\n const transmission = materialInfo?.extensions?.KHR_materials_transmission;\n if (transmission) {\n pbrMetallicRoughness.transmission = {\n transmissionFactor: transmission.transmissionFactor ?? 0,\n transmissionMap: transmission.transmissionTexture\n ? await this._loadTexture(model, gltf, transmission.transmissionTexture, false, vfs)\n : undefined,\n thicknessFactor: 0,\n thicknessMap: undefined,\n attenuationDistance: 99999,\n attenuationColor: Vector3.one()\n };\n const volume = materialInfo?.extensions?.KHR_materials_volume;\n if (volume) {\n pbrMetallicRoughness.transmission.thicknessFactor = volume.thicknessFactor ?? 0;\n pbrMetallicRoughness.transmission.thicknessMap = volume.thicknessTexture\n ? await this._loadTexture(model, gltf, volume.thicknessTexture, false, vfs)\n : undefined;\n pbrMetallicRoughness.transmission.attenuationDistance = volume.attenuationDistance ?? 99999;\n const attenuationColor = (volume.attenuationColor ?? [1, 1, 1]) as [number, number, number];\n pbrMetallicRoughness.transmission.attenuationColor = new Vector3(...attenuationColor);\n }\n }\n // KHR_materials_sheen\n const sheen = materialInfo?.extensions?.KHR_materials_sheen;\n if (sheen) {\n pbrMetallicRoughness.sheen = {\n sheenColorFactor: new Vector3(sheen.sheenColorFactor ?? [0, 0, 0]),\n sheenColorMap: sheen.sheenColorTexture\n ? await this._loadTexture(model, gltf, sheen.sheenColorTexture, true, vfs)\n : undefined,\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\n sheenRoughnessMap: sheen.sheenRoughnessTexture\n ? await this._loadTexture(model, gltf, sheen.sheenRoughnessTexture, true, vfs)\n : undefined\n };\n }\n // KHR_materials_clearcoat\n const cc = materialInfo?.extensions?.KHR_materials_clearcoat;\n if (cc) {\n pbrMetallicRoughness.clearcoat = {\n clearCoatFactor: cc.clearcoatFactor ?? 0,\n clearCoatIntensityMap: cc.clearcoatTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatTexture, false, vfs)\n : undefined,\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatRoughnessTexture, false, vfs)\n : undefined,\n clearCoatNormalMap: cc.clearcoatNormalTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatNormalTexture, false, vfs)\n : undefined\n };\n }\n }\n return assetMaterial;\n }\n /** @internal */\n private async _loadMToonMaterial(\n model: SharedModel,\n gltf: GLTFContent,\n materialName: string,\n materialInfo: Material,\n common: AssetMaterialCommon,\n mtoon: VRMCMToonMaterialInfo,\n outlineUsesTangentNormals: boolean,\n vfs: VFS\n ): Promise<GLTFMToonAssetMaterial> {\n const pbr = materialInfo?.pbrMetallicRoughness;\n const mtoonMaterial: GLTFMToonAssetMaterial = {\n name: materialName,\n type: 'mtoon',\n common,\n diffuse: new Vector4(pbr?.baseColorFactor ?? [1, 1, 1, 1]),\n diffuseMap: pbr?.baseColorTexture\n ? await this._loadTexture(model, gltf, pbr.baseColorTexture, true, vfs)\n : undefined,\n shadeColorFactor: mtoon.shadeColorFactor ? new Vector3(mtoon.shadeColorFactor) : undefined,\n shadeMultiplyMap: mtoon.shadeMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.shadeMultiplyTexture, true, vfs)\n : undefined,\n shadingShiftFactor: mtoon.shadingShiftFactor,\n shadingShiftMap: mtoon.shadingShiftTexture\n ? await this._loadTexture(model, gltf, mtoon.shadingShiftTexture, false, vfs)\n : undefined,\n shadingShiftTextureScale: mtoon.shadingShiftTexture?.scale,\n shadingToonyFactor: mtoon.shadingToonyFactor,\n giEqualizationFactor: mtoon.giEqualizationFactor,\n matcapFactor: mtoon.matcapFactor ? new Vector3(mtoon.matcapFactor) : undefined,\n matcapMap: mtoon.matcapTexture\n ? await this._loadTexture(model, gltf, mtoon.matcapTexture, true, vfs)\n : undefined,\n parametricRimColorFactor: mtoon.parametricRimColorFactor\n ? new Vector3(mtoon.parametricRimColorFactor)\n : undefined,\n parametricRimFresnelPowerFactor: mtoon.parametricRimFresnelPowerFactor,\n parametricRimLiftFactor: mtoon.parametricRimLiftFactor,\n rimMultiplyMap: mtoon.rimMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.rimMultiplyTexture, true, vfs)\n : undefined,\n rimLightingMixFactor: mtoon.rimLightingMixFactor,\n outlineWidthMode: mtoon.outlineWidthMode,\n outlineWidthFactor: mtoon.outlineWidthFactor,\n outlineWidthMultiplyMap: mtoon.outlineWidthMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.outlineWidthMultiplyTexture, false, vfs)\n : undefined,\n outlineColorFactor: mtoon.outlineColorFactor ? new Vector3(mtoon.outlineColorFactor) : undefined,\n outlineLightingMixFactor: mtoon.outlineLightingMixFactor,\n outlineUsesTangentNormals,\n uvAnimationMaskMap: mtoon.uvAnimationMaskTexture\n ? await this._loadTexture(model, gltf, mtoon.uvAnimationMaskTexture, false, vfs)\n : undefined,\n uvAnimationScrollXSpeedFactor: mtoon.uvAnimationScrollXSpeedFactor,\n uvAnimationScrollYSpeedFactor: mtoon.uvAnimationScrollYSpeedFactor,\n uvAnimationRotationSpeedFactor: mtoon.uvAnimationRotationSpeedFactor,\n transparentWithZWrite: mtoon.transparentWithZWrite,\n renderQueueOffsetNumber: mtoon.renderQueueOffsetNumber\n };\n return mtoonMaterial;\n }\n /** @internal */\n private async _loadTexture(\n model: SharedModel,\n gltf: GLTFContent,\n info: Partial<TextureInfo>,\n sRGB: boolean,\n vfs: VFS\n ): Promise<AssetTextureInfo> {\n const mt: AssetTextureInfo = {\n image: null,\n sampler: null,\n texCoord: info.texCoord ?? 0,\n transform: null\n };\n const textureInfo = gltf.textures![info.index!];\n if (textureInfo) {\n if (info.extensions?.KHR_texture_transform) {\n const uvTransform = info.extensions.KHR_texture_transform;\n if (uvTransform.texCoord !== undefined) {\n mt.texCoord = uvTransform.texCoord;\n }\n const rotation =\n uvTransform.rotation !== undefined\n ? Matrix4x4.rotationZ(-uvTransform.rotation)\n : Matrix4x4.identity();\n const scale =\n uvTransform.scale !== undefined\n ? new Vector3(uvTransform.scale[0], uvTransform.scale[1], 1)\n : Vector3.one();\n const translation =\n uvTransform.offset !== undefined\n ? new Vector3(uvTransform.offset[0], uvTransform.offset[1], 0)\n : Vector3.zero();\n mt.transform = Matrix4x4.scaling(scale).multiplyLeft(rotation).translateLeft(translation);\n }\n mt.name = textureInfo.name || undefined;\n let wrapS: TextureAddressMode = 'repeat';\n let wrapT: TextureAddressMode = 'repeat';\n let magFilter: TextureFilterMode = 'linear';\n let minFilter: TextureFilterMode = 'linear';\n let mipFilter: TextureFilterMode = 'linear';\n const samplerIndex: number = textureInfo.sampler!;\n const sampler = gltf.samplers && gltf.samplers[samplerIndex];\n if (sampler) {\n switch (sampler.wrapS) {\n case 0x2901: // gl.REPEAT\n wrapS = 'repeat';\n break;\n case 0x8370: // gl.MIRRORED_REPEAT\n wrapS = 'mirrored-repeat';\n break;\n case 0x812f: // gl.CLAMP_TO_EDGE\n wrapS = 'clamp';\n break;\n }\n switch (sampler.wrapT) {\n case 0x2901: // gl.REPEAT\n wrapT = 'repeat';\n break;\n case 0x8370: // gl.MIRRORED_REPEAT\n wrapT = 'mirrored-repeat';\n break;\n case 0x812f: // gl.CLAMP_TO_EDGE\n wrapT = 'clamp';\n break;\n }\n switch (sampler.magFilter) {\n case 0x2600: // gl.NEAREST\n magFilter = 'nearest';\n break;\n case 0x2601: // gl.LINEAR\n magFilter = 'linear';\n break;\n }\n switch (sampler.minFilter) {\n case 0x2600: // gl.NEAREST\n minFilter = 'nearest';\n mipFilter = 'none';\n break;\n case 0x2601: // gl.LINEAR\n minFilter = 'linear';\n mipFilter = 'none';\n break;\n case 0x2700: // gl.NEAREST_MIPMAP_NEAREST\n minFilter = 'nearest';\n mipFilter = 'nearest';\n break;\n case 0x2701: // gl.LINEAR_MIPMAP_NEAREST\n minFilter = 'linear';\n mipFilter = 'nearest';\n break;\n case 0x2702: // gl.NEAREST_MIPMAP_LINEAR\n minFilter = 'nearest';\n mipFilter = 'linear';\n break;\n case 0x2703: // gl.LINEAR_MIPMAP_LINEAR\n minFilter = 'linear';\n mipFilter = 'linear';\n break;\n }\n }\n const imageIndex: number = textureInfo.source!;\n mt.image = model.getImage(imageIndex);\n if (!mt.image) {\n const image = gltf.images![imageIndex];\n if (image) {\n if (image.uri) {\n const imageUrl = vfs.normalizePath(vfs.join(gltf._baseURI, image.uri));\n mt.image = {\n name: image.name || textureInfo.name || undefined,\n uri: imageUrl\n };\n } else if (typeof image.bufferView === 'number' && image.mimeType) {\n const bufferView = gltf.bufferViews && gltf.bufferViews[image.bufferView];\n if (bufferView) {\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\n if (arrayBuffer) {\n const view = new Uint8Array(arrayBuffer, bufferView.byteOffset || 0, bufferView.byteLength);\n const mimeType = image.mimeType;\n mt.image = {\n name: image.name || textureInfo.name || undefined,\n data: view,\n mimeType\n };\n }\n }\n }\n }\n if (mt.image) {\n model.setImage(imageIndex, mt.image);\n }\n }\n if (mt.image) {\n mt.sRGB = !!sRGB;\n mt.sampler = {\n wrapS,\n wrapT,\n magFilter,\n minFilter,\n mipFilter\n };\n }\n }\n return mt;\n }\n /** @internal */\n private _primitiveType(type: number) {\n switch (type) {\n case 0: // GL_POINTS\n return 'point-list';\n case 1: // GL_LINES\n return 'line-list';\n /* FIXME:\n case 2: // GL_LINE_LOOP\n return PrimitiveType.LineLoop;\n */\n case 3: // GL_LINE_STRIP\n return 'line-strip';\n case 4: // GL_TRIANGLES\n return 'triangle-list';\n case 5: // GL_TRIANGLE_STRIP\n return 'triangle-strip';\n case 6: // GL_TRIANGLE_FAN\n return 'triangle-fan';\n default:\n return null;\n }\n }\n /** @internal */\n private _loadIndexBuffer(\n gltf: GLTFContent,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n meshData: AssetSubMeshData,\n dracoExtension?: any,\n dracoMeshDecoder?: DracoMeshDecoder\n ) {\n const accessor = gltf._accessors[accessorIndex];\n if (dracoMeshDecoder) {\n const indices = dracoMeshDecoder.getIndexBuffer();\n if (!indices || indices.length !== accessor.count) {\n throw new Error(`Decode index buffer failed`);\n }\n if (indices.length !== accessor.count) {\n throw new Error(`Decode index buffer failed`);\n }\n gltf._loadedBuffers!.push(indices.buffer);\n if (!gltf.bufferViews) {\n gltf.bufferViews = [];\n }\n gltf.bufferViews.push({\n buffer: gltf._loadedBuffers!.length - 1,\n byteOffset: 0,\n byteLength: indices.byteLength\n });\n accessor.componentType = ComponentType.UINT;\n accessor.bufferView = gltf.bufferViews.length - 1;\n }\n this._setBuffer(gltf, accessorIndex, primitive, null, meshData);\n }\n /** @internal */\n private _loadVertexBuffer(\n gltf: GLTFContent,\n attribName: string,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n subMeshData: AssetSubMeshData,\n dracoExtension?: any,\n dracoMeshDecoder?: DracoMeshDecoder\n ) {\n const dracoId = dracoExtension?.attributes?.[attribName];\n if (dracoId !== undefined) {\n const accessor = gltf._accessors[accessorIndex];\n let buffer: Nullable<TypedArray> = null;\n const numElements = accessor.count * accessor.getComponentCount(accessor.type);\n switch (accessor.componentType) {\n case ComponentType.FLOAT:\n buffer = new Float32Array(numElements);\n break;\n case ComponentType.BYTE:\n buffer = new Int8Array(numElements);\n break;\n case ComponentType.SHORT:\n buffer = new Int16Array(numElements);\n break;\n case ComponentType.INT:\n buffer = new Int32Array(numElements);\n break;\n case ComponentType.UBYTE:\n buffer = new Uint8Array(numElements);\n break;\n case ComponentType.USHORT:\n buffer = new Uint16Array(numElements);\n break;\n case ComponentType.UINT:\n buffer = new Uint32Array(numElements);\n break;\n default:\n throw new Error(`Invalid component type: ${accessor.componentType}`);\n }\n if (!dracoMeshDecoder!.getAttributeBuffer(dracoId, buffer)) {\n throw new Error(`Decode draco mesh failed`);\n }\n gltf._loadedBuffers!.push(buffer.buffer);\n if (!gltf.bufferViews) {\n gltf.bufferViews = [];\n }\n gltf.bufferViews.push({\n buffer: gltf._loadedBuffers!.length - 1,\n byteOffset: 0,\n byteLength: buffer.byteLength\n });\n accessor.bufferView = gltf.bufferViews.length - 1;\n }\n let semantic: Nullable<VertexSemantic> = null;\n switch (attribName) {\n case 'POSITION':\n semantic = 'position';\n break;\n case 'NORMAL':\n semantic = 'normal';\n break;\n case 'TANGENT':\n semantic = 'tangent';\n break;\n case 'TEXCOORD_0':\n semantic = 'texCoord0';\n break;\n case 'TEXCOORD_1':\n semantic = 'texCoord1';\n break;\n case 'TEXCOORD_2':\n semantic = 'texCoord2';\n break;\n case 'TEXCOORD_3':\n semantic = 'texCoord3';\n break;\n case 'TEXCOORD_4':\n semantic = 'texCoord4';\n break;\n case 'TEXCOORD_5':\n semantic = 'texCoord5';\n break;\n case 'TEXCOORD_6':\n semantic = 'texCoord6';\n break;\n case 'TEXCOORD_7':\n semantic = 'texCoord7';\n break;\n case 'COLOR_0':\n semantic = 'diffuse';\n break;\n case 'JOINTS_0':\n semantic = 'blendIndices';\n break;\n case 'WEIGHTS_0':\n semantic = 'blendWeights';\n break;\n default:\n return;\n }\n\n this._setBuffer(gltf, accessorIndex, primitive, semantic, subMeshData);\n }\n /** @internal */\n private _setBuffer(\n gltf: GLTFContent,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n semantic: Nullable<VertexSemantic>,\n subMeshData: AssetSubMeshData\n ) {\n const device = getDevice();\n const accessor = gltf._accessors[accessorIndex];\n const componentCount = accessor.getComponentCount(accessor.type);\n let data = accessor.getNormalizedDeinterlacedView(gltf);\n let buffer: Nullable<TypedArray> = null;\n let attribFormat: Nullable<VertexAttribFormat> = null;\n if (semantic && !(data instanceof Float32Array)) {\n const floatData = new Float32Array(data.length);\n floatData.set(data);\n data = floatData;\n }\n if (!semantic) {\n if (!(data instanceof Uint8Array) && !(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\n console.error('Invalid index buffer component type');\n return;\n }\n if (data instanceof Uint32Array && !device.getDeviceCaps().miscCaps.support32BitIndex) {\n console.error('Device does not support 32bit vertex index');\n return;\n }\n if (data instanceof Uint8Array) {\n const uint16Data = new Uint16Array(data.length);\n uint16Data.set(data);\n data = uint16Data;\n }\n }\n if (!semantic) {\n buffer = data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\n } else {\n attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\n buffer = data;\n }\n if (buffer) {\n if (!semantic) {\n primitive.indices = buffer as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\n primitive.indexCount = buffer.length;\n } else {\n const semantic = getVertexAttribName(getVertexAttributeIndex(attribFormat!));\n primitive.vertices[semantic] = { format: attribFormat!, data: buffer };\n if (semantic === 'position') {\n if (!primitive.indices) {\n primitive.indexCount = Math.floor(buffer.byteLength / 12);\n }\n const data = accessor.getNormalizedDeinterlacedView(gltf);\n subMeshData.rawPositions = data as Float32Array;\n const min = accessor.min;\n const max = accessor.max;\n if (min && max) {\n primitive.boxMin.set(min);\n primitive.boxMax.set(max);\n } else {\n const bbox = new BoundingBox();\n bbox.beginExtend();\n for (let i = 0; i < data.length; i++) {\n const v = new Vector3(\n data[i * componentCount],\n data[i * componentCount + 1],\n data[i * componentCount + 2]\n );\n bbox.extend(v);\n }\n if (bbox.isValid()) {\n primitive.boxMin.set(bbox.minPoint);\n primitive.boxMax.set(bbox.maxPoint);\n }\n }\n } else if (semantic === 'blendIndices') {\n subMeshData.rawBlendIndices = accessor.getNormalizedDeinterlacedView(gltf);\n } else if (semantic === 'blendWeights') {\n subMeshData.rawJointWeights = accessor.getNormalizedDeinterlacedView(gltf);\n }\n }\n }\n return buffer;\n }\n /** @internal */\n private isGLB(data: ArrayBuffer): boolean {\n if (data.byteLength > 12) {\n const p = new Uint32Array(data, 0, 3);\n if (p[0] === 0x46546c67 && p[1] === 2 && p[2] === data.byteLength) {\n return true;\n }\n }\n return false;\n }\n /** @internal */\n private getGLBChunkInfo(\n data: ArrayBuffer,\n offset: number\n ): { start: number; length: number; type: number } {\n const header = new Uint32Array(data, offset, 2);\n const start = offset + 8;\n const length = header[0];\n const type = header[1];\n return { start, length, type };\n }\n /** @internal */\n private getGLBChunkInfos(data: ArrayBuffer): { start: number; length: number; type: number }[] {\n const infos: { start: number; length: number; type: number }[] = [];\n let offset = 12;\n while (offset < data.byteLength) {\n const info = this.getGLBChunkInfo(data, offset);\n infos.push(info);\n offset += info.length + 8;\n }\n return infos;\n }\n}\n","import type { FbxConnection, FbxDocument, FbxNode, FbxObjectMap, FbxPropertyValue } from './types';\r\n\r\nconst FBX_BINARY_MAGIC = 'Kaydara FBX Binary \\0';\r\n\r\nfunction stripQuotes(text: string) {\r\n return text.length >= 2 && text[0] === '\"' && text[text.length - 1] === '\"' ? text.slice(1, -1) : text;\r\n}\r\n\r\nfunction toNumber(value: string) {\r\n if (/^[+-]?\\d+$/.test(value)) {\r\n return Number.parseInt(value, 10);\r\n }\r\n return Number.parseFloat(value);\r\n}\r\n\r\nfunction splitAsciiProperties(text: string) {\r\n const result: string[] = [];\r\n let current = '';\r\n let inString = false;\r\n let depth = 0;\r\n for (let i = 0; i < text.length; i++) {\r\n const ch = text[i];\r\n if (ch === '\"') {\r\n inString = !inString;\r\n current += ch;\r\n continue;\r\n }\r\n if (!inString) {\r\n if (ch === '{' || ch === '[' || ch === '(') {\r\n depth++;\r\n } else if (ch === '}' || ch === ']' || ch === ')') {\r\n depth--;\r\n } else if (ch === ',' && depth === 0) {\r\n result.push(current.trim());\r\n current = '';\r\n continue;\r\n }\r\n }\r\n current += ch;\r\n }\r\n if (current.trim()) {\r\n result.push(current.trim());\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseAsciiScalar(text: string): FbxPropertyValue {\r\n const trimmed = text.trim();\r\n if (!trimmed) {\r\n return '';\r\n }\r\n if (trimmed[0] === '\"' && trimmed[trimmed.length - 1] === '\"') {\r\n return stripQuotes(trimmed);\r\n }\r\n if (trimmed === 'Y' || trimmed === 'T') {\r\n return true;\r\n }\r\n if (trimmed === 'N' || trimmed === 'F') {\r\n return false;\r\n }\r\n if (trimmed[0] === '*' && trimmed.includes('{')) {\r\n const begin = trimmed.indexOf('{');\r\n const end = trimmed.lastIndexOf('}');\r\n if (begin >= 0 && end > begin) {\r\n const body = trimmed.slice(begin + 1, end);\r\n const colon = body.indexOf(':');\r\n const valuesText = colon >= 0 ? body.slice(colon + 1) : body;\r\n const tokens = splitAsciiProperties(valuesText);\r\n const values = tokens.map((token) => toNumber(token));\r\n return Float64Array.from(values);\r\n }\r\n }\r\n if (/^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(trimmed) || /^[+-]?\\d+$/.test(trimmed)) {\r\n return toNumber(trimmed);\r\n }\r\n return trimmed;\r\n}\r\n\r\nfunction parseAsciiNodeHeader(line: string) {\r\n const colon = line.indexOf(':');\r\n if (colon < 0) {\r\n return { name: line.trim(), properties: [] as FbxPropertyValue[] };\r\n }\r\n const name = line.slice(0, colon).trim();\r\n const propsText = line.slice(colon + 1).trim();\r\n const properties = propsText ? splitAsciiProperties(propsText).map(parseAsciiScalar) : [];\r\n return { name, properties };\r\n}\r\n\r\nfunction parseAscii(text: string): FbxNode {\r\n const root: FbxNode = {\r\n name: 'Root',\r\n properties: [],\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n const stack: FbxNode[] = [root];\r\n const lines = text.split(/\\r?\\n/);\r\n for (let rawLine of lines) {\r\n const comment = rawLine.indexOf(';');\r\n if (comment >= 0) {\r\n rawLine = rawLine.slice(0, comment);\r\n }\r\n const line = rawLine.trim();\r\n if (!line) {\r\n continue;\r\n }\r\n if (line === '}') {\r\n if (stack.length > 1) {\r\n stack.pop();\r\n }\r\n continue;\r\n }\r\n if (line.endsWith('{')) {\r\n const header = line.slice(0, -1).trim();\r\n const { name, properties } = parseAsciiNodeHeader(header);\r\n const node: FbxNode = {\r\n name,\r\n properties,\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n stack[stack.length - 1].children.push(node);\r\n stack.push(node);\r\n continue;\r\n }\r\n const { name, properties } = parseAsciiNodeHeader(line);\r\n stack[stack.length - 1].children.push({\r\n name,\r\n properties,\r\n propertyListLength: 0,\r\n children: []\r\n });\r\n }\r\n return root;\r\n}\r\n\r\nclass BinaryReader {\r\n private readonly _view: DataView;\r\n private readonly _buffer: ArrayBuffer;\r\n private readonly _decoder: TextDecoder;\r\n private _offset: number;\r\n constructor(buffer: ArrayBuffer) {\r\n this._buffer = buffer;\r\n this._view = new DataView(buffer);\r\n this._decoder = new TextDecoder('utf-8');\r\n this._offset = 0;\r\n }\r\n get offset() {\r\n return this._offset;\r\n }\r\n set offset(value: number) {\r\n this._offset = value;\r\n }\r\n skip(bytes: number) {\r\n this._offset += bytes;\r\n }\r\n getUint8() {\r\n const value = this._view.getUint8(this._offset);\r\n this._offset += 1;\r\n return value;\r\n }\r\n getInt16() {\r\n const value = this._view.getInt16(this._offset, true);\r\n this._offset += 2;\r\n return value;\r\n }\r\n getInt32() {\r\n const value = this._view.getInt32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getUint32() {\r\n const value = this._view.getUint32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getFloat32() {\r\n const value = this._view.getFloat32(this._offset, true);\r\n this._offset += 4;\r\n return value;\r\n }\r\n getFloat64() {\r\n const value = this._view.getFloat64(this._offset, true);\r\n this._offset += 8;\r\n return value;\r\n }\r\n getBigInt64() {\r\n const value = this._view.getBigInt64(this._offset, true);\r\n this._offset += 8;\r\n return value;\r\n }\r\n getBoolean() {\r\n return this.getUint8() === 1;\r\n }\r\n getString(length: number) {\r\n const value = this._decoder.decode(new Uint8Array(this._buffer, this._offset, length));\r\n this._offset += length;\r\n return value.replace(/\\0+$/, '');\r\n }\r\n getArrayBuffer(length: number) {\r\n const value = this._buffer.slice(this._offset, this._offset + length);\r\n this._offset += length;\r\n return value;\r\n }\r\n}\r\n\r\nasync function inflateDeflate(data: Uint8Array, expectedLength: number) {\r\n if (typeof DecompressionStream !== 'undefined') {\r\n const stream = new Blob([\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n ])\r\n .stream()\r\n .pipeThrough(new DecompressionStream('deflate'));\r\n const buffer = await new Response(stream).arrayBuffer();\r\n if (expectedLength > 0 && buffer.byteLength !== expectedLength) {\r\n console.warn(`FBX inflate length mismatch: expected=${expectedLength} actual=${buffer.byteLength}`);\r\n }\r\n return buffer;\r\n }\r\n throw new Error('Compressed FBX arrays are not supported in this runtime');\r\n}\r\n\r\nasync function readArray(\r\n reader: BinaryReader,\r\n elementByteLength: number,\r\n arrayFactory: (buffer: ArrayBuffer) => ArrayBufferView\r\n) {\r\n const length = reader.getUint32();\r\n const encoding = reader.getUint32();\r\n const compressedLength = reader.getUint32();\r\n if (encoding === 0) {\r\n const byteLength = length * elementByteLength;\r\n const buffer = reader.getArrayBuffer(byteLength);\r\n return arrayFactory(buffer);\r\n }\r\n const compressed = new Uint8Array(reader.getArrayBuffer(compressedLength));\r\n const buffer = await inflateDeflate(compressed, length * elementByteLength);\r\n return arrayFactory(buffer);\r\n}\r\n\r\nasync function readBinaryProperty(reader: BinaryReader, type: string): Promise<FbxPropertyValue> {\r\n switch (type) {\r\n case 'C':\r\n return reader.getBoolean();\r\n case 'D':\r\n return reader.getFloat64();\r\n case 'F':\r\n return reader.getFloat32();\r\n case 'I':\r\n return reader.getInt32();\r\n case 'L':\r\n return reader.getBigInt64();\r\n case 'R': {\r\n const length = reader.getUint32();\r\n return reader.getArrayBuffer(length);\r\n }\r\n case 'S': {\r\n const length = reader.getUint32();\r\n return reader.getString(length);\r\n }\r\n case 'Y':\r\n return reader.getInt16();\r\n case 'b':\r\n return (await readArray(reader, 1, (buffer) => new Uint8Array(buffer))) as Uint8Array<ArrayBuffer>;\r\n case 'c':\r\n return (await readArray(reader, 1, (buffer) => new Uint8Array(buffer))) as Uint8Array<ArrayBuffer>;\r\n case 'd':\r\n return (await readArray(reader, 8, (buffer) => new Float64Array(buffer))) as Float64Array<ArrayBuffer>;\r\n case 'f':\r\n return (await readArray(reader, 4, (buffer) => new Float32Array(buffer))) as Float32Array<ArrayBuffer>;\r\n case 'i':\r\n return (await readArray(reader, 4, (buffer) => new Int32Array(buffer))) as Int32Array<ArrayBuffer>;\r\n case 'l':\r\n return (await readArray(\r\n reader,\r\n 8,\r\n (buffer) => new BigInt64Array(buffer)\r\n )) as BigInt64Array<ArrayBuffer>;\r\n default:\r\n throw new Error(`Unsupported FBX property type: ${type}`);\r\n }\r\n}\r\n\r\nasync function parseBinaryNode(reader: BinaryReader, version: number): Promise<FbxNode | null> {\r\n const use64 = version >= 7500;\r\n const endOffset = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const numProperties = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const propertyListLength = use64 ? Number(reader.getBigInt64()) : reader.getUint32();\r\n const nameLength = reader.getUint8();\r\n if (endOffset === 0 && numProperties === 0 && propertyListLength === 0 && nameLength === 0) {\r\n return null;\r\n }\r\n const name = reader.getString(nameLength);\r\n const properties: FbxPropertyValue[] = [];\r\n for (let i = 0; i < numProperties; i++) {\r\n properties.push(await readBinaryProperty(reader, String.fromCharCode(reader.getUint8())));\r\n }\r\n const node: FbxNode = {\r\n name,\r\n properties,\r\n propertyListLength,\r\n children: []\r\n };\r\n while (reader.offset < endOffset) {\r\n const child = await parseBinaryNode(reader, version);\r\n if (!child) {\r\n break;\r\n }\r\n node.children.push(child);\r\n }\r\n reader.offset = endOffset;\r\n return node;\r\n}\r\n\r\nfunction isBinaryFbx(buffer: ArrayBuffer) {\r\n const magic = new TextDecoder('ascii').decode(new Uint8Array(buffer, 0, FBX_BINARY_MAGIC.length));\r\n return magic === FBX_BINARY_MAGIC;\r\n}\r\n\r\nfunction getChild(node: FbxNode, name: string) {\r\n return node.children.find((child) => child.name === name) ?? null;\r\n}\r\n\r\nfunction getChildren(node: FbxNode, name: string) {\r\n return node.children.filter((child) => child.name === name);\r\n}\r\n\r\nfunction buildObjectMap(root: FbxNode): FbxObjectMap {\r\n const objectsNode = getChild(root, 'Objects');\r\n const map: FbxObjectMap = {};\r\n if (!objectsNode) {\r\n return map;\r\n }\r\n for (const child of objectsNode.children) {\r\n const id = child.properties[0];\r\n const idNumber = typeof id === 'bigint' ? Number(id) : typeof id === 'number' ? id : NaN;\r\n if (!Number.isFinite(idNumber)) {\r\n continue;\r\n }\r\n if (!map[child.name]) {\r\n map[child.name] = new Map();\r\n }\r\n map[child.name].set(idNumber, child);\r\n }\r\n return map;\r\n}\r\n\r\nfunction buildConnections(root: FbxNode): FbxConnection[] {\r\n const result: FbxConnection[] = [];\r\n const connectionsNode = getChild(root, 'Connections');\r\n if (!connectionsNode) {\r\n return result;\r\n }\r\n for (const child of getChildren(connectionsNode, 'C')) {\r\n const type = String(child.properties[0] ?? '');\r\n const from = Number(child.properties[1] ?? 0);\r\n const to = Number(child.properties[2] ?? 0);\r\n const property = child.properties.length > 3 ? String(child.properties[3]) : undefined;\r\n result.push({ type, from, to, property });\r\n }\r\n return result;\r\n}\r\n\r\nfunction getVersion(root: FbxNode) {\r\n const header = getChild(root, 'FBXHeaderExtension');\r\n const versionNode = header ? getChild(header, 'FBXVersion') : null;\r\n const version = Number(versionNode?.properties[0] ?? 0);\r\n return Number.isFinite(version) ? version : 0;\r\n}\r\n\r\nexport async function parseFbx(buffer: ArrayBuffer): Promise<FbxDocument> {\r\n let root: FbxNode;\r\n if (isBinaryFbx(buffer)) {\r\n const reader = new BinaryReader(buffer);\r\n reader.skip(FBX_BINARY_MAGIC.length);\r\n reader.skip(2);\r\n const version = reader.getUint32();\r\n root = {\r\n name: 'Root',\r\n properties: [],\r\n propertyListLength: 0,\r\n children: []\r\n };\r\n while (reader.offset < buffer.byteLength) {\r\n const node = await parseBinaryNode(reader, version);\r\n if (!node) {\r\n break;\r\n }\r\n root.children.push(node);\r\n }\r\n } else {\r\n root = parseAscii(new TextDecoder('utf-8').decode(buffer));\r\n }\r\n return {\r\n version: getVersion(root),\r\n root,\r\n objects: buildObjectMap(root),\r\n connections: buildConnections(root)\r\n };\r\n}\r\n","import type { EulerAngleOrder, Nullable, VFS } from '@zephyr3d/base';\r\nimport { ASSERT, Matrix4x4, PathUtils, Quaternion, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n PrimitiveType,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n VertexAttribFormat,\r\n VertexSemantic\r\n} from '@zephyr3d/device';\r\nimport {\r\n AssetHierarchyNode,\r\n AssetScene,\r\n AssetSkeleton,\r\n getEngine,\r\n SharedModel,\r\n type AssetImageInfo,\r\n type AssetMaterial,\r\n type AssetMeshData,\r\n type AssetPBRMaterialMR,\r\n type AssetPrimitiveInfo,\r\n type AssetSubMeshData,\r\n type AssetTextureInfo\r\n} from '@zephyr3d/scene';\r\nimport { AbstractModelImporter } from '../importer';\r\nimport { parseFbx } from './parser';\r\nimport type {\r\n FbxClusterData,\r\n FbxConnection,\r\n FbxDocument,\r\n FbxGeometryData,\r\n FbxLayerElementData,\r\n FbxMaterialData,\r\n FbxModelData,\r\n FbxNode,\r\n FbxObjectMap,\r\n FbxPrimitiveBuildData,\r\n FbxSkinData,\r\n FbxTextureData,\r\n FbxTransformData,\r\n FbxVideoData\r\n} from './types';\r\n\r\ntype FbxImportContext = {\r\n document: FbxDocument;\r\n objects: FbxObjectMap;\r\n connectionChildren: Map<number, FbxConnection[]>;\r\n connectionParents: Map<number, FbxConnection[]>;\r\n modelMap: Map<number, FbxModelData>;\r\n geometryMap: Map<number, FbxGeometryData>;\r\n materialMap: Map<number, FbxMaterialData>;\r\n textureMap: Map<number, FbxTextureData>;\r\n videoMap: Map<number, FbxVideoData>;\r\n skinMap: Map<number, FbxSkinData>;\r\n skeletonMap: Map<number, AssetSkeleton>;\r\n jointBindMatrices: Map<string, Matrix4x4>;\r\n skeletonJointIds: Set<number>;\r\n imageSet: Set<AssetImageInfo>;\r\n nextImageIndex: number;\r\n nodeMap: Map<number, AssetHierarchyNode>;\r\n basePath: string;\r\n vfs: VFS;\r\n};\r\n\r\nfunction toUint8Array(data: Uint8Array<ArrayBufferLike>) {\r\n return new Uint8Array(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer);\r\n}\r\n\r\nfunction toUint16Array(data: Uint16Array<ArrayBufferLike>) {\r\n return new Uint16Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toUint32Array(data: Uint32Array<ArrayBufferLike>) {\r\n return new Uint32Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toFloat32Array(data: Float32Array<ArrayBufferLike>) {\r\n return new Float32Array(\r\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer\r\n );\r\n}\r\n\r\nfunction toVertexRecord(\r\n vertices: Partial<\r\n Record<VertexSemantic, { format: VertexAttribFormat; data: Float32Array | Uint16Array | Uint32Array }>\r\n >\r\n) {\r\n const record = {} as Record<\r\n VertexSemantic,\r\n { format: VertexAttribFormat; data: Float32Array | Uint16Array | Uint32Array }\r\n >;\r\n for (const key of Object.keys(vertices) as VertexSemantic[]) {\r\n record[key] = vertices[key]!;\r\n }\r\n return record;\r\n}\r\n\r\nconst TMP_VEC3 = new Vector3();\r\nconst TMP_VEC3_B = new Vector3();\r\nconst TMP_VEC4 = new Vector4();\r\n\r\nfunction asNumber(value: unknown, fallback = 0) {\r\n if (typeof value === 'bigint') {\r\n return Number(value);\r\n }\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? value : fallback;\r\n }\r\n return fallback;\r\n}\r\n\r\nfunction asString(value: unknown, fallback = '') {\r\n return typeof value === 'string' ? value : fallback;\r\n}\r\n\r\nfunction getChild(node: Nullable<FbxNode>, name: string) {\r\n return node?.children.find((child) => child.name === name) ?? null;\r\n}\r\n\r\nfunction getChildren(node: Nullable<FbxNode>, name: string) {\r\n return node?.children.filter((child) => child.name === name) ?? [];\r\n}\r\n\r\nfunction getProperty70(node: Nullable<FbxNode>, name: string) {\r\n if (!node) {\r\n return null;\r\n }\r\n const props70 = getChild(node, 'Properties70');\r\n if (!props70) {\r\n return null;\r\n }\r\n for (const prop of getChildren(props70, 'P')) {\r\n if (asString(prop.properties[0]) === name) {\r\n return prop;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getProperty70Value(\r\n node: Nullable<FbxNode>,\r\n name: string,\r\n fallback: [number, number, number] | number\r\n): [number, number, number] | number {\r\n const prop = getProperty70(node, name);\r\n if (!prop) {\r\n return fallback;\r\n }\r\n const values = prop.properties.slice(4);\r\n if (typeof fallback === 'number') {\r\n return values.length > 0 ? asNumber(values[0], fallback) : fallback;\r\n }\r\n if (values.length >= 3) {\r\n return [asNumber(values[0]), asNumber(values[1]), asNumber(values[2])];\r\n }\r\n return fallback;\r\n}\r\n\r\nfunction getNodeId(node: FbxNode) {\r\n return asNumber(node.properties[0], Number.NaN);\r\n}\r\n\r\nfunction getObjectName(node: FbxNode) {\r\n const raw = asString(node.properties[1], '');\r\n if (!raw) {\r\n return '';\r\n }\r\n const parts = raw.split('\\0');\r\n return parts[0] || raw;\r\n}\r\n\r\nfunction toRadiansTuple(value: [number, number, number]): [number, number, number] {\r\n return [(value[0] * Math.PI) / 180, (value[1] * Math.PI) / 180, (value[2] * Math.PI) / 180];\r\n}\r\n\r\nfunction getEulerOrder(order: number): EulerAngleOrder {\r\n // FBX stores extrinsic Euler orders; Quaternion.fromEulerAngle expects the equivalent\r\n // intrinsic order, matching the conversion used by three.js FBXLoader.\r\n switch (order) {\r\n case 0:\r\n return 'ZYX';\r\n case 1:\r\n return 'YZX';\r\n case 2:\r\n return 'XZY';\r\n case 3:\r\n return 'YXZ';\r\n case 4:\r\n return 'ZXY';\r\n case 5:\r\n return 'XYZ';\r\n default:\r\n return 'ZYX';\r\n }\r\n}\r\n\r\nfunction quaternionFromDegrees(euler: [number, number, number], order: number) {\r\n const r = toRadiansTuple(euler);\r\n return Quaternion.fromEulerAngle(r[0], r[1], r[2], getEulerOrder(order));\r\n}\r\n\r\nfunction quaternionFromDegreesXYZ(euler: [number, number, number]) {\r\n const r = toRadiansTuple(euler);\r\n return Quaternion.fromEulerAngle(r[0], r[1], r[2], 'XYZ');\r\n}\r\n\r\nfunction matrixFromTRS(\r\n translation: [number, number, number],\r\n rotationDegrees: [number, number, number],\r\n scale: [number, number, number],\r\n rotationOrder: number\r\n) {\r\n return new Matrix4x4().compose(\r\n new Vector3(scale[0], scale[1], scale[2]),\r\n quaternionFromDegrees(rotationDegrees, rotationOrder),\r\n new Vector3(translation[0], translation[1], translation[2])\r\n );\r\n}\r\n\r\nfunction readTransformData(node: FbxNode): FbxTransformData {\r\n const lclTranslation = getProperty70Value(node, 'Lcl Translation', [0, 0, 0]) as [number, number, number];\r\n const lclRotation = getProperty70Value(node, 'Lcl Rotation', [0, 0, 0]) as [number, number, number];\r\n const lclScaling = getProperty70Value(node, 'Lcl Scaling', [1, 1, 1]) as [number, number, number];\r\n return {\r\n translation: lclTranslation,\r\n rotation: lclRotation,\r\n scale: lclScaling,\r\n preRotation: getProperty70Value(node, 'PreRotation', [0, 0, 0]) as [number, number, number],\r\n postRotation: getProperty70Value(node, 'PostRotation', [0, 0, 0]) as [number, number, number],\r\n rotationOffset: getProperty70Value(node, 'RotationOffset', [0, 0, 0]) as [number, number, number],\r\n rotationPivot: getProperty70Value(node, 'RotationPivot', [0, 0, 0]) as [number, number, number],\r\n scalingOffset: getProperty70Value(node, 'ScalingOffset', [0, 0, 0]) as [number, number, number],\r\n scalingPivot: getProperty70Value(node, 'ScalingPivot', [0, 0, 0]) as [number, number, number],\r\n rotationOrder: asNumber(getProperty70Value(node, 'RotationOrder', 0), 0),\r\n geometricTranslation: getProperty70Value(node, 'GeometricTranslation', [0, 0, 0]) as [\r\n number,\r\n number,\r\n number\r\n ],\r\n geometricRotation: getProperty70Value(node, 'GeometricRotation', [0, 0, 0]) as [number, number, number],\r\n geometricScaling: getProperty70Value(node, 'GeometricScaling', [1, 1, 1]) as [number, number, number],\r\n inheritType: asNumber(getProperty70Value(node, 'InheritType', 0), 0)\r\n };\r\n}\r\n\r\nfunction readConnections(connections: FbxConnection[]) {\r\n const children = new Map<number, FbxConnection[]>();\r\n const parents = new Map<number, FbxConnection[]>();\r\n for (const connection of connections) {\r\n const listA = children.get(connection.to);\r\n if (listA) {\r\n listA.push(connection);\r\n } else {\r\n children.set(connection.to, [connection]);\r\n }\r\n const listB = parents.get(connection.from);\r\n if (listB) {\r\n listB.push(connection);\r\n } else {\r\n parents.set(connection.from, [connection]);\r\n }\r\n }\r\n return { children, parents };\r\n}\r\n\r\nfunction readVideoData(node: FbxNode) {\r\n const contentNode = getChild(node, 'Content');\r\n const contentProp = contentNode?.properties[0];\r\n let content: Uint8Array | null = null;\r\n if (contentProp instanceof ArrayBuffer) {\r\n content = new Uint8Array(contentProp);\r\n } else if (contentProp instanceof Uint8Array) {\r\n content = contentProp;\r\n }\r\n return {\r\n id: getNodeId(node),\r\n name: getObjectName(node),\r\n relativeFilename: asString(getChild(node, 'RelativeFilename')?.properties[0], ''),\r\n filename: asString(getChild(node, 'Filename')?.properties[0], ''),\r\n content\r\n } as FbxVideoData;\r\n}\r\n\r\nfunction readTextureData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const linkedVideoConnection = ctx.connectionChildren\r\n .get(id)\r\n ?.find((connection) => ctx.objects.Video?.has(connection.from));\r\n const video = linkedVideoConnection ? (ctx.videoMap.get(linkedVideoConnection.from) ?? null) : null;\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n fileName: asString(getChild(node, 'FileName')?.properties[0], ''),\r\n relativeFilename: asString(getChild(node, 'RelativeFilename')?.properties[0], ''),\r\n video,\r\n uvSet: asString(getProperty70(node, 'UVSet')?.properties[4], ''),\r\n wrapModeU: asNumber(getChild(node, 'WrapModeU')?.properties[0], 0),\r\n wrapModeV: asNumber(getChild(node, 'WrapModeV')?.properties[0], 0),\r\n translation: [\r\n asNumber(getProperty70(node, 'Translation')?.properties[4], 0),\r\n asNumber(getProperty70(node, 'Translation')?.properties[5], 0)\r\n ],\r\n scale: [\r\n asNumber(getProperty70(node, 'Scaling')?.properties[4], 1),\r\n asNumber(getProperty70(node, 'Scaling')?.properties[5], 1)\r\n ]\r\n } as FbxTextureData;\r\n}\r\n\r\nfunction normalizeTextureSlot(name: string) {\r\n switch (name) {\r\n case 'DiffuseColor':\r\n case 'Maya|baseColor':\r\n return 'diffuse';\r\n case 'NormalMap':\r\n case 'Bump':\r\n case 'Maya|normalCamera':\r\n return 'normal';\r\n case 'TransparentColor':\r\n case 'TransparencyFactor':\r\n return 'opacity';\r\n case 'EmissiveColor':\r\n case 'Maya|emissionColor':\r\n return 'emissive';\r\n default:\r\n return name;\r\n }\r\n}\r\n\r\nfunction readMaterialData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const textures: Record<string, FbxTextureData> = {};\r\n for (const connection of ctx.connectionChildren.get(id) ?? []) {\r\n const texture = ctx.textureMap.get(connection.from);\r\n if (texture) {\r\n textures[normalizeTextureSlot(connection.property ?? '')] = texture;\r\n }\r\n }\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n shadingModel: asString(getChild(node, 'ShadingModel')?.properties[0], 'phong').toLowerCase(),\r\n diffuseColor: getProperty70Value(node, 'DiffuseColor', [1, 1, 1]) as [number, number, number],\r\n emissiveColor: getProperty70Value(node, 'EmissiveColor', [0, 0, 0]) as [number, number, number],\r\n transparentColor: getProperty70Value(node, 'TransparentColor', [0, 0, 0]) as [number, number, number],\r\n opacity: asNumber(getProperty70Value(node, 'Opacity', 1), 1),\r\n transparencyFactor: asNumber(getProperty70Value(node, 'TransparencyFactor', 0), 0),\r\n shininess: asNumber(getProperty70Value(node, 'Shininess', 0), 0),\r\n bumpFactor: asNumber(getProperty70Value(node, 'BumpFactor', 1), 1),\r\n textures\r\n } as FbxMaterialData;\r\n}\r\n\r\nfunction readClusterData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const boneConnection = ctx.connectionChildren\r\n .get(id)\r\n ?.find((connection) => ctx.objects.Model?.has(connection.from));\r\n return {\r\n id,\r\n indices: (getChild(node, 'Indexes')?.properties[0] as Int32Array) ?? new Int32Array(),\r\n weights: (getChild(node, 'Weights')?.properties[0] as Float64Array) ?? new Float64Array(),\r\n transform: (getChild(node, 'Transform')?.properties[0] as Float64Array) ?? null,\r\n transformLink: (getChild(node, 'TransformLink')?.properties[0] as Float64Array) ?? null,\r\n linkMode: asString(getChild(node, 'Mode')?.properties[0], ''),\r\n boneModelId: boneConnection?.from ?? null\r\n } as FbxClusterData;\r\n}\r\n\r\nfunction readSkinData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const clusters: FbxClusterData[] = [];\r\n for (const connection of ctx.connectionChildren.get(id) ?? []) {\r\n const clusterNode = ctx.objects.Deformer?.get(connection.from);\r\n if (clusterNode?.properties[2] === 'Cluster') {\r\n clusters.push(readClusterData(clusterNode, ctx));\r\n }\r\n }\r\n return { id, clusters } as FbxSkinData;\r\n}\r\n\r\nfunction readLayerElementFloat(node: Nullable<FbxNode>) {\r\n if (!node) {\r\n return null;\r\n }\r\n const mapping = asString(getChild(node, 'MappingInformationType')?.properties[0], '');\r\n const reference = asString(getChild(node, 'ReferenceInformationType')?.properties[0], '');\r\n const dataNode =\r\n getChild(node, 'Normals') ??\r\n getChild(node, 'Tangents') ??\r\n getChild(node, 'Colors') ??\r\n getChild(node, 'UV');\r\n const indexNode =\r\n getChild(node, 'NormalsIndex') ?? getChild(node, 'ColorIndex') ?? getChild(node, 'UVIndex');\r\n const source = dataNode?.properties[0];\r\n let data: Float32Array;\r\n if (source instanceof Float64Array) {\r\n data = Float32Array.from(source);\r\n } else if (source instanceof Float32Array) {\r\n data = source;\r\n } else {\r\n data = new Float32Array();\r\n }\r\n const indices = indexNode?.properties[0];\r\n return {\r\n mapping,\r\n reference,\r\n data,\r\n indices: indices instanceof Int32Array || indices instanceof Uint32Array ? indices : null\r\n } as FbxLayerElementData<Float32Array>;\r\n}\r\n\r\nfunction readLayerElementInt(node: Nullable<FbxNode>) {\r\n if (!node) {\r\n return null;\r\n }\r\n const mapping = asString(getChild(node, 'MappingInformationType')?.properties[0], '');\r\n const reference = asString(getChild(node, 'ReferenceInformationType')?.properties[0], '');\r\n const dataNode = getChild(node, 'Materials');\r\n const indexNode = getChild(node, 'MaterialsIndex');\r\n const source = (dataNode?.properties[0] ?? indexNode?.properties[0]) as\r\n | Int32Array\r\n | Uint32Array\r\n | undefined;\r\n let data: Int32Array;\r\n if (source instanceof Int32Array) {\r\n data = source;\r\n } else if (source instanceof Uint32Array) {\r\n data = Int32Array.from(source);\r\n } else {\r\n data = new Int32Array();\r\n }\r\n return {\r\n mapping,\r\n reference,\r\n data\r\n } as FbxLayerElementData<Int32Array>;\r\n}\r\n\r\nfunction readGeometryData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const skinConnection = ctx.connectionChildren.get(id)?.find((connection) => {\r\n const deformerNode = ctx.objects.Deformer?.get(connection.from);\r\n return !!deformerNode && deformerNode.properties[2] === 'Skin';\r\n });\r\n const skin = skinConnection ? (ctx.skinMap.get(skinConnection.from) ?? null) : null;\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n vertices: (getChild(node, 'Vertices')?.properties[0] as Float64Array) ?? new Float64Array(),\r\n polygonVertexIndex:\r\n (getChild(node, 'PolygonVertexIndex')?.properties[0] as Int32Array) ?? new Int32Array(),\r\n normals: readLayerElementFloat(getChild(node, 'LayerElementNormal')),\r\n tangents: readLayerElementFloat(getChild(node, 'LayerElementTangent')),\r\n colors: readLayerElementFloat(getChild(node, 'LayerElementColor')),\r\n uvLayers: getChildren(node, 'LayerElementUV')\r\n .map((layer) => readLayerElementFloat(layer))\r\n .filter((layer): layer is FbxLayerElementData<Float32Array> => !!layer),\r\n materialLayer: readLayerElementInt(getChild(node, 'LayerElementMaterial')),\r\n skin\r\n } as FbxGeometryData;\r\n}\r\n\r\nfunction readModelData(node: FbxNode, ctx: FbxImportContext) {\r\n const id = getNodeId(node);\r\n const parentConnection = ctx.connectionParents\r\n .get(id)\r\n ?.find((connection) => connection.to !== 0 && ctx.objects.Model?.has(connection.to));\r\n const childConnections =\r\n ctx.connectionChildren.get(id)?.filter((connection) => ctx.objects.Model?.has(connection.from)) ?? [];\r\n return {\r\n id,\r\n name: getObjectName(node),\r\n type: asString(node.properties[2], ''),\r\n parentId: parentConnection?.to ?? null,\r\n children: childConnections.map((connection) => connection.from),\r\n transform: readTransformData(node)\r\n } as FbxModelData;\r\n}\r\n\r\nfunction wrapModeFromFbx(value: number): TextureAddressMode {\r\n return value === 0 ? 'repeat' : 'clamp';\r\n}\r\n\r\nfunction createSamplerInfo(texture: FbxTextureData) {\r\n return {\r\n wrapS: wrapModeFromFbx(texture.wrapModeU ?? 0),\r\n wrapT: wrapModeFromFbx(texture.wrapModeV ?? 0),\r\n magFilter: 'linear' as TextureFilterMode,\r\n minFilter: 'linear' as TextureFilterMode,\r\n mipFilter: 'linear' as TextureFilterMode\r\n };\r\n}\r\n\r\nfunction resolveTextureImage(basePath: string, texture: FbxTextureData, vfs: VFS): AssetImageInfo | null {\r\n const video = texture.video;\r\n if (video?.content?.byteLength) {\r\n const filename =\r\n video.relativeFilename || video.filename || texture.relativeFilename || texture.fileName || '';\r\n const mimeType = filename ? vfs.guessMIMEType(filename) : '';\r\n return {\r\n data: toUint8Array(video.content),\r\n mimeType\r\n };\r\n }\r\n const rawPath =\r\n texture.relativeFilename || texture.fileName || video?.relativeFilename || video?.filename || '';\r\n if (!rawPath) {\r\n return null;\r\n }\r\n const normalized = rawPath.replace(/\\\\/g, '/');\r\n const uri =\r\n vfs.parseDataURI(normalized) || vfs.isAbsoluteURL(normalized)\r\n ? normalized\r\n : vfs.normalizePath(vfs.join(basePath, normalized));\r\n return { uri };\r\n}\r\n\r\nfunction createTextureInfo(basePath: string, texture: Nullable<FbxTextureData>, vfs: VFS, sRGB: boolean) {\r\n if (!texture) {\r\n return null;\r\n }\r\n const image = resolveTextureImage(basePath, texture, vfs);\r\n if (!image) {\r\n return null;\r\n }\r\n const transform = new Matrix4x4().identity();\r\n const uvScale = texture.scale ?? [1, 1];\r\n const uvOffset = texture.translation ?? [0, 0];\r\n transform.scaleLeft(new Vector3(uvScale[0], uvScale[1], 1));\r\n transform.translateLeft(new Vector3(uvOffset[0], uvOffset[1], 0));\r\n return {\r\n image,\r\n sRGB,\r\n sampler: createSamplerInfo(texture),\r\n texCoord: 0,\r\n transform\r\n } as AssetTextureInfo;\r\n}\r\n\r\nfunction registerTextureInfo(\r\n model: SharedModel,\r\n ctx: FbxImportContext,\r\n textureInfo: Nullable<AssetTextureInfo>\r\n) {\r\n const image = textureInfo?.image;\r\n if (!image || ctx.imageSet.has(image)) {\r\n return;\r\n }\r\n ctx.imageSet.add(image);\r\n model.setImage(ctx.nextImageIndex++, image);\r\n}\r\n\r\nfunction registerMaterialImages(model: SharedModel, ctx: FbxImportContext, material: AssetMaterial) {\r\n if (material.type !== 'pbrMetallicRoughness') {\r\n return;\r\n }\r\n const pbr = material as AssetPBRMaterialMR;\r\n registerTextureInfo(model, ctx, pbr.diffuseMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.normalMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.emissiveMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.common.occlusionMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.metallicMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.specularMap ?? null);\r\n registerTextureInfo(model, ctx, pbr.specularColorMap ?? null);\r\n}\r\n\r\nfunction createMaterialAsset(\r\n material: Nullable<FbxMaterialData>,\r\n ctx: FbxImportContext,\r\n vertexColor: boolean,\r\n useTangent: boolean\r\n): AssetMaterial {\r\n const diffuse = material?.diffuseColor ?? [0.8, 0.8, 0.8];\r\n const opacity = material?.opacity ?? 1;\r\n const transparencyFactor = material?.transparencyFactor ?? 0;\r\n const transparentColor = material?.transparentColor ?? [0, 0, 0];\r\n const transparentStrength = Math.max(\r\n 0,\r\n Math.min(1, (transparentColor[0] + transparentColor[1] + transparentColor[2]) / 3)\r\n );\r\n const alpha = Math.max(0, Math.min(1, opacity * (1 - transparencyFactor * transparentStrength)));\r\n const assetMaterial: AssetPBRMaterialMR = {\r\n type: 'pbrMetallicRoughness',\r\n common: {\r\n vertexColor,\r\n vertexNormal: true,\r\n useTangent,\r\n alphaMode: alpha < 0.999 ? 'blend' : undefined,\r\n doubleSided: false,\r\n bumpScale: material?.bumpFactor ?? 1,\r\n emissiveColor: material?.emissiveColor ? new Vector3(...material.emissiveColor) : Vector3.zero(),\r\n emissiveStrength: 1,\r\n occlusionStrength: 1,\r\n normalMap:\r\n createTextureInfo(ctx.basePath, material?.textures.normal ?? null, ctx.vfs, false) ?? undefined,\r\n emissiveMap:\r\n createTextureInfo(ctx.basePath, material?.textures.emissive ?? null, ctx.vfs, true) ?? undefined\r\n },\r\n ior: 1.5,\r\n diffuse: new Vector4(diffuse[0], diffuse[1], diffuse[2], alpha),\r\n metallic: 0,\r\n roughness: material?.shininess ? Math.max(0.04, 1 - Math.min(material.shininess / 100, 1)) : 1,\r\n diffuseMap:\r\n createTextureInfo(ctx.basePath, material?.textures.diffuse ?? null, ctx.vfs, true) ?? undefined,\r\n specularFactor: Vector4.one()\r\n };\r\n return assetMaterial;\r\n}\r\n\r\nfunction getElementIndex(\r\n layer: Nullable<FbxLayerElementData<Float32Array> | FbxLayerElementData<Int32Array>>,\r\n polygonIndex: number,\r\n polygonVertexIndex: number,\r\n controlPointIndex: number\r\n) {\r\n if (!layer) {\r\n return -1;\r\n }\r\n switch (layer.mapping) {\r\n case 'ByControlPoint':\r\n case 'ByVertice':\r\n case 'ByVertex':\r\n return controlPointIndex;\r\n case 'ByPolygonVertex':\r\n return polygonVertexIndex;\r\n case 'ByPolygon':\r\n return polygonIndex;\r\n case 'AllSame':\r\n return 0;\r\n default:\r\n return polygonVertexIndex;\r\n }\r\n}\r\n\r\nfunction resolveLayerElement(\r\n layer: Nullable<FbxLayerElementData<Float32Array>>,\r\n polygonIndex: number,\r\n polygonVertexIndex: number,\r\n controlPointIndex: number,\r\n componentCount: number,\r\n out: number[]\r\n) {\r\n if (!layer) {\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = 0;\r\n }\r\n return;\r\n }\r\n let index = getElementIndex(layer, polygonIndex, polygonVertexIndex, controlPointIndex);\r\n if (index < 0) {\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = 0;\r\n }\r\n return;\r\n }\r\n if (layer.reference === 'IndexToDirect' && layer.indices) {\r\n index = asNumber(layer.indices[index], index);\r\n }\r\n const offset = index * componentCount;\r\n for (let i = 0; i < componentCount; i++) {\r\n out[i] = layer.data[offset + i] ?? 0;\r\n }\r\n}\r\n\r\nfunction resolveMaterialIndex(layer: Nullable<FbxLayerElementData<Int32Array>>, polygonIndex: number) {\r\n if (!layer) {\r\n return 0;\r\n }\r\n const index = getElementIndex(layer, polygonIndex, polygonIndex, polygonIndex);\r\n return index >= 0 ? asNumber(layer.data[index], 0) : 0;\r\n}\r\n\r\nfunction getGeometryTransform(model: FbxModelData) {\r\n return matrixFromTRS(\r\n model.transform.geometricTranslation,\r\n model.transform.geometricRotation,\r\n model.transform.geometricScaling,\r\n model.transform.rotationOrder\r\n );\r\n}\r\n\r\nfunction buildSkinData(geometry: FbxGeometryData) {\r\n const clusterList = geometry.skin?.clusters ?? [];\r\n if (clusterList.length === 0) {\r\n return null;\r\n }\r\n const controlPointCount = (geometry.vertices.length / 3) >> 0;\r\n const influences = Array.from(\r\n { length: controlPointCount },\r\n () => [] as { joint: number; weight: number }[]\r\n );\r\n for (let jointIndex = 0; jointIndex < clusterList.length; jointIndex++) {\r\n const cluster = clusterList[jointIndex];\r\n const count = Math.min(cluster.indices.length, cluster.weights.length);\r\n for (let i = 0; i < count; i++) {\r\n const controlPoint = cluster.indices[i];\r\n if (controlPoint >= 0 && controlPoint < controlPointCount) {\r\n influences[controlPoint].push({ joint: jointIndex, weight: Number(cluster.weights[i]) });\r\n }\r\n }\r\n }\r\n return { clusterList, influences };\r\n}\r\n\r\nfunction buildPrimitives(geometry: FbxGeometryData, model: FbxModelData): FbxPrimitiveBuildData[] {\r\n const materialBuckets = new Map<\r\n number,\r\n {\r\n positions: number[];\r\n normals: number[];\r\n tangents: number[];\r\n colors: number[];\r\n texCoords: number[][];\r\n blendIndices: number[];\r\n blendWeights: number[];\r\n indices: number[];\r\n rawPositions: number[];\r\n rawBlendIndices: number[];\r\n rawJointWeights: number[];\r\n }\r\n >();\r\n const geometryTransform = getGeometryTransform(model);\r\n const normalTransform = new Matrix4x4(geometryTransform).inplaceInvertAffine().transpose();\r\n const positionScratch = [0, 0, 0];\r\n const normalScratch = [0, 0, 0];\r\n const tangentScratch = [0, 0, 0];\r\n const colorScratch = [1, 1, 1, 1];\r\n const uvScratch = Array.from({ length: Math.max(1, geometry.uvLayers.length) }, () => [0, 0]);\r\n const skinData = buildSkinData(geometry);\r\n let polygon: number[] = [];\r\n let polygonIndex = 0;\r\n let polygonVertexStart = 0;\r\n\r\n function getBucket(materialIndex: number) {\r\n let bucket = materialBuckets.get(materialIndex);\r\n if (!bucket) {\r\n bucket = {\r\n positions: [],\r\n normals: [],\r\n tangents: [],\r\n colors: [],\r\n texCoords: geometry.uvLayers.map(() => []),\r\n blendIndices: [],\r\n blendWeights: [],\r\n indices: [],\r\n rawPositions: [],\r\n rawBlendIndices: [],\r\n rawJointWeights: []\r\n };\r\n materialBuckets.set(materialIndex, bucket);\r\n }\r\n return bucket;\r\n }\r\n\r\n const controlPoints = geometry.vertices;\r\n for (let i = 0; i < geometry.polygonVertexIndex.length; i++) {\r\n const controlPointIndexRaw = geometry.polygonVertexIndex[i];\r\n const controlPointIndex = controlPointIndexRaw < 0 ? -controlPointIndexRaw - 1 : controlPointIndexRaw;\r\n polygon.push(controlPointIndex);\r\n if (controlPointIndexRaw >= 0) {\r\n continue;\r\n }\r\n const materialIndex = resolveMaterialIndex(geometry.materialLayer ?? null, polygonIndex);\r\n const bucket = getBucket(materialIndex);\r\n const baseIndex = bucket.positions.length / 3;\r\n for (let localIndex = 0; localIndex < polygon.length; localIndex++) {\r\n const cpIndex = polygon[localIndex];\r\n positionScratch[0] = controlPoints[cpIndex * 3] ?? 0;\r\n positionScratch[1] = controlPoints[cpIndex * 3 + 1] ?? 0;\r\n positionScratch[2] = controlPoints[cpIndex * 3 + 2] ?? 0;\r\n TMP_VEC3.setXYZ(positionScratch[0], positionScratch[1], positionScratch[2]);\r\n geometryTransform.transformPointAffine(TMP_VEC3, TMP_VEC3_B);\r\n bucket.positions.push(TMP_VEC3_B.x, TMP_VEC3_B.y, TMP_VEC3_B.z);\r\n bucket.rawPositions.push(TMP_VEC3_B.x, TMP_VEC3_B.y, TMP_VEC3_B.z);\r\n\r\n resolveLayerElement(\r\n geometry.normals ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 3,\r\n normalScratch\r\n );\r\n TMP_VEC3.setXYZ(normalScratch[0], normalScratch[1], normalScratch[2]);\r\n normalTransform.transformVector(TMP_VEC3, TMP_VEC4);\r\n TMP_VEC3.setXYZ(TMP_VEC4.x, TMP_VEC4.y, TMP_VEC4.z).inplaceNormalize();\r\n bucket.normals.push(TMP_VEC3.x, TMP_VEC3.y, TMP_VEC3.z);\r\n\r\n if (geometry.tangents) {\r\n resolveLayerElement(\r\n geometry.tangents ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 3,\r\n tangentScratch\r\n );\r\n TMP_VEC3.setXYZ(tangentScratch[0], tangentScratch[1], tangentScratch[2]);\r\n normalTransform.transformVector(TMP_VEC3, TMP_VEC4);\r\n TMP_VEC3.setXYZ(TMP_VEC4.x, TMP_VEC4.y, TMP_VEC4.z).inplaceNormalize();\r\n bucket.tangents.push(TMP_VEC3.x, TMP_VEC3.y, TMP_VEC3.z, 1);\r\n }\r\n\r\n if (geometry.colors) {\r\n resolveLayerElement(\r\n geometry.colors ?? null,\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 4,\r\n colorScratch\r\n );\r\n bucket.colors.push(colorScratch[0], colorScratch[1], colorScratch[2], colorScratch[3]);\r\n }\r\n\r\n for (let uvIndex = 0; uvIndex < geometry.uvLayers.length; uvIndex++) {\r\n resolveLayerElement(\r\n geometry.uvLayers[uvIndex],\r\n polygonIndex,\r\n polygonVertexStart + localIndex,\r\n cpIndex,\r\n 2,\r\n uvScratch[uvIndex]\r\n );\r\n bucket.texCoords[uvIndex].push(uvScratch[uvIndex][0], uvScratch[uvIndex][1]);\r\n }\r\n\r\n if (skinData) {\r\n const vertexInfluences = skinData.influences[cpIndex]\r\n .slice()\r\n .sort((a, b) => b.weight - a.weight)\r\n .slice(0, 4);\r\n while (vertexInfluences.length < 4) {\r\n vertexInfluences.push({ joint: 0, weight: 0 });\r\n }\r\n let total = 0;\r\n for (const influence of vertexInfluences) {\r\n total += influence.weight;\r\n }\r\n const denom = total > 0 ? total : 1;\r\n for (const influence of vertexInfluences) {\r\n bucket.blendIndices.push(influence.joint);\r\n bucket.blendWeights.push(influence.weight / denom);\r\n bucket.rawBlendIndices.push(influence.joint);\r\n bucket.rawJointWeights.push(influence.weight / denom);\r\n }\r\n }\r\n }\r\n const polygonSize = polygon.length;\r\n for (let local = 1; local < polygonSize - 1; local++) {\r\n bucket.indices.push(baseIndex, baseIndex + local, baseIndex + local + 1);\r\n }\r\n polygon = [];\r\n polygonVertexStart += polygonSize;\r\n polygonIndex++;\r\n }\r\n\r\n const result: FbxPrimitiveBuildData[] = [];\r\n for (const [materialIndex, bucket] of materialBuckets) {\r\n const vertices: Partial<FbxPrimitiveBuildData['vertices']> = {\r\n position: { format: 'position_f32x3', data: new Float32Array(bucket.positions) },\r\n normal: { format: 'normal_f32x3', data: new Float32Array(bucket.normals) }\r\n };\r\n if (bucket.tangents.length > 0) {\r\n vertices.tangent = { format: 'tangent_f32x4', data: new Float32Array(bucket.tangents) };\r\n }\r\n if (bucket.colors.length > 0) {\r\n vertices.diffuse = { format: 'diffuse_f32x4', data: new Float32Array(bucket.colors) };\r\n }\r\n for (let uvIndex = 0; uvIndex < bucket.texCoords.length; uvIndex++) {\r\n const uv = bucket.texCoords[uvIndex];\r\n if (uv.length === 0) {\r\n continue;\r\n }\r\n const semantic = `texCoord${uvIndex}` as VertexSemantic;\r\n const format = `tex${uvIndex}_f32x2` as VertexAttribFormat;\r\n vertices[semantic] = { format, data: new Float32Array(uv) };\r\n }\r\n if (bucket.blendIndices.length > 0) {\r\n vertices.blendIndices = {\r\n format: 'blendindices_f32x4' as VertexAttribFormat,\r\n data: new Float32Array(bucket.blendIndices)\r\n };\r\n vertices.blendWeights = {\r\n format: 'blendweights_f32x4' as VertexAttribFormat,\r\n data: new Float32Array(bucket.blendWeights)\r\n };\r\n }\r\n result.push({\r\n primitiveType: 'triangle-list',\r\n indices: toUint32Array(new Uint32Array(bucket.indices)),\r\n vertices: vertices as FbxPrimitiveBuildData['vertices'],\r\n rawPositions: toFloat32Array(new Float32Array(bucket.rawPositions)),\r\n rawBlendIndices:\r\n bucket.rawBlendIndices.length > 0 ? toUint16Array(new Uint16Array(bucket.rawBlendIndices)) : null,\r\n rawJointWeights:\r\n bucket.rawJointWeights.length > 0 ? toFloat32Array(new Float32Array(bucket.rawJointWeights)) : null,\r\n materialIndex,\r\n name: materialBuckets.size > 1 ? `${geometry.name}_${materialIndex}` : geometry.name\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nfunction getBounds(positions: Float32Array) {\r\n const min = new Vector3(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY);\r\n const max = new Vector3(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY);\r\n for (let i = 0; i < positions.length; i += 3) {\r\n min.x = Math.min(min.x, positions[i]);\r\n min.y = Math.min(min.y, positions[i + 1]);\r\n min.z = Math.min(min.z, positions[i + 2]);\r\n max.x = Math.max(max.x, positions[i]);\r\n max.y = Math.max(max.y, positions[i + 1]);\r\n max.z = Math.max(max.z, positions[i + 2]);\r\n }\r\n if (!Number.isFinite(min.x)) {\r\n min.setXYZ(0, 0, 0);\r\n max.setXYZ(0, 0, 0);\r\n }\r\n return { min, max };\r\n}\r\n\r\nfunction composeFbxLocalMatrix(transform: FbxTransformData, hasParent: boolean) {\r\n const scale = hasParent && transform.inheritType === 2 ? Vector3.one() : new Vector3(...transform.scale);\r\n const local = new Matrix4x4().identity();\r\n local.translateLeft(\r\n new Vector3(-transform.scalingPivot[0], -transform.scalingPivot[1], -transform.scalingPivot[2])\r\n );\r\n local.scaleLeft(scale);\r\n local.translateLeft(new Vector3(...transform.scalingPivot));\r\n local.translateLeft(new Vector3(...transform.scalingOffset));\r\n local.translateLeft(\r\n new Vector3(-transform.rotationPivot[0], -transform.rotationPivot[1], -transform.rotationPivot[2])\r\n );\r\n local.rotateLeft(Quaternion.inverse(quaternionFromDegreesXYZ(transform.postRotation)));\r\n local.rotateLeft(quaternionFromDegrees(transform.rotation, transform.rotationOrder));\r\n local.rotateLeft(quaternionFromDegreesXYZ(transform.preRotation));\r\n local.translateLeft(new Vector3(...transform.rotationPivot));\r\n local.translateLeft(new Vector3(...transform.rotationOffset));\r\n local.translateLeft(new Vector3(...transform.translation));\r\n return local;\r\n}\r\n\r\nfunction matrixFromFloat64Array(array: Nullable<Float64Array | Float32Array>) {\r\n if (!array || array.length < 16) {\r\n return Matrix4x4.identity();\r\n }\r\n const matrix = new Matrix4x4();\r\n for (let i = 0; i < 16; i++) {\r\n matrix[i] = array[i];\r\n }\r\n return matrix;\r\n}\r\n\r\nfunction resolveClusterInverseBind(cluster: FbxClusterData, jointNode: Nullable<AssetHierarchyNode>) {\r\n // FBX cluster Transform is the geometry node bind matrix. We already bake the geometry\r\n // transform into mesh vertices, so inverse bind should come from the link node only.\r\n if (cluster.transformLink) {\r\n return matrixFromFloat64Array(cluster.transformLink).inplaceInvertAffine();\r\n }\r\n if (jointNode?.worldMatrix) {\r\n return new Matrix4x4(jointNode.worldMatrix).inplaceInvertAffine();\r\n }\r\n return Matrix4x4.identity();\r\n}\r\n\r\nfunction computeModelWorldMatrix(\r\n modelId: number,\r\n ctx: FbxImportContext,\r\n bindWorldOverrides: Map<number, Matrix4x4>,\r\n cache: Map<number, Matrix4x4>\r\n): Matrix4x4 {\r\n const cached = cache.get(modelId);\r\n if (cached) {\r\n return cached;\r\n }\r\n const override = bindWorldOverrides.get(modelId);\r\n if (override) {\r\n cache.set(modelId, override);\r\n return override;\r\n }\r\n const model = ctx.modelMap.get(modelId);\r\n if (!model) {\r\n return Matrix4x4.identity();\r\n }\r\n const local = composeFbxLocalMatrix(model.transform, model.parentId != null);\r\n const world: Matrix4x4 =\r\n model.parentId != null\r\n ? Matrix4x4.multiply(computeModelWorldMatrix(model.parentId, ctx, bindWorldOverrides, cache), local)\r\n : local;\r\n cache.set(modelId, world);\r\n return world;\r\n}\r\n\r\nfunction applyClusterBindPose(\r\n cluster: FbxClusterData,\r\n jointNode: AssetHierarchyNode,\r\n ctx: FbxImportContext,\r\n bindWorldOverrides: Map<number, Matrix4x4>,\r\n worldCache: Map<number, Matrix4x4>\r\n) {\r\n if (!cluster.transformLink || cluster.boneModelId == null) {\r\n return;\r\n }\r\n const bindWorld = matrixFromFloat64Array(cluster.transformLink);\r\n const source = ctx.modelMap.get(cluster.boneModelId);\r\n const parentWorld =\r\n source?.parentId != null\r\n ? computeModelWorldMatrix(source.parentId, ctx, bindWorldOverrides, worldCache)\r\n : null;\r\n const local = parentWorld\r\n ? Matrix4x4.multiply(new Matrix4x4(parentWorld).inplaceInvertAffine(), bindWorld)\r\n : bindWorld;\r\n local.decompose(jointNode.scaling, jointNode.rotation, jointNode.position);\r\n worldCache.set(cluster.boneModelId, bindWorld);\r\n}\r\n\r\nfunction hasAncestorOfType(model: FbxModelData, ctx: FbxImportContext, type: string) {\r\n let parentId = model.parentId;\r\n while (parentId != null) {\r\n const parent = ctx.modelMap.get(parentId);\r\n if (!parent) {\r\n break;\r\n }\r\n if (parent.type === type) {\r\n return true;\r\n }\r\n parentId = parent.parentId;\r\n }\r\n return false;\r\n}\r\n\r\nfunction hasDescendantOfType(model: FbxModelData, ctx: FbxImportContext, type: string) {\r\n for (const childId of model.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (!child) {\r\n continue;\r\n }\r\n if (child.type === type || hasDescendantOfType(child, ctx, type)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction collectDescendantIds(model: FbxModelData, ctx: FbxImportContext, out: number[]) {\r\n out.push(model.id);\r\n for (const childId of model.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (child) {\r\n collectDescendantIds(child, ctx, out);\r\n }\r\n }\r\n}\r\n\r\nfunction buildSkeleton(geometry: FbxGeometryData, model: SharedModel, ctx: FbxImportContext) {\r\n const cached = ctx.skeletonMap.get(geometry.id);\r\n if (cached) {\r\n return cached;\r\n }\r\n const skin = geometry.skin;\r\n if (!skin || skin.clusters.length === 0) {\r\n return null;\r\n }\r\n const skeleton = new AssetSkeleton(`${geometry.name}_skeleton`);\r\n const bindWorldOverrides = new Map<number, Matrix4x4>();\r\n for (const cluster of skin.clusters) {\r\n if (cluster.boneModelId != null && cluster.transformLink) {\r\n bindWorldOverrides.set(cluster.boneModelId, matrixFromFloat64Array(cluster.transformLink));\r\n }\r\n }\r\n const bindWorldCache = new Map<number, Matrix4x4>();\r\n for (const cluster of skin.clusters) {\r\n if (cluster.boneModelId == null) {\r\n continue;\r\n }\r\n const jointNode =\r\n ctx.nodeMap.get(cluster.boneModelId) ?? createAssetNode(cluster.boneModelId, model, ctx);\r\n if (!jointNode) {\r\n continue;\r\n }\r\n applyClusterBindPose(cluster, jointNode, ctx, bindWorldOverrides, bindWorldCache);\r\n const cacheKey = `${geometry.id}:${cluster.boneModelId}`;\r\n const inverseBind = ctx.jointBindMatrices.get(cacheKey) ?? resolveClusterInverseBind(cluster, jointNode);\r\n ctx.skeletonJointIds.add(cluster.boneModelId);\r\n ctx.jointBindMatrices.set(cacheKey, inverseBind);\r\n skeleton.addJoint(jointNode, inverseBind);\r\n }\r\n if (skeleton.joints.length === 0) {\r\n return null;\r\n }\r\n model.addSkeleton(skeleton);\r\n ctx.skeletonMap.set(geometry.id, skeleton);\r\n return skeleton;\r\n}\r\n\r\nfunction buildSkeletonFromLimbRoot(root: FbxModelData, model: SharedModel, ctx: FbxImportContext) {\r\n const cached = ctx.skeletonMap.get(root.id);\r\n if (cached) {\r\n return cached;\r\n }\r\n const descendantIds: number[] = [];\r\n collectDescendantIds(root, ctx, descendantIds);\r\n if (descendantIds.some((id) => ctx.skeletonJointIds.has(id))) {\r\n return null;\r\n }\r\n const skeleton = new AssetSkeleton(`${root.name || `${root.type}_${root.id}`}_skeleton`);\r\n const visit = (source: FbxModelData) => {\r\n if (source.type === 'LimbNode') {\r\n const jointNode = ctx.nodeMap.get(source.id) ?? createAssetNode(source.id, model, ctx);\r\n if (jointNode) {\r\n const cacheKey = `${root.id}:${source.id}`;\r\n const inverseBind =\r\n ctx.jointBindMatrices.get(cacheKey) ??\r\n (jointNode.worldMatrix\r\n ? new Matrix4x4(jointNode.worldMatrix).inplaceInvertAffine()\r\n : Matrix4x4.identity());\r\n ctx.jointBindMatrices.set(cacheKey, inverseBind);\r\n skeleton.addJoint(jointNode, inverseBind);\r\n }\r\n }\r\n for (const childId of source.children) {\r\n const child = ctx.modelMap.get(childId);\r\n if (child) {\r\n visit(child);\r\n }\r\n }\r\n };\r\n visit(root);\r\n if (skeleton.joints.length === 0) {\r\n return null;\r\n }\r\n model.addSkeleton(skeleton);\r\n ctx.skeletonMap.set(root.id, skeleton);\r\n return skeleton;\r\n}\r\n\r\nfunction buildSkeletonsFromLimbRoots(model: SharedModel, ctx: FbxImportContext) {\r\n const roots = [...(ctx.objects.Model?.values() ?? [])]\r\n .map((node) => ctx.modelMap.get(getNodeId(node)))\r\n .filter(\r\n (node): node is FbxModelData =>\r\n !!node && hasDescendantOfType(node, ctx, 'LimbNode') && !hasAncestorOfType(node, ctx, 'LimbNode')\r\n )\r\n .sort((a, b) => a.id - b.id);\r\n for (const root of roots) {\r\n buildSkeletonFromLimbRoot(root, model, ctx);\r\n }\r\n}\r\n\r\nfunction createMeshData(\r\n geometry: FbxGeometryData,\r\n modelData: FbxModelData,\r\n model: SharedModel,\r\n ctx: FbxImportContext\r\n) {\r\n const primitives = buildPrimitives(geometry, modelData);\r\n const materials = (ctx.connectionChildren.get(modelData.id) ?? [])\r\n .filter((connection) => ctx.materialMap.has(connection.from))\r\n .map((connection) => ctx.materialMap.get(connection.from)!)\r\n .sort((a, b) => a.id - b.id);\r\n const subMeshes: AssetSubMeshData[] = [];\r\n for (const primitiveData of primitives) {\r\n const bounds = getBounds(primitiveData.rawPositions);\r\n const primitive: AssetPrimitiveInfo = {\r\n vertices: toVertexRecord(primitiveData.vertices) as AssetPrimitiveInfo['vertices'],\r\n indices: toUint32Array(primitiveData.indices),\r\n indexCount: primitiveData.indices.length,\r\n type: primitiveData.primitiveType as PrimitiveType,\r\n boxMin: bounds.min,\r\n boxMax: bounds.max\r\n };\r\n model.addPrimitive(primitive);\r\n const materialSource = materials[primitiveData.materialIndex] ?? materials[0] ?? null;\r\n const hasVertexColor = !!primitive.vertices.diffuse;\r\n const hasVertexTangent = !!primitive.vertices.tangent;\r\n let material: AssetMaterial;\r\n if (materialSource) {\r\n const materialHash = `fbx_${materialSource.id}_${hasVertexColor ? 'C' : 'N'}_${hasVertexTangent ? 'T' : 'NT'}`;\r\n material =\r\n model.getMaterial(materialHash) ??\r\n createMaterialAsset(materialSource, ctx, hasVertexColor, hasVertexTangent);\r\n if (!model.getMaterial(materialHash)) {\r\n registerMaterialImages(model, ctx, material);\r\n model.setMaterial(materialHash, material);\r\n }\r\n } else {\r\n material = createMaterialAsset(null, ctx, hasVertexColor, hasVertexTangent);\r\n }\r\n const subMesh: AssetSubMeshData = {\r\n primitive,\r\n material,\r\n rawPositions: toFloat32Array(primitiveData.rawPositions),\r\n rawBlendIndices: primitiveData.rawBlendIndices ? toUint16Array(primitiveData.rawBlendIndices) : null,\r\n rawJointWeights: primitiveData.rawJointWeights ? toFloat32Array(primitiveData.rawJointWeights) : null,\r\n name: primitiveData.name || geometry.name,\r\n numTargets: 0\r\n };\r\n subMeshes.push(subMesh);\r\n }\r\n return {\r\n morphWeights: [],\r\n morphNames: [],\r\n subMeshes\r\n } as AssetMeshData;\r\n}\r\n\r\nfunction buildModelMaps(ctx: FbxImportContext) {\r\n for (const node of ctx.objects.Video?.values() ?? []) {\r\n const data = readVideoData(node);\r\n ctx.videoMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Texture?.values() ?? []) {\r\n const data = readTextureData(node, ctx);\r\n ctx.textureMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Material?.values() ?? []) {\r\n const data = readMaterialData(node, ctx);\r\n ctx.materialMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Deformer?.values() ?? []) {\r\n if (node.properties[2] === 'Skin') {\r\n const data = readSkinData(node, ctx);\r\n ctx.skinMap.set(data.id, data);\r\n }\r\n }\r\n for (const node of ctx.objects.Geometry?.values() ?? []) {\r\n const data = readGeometryData(node, ctx);\r\n ctx.geometryMap.set(data.id, data);\r\n }\r\n for (const node of ctx.objects.Model?.values() ?? []) {\r\n const data = readModelData(node, ctx);\r\n ctx.modelMap.set(data.id, data);\r\n }\r\n}\r\n\r\nfunction populateNodeTransforms(modelNode: AssetHierarchyNode, source: FbxModelData) {\r\n const local = composeFbxLocalMatrix(source.transform, source.parentId != null);\r\n local.decompose(modelNode.scaling, modelNode.rotation, modelNode.position);\r\n if (source.parentId != null && source.transform.inheritType === 2) {\r\n modelNode.scaling.setXYZ(1, 1, 1);\r\n }\r\n}\r\n\r\nfunction createAssetNode(modelId: number, model: SharedModel, ctx: FbxImportContext) {\r\n const source = ctx.modelMap.get(modelId);\r\n if (!source) {\r\n return null;\r\n }\r\n const existing = ctx.nodeMap.get(modelId);\r\n if (existing) {\r\n return existing;\r\n }\r\n const parent = source.parentId != null ? createAssetNode(source.parentId, model, ctx) : null;\r\n const node: AssetHierarchyNode = new AssetHierarchyNode(\r\n source.name || `${source.type}_${modelId}`,\r\n model,\r\n parent ?? undefined\r\n );\r\n ctx.nodeMap.set(modelId, node);\r\n populateNodeTransforms(node, source);\r\n const geometryConnection = (ctx.connectionChildren.get(modelId) ?? []).find((connection) =>\r\n ctx.geometryMap.has(connection.from)\r\n );\r\n if (geometryConnection) {\r\n const geometry = ctx.geometryMap.get(geometryConnection.from)!;\r\n node.mesh = createMeshData(geometry, source, model, ctx);\r\n node.skeleton = buildSkeleton(geometry, model, ctx);\r\n }\r\n for (const childId of source.children) {\r\n createAssetNode(childId, model, ctx);\r\n }\r\n return node;\r\n}\r\n\r\nfunction createImportContext(document: FbxDocument, basePath: string, vfs: VFS): FbxImportContext {\r\n const connectionMaps = readConnections(document.connections);\r\n return {\r\n document,\r\n objects: document.objects,\r\n connectionChildren: connectionMaps.children,\r\n connectionParents: connectionMaps.parents,\r\n modelMap: new Map(),\r\n geometryMap: new Map(),\r\n materialMap: new Map(),\r\n textureMap: new Map(),\r\n videoMap: new Map(),\r\n skinMap: new Map(),\r\n skeletonMap: new Map(),\r\n jointBindMatrices: new Map(),\r\n skeletonJointIds: new Set(),\r\n imageSet: new Set(),\r\n nextImageIndex: 0,\r\n nodeMap: new Map(),\r\n basePath,\r\n vfs\r\n };\r\n}\r\n\r\n/**\r\n * FBX importer that converts common FBX 7.x scene data into SharedModel.\r\n * Current scope targets hierarchy, mesh, material, embedded/external textures,\r\n * and basic skinning data. Animation is intentionally not mapped yet.\r\n * @public\r\n */\r\nexport class FBXImporter extends AbstractModelImporter {\r\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\r\n ASSERT(!!vfs, 'FBXImporter requires a VFS');\r\n const buffer = await data.arrayBuffer();\r\n const document = await parseFbx(buffer);\r\n const ctx = createImportContext(document, basePath, vfs!);\r\n buildModelMaps(ctx);\r\n\r\n const scene = new AssetScene('Scene');\r\n for (const [modelId, modelData] of ctx.modelMap) {\r\n if (modelData.parentId != null) {\r\n continue;\r\n }\r\n const node = createAssetNode(modelId, model, ctx);\r\n if (\r\n node &&\r\n (modelData.type === 'Root' ||\r\n modelData.type === 'Null' ||\r\n modelData.type === 'Mesh' ||\r\n modelData.type === 'LimbNode')\r\n ) {\r\n scene.rootNodes.push(node);\r\n }\r\n }\r\n if (scene.rootNodes.length === 0) {\r\n for (const [modelId] of ctx.modelMap) {\r\n const node = createAssetNode(modelId, model, ctx);\r\n if (node && !node.parent) {\r\n scene.rootNodes.push(node);\r\n }\r\n }\r\n }\r\n for (const node of model.nodes) {\r\n if (!node.parent) {\r\n node.computeTransforms(null);\r\n }\r\n }\r\n buildSkeletonsFromLimbRoots(model, ctx);\r\n model.scenes.push(scene);\r\n model.activeScene = 0;\r\n }\r\n\r\n async loadModel(path: string, vfs?: VFS): Promise<SharedModel> {\r\n if (!vfs) {\r\n vfs = getEngine().VFS;\r\n }\r\n\r\n const mimeType = vfs.guessMIMEType(path);\r\n const data = (await vfs.readFile(path, { encoding: 'binary' })) as ArrayBuffer;\r\n const blob = new Blob([data], { type: mimeType });\r\n const model = new SharedModel();\r\n await this.import(blob, model, PathUtils.dirname(path), vfs);\r\n return model;\r\n }\r\n}\r\n"],"names":["AbstractModelImporter","loadModel","path","vfs","getEngine","VFS","mimeType","guessMIMEType","data","readFile","encoding","blob","Blob","type","model","SharedModel","import","PathUtils","dirname","loadModelToScene","scene","instancing","createSceneNode","resourceManager","ComponentType","GLTFAccessor","bufferView","byteOffset","componentType","normalized","count","max","min","sparse","name","_typedView","_filteredView","_normalizedFilteredView","_normalizedTypedView","accessorInfo","getTypedView","gltf","undefined","bufferViews","buffer","_loadedBuffers","componentSize","getComponentSize","componentCount","getComponentCount","arrayLength","byteStride","console","warn","byteLength","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","createView","applySparse","getNormalizedTypedView","typedView","dequantize","getDeinterlacedView","func","stride","dataView","DataView","i","offset","Math","floor","size","getNormalizedDeinterlacedView","filteredView","view","indicesBufferView","indices","indicesBuffer","indicesByteOffset","indicesComponentSize","indicesComponentCount","indicesArrayLength","indicesTypedView","valuesBufferView","values","valuesBuffer","valuesByteOffset","valuesComponentSize","valuesComponentCount","valuesArrayLength","valuesTypedView","k","typedArray","map","c","VRM_SPRING_BONE_SUBSTEPS","VRM_GRAVITY_ACCELERATION_SCALE","VRM_GRAVITY_POWER_TO_ACCELERATION","VRM_STIFFNESS_TO_FRAME_HARDNESS","VRM_DRAGFORCE_SCALE","GLTFImporter","initDraco3d","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","basePath","arrayBuffer","isGLB","loadBinary","Response","json","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","jsonSlice","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","accessors","accessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","assetScene","AssetScene","node","rootNodes","activeScene","_loadVRMC0SpringBones","_loadVRMC1SpringBones","_buildJointDynamicsSpringBones","clearMorphTargetGroups","hasVRMC1","extensions","VRMC_vrm","hasVRMC0","VRM","_loadVRMC1MorphTargetGroups","_loadVRMC0MorphTargetGroups","buildMorphTargetGroupsByName","groups","blendShapeMaster","blendShapeGroups","Array","isArray","value","groupInfo","_getVRMC0BlendShapeGroupName","bindings","binds","bindValue","bindInfo","meshIndex","mesh","targetIndex","index","targetName","_getMorphTargetName","weight","addMorphTargetGroup","expressions","_loadVRMC1ExpressionMap","preset","custom","expressionMap","expressionInfo","Object","entries","expression","morphTargetBinds","nodeIndex","isBinary","presetName","toLowerCase","subMesh","subMeshes","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","ref","_getIndex","filter","springBoneColliderGroups","springInfo","springs","joints","jointRef","jointInfo","_getSpringBoneJointInfo","hitRadius","stiffness","gravityPower","gravityDir","dragForce","springBones","center","secondaryAnimation","boneGroupInfo","boneGroups","rootBones","bones","stiffiness","comment","fallback","x","y","z","obj","clone","keys","Number","isInteger","key","directIndex","jointIndex","colliderMap","Map","flatPlaneMap","nodeKeys","forEach","set","converted","_toJointDynamicsCollider","jointDynamicsColliders","flatPlane","_toJointDynamicsFlatPlane","spring","chains","_collectJointDynamicsChainsFromRoots","_collectJointDynamicsChains","flatPlanes","colliderKeys","Set","flatPlaneKeys","get","colliderKey","_getJointDynamicsColliderKey","has","add","flatPlaneKey","_getJointDynamicsFlatPlaneKey","jointDynamicsSpringBones","controllerConfig","_mapSpringJointsToControllerConfig","chainStart","chainEnd","isParentOf","_pushJointDynamicsChain","end","_findSingleChildChainEnd","inferredEnd","current","children","loop","gravity","joint","magnitudeSq","normalize","scale","invCount","frameHardness","frameResistance","enableBroadPhase","enableSurfaceCollision","subSteps","curves","hardness","InterpolatorScalar","constant","_frameRatioToSubstepRatio","resistance","_frameRateToSubstepRate","pointRadius","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","constraintOptions","structuralVertical","structuralHorizontal","shear","bendingVertical","collideStructuralVertical","collideStructuralHorizontal","collideShear","isLoop","frameRatio","ratio","pow","frameRate","rate","r","_getAssetNodeKey","_vector3Key","localPosition","_quaternionKey","localRotation","_numberKey","radiusTailScale","height","friction","isInverseCollider","forceType","position","up","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","FLOAT","Error","matrices","m","addJoint","Matrix4x4","subarray","addSkeleton","_loadVRMAHumanoidSkeleton","VRMC_vrm_animation","humanBones","humanoid","mapping","_getVRMAHumanoidMapping","hips","body","HumanoidBodyRig","Hips","humanBoneNodes","_getVRMAHumanoidNodes","existingSkeleton","find","every","_setAssetSkeletonHumanoidMapping","root","_findCommonRoot","jointSet","_sortSkeletonJoints","humanoidJointMapping","leftHand","rightHand","setBody","vrmaName","rig","_getVRMAHumanBoneNode","setHand","side","Spine","Chest","UpperChest","Neck","Head","LeftShoulder","LeftUpperArm","LeftLowerArm","LeftHand","RightShoulder","RightUpperArm","RightLowerArm","RightHand","LeftUpperLeg","LeftLowerLeg","LeftFoot","LeftToes","RightUpperLeg","RightLowerLeg","RightFoot","RightToes","HumanoidHandRig","ThumbProximal","ThumbIntermediate","ThumbDistal","IndexProximal","IndexIntermediate","IndexDistal","MiddleProximal","MiddleIntermediate","MiddleDistal","RingProximal","RingIntermediate","RingDistal","PinkyProximal","PinkyIntermediate","PinkyDistal","result","boneName","addMappedNodes","mapped","sorted","visit","child","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","translate","rotation","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","output","error","mode","interpolation","interpolator","interpolatorType","target","Interpolator","animationData","tracks","targetNodeIndex","targetNode","track","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","translationValues","scaleValues","rotationValues","t","s","instances","matrix","decompose","translation","childIndex","meshes","_loadMesh","meshInfo","morphWeights","primitives","meshName","loadedPrimitives","p","subMeshName","subMeshData","material","rawPositions","rawBlendIndices","rawJointWeights","vertices","indexCount","boxMax","boxMin","dracoExtension","dracoMeshDecoder","DracoMeshDecoder","attrib","_loadVertexBuffer","targets","getDevice","positionInfo","numVertices","getVertexFormatComponentCount","format","vertexIndices","targetBox","targetMap","POSITION","MORPH_TARGET_POSITION","NORMAL","MORPH_TARGET_NORMAL","TANGENT","MORPH_TARGET_TANGENT","TEXCOORD_0","MORPH_TARGET_TEX0","TEXCOORD_1","MORPH_TARGET_TEX1","TEXCOORD_2","MORPH_TARGET_TEX2","TEXCOORD_3","MORPH_TARGET_TEX3","COLOR_0","MORPH_TARGET_COLOR","morphAttribSet","numComponents","accessorIndex","BoundingBox","morphAttribCount","_loadIndexBuffer","primitiveType","_primitiveType","materialInfo","materials","outlineUsesTangentNormals","_shouldGenerateMToonOutlineNormals","source","_generateMToonOutlineNormals","loaded","hasVertexNormal","hasVertexColor","hasVertexTangent","flagsHash","v","materialHash","getMaterial","_loadMaterial","setMaterial","addPrimitive","primitiveInfo","VRMC_materials_mtoon","normalTexture","some","sums","positions","positionStride","vertexCount","_getTriangleIndices","i0","i1","i2","p0","p1","p2","ax","ay","az","bx","by","bz","nx","ny","nz","_accumulateOutlineNormal","normalInfo","normals","normalStride","tangents","_outlinePositionKey","sum","len","hypot","fallbackLen","round","vertexColor","vertexNormal","useTangent","materialName","assetMaterial","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","bumpScale","emissiveColor","emissiveStrength","occlusionStrength","alphaMode","alphaCutoff","doubleSided","mtoonExtension","KHR_materials_pbrSpecularGlossiness","normalMap","_loadTexture","occlusionMap","occlusionTexture","strength","emissiveMap","emissiveTexture","KHR_materials_emissive_strength","emissiveFactor","ior","common","diffuse","Vector4","baseColorFactor","metallic","metallicFactor","roughness","roughnessFactor","diffuseMap","baseColorTexture","metallicMap","metallicRoughnessTexture","metallicIndex","roughnessIndex","_loadMToonMaterial","sg","diffuseFactor","specular","specularFactor","glossness","glossnessFactor","diffuseTexture","specularGlossnessMap","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","specularMap","specularTexture","specularColorMap","specularColorTexture","iridescence","KHR_materials_iridescence","iridescenceFactor","iridescenceMap","iridescenceTexture","iridescenceIor","iridescenceThicknessMinimum","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","transmission","KHR_materials_transmission","transmissionFactor","transmissionMap","transmissionTexture","thicknessFactor","thicknessMap","attenuationDistance","attenuationColor","volume","KHR_materials_volume","thicknessTexture","sheen","KHR_materials_sheen","sheenColorFactor","sheenColorMap","sheenColorTexture","sheenRoughnessFactor","sheenRoughnessMap","sheenRoughnessTexture","cc","KHR_materials_clearcoat","clearcoat","clearCoatFactor","clearcoatFactor","clearCoatIntensityMap","clearcoatTexture","clearCoatRoughnessFactor","clearcoatRoughnessFactor","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearCoatNormalMap","clearcoatNormalTexture","mtoon","pbr","mtoonMaterial","shadeColorFactor","shadeMultiplyMap","shadeMultiplyTexture","shadingShiftFactor","shadingShiftMap","shadingShiftTexture","shadingShiftTextureScale","shadingToonyFactor","giEqualizationFactor","matcapFactor","matcapMap","matcapTexture","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimMultiplyMap","rimMultiplyTexture","rimLightingMixFactor","outlineWidthMode","outlineWidthFactor","outlineWidthMultiplyMap","outlineWidthMultiplyTexture","outlineColorFactor","outlineLightingMixFactor","uvAnimationMaskMap","uvAnimationMaskTexture","uvAnimationScrollXSpeedFactor","uvAnimationScrollYSpeedFactor","uvAnimationRotationSpeedFactor","transparentWithZWrite","renderQueueOffsetNumber","sRGB","mt","image","texCoord","transform","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","getImage","images","imageUrl","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","INT","UBYTE","USHORT","getAttributeBuffer","semantic","device","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos","FBX_BINARY_MAGIC","stripQuotes","text","toNumber","test","parseInt","parseFloat","splitAsciiProperties","inString","depth","ch","trim","parseAsciiScalar","trimmed","includes","begin","lastIndexOf","colon","valuesText","tokens","token","Float64Array","from","parseAsciiNodeHeader","line","properties","propsText","parseAscii","propertyListLength","stack","lines","split","rawLine","pop","endsWith","BinaryReader","_view","_buffer","_decoder","_offset","skip","bytes","getUint8","getInt16","getInt32","getUint32","getFloat32","getFloat64","getBigInt64","getBoolean","getString","replace","getArrayBuffer","inflateDeflate","expectedLength","DecompressionStream","stream","pipeThrough","readArray","reader","elementByteLength","arrayFactory","compressedLength","compressed","readBinaryProperty","BigInt64Array","parseBinaryNode","use64","endOffset","numProperties","nameLength","String","fromCharCode","isBinaryFbx","magic","getChild","getChildren","buildObjectMap","objectsNode","id","idNumber","NaN","isFinite","buildConnections","connectionsNode","to","property","getVersion","versionNode","parseFbx","objects","connections","toUint8Array","toUint16Array","toUint32Array","toFloat32Array","toVertexRecord","record","TMP_VEC3","TMP_VEC3_B","TMP_VEC4","asNumber","asString","getProperty70","props70","prop","getProperty70Value","getNodeId","getObjectName","raw","parts","toRadiansTuple","PI","getEulerOrder","order","quaternionFromDegrees","euler","fromEulerAngle","quaternionFromDegreesXYZ","matrixFromTRS","rotationDegrees","rotationOrder","compose","readTransformData","lclTranslation","lclRotation","lclScaling","preRotation","postRotation","rotationOffset","rotationPivot","scalingOffset","scalingPivot","geometricTranslation","geometricRotation","geometricScaling","inheritType","readConnections","parents","connection","listA","listB","readVideoData","contentNode","contentProp","content","ArrayBuffer","relativeFilename","filename","readTextureData","ctx","linkedVideoConnection","connectionChildren","Video","video","videoMap","fileName","uvSet","wrapModeU","wrapModeV","normalizeTextureSlot","readMaterialData","texture","textureMap","shadingModel","diffuseColor","transparentColor","opacity","transparencyFactor","shininess","bumpFactor","readClusterData","boneConnection","Model","transformLink","linkMode","boneModelId","readSkinData","clusters","clusterNode","Deformer","readLayerElementFloat","reference","dataNode","indexNode","readLayerElementInt","readGeometryData","skinConnection","deformerNode","skinMap","polygonVertexIndex","colors","uvLayers","layer","materialLayer","readModelData","parentConnection","connectionParents","childConnections","parentId","wrapModeFromFbx","createSamplerInfo","resolveTextureImage","rawPath","createTextureInfo","uvScale","uvOffset","scaleLeft","registerTextureInfo","imageSet","nextImageIndex","registerMaterialImages","createMaterialAsset","transparentStrength","alpha","emissive","getElementIndex","polygonIndex","controlPointIndex","resolveLayerElement","out","resolveMaterialIndex","getGeometryTransform","buildSkinData","geometry","clusterList","controlPointCount","influences","cluster","controlPoint","buildPrimitives","materialBuckets","geometryTransform","normalTransform","inplaceInvertAffine","transpose","positionScratch","normalScratch","tangentScratch","colorScratch","uvScratch","skinData","polygon","polygonVertexStart","getBucket","materialIndex","bucket","texCoords","blendIndices","blendWeights","controlPoints","controlPointIndexRaw","baseIndex","localIndex","cpIndex","setXYZ","transformPointAffine","transformVector","inplaceNormalize","uvIndex","vertexInfluences","sort","a","b","total","influence","denom","polygonSize","local","tangent","uv","getBounds","POSITIVE_INFINITY","NEGATIVE_INFINITY","composeFbxLocalMatrix","hasParent","rotateLeft","inverse","matrixFromFloat64Array","array","resolveClusterInverseBind","jointNode","worldMatrix","computeModelWorldMatrix","modelId","bindWorldOverrides","cache","cached","override","modelMap","world","multiply","applyClusterBindPose","worldCache","bindWorld","parentWorld","hasAncestorOfType","hasDescendantOfType","childId","collectDescendantIds","buildSkeleton","skeletonMap","bindWorldCache","nodeMap","createAssetNode","cacheKey","inverseBind","jointBindMatrices","skeletonJointIds","buildSkeletonFromLimbRoot","descendantIds","buildSkeletonsFromLimbRoots","roots","createMeshData","modelData","materialMap","primitiveData","bounds","materialSource","buildModelMaps","Texture","Material","Geometry","geometryMap","populateNodeTransforms","modelNode","existing","geometryConnection","createImportContext","document","connectionMaps","FBXImporter"],"mappings":"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"}
|