@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.
Files changed (61) hide show
  1. package/dist/assets/{index-ySiLtSxz.js → index-BZ1L8ggE.js} +43 -3
  2. package/dist/assistant/zephyr-types-index.json +13230 -9488
  3. package/dist/images/icon1024.png +0 -0
  4. package/dist/index.html +1 -1
  5. package/dist/modules/zephyr3d_backend-webgl.js +2 -0
  6. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  7. package/dist/modules/zephyr3d_backend-webgpu.js +457 -16
  8. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  9. package/dist/modules/zephyr3d_device.js +27 -0
  10. package/dist/modules/zephyr3d_device.js.map +1 -1
  11. package/dist/modules/zephyr3d_loaders.js +208 -1
  12. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  13. package/dist/modules/zephyr3d_scene.js +774 -80
  14. package/dist/modules/zephyr3d_scene.js.map +1 -1
  15. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js +2 -0
  16. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js.map +1 -1
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +2 -0
  18. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  19. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js +55 -10
  20. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
  21. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js +4 -0
  22. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js.map +1 -1
  23. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js +44 -1
  24. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js.map +1 -1
  25. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +58 -5
  26. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  27. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js +297 -0
  28. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js.map +1 -0
  29. package/dist/vendor/zephyr3d/device/dist/base_types.js.map +1 -1
  30. package/dist/vendor/zephyr3d/device/dist/device.js +27 -0
  31. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  32. package/dist/vendor/zephyr3d/device/dist/index.d.ts +81 -1
  33. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +208 -1
  34. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  35. package/dist/vendor/zephyr3d/loaders/dist/index.d.ts +8 -0
  36. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +334 -63
  37. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js +66 -0
  39. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js.map +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +9 -0
  41. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +260 -4
  43. package/dist/vendor/zephyr3d/scene/dist/index.js +7 -0
  44. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js +270 -1
  48. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +19 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
  52. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  53. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +2 -1
  55. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  56. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +70 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  59. package/package.json +6 -6
  60. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  61. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gltf_importer.js","sources":["../../src/gltf/gltf_importer.ts"],"sourcesContent":["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"],"names":["VRM_SPRING_BONE_SUBSTEPS","VRM_GRAVITY_ACCELERATION_SCALE","VRM_GRAVITY_POWER_TO_ACCELERATION","VRM_STIFFNESS_TO_FRAME_HARDNESS","VRM_DRAGFORCE_SCALE","GLTFImporter","AbstractModelImporter","initDraco3d","gltf","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","import","data","model","basePath","vfs","buffer","arrayBuffer","isGLB","loadBinary","Response","json","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","getEngine","VFS","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","readFile","encoding","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","i","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","scene","assetScene","AssetScene","name","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","count","subMesh","subMeshes","Math","max","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","offset","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","map","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","min","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","undefined","size","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","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","values","sorted","visit","child","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","translate","rotation","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","getNormalizedDeinterlacedView","output","Float32Array","console","error","mode","interpolation","interpolator","interpolatorType","target","path","Interpolator","animationData","tracks","targetNodeIndex","targetNode","track","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","instancing","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","indices","boxMax","boxMin","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","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","k","numComponents","accessorIndex","getComponentCount","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","stride","Uint32Array","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","mimeType","view","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","getAttributeBuffer","semantic","device","componentCount","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","floor","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos"],"mappings":"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"}
1
+ {"version":3,"file":"gltf_importer.js","sources":["../../src/gltf/gltf_importer.ts"],"sourcesContent":["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"],"names":["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","AbstractModelImporter","initDraco3d","gltf","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","import","data","model","basePath","vfs","buffer","arrayBuffer","isGLB","loadBinary","Response","json","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","getEngine","VFS","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","readFile","encoding","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","i","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","scene","assetScene","AssetScene","name","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","count","subMesh","subMeshes","Math","max","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","offset","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","map","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","min","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","undefined","size","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","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","values","_getVRMAExpressionMapping","_addVRMAExpressionMapping","_createVRMAExpressionInterpolator","interpolator","inputs","Float32Array","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","getNormalizedDeinterlacedView","output","console","error","interpolation","interpolatorType","target","path","Interpolator","vrmaExpressionMapping","animationData","tracks","targetNodeIndex","targetNode","expressionName","track","morphTargetGroupName","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","instancing","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","indices","boxMax","boxMin","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","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","k","numComponents","accessorIndex","getComponentCount","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","stride","Uint32Array","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","mimeType","view","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","getAttributeBuffer","semantic","device","componentCount","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","floor","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos"],"mappings":"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"}