babylon.glTF2FileLoader.min.js 27 KB

1
  1. var BABYLON;!(function(e){var r=(function(){function r(){this.extensions={".gltf":{isBinary:!1},".glb":{isBinary:!0}}}return r.prototype.importMeshAsync=function(e,n,t,a,o,i){var s=r._parse(t),l=this._getLoader(s);if(!l)return void i();l.importMeshAsync(e,n,s,a,o,i)},r.prototype.loadAsync=function(e,n,t,a,o){var i=r._parse(n),s=this._getLoader(i);return s?s.loadAsync(e,i,t,a,o):void o()},r.prototype.canDirectLoad=function(e){return-1!==e.indexOf("scene")&&-1!==e.indexOf("node")},r._parse=function(e){return e instanceof ArrayBuffer?r._parseBinary(e):{json:JSON.parse(e),bin:null}},r.prototype._getLoader=function(n){var t={major:2,minor:0},a=n.json.asset||{},o=r._parseVersion(a.version);if(!o)return e.Tools.Error("Invalid version"),null;var i=r._parseVersion(a.minVersion);if(i&&r._compareVersion(i,t)>0)return e.Tools.Error("Incompatible version"),null;var s={1:r.GLTFLoaderV1,2:r.GLTFLoaderV2},l=s[o.major];return void 0===l?(e.Tools.Error("Unsupported version"),null):null===l?(e.Tools.Error("v"+o.major+" loader is not available"),null):l},r._parseBinary=function(t){var a={Magic:1179937895},o=new n(t),i=o.readUint32();if(i!==a.Magic)return e.Tools.Error("Unexpected magic: "+i),null;var s=o.readUint32();switch(s){case 1:return r._parseV1(o);case 2:return r._parseV2(o)}return e.Tools.Error("Unsupported version: "+s),null},r._parseV1=function(n){var t={JSON:0},a=n.readUint32();if(a!=n.getLength())return e.Tools.Error("Length in header does not match actual data length: "+a+" != "+n.getLength()),null;var o,i=n.readUint32(),s=n.readUint32();switch(s){case t.JSON:o=JSON.parse(r._decodeBufferToText(n.readUint8Array(i)));break;default:return e.Tools.Error("Unexpected content format: "+s),null}var l=n.getLength()-n.getPosition();return{json:o,bin:n.readUint8Array(l)}},r._parseV2=function(n){var t={JSON:1313821514,BIN:5130562},a=n.readUint32();if(a!==n.getLength())return e.Tools.Error("Length in header does not match actual data length: "+a+" != "+n.getLength()),null;var o=n.readUint32(),i=n.readUint32();if(i!==t.JSON)return e.Tools.Error("First chunk format is not JSON"),null;for(var s=JSON.parse(r._decodeBufferToText(n.readUint8Array(o))),l=null;n.getPosition()<n.getLength();)switch(o=n.readUint32(),i=n.readUint32()){case t.JSON:return e.Tools.Error("Unexpected JSON chunk"),null;case t.BIN:l=n.readUint8Array(o);break;default:n.skipBytes(o)}return{json:s,bin:l}},r._parseVersion=function(e){if(!e)return null;var r=e.split(".");if(0===r.length)return null;var n=parseInt(r[0]);if(n>1&&2!=r.length)return null;parseInt(r[1]);return{major:n,minor:parseInt(r[0])}},r._compareVersion=function(e,r){return e.major>r.major?1:e.major<r.major?-1:e.minor>r.minor?1:e.minor<r.minor?-1:0},r._decodeBufferToText=function(e){for(var r="",n=e.byteLength,t=0;t<n;++t)r+=String.fromCharCode(e[t]);return r},r})();r.GLTFLoaderV1=null,r.GLTFLoaderV2=null,r.HomogeneousCoordinates=!1,r.IncrementalLoading=!0,e.GLTFFileLoader=r;var n=(function(){function e(e){this._arrayBuffer=e,this._dataView=new DataView(e),this._byteOffset=0}return e.prototype.getPosition=function(){return this._byteOffset},e.prototype.getLength=function(){return this._arrayBuffer.byteLength},e.prototype.readUint32=function(){var e=this._dataView.getUint32(this._byteOffset,!0);return this._byteOffset+=4,e},e.prototype.readUint8Array=function(e){var r=new Uint8Array(this._arrayBuffer,this._byteOffset,e);return this._byteOffset+=e,r},e.prototype.skipBytes=function(e){this._byteOffset+=e},e})();e.SceneLoader.RegisterPlugin(new r)})(BABYLON||(BABYLON={}));var BABYLON;!(function(e){!(function(e){!(function(e){e[e.BYTE=5120]="BYTE",e[e.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",e[e.SHORT=5122]="SHORT",e[e.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",e[e.UNSIGNED_INT=5125]="UNSIGNED_INT",e[e.FLOAT=5126]="FLOAT"})(e.EComponentType||(e.EComponentType={}));!(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(e.EMeshPrimitiveMode||(e.EMeshPrimitiveMode={}));!(function(e){e[e.NEAREST=9728]="NEAREST",e[e.LINEAR=9729]="LINEAR"})(e.ETextureMagFilter||(e.ETextureMagFilter={}));!(function(e){e[e.NEAREST=9728]="NEAREST",e[e.LINEAR=9729]="LINEAR",e[e.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",e[e.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",e[e.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",e[e.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR"})(e.ETextureMinFilter||(e.ETextureMinFilter={}));!(function(e){e[e.CLAMP_TO_EDGE=33071]="CLAMP_TO_EDGE",e[e.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",e[e.REPEAT=10497]="REPEAT"})(e.ETextureWrapMode||(e.ETextureWrapMode={}))})(e.GLTF2||(e.GLTF2={}))})(BABYLON||(BABYLON={}));var BABYLON;!(function(e){!(function(r){var n=function(e){return"node"+e},t=function(t,a,o){for(var i=0;i<a.channels.length;i++){var s=a.channels[i];if(s){var l=s.sampler;if(void 0!==l){var u=a.samplers[l];if(u)if(s.target){var f=t.babylonScene.getNodeByID(n(s.target.node));if(f){var c={translation:"position",rotation:"rotationQuaternion",scale:"scaling",weights:"influence"}[s.target.path];if(c){var d=r.GLTFUtils.GetBufferFromAccessor(t,t.gltf.accessors[u.input]),T=r.GLTFUtils.GetBufferFromAccessor(t,t.gltf.accessors[u.output]),b=0,m={position:e.Animation.ANIMATIONTYPE_VECTOR3,rotationQuaternion:e.Animation.ANIMATIONTYPE_QUATERNION,scale:e.Animation.ANIMATIONTYPE_VECTOR3,influence:e.Animation.ANIMATIONTYPE_FLOAT}[c],h={position:function(){var r=e.Vector3.FromArray(T,b);return b+=3,r},rotationQuaternion:function(){var r=e.Quaternion.FromArray(T,b);return b+=4,r},scale:function(){var r=e.Vector3.FromArray(T,b);return b+=3,r},influence:function(){for(var e=f.morphTargetManager.numTargets,r=new Array(e),n=0;n<e;n++)r[n]=T[b++];return r}}[c],g={LINEAR:function(e){return{frame:d[e],value:h()}},CUBICSPLINE:function(e){return{frame:d[e],inTangent:h(),value:h(),outTangent:h()}}}[u.interpolation];if(g){for(var y=new Array(d.length),p=0;p<d.length;p++)y[p]=g(p);if("influence"===c)for(var v=f,A=0;A<v.morphTargetManager.numTargets;A++){var E=v.morphTargetManager.getTarget(A),L=(a.name||"anim"+o)+"_"+A,M=new e.Animation(L,c,1,m);M.setKeys(y.map((function(e){return{frame:e.frame,inTangent:e.inTangent?e.inTangent[A]:void 0,value:e.value[A],outTangent:e.outTangent?e.outTangent[A]:void 0}}))),E.animations.push(M),t.babylonScene.beginAnimation(E,0,d[d.length-1],!0)}else{var L=a.name||"anim"+o,M=new e.Animation(L,c,1,m);M.setKeys(y),f.animations.push(M),t.babylonScene.beginAnimation(f,0,d[d.length-1],!0)}}else e.Tools.Warn("[Animation "+o+", Channel + "+i+"] Sampler interpolation '"+u.interpolation+"' is invalid")}else e.Tools.Warn("[Animation "+o+", Channel + "+i+"] Target path "+s.target.path+" is invalid")}else e.Tools.Warn("[Animation "+o+", Channel + "+i+"] Target node "+s.target.node+" does not exist")}else e.Tools.Warn("[Animation "+o+", Channel + "+i+"] Target does not exist");else e.Tools.Warn("[Animation "+o+", Channel + "+i+"] Sampler "+l+" does not exist")}else e.Tools.Warn("[Animation "+o+", Channel + "+l+"] Sampler is not defined")}else e.Tools.Warn("[Animation "+o+"] Channel "+i+" does not exist")}},a=function(r){var n=r.gltf.animations;if(n&&0!==n.length)for(var a=0;a<n.length;a++){var o=n[a];o?(o.channels&&0!==o.channels.length||e.Tools.Warn("Animation "+a+" has no channels"),o.samplers&&0!==o.samplers.length?t(r,o,a):e.Tools.Warn("Animation "+a+" has no samplers")):e.Tools.Warn("Animation "+a+" not found")}},o=function(r){var n=null;if(r.translation||r.rotation||r.scale){var t=e.Vector3.FromArray(r.scale||[1,1,1]),a=e.Quaternion.FromArray(r.rotation||[0,0,0,1]),o=e.Vector3.FromArray(r.translation||[0,0,0]);n=e.Matrix.Compose(t,a,o)}else n=r.matrix?e.Matrix.FromArray(r.matrix):e.Matrix.Identity();return n},i=function(r,t,a,s){for(var l=n(a),f=0;f<s.bones.length;f++)if(s.bones[f].id===l)return s.bones[f].getParent();for(var c=t.joints,d=0;d<c.length;d++)for(var T=c[d],b=r.gltf.nodes[T],m=b.children,f=0;f<m.length;f++){var h=m[f];r.gltf.nodes[h];if(u(t,h)&&h===a){var g=o(b),y=new e.Bone(b.name||n(T),s,i(r,t,T,s),g);return y.id=n(T),y}}return null},s=function(e,r){for(var n=0;n<e.length;n++){var t=e[n];if(t.node.children)for(var a=0;a<t.node.children.length;a++){var o=t.node.children[a];if(o===r)return t.bone}}return null},l=function(e,r){var n=e.gltf.nodes[r];return n?{node:n,index:r}:null},u=function(e,r){for(var n=0;n<e.joints.length;n++)if(e.joints[n]===r)return!0;return!1},f=function(r,t,a,i){for(var s=0;s<r.gltf.nodes.length;s++){var l=r.gltf.nodes[s];if(!u(a,s)){var f=o(l),c=new e.Bone(l.name||n(s),t,null,f);c.id=n(s),i.push({bone:c,node:l,index:s})}}for(var s=0;s<i.length;s++){var d=i[s],T=d.node.children;if(T)for(var b=0;b<T.length;b++){for(var m=null,h=0;h<i.length;h++)if(i[h].index===T[b]){m=i[h];break}m&&(m.bone._parent=d.bone,d.bone.children.push(m.bone))}}},c=function(t,a,u){var c=u.name||"skin"+a.skin,d=u.babylonSkeleton;if(d||(d=new e.Skeleton(c,"skin"+a.skin,t.babylonScene)),!u.babylonSkeleton)return d;var T=t.gltf.accessors[u.inverseBindMatrices],b=(r.GLTFUtils.GetBufferFromAccessor(t,T),[]),m=[];f(t,d,u,b),d.bones=[];for(var h=0;h<u.joints.length;h++){var g=l(t,u.joints[h]),y=g.node;if(y){var p=g.index,v=n(p),A=t.babylonScene.getBoneByID(v);if(A)d.bones.push(A);else{for(var E=!1,L=null,M=0;M<h;M++){var x=l(t,u.joints[M]).node;if(x){var N=x.children;E=!1;for(var F=0;F<N.length;F++)if(N[F]===p){L=i(t,u,u.joints[M],d),E=!0;break}if(E)break}else e.Tools.Warn("Joint index "+u.joints[M]+" does not exist when looking for parent")}var R=o(y);!L&&b.length>0&&(L=s(b,p))&&-1===m.indexOf(L)&&m.push(L);new e.Bone(y.name||v,d,L,R).id=v}}else e.Tools.Warn("Joint index "+u.joints[h]+" does not exist")}var _=d.bones;d.bones=[];for(var h=0;h<u.joints.length;h++){var g=l(t,u.joints[h]);if(g)for(var S=n(g.index),M=0;M<_.length;M++)if(_[M].id===S){d.bones.push(_[M]);break}}d.prepare();for(var h=0;h<m.length;h++)d.bones.push(m[h]);return d},d=function(n,t){if(void 0===t)return r.GLTFUtils.GetDefaultMaterial(n);var a=n.gltf.materials;if(!a||t<0||t>=a.length)return e.Tools.Error("Invalid material index"),r.GLTFUtils.GetDefaultMaterial(n);var o=n.gltf.materials[t].babylonMaterial;return o||r.GLTFUtils.GetDefaultMaterial(n)},T=function(n,t,a){var o=a.name||t.name||"mesh"+t.mesh,i=t.babylonNode;if(i||(i=new e.Mesh(o,n.babylonScene)),!t.babylonNode)return i;var s=new e.MultiMaterial(o,n.babylonScene);i.material||(i.material=s);for(var l=new e.VertexData,u=new e.Geometry(o,n.babylonScene,l,!1,i),f=[],c=[],T=[],b=[],m=0;m<a.primitives.length;m++){var h=new e.VertexData,g=a.primitives[m];g.mode,r.EMeshPrimitiveMode.TRIANGLES;var y=g.attributes,p=null,v=null;for(var A in y)if(p=n.gltf.accessors[y[A]],v=r.GLTFUtils.GetBufferFromAccessor(n,p),"NORMAL"===A)h.normals=v;else if("POSITION"===A)h.positions=v,c.push(h.positions.length);else if("TANGENT"===A)h.tangents=v;else if(-1!==A.indexOf("TEXCOORD_")){var E=Number(A.split("_")[1]),L=e.VertexBuffer.UVKind+(0===E?"":E+1);h.set(v,L)}else"JOINT"===A?h.matricesIndices=v:"WEIGHT"===A?h.matricesWeights=v:"COLOR_0"===A?h.colors=v:e.Tools.Warn("Ignoring unrecognized semantic '"+A+"'");if(p=n.gltf.accessors[g.indices])v=r.GLTFUtils.GetBufferFromAccessor(n,p),h.indices=v;else{h.indices=new Uint32Array(h.positions.length/3);for(var M=0;M<h.indices.length;M++)h.indices[M]=M}b.push(h.indices.length),l.merge(h),h=void 0;var x=d(n,g.material);if(s.subMaterials.push(x),g.targets)for(var N=0;N<g.targets.length;N++){var F=g.targets[N],R=0;t.weights?R=t.weights[N]:a.weights&&(R=a.weights[N]);var _=new e.MorphTarget("morph"+N,R);for(var A in F){p=n.gltf.accessors[F[A]];var S=r.GLTFUtils.GetBufferFromAccessor(n,p);if(p.name&&(_.name=p.name),"NORMAL"===A){for(var I=0;I<S.length;I++)S[I]+=l.normals[I];_.setNormals(S)}else if("POSITION"===A){for(var I=0;I<S.length;I++)S[I]+=l.positions[I];_.setPositions(S)}else if("TANGENT"===A){for(var I=0,B=0;I<S.length;I++,B++)S[I]+=l.tangents[B],(I+1)%3==0&&B++;_.setTangents(S)}else e.Tools.Warn("Ignoring unrecognized semantic '"+A+"'")}_.getPositions()?(i.morphTargetManager||(i.morphTargetManager=new e.MorphTargetManager),i.morphTargetManager.addTarget(_)):e.Tools.Warn("Not adding morph target '"+_.name+"' because it has no position data")}f.push(0===f.length?0:f[f.length-1]+c[c.length-2]),T.push(0===T.length?0:T[T.length-1]+b[b.length-2])}u.setAllVerticesData(l,!1),i.computeWorldMatrix(!0),i.subMeshes=[];for(var m=0;m<a.primitives.length;m++){a.primitives[m].mode,r.EMeshPrimitiveMode.TRIANGLES;new e.SubMesh(m,f[m],c[m],T[m],b[m],i,i,!0)}return i},b=function(r,n){var t=e.Vector3.Zero(),a=e.Quaternion.Identity(),o=new e.Vector3(1,1,1);if(n.matrix){e.Matrix.FromArray(n.matrix).decompose(o,a,t)}else n.translation&&(t=e.Vector3.FromArray(n.translation)),n.rotation&&(a=e.Quaternion.FromArray(n.rotation)),n.scale&&(o=e.Vector3.FromArray(n.scale));if(r.position=t,r.rotationQuaternion=a,r instanceof e.Mesh){r.scaling=o}},m=function(r,n){var t=null;if(r.importOnlyMeshes&&(void 0!==n.skin||void 0!==n.mesh)&&r.importMeshesNames.length>0&&-1===r.importMeshesNames.indexOf(n.name))return null;if(void 0!==n.skin){if(void 0!==n.mesh){var a=r.gltf.skins[n.skin],o=T(r,n,r.gltf.meshes[n.mesh]),i=c(r,n,a);i&&(o.skeleton=i,a.babylonSkeleton=i),t=o}}else if(void 0!==n.mesh)t=T(r,n,r.gltf.meshes[n.mesh]);else if(void 0!==n.camera&&!n.babylonNode&&!r.importOnlyMeshes){var s=r.gltf.cameras[n.camera];if(void 0!==s)if("orthographic"===s.type){var l=(s.orthographic,new e.FreeCamera(n.name||"camera"+n.camera,e.Vector3.Zero(),r.babylonScene));l.mode=e.Camera.ORTHOGRAPHIC_CAMERA,l.attachControl(r.babylonScene.getEngine().getRenderingCanvas()),t=l}else if("perspective"===s.type){var u=s.perspective,f=new e.FreeCamera(n.name||"camera"+n.camera,e.Vector3.Zero(),r.babylonScene);f.attachControl(r.babylonScene.getEngine().getRenderingCanvas()),u.aspectRatio||(u.aspectRatio=r.babylonScene.getEngine().getRenderWidth()/r.babylonScene.getEngine().getRenderHeight()),u.znear&&u.zfar&&(f.maxZ=u.zfar,f.minZ=u.znear),t=f}}if(n.babylonNode)return n.babylonNode;if(null===t){var d=new e.Mesh(n.name||"mesh"+n.mesh,r.babylonScene);n.babylonNode=d,t=d}return null!==t&&(b(t,n),t.updateCache(!0),n.babylonNode=t),t},h=function(e,r,t,a){var o=e.gltf.nodes[r],i=null;if(a=!(e.importOnlyMeshes&&!a)||(-1!==e.importMeshesNames.indexOf(o.name)||0===e.importMeshesNames.length),a&&null!==(i=m(e,o))&&(i.id=n(r),i.parent=t),o.children)for(var s=0;s<o.children.length;s++)h(e,o.children[s],i,a)},g=function(e){var r=e.gltf.scene||0,n=e.gltf.scenes;if(n)for(var t=n[r].nodes,a=0;a<t.length;a++)h(e,t[a],null);else for(var a=0;a<e.gltf.nodes.length;a++)h(e,a,null)},y=function(e){g(e),a(e);for(var r=0;r<e.babylonScene.skeletons.length;r++){var n=e.babylonScene.skeletons[r];e.babylonScene.beginAnimation(n,0,Number.MAX_VALUE,!0,1)}if(e.gltf.textures)for(var r=0;r<e.gltf.textures.length;r++){var t=e.gltf.textures[r];t.blobURL&&URL.revokeObjectURL(t.blobURL)}},p=(function(){function e(e){this._arrayBuffer=e,this._dataView=new DataView(e),this._byteOffset=0}e.prototype.getPosition=function(){return this._byteOffset},e.prototype.getLength=function(){return this._arrayBuffer.byteLength},e.prototype.readUint32=function(){var e=this._dataView.getUint32(this._byteOffset,!0);return this._byteOffset+=4,e},e.prototype.readUint8Array=function(e){var r=new Uint8Array(this._arrayBuffer,this._byteOffset,e);return this._byteOffset+=e,r},e.prototype.skipBytes=function(e){this._byteOffset+=e}}(),(function(){function n(){}return n.RegisterExtension=function(r){if(n.Extensions[r.name])return void e.Tools.Error('Tool with the same name "'+r.name+'" already exists');n.Extensions[r.name]=r},n.LoadMaterial=function(r,n){var t=r.gltf.materials[n];return t?(t.babylonMaterial=new e.PBRMaterial(t.name||"mat"+n,r.babylonScene),t.babylonMaterial.sideOrientation=e.Material.CounterClockWiseSideOrientation,t.babylonMaterial.useScalarInLinearSpace=!0,t):null},n.LoadCoreMaterialAsync=function(e,r,t,a){var o=n.LoadMaterial(e,r);if(!o)return void t();var i=!1,s=!1,l=function(){i&&s&&t()};n._loadMetallicRoughnessMaterialPropertiesAsync(e,o,(function(){i=!0,l()}),a),n.LoadCommonMaterialPropertiesAsync(e,o,(function(){s=!0,l()}),a)},n._loadMetallicRoughnessMaterialPropertiesAsync=function(r,t,a,o){t.babylonMaterial.metallic=1,t.babylonMaterial.roughness=1;var i=t.pbrMetallicRoughness;if(!i)return void a();if(t.babylonMaterial.albedoColor=i.baseColorFactor?e.Color3.FromArray(i.baseColorFactor):new e.Color3(1,1,1),t.babylonMaterial.metallic=void 0===i.metallicFactor?1:i.metallicFactor,t.babylonMaterial.roughness=void 0===i.roughnessFactor?1:i.roughnessFactor,!i.baseColorTexture&&!i.metallicRoughnessTexture)return void a();var s=function(){i.baseColorTexture&&!t.babylonMaterial.albedoTexture||i.metallicRoughnessTexture&&!t.babylonMaterial.metallicTexture||a()};i.baseColorTexture&&n.LoadTextureAsync(r,i.baseColorTexture,(function(e){t.babylonMaterial.albedoTexture=e,n.LoadAlphaProperties(r,t),s()}),(function(){e.Tools.Error("Failed to load base color texture"),o()})),i.metallicRoughnessTexture&&n.LoadTextureAsync(r,i.metallicRoughnessTexture,(function(e){t.babylonMaterial.metallicTexture=e,t.babylonMaterial.useMetallnessFromMetallicTextureBlue=!0,t.babylonMaterial.useRoughnessFromMetallicTextureGreen=!0,t.babylonMaterial.useRoughnessFromMetallicTextureAlpha=!1,s()}),(function(){e.Tools.Error("Failed to load metallic roughness texture"),o()}))},n.LoadCommonMaterialPropertiesAsync=function(r,t,a,o){if(t.babylonMaterial.useEmissiveAsIllumination=!(!t.emissiveFactor&&!t.emissiveTexture),t.babylonMaterial.emissiveColor=t.emissiveFactor?e.Color3.FromArray(t.emissiveFactor):new e.Color3(0,0,0),t.doubleSided&&(t.babylonMaterial.backFaceCulling=!1,t.babylonMaterial.twoSidedLighting=!0),!t.normalTexture&&!t.occlusionTexture&&!t.emissiveTexture)return void a();var i=function(){t.normalTexture&&!t.babylonMaterial.bumpTexture||t.occlusionTexture&&!t.babylonMaterial.ambientTexture||t.emissiveTexture&&!t.babylonMaterial.emissiveTexture||a()};t.normalTexture&&n.LoadTextureAsync(r,t.normalTexture,(function(e){t.babylonMaterial.bumpTexture=e,void 0!==t.normalTexture.scale&&(t.babylonMaterial.bumpTexture.level=t.normalTexture.scale),i()}),(function(){e.Tools.Error("Failed to load normal texture"),o()})),t.occlusionTexture&&n.LoadTextureAsync(r,t.occlusionTexture,(function(e){t.babylonMaterial.ambientTexture=e,t.babylonMaterial.useAmbientInGrayScale=!0,void 0!==t.occlusionTexture.strength&&(t.babylonMaterial.ambientTextureStrength=t.occlusionTexture.strength),i()}),(function(){e.Tools.Error("Failed to load occlusion texture"),o()})),t.emissiveTexture&&n.LoadTextureAsync(r,t.emissiveTexture,(function(e){t.babylonMaterial.emissiveTexture=e,i()}),(function(){e.Tools.Error("Failed to load emissive texture"),o()}))},n.LoadAlphaProperties=function(r,n){switch(n.alphaMode||"OPAQUE"){case"OPAQUE":break;case"MASK":n.babylonMaterial.albedoTexture.hasAlpha=!0,n.babylonMaterial.useAlphaFromAlbedoTexture=!1,n.babylonMaterial.alphaMode=e.Engine.ALPHA_DISABLE;break;case"BLEND":n.babylonMaterial.albedoTexture.hasAlpha=!0,n.babylonMaterial.useAlphaFromAlbedoTexture=!0,n.babylonMaterial.alphaMode=e.Engine.ALPHA_COMBINE;break;default:e.Tools.Error("Invalid alpha mode '"+n.alphaMode+"'")}},n.LoadTextureAsync=function(e,t,a,o){var i=e.gltf.textures[t.index],s=t.texCoord||0;if(!i||void 0===i.source)return void o();if(i.babylonTextures){var l=i.babylonTextures[s];if(!l)for(var u=0;u<i.babylonTextures.length;u++)if(l=i.babylonTextures[u]){l=l.clone(),l.coordinatesIndex=s;break}return void a(l)}var f=e.gltf.images[i.source],c=e.rootUrl+f.uri;if(i.blobURL)c=i.blobURL;else if(void 0===f.uri){var d=e.gltf.bufferViews[f.bufferView],T=r.GLTFUtils.GetBufferFromBufferView(e,d,0,d.byteLength,r.EComponentType.UNSIGNED_BYTE);i.blobURL=URL.createObjectURL(new Blob([T],{type:f.mimeType})),c=i.blobURL}else if(r.GLTFUtils.IsBase64(f.uri)){var b=new Uint8Array(r.GLTFUtils.DecodeBase64(f.uri));i.blobURL=URL.createObjectURL(new Blob([b],{type:f.mimeType})),c=i.blobURL}n._createTextureAsync(e,i,s,c,a,o)},n._createTextureAsync=function(n,t,a,o,i,s){var l=void 0===t.sampler?{}:n.gltf.samplers[t.sampler],u=l.minFilter===r.ETextureMinFilter.NEAREST||l.minFilter===r.ETextureMinFilter.LINEAR,f=r.GLTFUtils.GetTextureFilterMode(l.minFilter),c=new e.Texture(o,n.babylonScene,u,!1,f,function(){i(c)},s);c.coordinatesIndex=a,c.wrapU=r.GLTFUtils.GetWrapMode(l.wrapS),c.wrapV=r.GLTFUtils.GetWrapMode(l.wrapT),c.name=t.name,t.babylonTextures=t.babylonTextures||[],t.babylonTextures[a]=c},n.prototype.importMeshAsync=function(r,t,a,o,i,s){t.useRightHandedSystem=!0;var l=n._createRuntime(t,a,o,!0);if(!l)return void s();""===r?l.importMeshesNames=[]:"string"==typeof r?l.importMeshesNames=[r]:!r||r instanceof Array?(l.importMeshesNames=[],e.Tools.Warn("Argument meshesNames must be of type string or string[]")):l.importMeshesNames=[r],g(l);for(var u=[],f=[],c=0;c<l.gltf.nodes.length;c++){var d=l.gltf.nodes[c];d.babylonNode instanceof e.AbstractMesh&&u.push(d.babylonNode)}for(var c=0;c<l.gltf.skins.length;c++){var T=l.gltf.skins[c];T.babylonSkeleton instanceof e.Skeleton&&f.push(T.babylonSkeleton)}n._loadBuffersAsync(l,(function(){n._loadMaterialsAsync(l,(function(){y(l),i(u,null,f)}),s)}),s)},n.prototype.loadAsync=function(e,r,t,a,o){e.useRightHandedSystem=!0;var i=n._createRuntime(e,r,t,!1);if(!i)return void o();g(i),n._loadBuffersAsync(i,(function(){n._loadMaterialsAsync(i,(function(){y(i),a()}),o)}),o)},n._loadBuffersAsync=function(e,r,n){var t=this;if(0==e.gltf.buffers.length)return void r();var a=0;e.gltf.buffers.forEach((function(o,i){t._loadBufferAsync(e,i,(function(){++a===e.gltf.buffers.length&&r()}),n)}))},n._loadBufferAsync=function(n,t,a,o){var i=n.gltf.buffers[t];if(void 0===i.uri)a();else if(r.GLTFUtils.IsBase64(i.uri)){var s=r.GLTFUtils.DecodeBase64(i.uri);setTimeout((function(){i.loadedBufferView=new Uint8Array(s),a()}))}else e.Tools.LoadFile(n.rootUrl+i.uri,(function(e){i.loadedBufferView=new Uint8Array(e),a()}),null,null,!0,o)},n._loadMaterialsAsync=function(e,n,t){var a=e.gltf.materials;if(!a||0===a.length)return void n();for(var o=0,i=0;i<a.length;i++)r.GLTFLoaderExtension.LoadMaterialAsync(e,i,(function(){++o===a.length&&n()}),t)},n._createRuntime=function(n,t,a,o){var i,s={gltf:t.json,babylonScene:n,rootUrl:a,importOnlyMeshes:o},l=s.gltf.buffers;if(l.length>0&&void 0===l[0].uri&&(i=l[0]),t.bin){if(!i)return e.Tools.Error("Unexpected BIN chunk"),null;if(i.byteLength!=t.bin.byteLength)return e.Tools.Error("Binary buffer length from JSON does not match chunk length"),null;i.loadedBufferView=t.bin}return r.GLTFLoaderExtension.PostCreateRuntime(s),s},n})());p.Extensions={},r.GLTFLoader=p,e.GLTFFileLoader.GLTFLoaderV2=new p})(e.GLTF2||(e.GLTF2={}))})(BABYLON||(BABYLON={}));var BABYLON;!(function(e){!(function(r){var n=(function(){function n(){}return n.IsBase64=function(e){return!(e.length<5)&&"data:"===e.substr(0,5)},n.DecodeBase64=function(e){for(var r=atob(e.split(",")[1]),n=r.length,t=new Uint8Array(new ArrayBuffer(n)),a=0;a<n;a++)t[a]=r.charCodeAt(a);return t.buffer},n.GetWrapMode=function(n){switch(n){case r.ETextureWrapMode.CLAMP_TO_EDGE:return e.Texture.CLAMP_ADDRESSMODE;case r.ETextureWrapMode.MIRRORED_REPEAT:return e.Texture.MIRROR_ADDRESSMODE;case r.ETextureWrapMode.REPEAT:default:return e.Texture.WRAP_ADDRESSMODE}},n.GetByteStrideFromType=function(e){switch(e.type){case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;default:return 1}},n.GetTextureFilterMode=function(n){switch(n){case r.ETextureMinFilter.LINEAR:case r.ETextureMinFilter.LINEAR_MIPMAP_NEAREST:case r.ETextureMinFilter.LINEAR_MIPMAP_LINEAR:return e.Texture.TRILINEAR_SAMPLINGMODE;case r.ETextureMinFilter.NEAREST:case r.ETextureMinFilter.NEAREST_MIPMAP_NEAREST:return e.Texture.NEAREST_SAMPLINGMODE;default:return e.Texture.BILINEAR_SAMPLINGMODE}},n.GetBufferFromBufferView=function(e,n,t,a,o){t+=n.byteOffset||0;var i=e.gltf.buffers[n.buffer].loadedBufferView;if(t+a>i.byteLength)throw new Error("Buffer access is out of range");var s=i.buffer;switch(t+=i.byteOffset,o){case r.EComponentType.BYTE:return new Int8Array(s,t,a);case r.EComponentType.UNSIGNED_BYTE:return new Uint8Array(s,t,a);case r.EComponentType.SHORT:return new Int16Array(s,t,a);case r.EComponentType.UNSIGNED_SHORT:return new Uint16Array(s,t,a);case r.EComponentType.UNSIGNED_INT:return new Uint32Array(s,t,a);default:return new Float32Array(s,t,a)}},n.GetBufferFromAccessor=function(e,r){var t=e.gltf.bufferViews[r.bufferView],a=r.byteOffset||0,o=r.count*n.GetByteStrideFromType(r);return n.GetBufferFromBufferView(e,t,a,o,r.componentType)},n.DecodeBufferToText=function(e){for(var r="",n=e.byteLength,t=0;t<n;++t)r+=String.fromCharCode(e[t]);return r},n.GetDefaultMaterial=function(r){if(!r.defaultMaterial){var n=new e.PBRMaterial("gltf_default",r.babylonScene);n.sideOrientation=e.Material.CounterClockWiseSideOrientation,n.metallic=1,n.roughness=1,r.defaultMaterial=n}return r.defaultMaterial},n})();r.GLTFUtils=n})(e.GLTF2||(e.GLTF2={}))})(BABYLON||(BABYLON={}));var BABYLON;!(function(e){!(function(e){var r=(function(){function r(e){this.enabled=!0,this._name=e}return Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.postCreateRuntime=function(e){},r.prototype.loadMaterialAsync=function(e,r,n,t){return!1},r.PostCreateRuntime=function(r){for(var n in e.GLTFLoader.Extensions){var t=e.GLTFLoader.Extensions[n];t.enabled&&t.postCreateRuntime(r)}},r.LoadMaterialAsync=function(r,n,t,a){for(var o in e.GLTFLoader.Extensions){var i=e.GLTFLoader.Extensions[o];if(i.enabled&&i.loadMaterialAsync(r,n,t,a))return}e.GLTFLoader.LoadCoreMaterialAsync(r,n,t,a)},r})();e.GLTFLoaderExtension=r})(e.GLTF2||(e.GLTF2={}))})(BABYLON||(BABYLON={}));var BABYLON;!(function(e){!(function(r){var n=(function(n){function t(){return n.call(this,"KHR_materials_pbrSpecularGlossiness")||this}return __extends(t,n),t.prototype.loadMaterialAsync=function(n,t,a,o){var i=r.GLTFLoader.LoadMaterial(n,t);if(!i||!i.extensions)return!1;var s=i.extensions[this.name];if(!s)return!1;i.babylonMaterial.albedoColor=s.diffuseFactor?e.Color3.FromArray(s.diffuseFactor):new e.Color3(1,1,1),i.babylonMaterial.reflectivityColor=s.specularFactor?e.Color3.FromArray(s.specularFactor):new e.Color3(1,1,1),i.babylonMaterial.microSurface=void 0===s.glossinessFactor?1:s.glossinessFactor;var l=!1,u=function(){s.diffuseTexture&&!i.babylonMaterial.albedoTexture||s.specularGlossinessTexture&&!i.babylonMaterial.reflectivityTexture||!l||a()};return s.diffuseTexture&&r.GLTFLoader.LoadTextureAsync(n,s.diffuseTexture,(function(e){i.babylonMaterial.albedoTexture=e,r.GLTFLoader.LoadAlphaProperties(n,i),u()}),(function(){e.Tools.Warn("Failed to load diffuse texture"),o()})),s.specularGlossinessTexture&&r.GLTFLoader.LoadTextureAsync(n,s.specularGlossinessTexture,(function(e){i.babylonMaterial.reflectivityTexture=e,i.babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha=!0,u()}),(function(){e.Tools.Warn("Failed to load metallic roughness texture"),o()})),r.GLTFLoader.LoadCommonMaterialPropertiesAsync(n,i,(function(){l=!0,u()}),o),!0},t})(r.GLTFLoaderExtension);r.GLTFMaterialsPbrSpecularGlossinessExtension=n,r.GLTFLoader.RegisterExtension(new n)})(e.GLTF2||(e.GLTF2={}))})(BABYLON||(BABYLON={}));