@zephyr3d/editor 0.3.7 → 0.3.8
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-ySiLtSxz.js → index-BZ1L8ggE.js} +43 -3
- package/dist/assistant/zephyr-types-index.json +13230 -9488
- package/dist/images/icon1024.png +0 -0
- package/dist/index.html +1 -1
- package/dist/modules/zephyr3d_backend-webgl.js +2 -0
- package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js +457 -16
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_device.js +27 -0
- package/dist/modules/zephyr3d_device.js.map +1 -1
- package/dist/modules/zephyr3d_loaders.js +208 -1
- package/dist/modules/zephyr3d_loaders.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +774 -80
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js +2 -0
- package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +2 -0
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js +55 -10
- package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js +4 -0
- package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js +44 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +58 -5
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js +297 -0
- package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js.map +1 -0
- package/dist/vendor/zephyr3d/device/dist/base_types.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/device.js +27 -0
- package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/index.d.ts +81 -1
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +208 -1
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
- package/dist/vendor/zephyr3d/loaders/dist/index.d.ts +8 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +334 -63
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js +66 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js +9 -0
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/index.d.ts +260 -4
- package/dist/vendor/zephyr3d/scene/dist/index.js +7 -0
- package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js +270 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +19 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +2 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +70 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/package.json +6 -6
- 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';\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 VRMC0HumanBoneInfo = {\r\n bone?: unknown;\r\n node?: 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 VRMAExpressionInfo = {\r\n node?: unknown;\r\n};\r\n\r\ntype VRMAExpressionsInfo = {\r\n preset?: Record<string, VRMAExpressionInfo>;\r\n custom?: Record<string, VRMAExpressionInfo>;\r\n};\r\n\r\ntype VRMCVRMAnimationInfo = {\r\n specVersion?: unknown;\r\n humanoid?: VRMAHumanoidInfo;\r\n expressions?: VRMAExpressionsInfo;\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\nconst VRMA_LOOK_AT_EXPRESSION_NAMES = new Set(['lookUp', 'lookDown', 'lookLeft', 'lookRight']);\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._loadVRMHumanoidSkeletonMappings(gltf, model);\r\n this._loadVRMAHumanoidSkeleton(gltf, model);\r\n }\r\n\r\n private _loadVRMHumanoidSkeletonMappings(gltf: GLTFContent, model: SharedModel) {\r\n const mapping = this._getVRMC1HumanoidMapping(gltf) ?? this._getVRMC0HumanoidMapping(gltf);\r\n if (!mapping) {\r\n return;\r\n }\r\n for (const skeleton of model.skeletons) {\r\n const skeletonMapping = this._filterHumanoidMappingToSkeleton(mapping, skeleton);\r\n if (skeletonMapping) {\r\n this._setAssetSkeletonHumanoidMapping(skeleton, skeletonMapping);\r\n }\r\n }\r\n }\r\n\r\n private _getVRMC1HumanoidMapping(gltf: GLTFContent): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\r\n const humanBones = gltf.extensions?.VRMC_vrm?.humanoid?.humanBones;\r\n if (!humanBones || typeof humanBones !== 'object') {\r\n return null;\r\n }\r\n return this._getVRMAHumanoidMapping(gltf, humanBones as Record<string, VRMAHumanoidBoneInfo>);\r\n }\r\n\r\n private _getVRMC0HumanoidMapping(gltf: GLTFContent): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\r\n const humanBones = gltf.extensions?.VRM?.humanoid?.humanBones;\r\n if (!Array.isArray(humanBones)) {\r\n return null;\r\n }\r\n const byName: Record<string, VRMAHumanoidBoneInfo> = {};\r\n for (const value of humanBones) {\r\n if (!value || typeof value !== 'object') {\r\n continue;\r\n }\r\n const boneInfo = value as VRMC0HumanBoneInfo;\r\n if (typeof boneInfo.bone === 'string') {\r\n byName[boneInfo.bone] = { node: boneInfo.node };\r\n }\r\n }\r\n return this._getVRMC0HumanoidMappingFromBones(gltf, byName);\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 _getVRMC0HumanoidMappingFromBones(\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 = (vrmName: string, rig: HumanoidBodyRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmName);\r\n if (node) {\r\n body[rig] = node;\r\n }\r\n };\r\n const setHand = (side: 'left' | 'right', vrmName: string, rig: HumanoidHandRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmName);\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', 'leftThumbProximal', HumanoidHandRig.ThumbProximal);\r\n setHand('left', 'leftThumbIntermediate', 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', 'rightThumbProximal', HumanoidHandRig.ThumbProximal);\r\n setHand('right', 'rightThumbIntermediate', 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 _filterHumanoidMappingToSkeleton(\r\n mapping: HumanoidJointMapping<AssetHierarchyNode>,\r\n skeleton: AssetSkeleton\r\n ): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\r\n const joints = new Set(skeleton.joints);\r\n const filter = <T extends string>(\r\n source: Record<T, AssetHierarchyNode> | undefined\r\n ): Record<T, AssetHierarchyNode> | undefined => {\r\n if (!source) {\r\n return undefined;\r\n }\r\n const result = {} as Partial<Record<T, AssetHierarchyNode>>;\r\n for (const key of Object.keys(source) as T[]) {\r\n const node = source[key];\r\n if (node && joints.has(node)) {\r\n result[key] = node;\r\n }\r\n }\r\n return Object.keys(result).length > 0 ? (result as Record<T, AssetHierarchyNode>) : undefined;\r\n };\r\n const body = filter(mapping.body);\r\n const leftHand = filter(mapping.leftHand);\r\n const rightHand = filter(mapping.rightHand);\r\n if (!body && !leftHand && !rightHand) {\r\n return null;\r\n }\r\n return {\r\n body: (body ?? {}) as Record<HumanoidBodyRig, AssetHierarchyNode>,\r\n leftHand,\r\n rightHand\r\n };\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 _getVRMAExpressionMapping(gltf: GLTFContent): Map<number, string> {\r\n const mapping = new Map<number, string>();\r\n const ext = gltf.extensions?.VRMC_vrm_animation as VRMCVRMAnimationInfo | undefined;\r\n const expressions = ext?.expressions;\r\n if (!expressions || typeof expressions !== 'object') {\r\n return mapping;\r\n }\r\n this._addVRMAExpressionMapping(gltf, mapping, expressions.preset);\r\n this._addVRMAExpressionMapping(gltf, mapping, expressions.custom);\r\n return mapping;\r\n }\r\n\r\n private _addVRMAExpressionMapping(\r\n gltf: GLTFContent,\r\n mapping: Map<number, string>,\r\n expressionMap: unknown\r\n ): void {\r\n if (!expressionMap || typeof expressionMap !== 'object') {\r\n return;\r\n }\r\n for (const [name, value] of Object.entries(expressionMap)) {\r\n if (VRMA_LOOK_AT_EXPRESSION_NAMES.has(name) || !value || typeof value !== 'object') {\r\n continue;\r\n }\r\n const nodeIndex = (value as VRMAExpressionInfo).node;\r\n if (typeof nodeIndex !== 'number' || !gltf._nodes[nodeIndex] || mapping.has(nodeIndex)) {\r\n continue;\r\n }\r\n mapping.set(nodeIndex, name);\r\n }\r\n }\r\n\r\n private _createVRMAExpressionInterpolator(interpolator: Interpolator): InterpolatorScalar {\r\n const inputs = new Float32Array(interpolator.inputs);\r\n const sourceOutputs = interpolator.outputs;\r\n if (interpolator.mode === 'cubicspline') {\r\n const outputs = new Float32Array(inputs.length * 3);\r\n for (let i = 0; i < inputs.length; i++) {\r\n const sourceOffset = i * 9;\r\n const targetOffset = i * 3;\r\n outputs[targetOffset + 0] = sourceOutputs[sourceOffset + 0];\r\n outputs[targetOffset + 1] = sourceOutputs[sourceOffset + 3];\r\n outputs[targetOffset + 2] = sourceOutputs[sourceOffset + 6];\r\n }\r\n return new InterpolatorScalar(interpolator.mode, inputs, outputs);\r\n }\r\n const outputs = new Float32Array(inputs.length);\r\n for (let i = 0; i < inputs.length; i++) {\r\n outputs[i] = sourceOutputs[i * 3];\r\n }\r\n return new InterpolatorScalar(interpolator.mode, inputs, outputs);\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 vrmaExpressionMapping = this._getVRMAExpressionMapping(gltf);\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 expressionName =\r\n interpolatorType === 'translation' ? vrmaExpressionMapping.get(targetNodeIndex) : undefined;\r\n const track: AssetAnimationTrack = expressionName\r\n ? {\r\n node: targetNode,\r\n type: 'morph-target-group',\r\n interpolator: this._createVRMAExpressionInterpolator(interpolator),\r\n morphTargetGroupName: expressionName\r\n }\r\n : {\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","VRMA_LOOK_AT_EXPRESSION_NAMES","Set","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","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","_loadVRMHumanoidSkeletonMappings","_loadVRMAHumanoidSkeleton","mapping","_getVRMC1HumanoidMapping","_getVRMC0HumanoidMapping","skeletonMapping","_filterHumanoidMappingToSkeleton","_setAssetSkeletonHumanoidMapping","humanBones","humanoid","_getVRMAHumanoidMapping","byName","boneInfo","bone","_getVRMC0HumanoidMappingFromBones","VRMC_vrm_animation","hips","body","HumanoidBodyRig","Hips","humanBoneNodes","_getVRMAHumanoidNodes","existingSkeleton","find","every","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","vrmName","source","boneName","addMappedNodes","mapped","_getVRMAExpressionMapping","_addVRMAExpressionMapping","_createVRMAExpressionInterpolator","interpolator","inputs","sourceOutputs","outputs","mode","sourceOffset","targetOffset","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","interpolation","interpolatorType","target","Interpolator","vrmaExpressionMapping","animationData","tracks","targetNodeIndex","targetNode","expressionName","track","morphTargetGroupName","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","_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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"}
|