@zephyr3d/scene 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/app/engine.js +119 -71
- package/dist/app/engine.js.map +1 -1
- package/dist/asset/assetmanager.js +296 -244
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/model.js +57 -57
- package/dist/asset/model.js.map +1 -1
- package/dist/index.d.ts +684 -33
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +1 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/msdf_text.js +180 -0
- package/dist/material/msdf_text.js.map +1 -0
- package/dist/material/msdf_text_sprite.js +64 -0
- package/dist/material/msdf_text_sprite.js.map +1 -0
- package/dist/material/pbrblueprint.js +123 -108
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/shader/helper.js +277 -277
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite_sdf.js +106 -0
- package/dist/material/sprite_sdf.js.map +1 -0
- package/dist/posteffect/ssr.js +1 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/render/abuffer_oit.js +1 -0
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +28 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +1 -0
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/render_queue.js +1 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/scene/basesprite.js +1 -5
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +29 -17
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +1 -0
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +86 -87
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +96 -0
- package/dist/scene/meshdrawable.js.map +1 -0
- package/dist/scene/msdftext.js +341 -0
- package/dist/scene/msdftext.js.map +1 -0
- package/dist/scene/msdftextsprite.js +349 -0
- package/dist/scene/msdftextsprite.js.map +1 -0
- package/dist/scene/particlesys.js +1 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +234 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sdftextsprite.js +322 -0
- package/dist/scene/sdftextsprite.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/textsprite.js +120 -0
- package/dist/scene/textsprite.js.map +1 -0
- package/dist/scene/water.js +1 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shadow/shader.js +1 -0
- package/dist/shadow/shader.js.map +1 -1
- package/dist/text/font/font_asset.js +884 -0
- package/dist/text/font/font_asset.js.map +1 -0
- package/dist/text/font/sfnt_reader.js +43 -0
- package/dist/text/font/sfnt_reader.js.map +1 -0
- package/dist/text/msdf/generator.js +417 -0
- package/dist/text/msdf/generator.js.map +1 -0
- package/dist/text/msdf/shape.js +143 -0
- package/dist/text/msdf/shape.js.map +1 -0
- package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
- package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
- package/dist/text/runtime/text_layout.js +96 -0
- package/dist/text/runtime/text_layout.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1275 -1091
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +16 -1
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +32 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/serialization/manager.js +321 -277
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +2 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +2 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +2 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +2 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +2 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +2 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +2 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +2 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +2 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +516 -0
- package/dist/utility/serialization/scene/text.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +2 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +48 -48
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf_loader.js","sources":["../../../../src/asset/loaders/gltf/gltf_loader.ts"],"sourcesContent":["import type { DecoderModule } from 'draco3d';\r\nimport type { InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\r\nimport { Vector3, Vector4, Matrix4x4, Quaternion, Interpolator, DRef } from '@zephyr3d/base';\r\nimport type {\r\n AssetHierarchyNode,\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 MaterialTextureInfo,\r\n AssetPBRMaterialCommon,\r\n AssetAnimationTrack\r\n} from '../../model';\r\nimport { SharedModel, AssetSkeleton, AssetScene } from '../../model';\r\nimport { BoundingBox } from '../../../utility/bounding_volume';\r\nimport { Primitive } from '../../../render/primitive';\r\nimport type { MeshMaterial as M } from '../../../material/meshmaterial';\r\nimport { UnlitMaterial } from '../../../material';\r\nimport { ComponentType, GLTFAccessor } from './helpers';\r\nimport { AbstractModelLoader } from '../loader';\r\nimport type {\r\n VertexSemantic,\r\n GPUDataBuffer,\r\n Texture2D,\r\n IndexBuffer,\r\n StructuredBuffer,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n AbstractDevice\r\n} from '@zephyr3d/device';\r\nimport type { AssetManager } from '../../assetmanager';\r\nimport type { GlTf, Material, TextureInfo } from './gltf';\r\nimport { PBRMetallicRoughnessMaterial } from '../../../material/pbrmr';\r\nimport { PBRSpecularGlossinessMaterial } from '../../../material/pbrsg';\r\nimport { DracoMeshDecoder } from '../../../utility/draco/decoder';\r\nimport {\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 '../../../values';\r\nimport { getDevice } from '../../../app/api';\r\n/** @internal */\r\nexport interface GLTFContent extends GlTf {\r\n _manager: AssetManager;\r\n _VFSs?: VFS[];\r\n _loadedBuffers: Nullable<ArrayBuffer[]>;\r\n _accessors: GLTFAccessor[];\r\n _bufferCache: Record<string, GPUDataBuffer>;\r\n _textureCache: Record<string, Texture2D>;\r\n _materialCache: Record<string, M>;\r\n _nodes: AssetHierarchyNode[];\r\n _meshes: AssetMeshData[];\r\n _device: AbstractDevice;\r\n _dracoModule?: DecoderModule;\r\n}\r\n\r\n/**\r\n * The GLTF/GLB model loader\r\n * @internal\r\n */\r\nexport class GLTFLoader extends AbstractModelLoader {\r\n supportMIMEType(mimeType: string) {\r\n return mimeType === 'model/gltf+json' || mimeType === 'model/gltf-binary';\r\n }\r\n async load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n decoderModule?: DecoderModule,\r\n VFSs?: VFS[]\r\n ) {\r\n const buffer = await data.arrayBuffer();\r\n if (this.isGLB(buffer)) {\r\n return this.loadBinary(assetManager, url, buffer, VFSs, decoderModule);\r\n }\r\n const gltf = (await new Response(data).json()) as GLTFContent;\r\n gltf._manager = assetManager;\r\n gltf._VFSs = VFSs;\r\n gltf._loadedBuffers = null;\r\n return this.loadJson(url, gltf, decoderModule);\r\n }\r\n async loadBinary(\r\n assetManager: AssetManager,\r\n url: string,\r\n buffer: ArrayBuffer,\r\n VFSs?: VFS[],\r\n decoderModule?: DecoderModule\r\n ) {\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 if (gltf) {\r\n gltf._manager = assetManager;\r\n gltf._VFSs = VFSs;\r\n gltf._loadedBuffers = buffers;\r\n return this.loadJson(url, gltf, decoderModule);\r\n }\r\n return null;\r\n }\r\n async loadJson(url: string, gltf: GLTFContent, dracoDecoderModule?: DecoderModule) {\r\n // check extensions\r\n if (\r\n !dracoDecoderModule &&\r\n gltf.extensionsRequired &&\r\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\r\n ) {\r\n console.error('Draco3d is required for loading model');\r\n return null;\r\n }\r\n gltf._dracoModule = dracoDecoderModule;\r\n gltf._accessors = [];\r\n gltf._bufferCache = {};\r\n gltf._textureCache = {};\r\n gltf._materialCache = {};\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 if (gltfVersion !== '2.0') {\r\n console.error(`Invalid GLTF version: ${gltfVersion}`);\r\n return null;\r\n }\r\n }\r\n gltf._baseURI = url.substring(0, url.lastIndexOf('/') + 1);\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 = this._normalizeURI(gltf._baseURI, buffer.uri!);\r\n const buf = await gltf._manager.fetchBinaryData(uri, null, null, gltf._VFSs);\r\n if (buffer.byteLength !== buf!.byteLength) {\r\n console.error(`Invalid GLTF: buffer byte length error.`);\r\n return null;\r\n }\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 accessors) {\r\n gltf._accessors.push(new GLTFAccessor(accessor));\r\n }\r\n }\r\n const scenes = gltf.scenes;\r\n if (scenes) {\r\n const sharedModel = new SharedModel();\r\n await this._loadMeshes(gltf);\r\n this._loadNodes(gltf, sharedModel);\r\n this._loadSkins(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._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 return sharedModel;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _normalizeURI(baseURI: string, uri: string) {\r\n const s = uri.toLowerCase();\r\n if (\r\n s.startsWith('http://') ||\r\n s.startsWith('https://') ||\r\n s.startsWith('blob:') ||\r\n s.startsWith('data:')\r\n ) {\r\n // absolute path\r\n return encodeURI(uri);\r\n }\r\n uri = uri.replace(/\\.\\//g, '');\r\n uri = decodeURIComponent(uri);\r\n if (uri[0] === '/') {\r\n uri = uri.slice(1);\r\n }\r\n uri = uri\r\n .split('/')\r\n .map((val) => encodeURIComponent(val))\r\n .join('/');\r\n return baseURI + uri;\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 }\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(gltf: GLTFContent, index: number) {\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 Interpolator[];\r\n const interpolatorTypes = [] as ('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 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 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 if (channel.target.path === 'rotation') {\r\n interpolators.push(new Interpolator(mode, 'quat', input, output));\r\n interpolatorTypes.push('rotation');\r\n } else if (channel.target.path === 'translation') {\r\n interpolators.push(new Interpolator(mode, 'vec3', input, output));\r\n interpolatorTypes.push('translation');\r\n } else if (channel.target.path === 'scale') {\r\n interpolators.push(new Interpolator(mode, 'vec3', input, output));\r\n interpolatorTypes.push('scale');\r\n } else if (channel.target.path === 'weights') {\r\n interpolators.push(new Interpolator(mode, null, input, output));\r\n interpolatorTypes.push('weights');\r\n } else {\r\n continue;\r\n }\r\n const max = input[input.length - 1];\r\n if (max > maxTime) {\r\n maxTime = max;\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) {\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 targetNode = gltf._nodes[animationInfo.channels[i].target.node!];\r\n const track: AssetAnimationTrack = {\r\n node: targetNode,\r\n type: animationInfo.interpolatorTypes[i],\r\n interpolator: animationInfo.interpolators[i]\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 ) {\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 = model.addNode(parent, nodeIndex, nodeInfo.name);\r\n if (typeof nodeInfo.mesh === 'number') {\r\n node.mesh = gltf._meshes[nodeInfo.mesh];\r\n if (node.weights) {\r\n node.mesh.morphWeights = node.weights;\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(gltf: GLTFContent) {\r\n if (gltf.meshes) {\r\n for (let i = 0; i < gltf.meshes.length; i++) {\r\n const mesh = await this._loadMesh(gltf, i);\r\n if (mesh) {\r\n gltf._meshes[i] = mesh;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private async _loadMesh(gltf: GLTFContent, meshIndex: number) {\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 ?? 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 for (let i = 0; i < primitives.length; i++) {\r\n const p = primitives[i];\r\n const subMeshData: AssetSubMeshData = {\r\n name: `${meshName}-${i}`,\r\n primitive: new DRef(),\r\n material: new DRef(),\r\n rawPositions: null,\r\n rawBlendIndices: null,\r\n rawJointWeights: null,\r\n numTargets: 0\r\n };\r\n const primitive = new Primitive();\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 vertexIndices = new Float32Array(primitive.getNumVertices());\r\n for (let i = 0; i < vertexIndices.length; i++) {\r\n vertexIndices[i] = i;\r\n }\r\n primitive.createAndSetVertexBuffer('tex7_f32', 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.primitiveType = this._primitiveType(primitiveType)!;\r\n const hasVertexNormal = !!primitive.getVertexBuffer('normal');\r\n const hasVertexColor = !!primitive.getVertexBuffer('diffuse');\r\n const hasVertexTangent = !!primitive.getVertexBuffer('tangent');\r\n const materialHash = `${p.material}.${Number(hasVertexNormal)}.${Number(hasVertexColor)}.${Number(\r\n hasVertexTangent\r\n )}`;\r\n let material: Nullable<M> = gltf._materialCache[materialHash];\r\n if (!material) {\r\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\r\n material = await this._loadMaterial(\r\n gltf,\r\n materialInfo,\r\n hasVertexColor,\r\n hasVertexNormal,\r\n hasVertexTangent\r\n );\r\n if (material) {\r\n gltf._materialCache[materialHash] = material;\r\n }\r\n }\r\n subMeshData.primitive.set(primitive);\r\n subMeshData.material.set(material);\r\n mesh.subMeshes.push(subMeshData);\r\n }\r\n }\r\n }\r\n return mesh;\r\n }\r\n private async _createMaterial(assetMaterial: AssetMaterial) {\r\n if (assetMaterial.type === 'unlit') {\r\n const unlitAssetMaterial = assetMaterial as AssetUnlitMaterial;\r\n const unlitMaterial = new UnlitMaterial();\r\n unlitMaterial.albedoColor = unlitAssetMaterial.diffuse ?? Vector4.one();\r\n if (unlitAssetMaterial.diffuseMap) {\r\n unlitMaterial.albedoTexture = unlitAssetMaterial.diffuseMap.texture;\r\n unlitMaterial.albedoTextureSampler = unlitAssetMaterial.diffuseMap.sampler;\r\n unlitMaterial.albedoTexCoordIndex = unlitAssetMaterial.diffuseMap.texCoord;\r\n unlitMaterial.albedoTexCoordMatrix = unlitAssetMaterial.diffuseMap.transform;\r\n }\r\n unlitMaterial.vertexColor = unlitAssetMaterial.common.vertexColor!;\r\n if (assetMaterial.common.alphaMode === 'blend') {\r\n unlitMaterial.blendMode = 'blend';\r\n } else if (assetMaterial.common.alphaMode === 'mask') {\r\n unlitMaterial.alphaCutoff = assetMaterial.common.alphaCutoff!;\r\n }\r\n if (assetMaterial.common.doubleSided) {\r\n unlitMaterial.cullMode = 'none';\r\n }\r\n return unlitMaterial;\r\n } else if (assetMaterial.type === 'pbrSpecularGlossiness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialSG;\r\n const pbrMaterial = new PBRSpecularGlossinessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.specularFactor = new Vector3(\r\n assetPBRMaterial.specular!.x,\r\n assetPBRMaterial.specular!.y,\r\n assetPBRMaterial.specular!.z\r\n );\r\n pbrMaterial.glossinessFactor = assetPBRMaterial.glossness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;\r\n pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;\r\n pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;\r\n pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;\r\n pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;\r\n pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;\r\n pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;\r\n }\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n if (assetPBRMaterial.specularGlossnessMap) {\r\n pbrMaterial.specularTexture = assetPBRMaterial.specularGlossnessMap.texture;\r\n pbrMaterial.specularTextureSampler = assetPBRMaterial.specularGlossnessMap.sampler;\r\n pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularGlossnessMap.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularGlossnessMap.transform;\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n } else if (assetMaterial.type === 'pbrMetallicRoughness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialMR;\r\n const pbrMaterial = new PBRMetallicRoughnessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.metallic = assetPBRMaterial.metallic!;\r\n pbrMaterial.roughness = assetPBRMaterial.roughness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;\r\n pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;\r\n pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;\r\n pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;\r\n pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;\r\n pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;\r\n pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n }\r\n if (assetPBRMaterial.metallicMap) {\r\n pbrMaterial.metallicRoughnessTexture = assetPBRMaterial.metallicMap.texture;\r\n pbrMaterial.metallicRoughnessTextureSampler = assetPBRMaterial.metallicMap.sampler;\r\n pbrMaterial.metallicRoughnessTexCoordIndex = assetPBRMaterial.metallicMap.texCoord;\r\n pbrMaterial.metallicRoughnessTexCoordMatrix = assetPBRMaterial.metallicMap.transform;\r\n }\r\n pbrMaterial.specularFactor = assetPBRMaterial.specularFactor!;\r\n if (assetPBRMaterial.specularMap) {\r\n pbrMaterial.specularTexture = assetPBRMaterial.specularMap.texture;\r\n pbrMaterial.specularTextureSampler = assetPBRMaterial.specularMap.sampler;\r\n pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularMap.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularMap.transform;\r\n }\r\n if (assetPBRMaterial.specularColorMap) {\r\n pbrMaterial.specularColorTexture = assetPBRMaterial.specularColorMap.texture;\r\n pbrMaterial.specularColorTextureSampler = assetPBRMaterial.specularColorMap.sampler;\r\n pbrMaterial.specularColorTexCoordIndex = assetPBRMaterial.specularColorMap.texCoord;\r\n pbrMaterial.specularColorTexCoordMatrix = assetPBRMaterial.specularColorMap.transform;\r\n }\r\n if (assetPBRMaterial.sheen) {\r\n const sheen = assetPBRMaterial.sheen;\r\n pbrMaterial.sheen = true;\r\n pbrMaterial.sheenColorFactor = sheen.sheenColorFactor!;\r\n pbrMaterial.sheenRoughnessFactor = sheen.sheenRoughnessFactor!;\r\n if (sheen.sheenColorMap) {\r\n pbrMaterial.sheenColorTexture = sheen.sheenColorMap.texture;\r\n pbrMaterial.sheenColorTextureSampler = sheen.sheenColorMap.sampler;\r\n pbrMaterial.sheenColorTexCoordIndex = sheen.sheenColorMap.texCoord;\r\n pbrMaterial.sheenColorTexCoordMatrix = sheen.sheenColorMap.transform;\r\n }\r\n if (sheen.sheenRoughnessMap) {\r\n pbrMaterial.sheenRoughnessTexture = sheen.sheenRoughnessMap.texture;\r\n pbrMaterial.sheenRoughnessTextureSampler = sheen.sheenRoughnessMap.sampler;\r\n pbrMaterial.sheenRoughnessTexCoordIndex = sheen.sheenRoughnessMap.texCoord;\r\n pbrMaterial.sheenRoughnessTexCoordMatrix = sheen.sheenRoughnessMap.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.iridescence) {\r\n const iridescence = assetPBRMaterial.iridescence;\r\n pbrMaterial.iridescence = true;\r\n pbrMaterial.iridescenceFactor = iridescence.iridescenceFactor!;\r\n pbrMaterial.iridescenceIor = iridescence.iridescenceIor!;\r\n if (iridescence.iridescenceMap) {\r\n pbrMaterial.iridescenceTexture = iridescence.iridescenceMap.texture;\r\n pbrMaterial.iridescenceTextureSampler = iridescence.iridescenceMap.sampler;\r\n pbrMaterial.iridescenceTexCoordIndex = iridescence.iridescenceMap.texCoord;\r\n pbrMaterial.iridescenceTexCoordMatrix = iridescence.iridescenceMap.transform;\r\n }\r\n pbrMaterial.iridescenceThicknessMin = iridescence.iridescenceThicknessMinimum!;\r\n pbrMaterial.iridescenceThicknessMax = iridescence.iridescenceThicknessMaximum!;\r\n if (iridescence.iridescenceThicknessMap) {\r\n pbrMaterial.iridescenceThicknessTexture = iridescence.iridescenceThicknessMap.texture;\r\n pbrMaterial.iridescenceThicknessTextureSampler = iridescence.iridescenceThicknessMap.sampler;\r\n pbrMaterial.iridescenceThicknessTexCoordIndex = iridescence.iridescenceThicknessMap.texCoord;\r\n pbrMaterial.iridescenceThicknessTexCoordMatrix = iridescence.iridescenceThicknessMap.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.transmission) {\r\n const transmission = assetPBRMaterial.transmission;\r\n pbrMaterial.transmission = true;\r\n pbrMaterial.transmissionFactor = transmission.transmissionFactor!;\r\n if (transmission.transmissionMap) {\r\n pbrMaterial.transmissionTexture = transmission.transmissionMap.texture;\r\n pbrMaterial.transmissionTextureSampler = transmission.transmissionMap.sampler;\r\n pbrMaterial.transmissionTexCoordIndex = transmission.transmissionMap.texCoord;\r\n pbrMaterial.transmissionTexCoordMatrix = transmission.transmissionMap.transform;\r\n }\r\n pbrMaterial.thicknessFactor = transmission.thicknessFactor!;\r\n if (transmission.thicknessMap) {\r\n pbrMaterial.thicknessTexture = transmission.thicknessMap.texture;\r\n pbrMaterial.thicknessTextureSampler = transmission.thicknessMap.sampler;\r\n pbrMaterial.thicknessTexCoordIndex = transmission.thicknessMap.texCoord;\r\n pbrMaterial.thicknessTexCoordMatrix = transmission.thicknessMap.transform;\r\n }\r\n pbrMaterial.attenuationDistance = transmission.attenuationDistance!;\r\n pbrMaterial.attenuationColor = transmission.attenuationColor!;\r\n }\r\n if (assetPBRMaterial.clearcoat) {\r\n const cc = assetPBRMaterial.clearcoat;\r\n pbrMaterial.clearcoat = true;\r\n pbrMaterial.clearcoatIntensity = cc.clearCoatFactor!;\r\n pbrMaterial.clearcoatRoughnessFactor = cc.clearCoatRoughnessFactor!;\r\n if (cc.clearCoatIntensityMap) {\r\n pbrMaterial.clearcoatIntensityTexture = cc.clearCoatIntensityMap.texture;\r\n pbrMaterial.clearcoatIntensityTextureSampler = cc.clearCoatIntensityMap.sampler;\r\n pbrMaterial.clearcoatIntensityTexCoordIndex = cc.clearCoatIntensityMap.texCoord;\r\n pbrMaterial.clearcoatIntensityTexCoordMatrix = cc.clearCoatIntensityMap.transform;\r\n }\r\n if (cc.clearCoatRoughnessMap) {\r\n pbrMaterial.clearcoatRoughnessTexture = cc.clearCoatRoughnessMap.texture;\r\n pbrMaterial.clearcoatRoughnessTextureSampler = cc.clearCoatRoughnessMap.sampler;\r\n pbrMaterial.clearcoatRoughnessTexCoordIndex = cc.clearCoatRoughnessMap.texCoord;\r\n pbrMaterial.clearcoatRoughnessTexCoordMatrix = cc.clearCoatRoughnessMap.transform;\r\n }\r\n if (cc.clearCoatNormalMap) {\r\n pbrMaterial.clearcoatNormalTexture = cc.clearCoatNormalMap.texture;\r\n pbrMaterial.clearcoatNormalTextureSampler = cc.clearCoatNormalMap.sampler;\r\n pbrMaterial.clearcoatNormalTexCoordIndex = cc.clearCoatNormalMap.texCoord;\r\n pbrMaterial.clearcoatNormalTexCoordMatrix = cc.clearCoatNormalMap.transform;\r\n }\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private async _loadMaterial(\r\n gltf: GLTFContent,\r\n materialInfo: Nullable<Material>,\r\n vertexColor: boolean,\r\n vertexNormal: boolean,\r\n useTangent: boolean\r\n ) {\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 if (materialInfo?.pbrMetallicRoughness || materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n pbrCommon.normalMap = materialInfo.normalTexture\r\n ? await this._loadTexture(gltf, materialInfo.normalTexture, false)\r\n : null;\r\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\r\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\r\n ? await this._loadTexture(gltf, materialInfo.occlusionTexture, false)\r\n : null;\r\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\r\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\r\n ? await this._loadTexture(gltf, materialInfo.emissiveTexture, false)\r\n : null;\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 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(gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true)\r\n : null;\r\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\r\n ? await this._loadTexture(gltf, materialInfo.pbrMetallicRoughness.metallicRoughnessTexture, false)\r\n : null;\r\n pbrMetallicRoughness.metallicIndex = 2;\r\n pbrMetallicRoughness.roughnessIndex = 1;\r\n }\r\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\r\n pbrSpecularGlossness = {\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(gltf, sg.diffuseTexture, true)\r\n : null;\r\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\r\n ? await this._loadTexture(gltf, sg.specularGlossinessTexture, true)\r\n : null;\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 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 type: 'pbrMetallicRoughness',\r\n common: pbrCommon,\r\n diffuse: Vector4.one(),\r\n metallic: 1,\r\n roughness: 1,\r\n diffuseMap: null,\r\n metallicMap: null,\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(gltf, materialInfo.extensions.KHR_materials_specular.specularTexture, false)\r\n : null;\r\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\r\n ?.specularColorTexture\r\n ? await this._loadTexture(\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\r\n true\r\n )\r\n : null;\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(gltf, iridescence.iridescenceTexture, false)\r\n : null,\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(gltf, iridescence.iridescenceThicknessTexture, false)\r\n : null\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(gltf, transmission.transmissionTexture, false)\r\n : null,\r\n thicknessFactor: 0,\r\n thicknessMap: null,\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(gltf, volume.thicknessTexture, false)\r\n : null;\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(gltf, sheen.sheenColorTexture, true)\r\n : null,\r\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\r\n sheenRoughnessMap: sheen.sheenRoughnessTexture\r\n ? await this._loadTexture(gltf, sheen.sheenRoughnessTexture, true)\r\n : null\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(gltf, cc.clearcoatTexture, false)\r\n : null,\r\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\r\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\r\n ? await this._loadTexture(gltf, cc.clearcoatRoughnessTexture, false)\r\n : null,\r\n clearCoatNormalMap: cc.clearcoatNormalTexture\r\n ? await this._loadTexture(gltf, cc.clearcoatNormalTexture, false)\r\n : null\r\n };\r\n }\r\n }\r\n return await this._createMaterial(assetMaterial);\r\n }\r\n /** @internal */\r\n private async _loadTexture(gltf: GLTFContent, info: Partial<TextureInfo>, sRGB: boolean) {\r\n const mt: MaterialTextureInfo = {\r\n texture: 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 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 = 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 = textureInfo.source;\r\n const hash = `${imageIndex}:${!!sRGB}:${wrapS}:${wrapT}:${minFilter}:${magFilter}:${mipFilter}`;\r\n mt.texture = gltf._textureCache[hash];\r\n if (!mt.texture) {\r\n const image = gltf.images![imageIndex!];\r\n if (image) {\r\n if (image.uri) {\r\n const imageUrl = this._normalizeURI(gltf._baseURI, image.uri);\r\n mt.texture = (await gltf._manager.fetchTexture(\r\n imageUrl,\r\n { linearColorSpace: !sRGB },\r\n gltf._VFSs\r\n )) as Texture2D;\r\n mt.texture.name = imageUrl;\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.texture = await gltf._manager.loadTextureFromBuffer<Texture2D>(view, mimeType, sRGB);\r\n }\r\n }\r\n }\r\n }\r\n if (mt.texture) {\r\n gltf._textureCache[hash] = mt.texture;\r\n }\r\n }\r\n if (mt.texture) {\r\n mt.sampler = getDevice().createSampler({\r\n addressU: wrapS,\r\n addressV: wrapT,\r\n magFilter: magFilter,\r\n minFilter: minFilter,\r\n mipFilter: 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: Primitive,\r\n meshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: Nullable<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: Primitive,\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: Primitive,\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 const normalized = !!accessor.normalized;\r\n const hash = `${accessorIndex}:${semantic || ''}:${Number(normalized)}`;\r\n let buffer = gltf._bufferCache[hash];\r\n if (!buffer) {\r\n let data = accessor.getNormalizedDeinterlacedView(gltf);\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 (\r\n !(data instanceof Uint8Array) &&\r\n !(data instanceof Uint16Array) &&\r\n !(data instanceof Uint32Array)\r\n ) {\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 = getDevice().createIndexBuffer(data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>, {\r\n managed: true\r\n });\r\n } else {\r\n const attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\r\n buffer = getDevice().createVertexBuffer(attribFormat!, data)!;\r\n }\r\n gltf._bufferCache[hash] = buffer;\r\n }\r\n if (buffer) {\r\n if (!semantic) {\r\n primitive.setIndexBuffer(buffer as IndexBuffer);\r\n primitive.indexCount = (buffer as IndexBuffer).length;\r\n } else {\r\n primitive.setVertexBuffer(buffer as StructuredBuffer);\r\n if (semantic === 'position') {\r\n if (!primitive.getIndexBuffer()) {\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.setBoundingVolume(new BoundingBox(new Vector3(min), new Vector3(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.setBoundingVolume(bbox);\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) {\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(data: ArrayBuffer, offset: 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) {\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":["GLTFLoader","AbstractModelLoader","supportMIMEType","mimeType","load","assetManager","url","data","decoderModule","VFSs","buffer","arrayBuffer","isGLB","loadBinary","gltf","Response","json","_manager","_VFSs","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","dracoDecoderModule","extensionsRequired","indexOf","console","error","_dracoModule","_accessors","_bufferCache","_textureCache","_materialCache","_nodes","_meshes","asset","gltfVersion","version","_baseURI","substring","lastIndexOf","uri","_normalizeURI","buf","fetchBinaryData","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","SharedModel","_loadMeshes","_loadNodes","_loadSkins","i","nodes","skin","skeleton","skeletons","_loadAnimations","scene","assetScene","AssetScene","name","node","rootNodes","activeScene","baseURI","s","toLowerCase","startsWith","encodeURI","replace","decodeURIComponent","split","map","val","encodeURIComponent","join","model","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","joints","forEach","joint","index","m","addJoint","Matrix4x4","subarray","identity","addSkeleton","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","Map","set","translate","position","Vector3","zero","rotation","Quaternion","scale","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","getNormalizedDeinterlacedView","output","Float32Array","mode","interpolation","target","path","Interpolator","max","animationData","tracks","targetNode","track","interpolator","defaultMorphWeights","weights","skeletonAttached","nodeIndex","addChild","nodeInfo","addNode","mesh","morphWeights","instancing","extensions","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","count","translationValues","scaleValues","rotationValues","t","r","instances","matrix","decompose","translation","children","childIndex","meshes","_loadMesh","meshIndex","meshInfo","subMeshes","primitives","meshName","p","subMeshData","primitive","DRef","material","rawPositions","rawBlendIndices","rawJointWeights","numTargets","Primitive","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","attrib","_loadVertexBuffer","targets","getDevice","undefined","vertexIndices","getNumVertices","createAndSetVertexBuffer","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","Set","k","numComponents","accessorIndex","getComponentCount","min","BoundingBox","add","morphAttribCount","size","indices","_loadIndexBuffer","primitiveType","_primitiveType","hasVertexNormal","getVertexBuffer","hasVertexColor","hasVertexTangent","materialHash","Number","materialInfo","materials","_loadMaterial","_createMaterial","assetMaterial","unlitAssetMaterial","unlitMaterial","UnlitMaterial","albedoColor","diffuse","Vector4","diffuseMap","albedoTexture","texture","albedoTextureSampler","albedoTexCoordIndex","texCoord","albedoTexCoordMatrix","transform","vertexColor","common","alphaMode","blendMode","alphaCutoff","doubleSided","cullMode","assetPBRMaterial","pbrMaterial","PBRSpecularGlossinessMaterial","ior","specularFactor","specular","x","y","z","glossinessFactor","glossness","normalMap","normalTexture","normalTextureSampler","normalTexCoordIndex","normalTexCoordMatrix","normalScale","bumpScale","emissiveMap","emissiveTexture","emissiveTextureSampler","emissiveTexCoordIndex","emissiveTexCoordMatrix","emissiveColor","emissiveStrength","occlusionMap","occlusionTexture","occlusionTextureSampler","occlusionTexCoordIndex","occlusionTexCoordMatrix","occlusionStrength","specularGlossnessMap","specularTexture","specularTextureSampler","specularTexCoordIndex","specularTexCoordMatrix","vertexTangent","useTangent","vertexNormal","PBRMetallicRoughnessMaterial","metallic","roughness","metallicMap","metallicRoughnessTexture","metallicRoughnessTextureSampler","metallicRoughnessTexCoordIndex","metallicRoughnessTexCoordMatrix","specularMap","specularColorMap","specularColorTexture","specularColorTextureSampler","specularColorTexCoordIndex","specularColorTexCoordMatrix","sheen","sheenColorFactor","sheenRoughnessFactor","sheenColorMap","sheenColorTexture","sheenColorTextureSampler","sheenColorTexCoordIndex","sheenColorTexCoordMatrix","sheenRoughnessMap","sheenRoughnessTexture","sheenRoughnessTextureSampler","sheenRoughnessTexCoordIndex","sheenRoughnessTexCoordMatrix","iridescence","iridescenceFactor","iridescenceIor","iridescenceMap","iridescenceTexture","iridescenceTextureSampler","iridescenceTexCoordIndex","iridescenceTexCoordMatrix","iridescenceThicknessMin","iridescenceThicknessMinimum","iridescenceThicknessMax","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","iridescenceThicknessTextureSampler","iridescenceThicknessTexCoordIndex","iridescenceThicknessTexCoordMatrix","transmission","transmissionFactor","transmissionMap","transmissionTexture","transmissionTextureSampler","transmissionTexCoordIndex","transmissionTexCoordMatrix","thicknessFactor","thicknessMap","thicknessTexture","thicknessTextureSampler","thicknessTexCoordIndex","thicknessTexCoordMatrix","attenuationDistance","attenuationColor","clearcoat","cc","clearcoatIntensity","clearCoatFactor","clearcoatRoughnessFactor","clearCoatRoughnessFactor","clearCoatIntensityMap","clearcoatIntensityTexture","clearcoatIntensityTextureSampler","clearcoatIntensityTexCoordIndex","clearcoatIntensityTexCoordMatrix","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearcoatRoughnessTextureSampler","clearcoatRoughnessTexCoordIndex","clearcoatRoughnessTexCoordMatrix","clearCoatNormalMap","clearcoatNormalTexture","clearcoatNormalTextureSampler","clearcoatNormalTexCoordIndex","clearcoatNormalTexCoordMatrix","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","KHR_materials_pbrSpecularGlossiness","_loadTexture","strength","KHR_materials_emissive_strength","emissiveFactor","baseColorFactor","metallicFactor","roughnessFactor","baseColorTexture","metallicIndex","roughnessIndex","sg","diffuseFactor","glossnessFactor","diffuseTexture","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","KHR_materials_iridescence","KHR_materials_transmission","volume","KHR_materials_volume","KHR_materials_sheen","KHR_materials_clearcoat","clearcoatFactor","clearcoatTexture","sRGB","mt","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","offset","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","source","hash","image","images","imageUrl","fetchTexture","linearColorSpace","view","loadTextureFromBuffer","createSampler","addressU","addressV","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","Uint32Array","getAttributeBuffer","semantic","device","componentCount","normalized","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","createIndexBuffer","managed","attribFormat","getVertexAttribFormat","createVertexBuffer","setIndexBuffer","indexCount","setVertexBuffer","Math","floor","setBoundingVolume","bbox","beginExtend","v","extend","isValid","getGLBChunkInfo","header","infos"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gltf_loader.js","sources":["../../../../src/asset/loaders/gltf/gltf_loader.ts"],"sourcesContent":["import type { DecoderModule } from 'draco3d';\r\nimport type { InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\r\nimport { Vector3, Vector4, Matrix4x4, Quaternion, Interpolator, DRef } from '@zephyr3d/base';\r\nimport type {\r\n AssetHierarchyNode,\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 MaterialTextureInfo,\r\n AssetPBRMaterialCommon,\r\n AssetAnimationTrack\r\n} from '../../model';\r\nimport { SharedModel, AssetSkeleton, AssetScene } from '../../model';\r\nimport { BoundingBox } from '../../../utility/bounding_volume';\r\nimport { Primitive } from '../../../render/primitive';\r\nimport type { MeshMaterial as M } from '../../../material/meshmaterial';\r\nimport { UnlitMaterial } from '../../../material';\r\nimport { ComponentType, GLTFAccessor } from './helpers';\r\nimport { AbstractModelLoader } from '../loader';\r\nimport type {\r\n VertexSemantic,\r\n GPUDataBuffer,\r\n Texture2D,\r\n IndexBuffer,\r\n StructuredBuffer,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n AbstractDevice\r\n} from '@zephyr3d/device';\r\nimport type { AssetManager } from '../../assetmanager';\r\nimport type { GlTf, Material, TextureInfo } from './gltf';\r\nimport { PBRMetallicRoughnessMaterial } from '../../../material/pbrmr';\r\nimport { PBRSpecularGlossinessMaterial } from '../../../material/pbrsg';\r\nimport { DracoMeshDecoder } from '../../../utility/draco/decoder';\r\nimport {\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 '../../../values';\r\nimport { getDevice } from '../../../app/api';\r\n/** @internal */\r\nexport interface GLTFContent extends GlTf {\r\n _manager: AssetManager;\r\n _VFSs?: VFS[];\r\n _loadedBuffers: Nullable<ArrayBuffer[]>;\r\n _accessors: GLTFAccessor[];\r\n _bufferCache: Record<string, GPUDataBuffer>;\r\n _textureCache: Record<string, Texture2D>;\r\n _materialCache: Record<string, M>;\r\n _nodes: AssetHierarchyNode[];\r\n _meshes: AssetMeshData[];\r\n _device: AbstractDevice;\r\n _dracoModule?: DecoderModule;\r\n}\r\n\r\n/**\r\n * The GLTF/GLB model loader\r\n * @internal\r\n */\r\nexport class GLTFLoader extends AbstractModelLoader {\r\n supportMIMEType(mimeType: string) {\r\n return mimeType === 'model/gltf+json' || mimeType === 'model/gltf-binary';\r\n }\r\n async load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n decoderModule?: DecoderModule,\r\n VFSs?: VFS[]\r\n ) {\r\n const buffer = await data.arrayBuffer();\r\n if (this.isGLB(buffer)) {\r\n return this.loadBinary(assetManager, url, buffer, VFSs, decoderModule);\r\n }\r\n const gltf = (await new Response(data).json()) as GLTFContent;\r\n gltf._manager = assetManager;\r\n gltf._VFSs = VFSs;\r\n gltf._loadedBuffers = null;\r\n return this.loadJson(url, gltf, decoderModule);\r\n }\r\n async loadBinary(\r\n assetManager: AssetManager,\r\n url: string,\r\n buffer: ArrayBuffer,\r\n VFSs?: VFS[],\r\n decoderModule?: DecoderModule\r\n ) {\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 if (gltf) {\r\n gltf._manager = assetManager;\r\n gltf._VFSs = VFSs;\r\n gltf._loadedBuffers = buffers;\r\n return this.loadJson(url, gltf, decoderModule);\r\n }\r\n return null;\r\n }\r\n async loadJson(url: string, gltf: GLTFContent, dracoDecoderModule?: DecoderModule) {\r\n // check extensions\r\n if (\r\n !dracoDecoderModule &&\r\n gltf.extensionsRequired &&\r\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\r\n ) {\r\n console.error('Draco3d is required for loading model');\r\n return null;\r\n }\r\n gltf._dracoModule = dracoDecoderModule;\r\n gltf._accessors = [];\r\n gltf._bufferCache = {};\r\n gltf._textureCache = {};\r\n gltf._materialCache = {};\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 if (gltfVersion !== '2.0') {\r\n console.error(`Invalid GLTF version: ${gltfVersion}`);\r\n return null;\r\n }\r\n }\r\n gltf._baseURI = url.substring(0, url.lastIndexOf('/') + 1);\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 = this._normalizeURI(gltf._baseURI, buffer.uri!);\r\n const buf = await gltf._manager.fetchBinaryData(uri, null, null, gltf._VFSs);\r\n if (buffer.byteLength !== buf!.byteLength) {\r\n console.error(`Invalid GLTF: buffer byte length error.`);\r\n return null;\r\n }\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 accessors) {\r\n gltf._accessors.push(new GLTFAccessor(accessor));\r\n }\r\n }\r\n const scenes = gltf.scenes;\r\n if (scenes) {\r\n const sharedModel = new SharedModel();\r\n await this._loadMeshes(gltf);\r\n this._loadNodes(gltf, sharedModel);\r\n this._loadSkins(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._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 return sharedModel;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _normalizeURI(baseURI: string, uri: string) {\r\n const s = uri.toLowerCase();\r\n if (\r\n s.startsWith('http://') ||\r\n s.startsWith('https://') ||\r\n s.startsWith('blob:') ||\r\n s.startsWith('data:')\r\n ) {\r\n // absolute path\r\n return encodeURI(uri);\r\n }\r\n uri = uri.replace(/\\.\\//g, '');\r\n uri = decodeURIComponent(uri);\r\n if (uri[0] === '/') {\r\n uri = uri.slice(1);\r\n }\r\n uri = uri\r\n .split('/')\r\n .map((val) => encodeURIComponent(val))\r\n .join('/');\r\n return baseURI + uri;\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 }\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(gltf: GLTFContent, index: number) {\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 Interpolator[];\r\n const interpolatorTypes = [] as ('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 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 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 if (channel.target.path === 'rotation') {\r\n interpolators.push(new Interpolator(mode, 'quat', input, output));\r\n interpolatorTypes.push('rotation');\r\n } else if (channel.target.path === 'translation') {\r\n interpolators.push(new Interpolator(mode, 'vec3', input, output));\r\n interpolatorTypes.push('translation');\r\n } else if (channel.target.path === 'scale') {\r\n interpolators.push(new Interpolator(mode, 'vec3', input, output));\r\n interpolatorTypes.push('scale');\r\n } else if (channel.target.path === 'weights') {\r\n interpolators.push(new Interpolator(mode, null, input, output));\r\n interpolatorTypes.push('weights');\r\n } else {\r\n continue;\r\n }\r\n const max = input[input.length - 1];\r\n if (max > maxTime) {\r\n maxTime = max;\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) {\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 targetNode = gltf._nodes[animationInfo.channels[i].target.node!];\r\n const track: AssetAnimationTrack = {\r\n node: targetNode,\r\n type: animationInfo.interpolatorTypes[i],\r\n interpolator: animationInfo.interpolators[i]\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 ) {\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 = model.addNode(parent, nodeIndex, nodeInfo.name);\r\n if (typeof nodeInfo.mesh === 'number') {\r\n node.mesh = gltf._meshes[nodeInfo.mesh];\r\n if (node.weights) {\r\n node.mesh.morphWeights = node.weights;\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(gltf: GLTFContent) {\r\n if (gltf.meshes) {\r\n for (let i = 0; i < gltf.meshes.length; i++) {\r\n const mesh = await this._loadMesh(gltf, i);\r\n if (mesh) {\r\n gltf._meshes[i] = mesh;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private async _loadMesh(gltf: GLTFContent, meshIndex: number) {\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 ?? 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 for (let i = 0; i < primitives.length; i++) {\r\n const p = primitives[i];\r\n const subMeshData: AssetSubMeshData = {\r\n name: `${meshName}-${i}`,\r\n primitive: new DRef(),\r\n material: new DRef(),\r\n rawPositions: null,\r\n rawBlendIndices: null,\r\n rawJointWeights: null,\r\n numTargets: 0\r\n };\r\n const primitive = new Primitive();\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 vertexIndices = new Float32Array(primitive.getNumVertices());\r\n for (let i = 0; i < vertexIndices.length; i++) {\r\n vertexIndices[i] = i;\r\n }\r\n primitive.createAndSetVertexBuffer('tex7_f32', 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.primitiveType = this._primitiveType(primitiveType)!;\r\n const hasVertexNormal = !!primitive.getVertexBuffer('normal');\r\n const hasVertexColor = !!primitive.getVertexBuffer('diffuse');\r\n const hasVertexTangent = !!primitive.getVertexBuffer('tangent');\r\n const materialHash = `${p.material}.${Number(hasVertexNormal)}.${Number(hasVertexColor)}.${Number(\r\n hasVertexTangent\r\n )}`;\r\n let material: Nullable<M> = gltf._materialCache[materialHash];\r\n if (!material) {\r\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\r\n material = await this._loadMaterial(\r\n gltf,\r\n materialInfo,\r\n hasVertexColor,\r\n hasVertexNormal,\r\n hasVertexTangent\r\n );\r\n if (material) {\r\n gltf._materialCache[materialHash] = material;\r\n }\r\n }\r\n subMeshData.primitive.set(primitive);\r\n subMeshData.material.set(material);\r\n mesh.subMeshes.push(subMeshData);\r\n }\r\n }\r\n }\r\n return mesh;\r\n }\r\n private async _createMaterial(assetMaterial: AssetMaterial) {\r\n if (assetMaterial.type === 'unlit') {\r\n const unlitAssetMaterial = assetMaterial as AssetUnlitMaterial;\r\n const unlitMaterial = new UnlitMaterial();\r\n unlitMaterial.albedoColor = unlitAssetMaterial.diffuse ?? Vector4.one();\r\n if (unlitAssetMaterial.diffuseMap) {\r\n unlitMaterial.albedoTexture = unlitAssetMaterial.diffuseMap.texture;\r\n unlitMaterial.albedoTextureSampler = unlitAssetMaterial.diffuseMap.sampler;\r\n unlitMaterial.albedoTexCoordIndex = unlitAssetMaterial.diffuseMap.texCoord;\r\n unlitMaterial.albedoTexCoordMatrix = unlitAssetMaterial.diffuseMap.transform;\r\n }\r\n unlitMaterial.vertexColor = unlitAssetMaterial.common.vertexColor!;\r\n if (assetMaterial.common.alphaMode === 'blend') {\r\n unlitMaterial.blendMode = 'blend';\r\n } else if (assetMaterial.common.alphaMode === 'mask') {\r\n unlitMaterial.alphaCutoff = assetMaterial.common.alphaCutoff!;\r\n }\r\n if (assetMaterial.common.doubleSided) {\r\n unlitMaterial.cullMode = 'none';\r\n }\r\n return unlitMaterial;\r\n } else if (assetMaterial.type === 'pbrSpecularGlossiness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialSG;\r\n const pbrMaterial = new PBRSpecularGlossinessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.specularFactor = new Vector3(\r\n assetPBRMaterial.specular!.x,\r\n assetPBRMaterial.specular!.y,\r\n assetPBRMaterial.specular!.z\r\n );\r\n pbrMaterial.glossinessFactor = assetPBRMaterial.glossness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;\r\n pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;\r\n pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;\r\n pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;\r\n pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;\r\n pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;\r\n pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;\r\n }\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n if (assetPBRMaterial.specularGlossnessMap) {\r\n pbrMaterial.specularTexture = assetPBRMaterial.specularGlossnessMap.texture;\r\n pbrMaterial.specularTextureSampler = assetPBRMaterial.specularGlossnessMap.sampler;\r\n pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularGlossnessMap.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularGlossnessMap.transform;\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n } else if (assetMaterial.type === 'pbrMetallicRoughness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialMR;\r\n const pbrMaterial = new PBRMetallicRoughnessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.metallic = assetPBRMaterial.metallic!;\r\n pbrMaterial.roughness = assetPBRMaterial.roughness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;\r\n pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;\r\n pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;\r\n pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;\r\n pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;\r\n pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;\r\n pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n }\r\n if (assetPBRMaterial.metallicMap) {\r\n pbrMaterial.metallicRoughnessTexture = assetPBRMaterial.metallicMap.texture;\r\n pbrMaterial.metallicRoughnessTextureSampler = assetPBRMaterial.metallicMap.sampler;\r\n pbrMaterial.metallicRoughnessTexCoordIndex = assetPBRMaterial.metallicMap.texCoord;\r\n pbrMaterial.metallicRoughnessTexCoordMatrix = assetPBRMaterial.metallicMap.transform;\r\n }\r\n pbrMaterial.specularFactor = assetPBRMaterial.specularFactor!;\r\n if (assetPBRMaterial.specularMap) {\r\n pbrMaterial.specularTexture = assetPBRMaterial.specularMap.texture;\r\n pbrMaterial.specularTextureSampler = assetPBRMaterial.specularMap.sampler;\r\n pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularMap.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularMap.transform;\r\n }\r\n if (assetPBRMaterial.specularColorMap) {\r\n pbrMaterial.specularColorTexture = assetPBRMaterial.specularColorMap.texture;\r\n pbrMaterial.specularColorTextureSampler = assetPBRMaterial.specularColorMap.sampler;\r\n pbrMaterial.specularColorTexCoordIndex = assetPBRMaterial.specularColorMap.texCoord;\r\n pbrMaterial.specularColorTexCoordMatrix = assetPBRMaterial.specularColorMap.transform;\r\n }\r\n if (assetPBRMaterial.sheen) {\r\n const sheen = assetPBRMaterial.sheen;\r\n pbrMaterial.sheen = true;\r\n pbrMaterial.sheenColorFactor = sheen.sheenColorFactor!;\r\n pbrMaterial.sheenRoughnessFactor = sheen.sheenRoughnessFactor!;\r\n if (sheen.sheenColorMap) {\r\n pbrMaterial.sheenColorTexture = sheen.sheenColorMap.texture;\r\n pbrMaterial.sheenColorTextureSampler = sheen.sheenColorMap.sampler;\r\n pbrMaterial.sheenColorTexCoordIndex = sheen.sheenColorMap.texCoord;\r\n pbrMaterial.sheenColorTexCoordMatrix = sheen.sheenColorMap.transform;\r\n }\r\n if (sheen.sheenRoughnessMap) {\r\n pbrMaterial.sheenRoughnessTexture = sheen.sheenRoughnessMap.texture;\r\n pbrMaterial.sheenRoughnessTextureSampler = sheen.sheenRoughnessMap.sampler;\r\n pbrMaterial.sheenRoughnessTexCoordIndex = sheen.sheenRoughnessMap.texCoord;\r\n pbrMaterial.sheenRoughnessTexCoordMatrix = sheen.sheenRoughnessMap.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.iridescence) {\r\n const iridescence = assetPBRMaterial.iridescence;\r\n pbrMaterial.iridescence = true;\r\n pbrMaterial.iridescenceFactor = iridescence.iridescenceFactor!;\r\n pbrMaterial.iridescenceIor = iridescence.iridescenceIor!;\r\n if (iridescence.iridescenceMap) {\r\n pbrMaterial.iridescenceTexture = iridescence.iridescenceMap.texture;\r\n pbrMaterial.iridescenceTextureSampler = iridescence.iridescenceMap.sampler;\r\n pbrMaterial.iridescenceTexCoordIndex = iridescence.iridescenceMap.texCoord;\r\n pbrMaterial.iridescenceTexCoordMatrix = iridescence.iridescenceMap.transform;\r\n }\r\n pbrMaterial.iridescenceThicknessMin = iridescence.iridescenceThicknessMinimum!;\r\n pbrMaterial.iridescenceThicknessMax = iridescence.iridescenceThicknessMaximum!;\r\n if (iridescence.iridescenceThicknessMap) {\r\n pbrMaterial.iridescenceThicknessTexture = iridescence.iridescenceThicknessMap.texture;\r\n pbrMaterial.iridescenceThicknessTextureSampler = iridescence.iridescenceThicknessMap.sampler;\r\n pbrMaterial.iridescenceThicknessTexCoordIndex = iridescence.iridescenceThicknessMap.texCoord;\r\n pbrMaterial.iridescenceThicknessTexCoordMatrix = iridescence.iridescenceThicknessMap.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.transmission) {\r\n const transmission = assetPBRMaterial.transmission;\r\n pbrMaterial.transmission = true;\r\n pbrMaterial.transmissionFactor = transmission.transmissionFactor!;\r\n if (transmission.transmissionMap) {\r\n pbrMaterial.transmissionTexture = transmission.transmissionMap.texture;\r\n pbrMaterial.transmissionTextureSampler = transmission.transmissionMap.sampler;\r\n pbrMaterial.transmissionTexCoordIndex = transmission.transmissionMap.texCoord;\r\n pbrMaterial.transmissionTexCoordMatrix = transmission.transmissionMap.transform;\r\n }\r\n pbrMaterial.thicknessFactor = transmission.thicknessFactor!;\r\n if (transmission.thicknessMap) {\r\n pbrMaterial.thicknessTexture = transmission.thicknessMap.texture;\r\n pbrMaterial.thicknessTextureSampler = transmission.thicknessMap.sampler;\r\n pbrMaterial.thicknessTexCoordIndex = transmission.thicknessMap.texCoord;\r\n pbrMaterial.thicknessTexCoordMatrix = transmission.thicknessMap.transform;\r\n }\r\n pbrMaterial.attenuationDistance = transmission.attenuationDistance!;\r\n pbrMaterial.attenuationColor = transmission.attenuationColor!;\r\n }\r\n if (assetPBRMaterial.clearcoat) {\r\n const cc = assetPBRMaterial.clearcoat;\r\n pbrMaterial.clearcoat = true;\r\n pbrMaterial.clearcoatIntensity = cc.clearCoatFactor!;\r\n pbrMaterial.clearcoatRoughnessFactor = cc.clearCoatRoughnessFactor!;\r\n if (cc.clearCoatIntensityMap) {\r\n pbrMaterial.clearcoatIntensityTexture = cc.clearCoatIntensityMap.texture;\r\n pbrMaterial.clearcoatIntensityTextureSampler = cc.clearCoatIntensityMap.sampler;\r\n pbrMaterial.clearcoatIntensityTexCoordIndex = cc.clearCoatIntensityMap.texCoord;\r\n pbrMaterial.clearcoatIntensityTexCoordMatrix = cc.clearCoatIntensityMap.transform;\r\n }\r\n if (cc.clearCoatRoughnessMap) {\r\n pbrMaterial.clearcoatRoughnessTexture = cc.clearCoatRoughnessMap.texture;\r\n pbrMaterial.clearcoatRoughnessTextureSampler = cc.clearCoatRoughnessMap.sampler;\r\n pbrMaterial.clearcoatRoughnessTexCoordIndex = cc.clearCoatRoughnessMap.texCoord;\r\n pbrMaterial.clearcoatRoughnessTexCoordMatrix = cc.clearCoatRoughnessMap.transform;\r\n }\r\n if (cc.clearCoatNormalMap) {\r\n pbrMaterial.clearcoatNormalTexture = cc.clearCoatNormalMap.texture;\r\n pbrMaterial.clearcoatNormalTextureSampler = cc.clearCoatNormalMap.sampler;\r\n pbrMaterial.clearcoatNormalTexCoordIndex = cc.clearCoatNormalMap.texCoord;\r\n pbrMaterial.clearcoatNormalTexCoordMatrix = cc.clearCoatNormalMap.transform;\r\n }\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private async _loadMaterial(\r\n gltf: GLTFContent,\r\n materialInfo: Nullable<Material>,\r\n vertexColor: boolean,\r\n vertexNormal: boolean,\r\n useTangent: boolean\r\n ) {\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 if (materialInfo?.pbrMetallicRoughness || materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n pbrCommon.normalMap = materialInfo.normalTexture\r\n ? await this._loadTexture(gltf, materialInfo.normalTexture, false)\r\n : null;\r\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\r\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\r\n ? await this._loadTexture(gltf, materialInfo.occlusionTexture, false)\r\n : null;\r\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\r\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\r\n ? await this._loadTexture(gltf, materialInfo.emissiveTexture, false)\r\n : null;\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 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(gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true)\r\n : null;\r\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\r\n ? await this._loadTexture(gltf, materialInfo.pbrMetallicRoughness.metallicRoughnessTexture, false)\r\n : null;\r\n pbrMetallicRoughness.metallicIndex = 2;\r\n pbrMetallicRoughness.roughnessIndex = 1;\r\n }\r\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\r\n pbrSpecularGlossness = {\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(gltf, sg.diffuseTexture, true)\r\n : null;\r\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\r\n ? await this._loadTexture(gltf, sg.specularGlossinessTexture, true)\r\n : null;\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 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 type: 'pbrMetallicRoughness',\r\n common: pbrCommon,\r\n diffuse: Vector4.one(),\r\n metallic: 1,\r\n roughness: 1,\r\n diffuseMap: null,\r\n metallicMap: null,\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(gltf, materialInfo.extensions.KHR_materials_specular.specularTexture, false)\r\n : null;\r\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\r\n ?.specularColorTexture\r\n ? await this._loadTexture(\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\r\n true\r\n )\r\n : null;\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(gltf, iridescence.iridescenceTexture, false)\r\n : null,\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(gltf, iridescence.iridescenceThicknessTexture, false)\r\n : null\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(gltf, transmission.transmissionTexture, false)\r\n : null,\r\n thicknessFactor: 0,\r\n thicknessMap: null,\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(gltf, volume.thicknessTexture, false)\r\n : null;\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(gltf, sheen.sheenColorTexture, true)\r\n : null,\r\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\r\n sheenRoughnessMap: sheen.sheenRoughnessTexture\r\n ? await this._loadTexture(gltf, sheen.sheenRoughnessTexture, true)\r\n : null\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(gltf, cc.clearcoatTexture, false)\r\n : null,\r\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\r\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\r\n ? await this._loadTexture(gltf, cc.clearcoatRoughnessTexture, false)\r\n : null,\r\n clearCoatNormalMap: cc.clearcoatNormalTexture\r\n ? await this._loadTexture(gltf, cc.clearcoatNormalTexture, false)\r\n : null\r\n };\r\n }\r\n }\r\n return await this._createMaterial(assetMaterial);\r\n }\r\n /** @internal */\r\n private async _loadTexture(gltf: GLTFContent, info: Partial<TextureInfo>, sRGB: boolean) {\r\n const mt: MaterialTextureInfo = {\r\n texture: 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 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 = 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 = textureInfo.source;\r\n const hash = `${imageIndex}:${!!sRGB}:${wrapS}:${wrapT}:${minFilter}:${magFilter}:${mipFilter}`;\r\n mt.texture = gltf._textureCache[hash];\r\n if (!mt.texture) {\r\n const image = gltf.images![imageIndex!];\r\n if (image) {\r\n if (image.uri) {\r\n const imageUrl = this._normalizeURI(gltf._baseURI, image.uri);\r\n mt.texture = (await gltf._manager.fetchTexture(\r\n imageUrl,\r\n { linearColorSpace: !sRGB },\r\n gltf._VFSs\r\n )) as Texture2D;\r\n mt.texture.name = imageUrl;\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.texture = await gltf._manager.loadTextureFromBuffer<Texture2D>(view, mimeType, sRGB);\r\n }\r\n }\r\n }\r\n }\r\n if (mt.texture) {\r\n gltf._textureCache[hash] = mt.texture;\r\n }\r\n }\r\n if (mt.texture) {\r\n mt.sampler = getDevice().createSampler({\r\n addressU: wrapS,\r\n addressV: wrapT,\r\n magFilter: magFilter,\r\n minFilter: minFilter,\r\n mipFilter: 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: Primitive,\r\n meshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: Nullable<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: Primitive,\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: Primitive,\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 const normalized = !!accessor.normalized;\r\n const hash = `${accessorIndex}:${semantic || ''}:${Number(normalized)}`;\r\n let buffer = gltf._bufferCache[hash];\r\n if (!buffer) {\r\n let data = accessor.getNormalizedDeinterlacedView(gltf);\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 (\r\n !(data instanceof Uint8Array) &&\r\n !(data instanceof Uint16Array) &&\r\n !(data instanceof Uint32Array)\r\n ) {\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 = getDevice().createIndexBuffer(data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>, {\r\n managed: true\r\n });\r\n } else {\r\n const attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\r\n buffer = getDevice().createVertexBuffer(attribFormat!, data)!;\r\n }\r\n gltf._bufferCache[hash] = buffer;\r\n }\r\n if (buffer) {\r\n if (!semantic) {\r\n primitive.setIndexBuffer(buffer as IndexBuffer);\r\n primitive.indexCount = (buffer as IndexBuffer).length;\r\n } else {\r\n primitive.setVertexBuffer(buffer as StructuredBuffer);\r\n if (semantic === 'position') {\r\n if (!primitive.getIndexBuffer()) {\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.setBoundingVolume(new BoundingBox(new Vector3(min), new Vector3(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.setBoundingVolume(bbox);\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) {\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(data: ArrayBuffer, offset: 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) {\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":["GLTFLoader","AbstractModelLoader","supportMIMEType","mimeType","load","assetManager","url","data","decoderModule","VFSs","buffer","arrayBuffer","isGLB","loadBinary","gltf","Response","json","_manager","_VFSs","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","dracoDecoderModule","extensionsRequired","indexOf","console","error","_dracoModule","_accessors","_bufferCache","_textureCache","_materialCache","_nodes","_meshes","asset","gltfVersion","version","_baseURI","substring","lastIndexOf","uri","_normalizeURI","buf","fetchBinaryData","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","SharedModel","_loadMeshes","_loadNodes","_loadSkins","i","nodes","skin","skeleton","skeletons","_loadAnimations","scene","assetScene","AssetScene","name","node","rootNodes","activeScene","baseURI","s","toLowerCase","startsWith","encodeURI","replace","decodeURIComponent","split","map","val","encodeURIComponent","join","model","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","joints","forEach","joint","index","m","addJoint","Matrix4x4","subarray","identity","addSkeleton","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","Map","set","translate","position","Vector3","zero","rotation","Quaternion","scale","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","getNormalizedDeinterlacedView","output","Float32Array","mode","interpolation","target","path","Interpolator","max","animationData","tracks","targetNode","track","interpolator","defaultMorphWeights","weights","skeletonAttached","nodeIndex","addChild","nodeInfo","addNode","mesh","morphWeights","instancing","extensions","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","count","translationValues","scaleValues","rotationValues","t","r","instances","matrix","decompose","translation","children","childIndex","meshes","_loadMesh","meshIndex","meshInfo","subMeshes","primitives","meshName","p","subMeshData","primitive","DRef","material","rawPositions","rawBlendIndices","rawJointWeights","numTargets","Primitive","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","attrib","_loadVertexBuffer","targets","getDevice","undefined","vertexIndices","getNumVertices","createAndSetVertexBuffer","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","Set","k","numComponents","accessorIndex","getComponentCount","min","BoundingBox","add","morphAttribCount","size","indices","_loadIndexBuffer","primitiveType","_primitiveType","hasVertexNormal","getVertexBuffer","hasVertexColor","hasVertexTangent","materialHash","Number","materialInfo","materials","_loadMaterial","_createMaterial","assetMaterial","unlitAssetMaterial","unlitMaterial","UnlitMaterial","albedoColor","diffuse","Vector4","diffuseMap","albedoTexture","texture","albedoTextureSampler","albedoTexCoordIndex","texCoord","albedoTexCoordMatrix","transform","vertexColor","common","alphaMode","blendMode","alphaCutoff","doubleSided","cullMode","assetPBRMaterial","pbrMaterial","PBRSpecularGlossinessMaterial","ior","specularFactor","specular","x","y","z","glossinessFactor","glossness","normalMap","normalTexture","normalTextureSampler","normalTexCoordIndex","normalTexCoordMatrix","normalScale","bumpScale","emissiveMap","emissiveTexture","emissiveTextureSampler","emissiveTexCoordIndex","emissiveTexCoordMatrix","emissiveColor","emissiveStrength","occlusionMap","occlusionTexture","occlusionTextureSampler","occlusionTexCoordIndex","occlusionTexCoordMatrix","occlusionStrength","specularGlossnessMap","specularTexture","specularTextureSampler","specularTexCoordIndex","specularTexCoordMatrix","vertexTangent","useTangent","vertexNormal","PBRMetallicRoughnessMaterial","metallic","roughness","metallicMap","metallicRoughnessTexture","metallicRoughnessTextureSampler","metallicRoughnessTexCoordIndex","metallicRoughnessTexCoordMatrix","specularMap","specularColorMap","specularColorTexture","specularColorTextureSampler","specularColorTexCoordIndex","specularColorTexCoordMatrix","sheen","sheenColorFactor","sheenRoughnessFactor","sheenColorMap","sheenColorTexture","sheenColorTextureSampler","sheenColorTexCoordIndex","sheenColorTexCoordMatrix","sheenRoughnessMap","sheenRoughnessTexture","sheenRoughnessTextureSampler","sheenRoughnessTexCoordIndex","sheenRoughnessTexCoordMatrix","iridescence","iridescenceFactor","iridescenceIor","iridescenceMap","iridescenceTexture","iridescenceTextureSampler","iridescenceTexCoordIndex","iridescenceTexCoordMatrix","iridescenceThicknessMin","iridescenceThicknessMinimum","iridescenceThicknessMax","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","iridescenceThicknessTextureSampler","iridescenceThicknessTexCoordIndex","iridescenceThicknessTexCoordMatrix","transmission","transmissionFactor","transmissionMap","transmissionTexture","transmissionTextureSampler","transmissionTexCoordIndex","transmissionTexCoordMatrix","thicknessFactor","thicknessMap","thicknessTexture","thicknessTextureSampler","thicknessTexCoordIndex","thicknessTexCoordMatrix","attenuationDistance","attenuationColor","clearcoat","cc","clearcoatIntensity","clearCoatFactor","clearcoatRoughnessFactor","clearCoatRoughnessFactor","clearCoatIntensityMap","clearcoatIntensityTexture","clearcoatIntensityTextureSampler","clearcoatIntensityTexCoordIndex","clearcoatIntensityTexCoordMatrix","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearcoatRoughnessTextureSampler","clearcoatRoughnessTexCoordIndex","clearcoatRoughnessTexCoordMatrix","clearCoatNormalMap","clearcoatNormalTexture","clearcoatNormalTextureSampler","clearcoatNormalTexCoordIndex","clearcoatNormalTexCoordMatrix","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","KHR_materials_pbrSpecularGlossiness","_loadTexture","strength","KHR_materials_emissive_strength","emissiveFactor","baseColorFactor","metallicFactor","roughnessFactor","baseColorTexture","metallicIndex","roughnessIndex","sg","diffuseFactor","glossnessFactor","diffuseTexture","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","KHR_materials_iridescence","KHR_materials_transmission","volume","KHR_materials_volume","KHR_materials_sheen","KHR_materials_clearcoat","clearcoatFactor","clearcoatTexture","sRGB","mt","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","offset","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","source","hash","image","images","imageUrl","fetchTexture","linearColorSpace","view","loadTextureFromBuffer","createSampler","addressU","addressV","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","Uint32Array","getAttributeBuffer","semantic","device","componentCount","normalized","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","createIndexBuffer","managed","attribFormat","getVertexAttribFormat","createVertexBuffer","setIndexBuffer","indexCount","setVertexBuffer","Math","floor","setBoundingVolume","bbox","beginExtend","v","extend","isValid","getGLBChunkInfo","header","infos"],"mappings":"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"}
|