!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("babylonjs")):"function"==typeof define&&define.amd?define("babylonjs-loaders",["babylonjs"],n):"object"==typeof exports?exports["babylonjs-loaders"]=n(require("babylonjs")):e.LOADERS=n(e.BABYLON)}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,function(e){return function(e){var n={};function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(r.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)r.d(t,o,function(n){return e[n]}.bind(null,o));return t},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=16)}([function(n,r){n.exports=e},,function(e,n,r){"use strict";r.r(n),r.d(n,"GLTFLoaderCoordinateSystemMode",function(){return t}),r.d(n,"GLTFLoaderAnimationStartMode",function(){return o}),r.d(n,"GLTFLoaderState",function(){return i}),r.d(n,"GLTFFileLoader",function(){return u});var t,o,i,a=r(0),s=r(3);!function(e){e[e.AUTO=0]="AUTO",e[e.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"}(t||(t={})),function(e){e[e.NONE=0]="NONE",e[e.FIRST=1]="FIRST",e[e.ALL=2]="ALL"}(o||(o={})),function(e){e[e.LOADING=0]="LOADING",e[e.READY=1]="READY",e[e.COMPLETE=2]="COMPLETE"}(i||(i={}));var u=function(){function e(){this.onParsedObservable=new a.Observable,this.coordinateSystemMode=t.AUTO,this.animationStartMode=o.FIRST,this.compileMaterials=!1,this.useClipPlane=!1,this.compileShadowGenerators=!1,this.transparencyAsCoverage=!1,this.useRangeRequests=!1,this.createInstances=!0,this.preprocessUrlAsync=function(e){return Promise.resolve(e)},this.onMeshLoadedObservable=new a.Observable,this.onTextureLoadedObservable=new a.Observable,this.onMaterialLoadedObservable=new a.Observable,this.onCameraLoadedObservable=new a.Observable,this.onCompleteObservable=new a.Observable,this.onErrorObservable=new a.Observable,this.onDisposeObservable=new a.Observable,this.onExtensionLoadedObservable=new a.Observable,this.validate=!1,this.onValidatedObservable=new a.Observable,this._loader=null,this.name="gltf",this.extensions={".gltf":{isBinary:!1},".glb":{isBinary:!0}},this._logIndentLevel=0,this._loggingEnabled=!1,this._log=this._logDisabled,this._capturePerformanceCounters=!1,this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled}return Object.defineProperty(e.prototype,"onParsed",{set:function(e){this._onParsedObserver&&this.onParsedObservable.remove(this._onParsedObserver),this._onParsedObserver=this.onParsedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onMeshLoaded",{set:function(e){this._onMeshLoadedObserver&&this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver),this._onMeshLoadedObserver=this.onMeshLoadedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onTextureLoaded",{set:function(e){this._onTextureLoadedObserver&&this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver),this._onTextureLoadedObserver=this.onTextureLoadedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onMaterialLoaded",{set:function(e){this._onMaterialLoadedObserver&&this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver),this._onMaterialLoadedObserver=this.onMaterialLoadedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onCameraLoaded",{set:function(e){this._onCameraLoadedObserver&&this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver),this._onCameraLoadedObserver=this.onCameraLoadedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onComplete",{set:function(e){this._onCompleteObserver&&this.onCompleteObservable.remove(this._onCompleteObserver),this._onCompleteObserver=this.onCompleteObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onError",{set:function(e){this._onErrorObserver&&this.onErrorObservable.remove(this._onErrorObserver),this._onErrorObserver=this.onErrorObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onDispose",{set:function(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onExtensionLoaded",{set:function(e){this._onExtensionLoadedObserver&&this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver),this._onExtensionLoadedObserver=this.onExtensionLoadedObservable.add(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"loggingEnabled",{get:function(){return this._loggingEnabled},set:function(e){this._loggingEnabled!==e&&(this._loggingEnabled=e,this._loggingEnabled?this._log=this._logEnabled:this._log=this._logDisabled)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"capturePerformanceCounters",{get:function(){return this._capturePerformanceCounters},set:function(e){this._capturePerformanceCounters!==e&&(this._capturePerformanceCounters=e,this._capturePerformanceCounters?(this._startPerformanceCounter=this._startPerformanceCounterEnabled,this._endPerformanceCounter=this._endPerformanceCounterEnabled):(this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onValidated",{set:function(e){this._onValidatedObserver&&this.onValidatedObservable.remove(this._onValidatedObserver),this._onValidatedObserver=this.onValidatedObservable.add(e)},enumerable:!0,configurable:!0}),e.prototype.dispose=function(){this._loader&&(this._loader.dispose(),this._loader=null),this._clear(),this.onDisposeObservable.notifyObservers(void 0),this.onDisposeObservable.clear()},e.prototype._clear=function(){this.preprocessUrlAsync=function(e){return Promise.resolve(e)},this.onMeshLoadedObservable.clear(),this.onTextureLoadedObservable.clear(),this.onMaterialLoadedObservable.clear(),this.onCameraLoadedObservable.clear(),this.onCompleteObservable.clear(),this.onExtensionLoadedObservable.clear()},e.prototype.requestFile=function(e,n,r,t,o,i){var s=this;if(o){if(this.useRangeRequests){this.validate&&a.Logger.Warn("glTF validation is not supported when range requests are enabled");var u=new Array,l={abort:function(){return u.forEach(function(e){return e.abort()})},onCompleteObservable:new a.Observable},c={readAsync:function(r,o){return new Promise(function(i,a){u.push(e._requestFile(n,function(e,n){var r=n.getResponseHeader("Content-Range");r&&(c.byteLength=Number(r.split("/")[1])),i(new Uint8Array(e))},t,!0,!0,function(e){a(e)},function(e){e.setRequestHeader("Range","bytes="+r+"-"+(r+o-1))}))})},byteLength:0};return this._unpackBinaryAsync(new a.DataReader(c)).then(function(e){l.onCompleteObservable.notifyObservers(l),r(e)},i),l}return e._requestFile(n,function(e,n){var t=e;s._unpackBinaryAsync(new a.DataReader({readAsync:function(e,n){return Promise.resolve(new Uint8Array(t,e,n))},byteLength:t.byteLength})).then(function(e){r(e,n)},i)},t,!0,!0,i)}return e._requestFile(n,function(t,o){s._validate(e,t,a.Tools.GetFolderPath(n),a.Tools.GetFilename(n)),r({json:s._parseJson(t)},o)},t,!0,!1,i)},e.prototype.readFile=function(e,n,r,t,o,i){var s=this;return e._readFile(n,function(t){if(s._validate(e,t,"file:",n.name),o){var u=t;s._unpackBinaryAsync(new a.DataReader({readAsync:function(e,n){return Promise.resolve(new Uint8Array(u,e,n))},byteLength:u.byteLength})).then(r,i)}else r({json:s._parseJson(t)})},t,o,i)},e.prototype.importMeshAsync=function(e,n,r,t,o,i){var a=this;return Promise.resolve().then(function(){return a.onParsedObservable.notifyObservers(r),a.onParsedObservable.clear(),a._log("Loading "+(i||"")),a._loader=a._getLoader(r),a._loader.importMeshAsync(e,n,!1,r,t,o,i)})},e.prototype.loadAsync=function(e,n,r,t,o){var i=this;return Promise.resolve().then(function(){return i.onParsedObservable.notifyObservers(n),i.onParsedObservable.clear(),i._log("Loading "+(o||"")),i._loader=i._getLoader(n),i._loader.loadAsync(e,n,r,t,o)})},e.prototype.loadAssetContainerAsync=function(e,n,r,t,o){var i=this;return Promise.resolve().then(function(){i.onParsedObservable.notifyObservers(n),i.onParsedObservable.clear(),i._log("Loading "+(o||"")),i._loader=i._getLoader(n);var s=[];i.onMaterialLoadedObservable.add(function(e){s.push(e)});var u=[];return i.onTextureLoadedObservable.add(function(e){u.push(e)}),i._loader.importMeshAsync(null,e,!0,n,r,t,o).then(function(n){var r=new a.AssetContainer(e);return Array.prototype.push.apply(r.meshes,n.meshes),Array.prototype.push.apply(r.particleSystems,n.particleSystems),Array.prototype.push.apply(r.skeletons,n.skeletons),Array.prototype.push.apply(r.animationGroups,n.animationGroups),Array.prototype.push.apply(r.materials,s),Array.prototype.push.apply(r.textures,u),Array.prototype.push.apply(r.lights,n.lights),Array.prototype.push.apply(r.transformNodes,n.transformNodes),r})})},e.prototype.canDirectLoad=function(e){return-1!==e.indexOf("asset")&&-1!==e.indexOf("version")},e.prototype.directLoad=function(e,n){return this._validate(e,n),{json:this._parseJson(n)}},e.prototype.createPlugin=function(){return new e},Object.defineProperty(e.prototype,"loaderState",{get:function(){return this._loader?this._loader.state:null},enumerable:!0,configurable:!0}),e.prototype.whenCompleteAsync=function(){var e=this;return new Promise(function(n,r){e.onCompleteObservable.addOnce(function(){n()}),e.onErrorObservable.addOnce(function(e){r(e)})})},e.prototype._validate=function(e,n,r,t){var o=this;void 0===r&&(r=""),void 0===t&&(t=""),this.validate&&(this._startPerformanceCounter("Validate JSON"),s.GLTFValidation.ValidateAsync(n,r,t,function(n){return o.preprocessUrlAsync(r+n).then(function(n){return e._loadFileAsync(n,void 0,!0,!0)})}).then(function(e){o._endPerformanceCounter("Validate JSON"),o.onValidatedObservable.notifyObservers(e),o.onValidatedObservable.clear()},function(e){o._endPerformanceCounter("Validate JSON"),a.Tools.Warn("Failed to validate: "+e.message),o.onValidatedObservable.clear()}))},e.prototype._getLoader=function(n){var r=n.json.asset||{};this._log("Asset version: "+r.version),r.minVersion&&this._log("Asset minimum version: "+r.minVersion),r.generator&&this._log("Asset generator: "+r.generator);var t=e._parseVersion(r.version);if(!t)throw new Error("Invalid version: "+r.version);if(void 0!==r.minVersion){var o=e._parseVersion(r.minVersion);if(!o)throw new Error("Invalid minimum version: "+r.minVersion);if(e._compareVersion(o,{major:2,minor:0})>0)throw new Error("Incompatible minimum version: "+r.minVersion)}var i={1:e._CreateGLTF1Loader,2:e._CreateGLTF2Loader}[t.major];if(!i)throw new Error("Unsupported version: "+r.version);return i(this)},e.prototype._parseJson=function(e){this._startPerformanceCounter("Parse JSON"),this._log("JSON length: "+e.length);var n=JSON.parse(e);return this._endPerformanceCounter("Parse JSON"),n},e.prototype._unpackBinaryAsync=function(e){var n=this;return this._startPerformanceCounter("Unpack Binary"),e.loadAsync(20).then(function(){var r=e.readUint32();if(1179937895!==r)throw new Error("Unexpected magic: "+r);var t=e.readUint32();n.loggingEnabled&&n._log("Binary version: "+t);var o,i=e.readUint32();if(0!=e.buffer.byteLength&&i!==e.buffer.byteLength)throw new Error("Length in header does not match actual data length: "+i+" != "+e.buffer.byteLength);switch(t){case 1:o=n._unpackBinaryV1Async(e,i);break;case 2:o=n._unpackBinaryV2Async(e,i);break;default:throw new Error("Unsupported version: "+t)}return n._endPerformanceCounter("Unpack Binary"),o})},e.prototype._unpackBinaryV1Async=function(e,n){var r=e.readUint32(),t=e.readUint32();if(0!==t)throw new Error("Unexpected content format: "+t);var o=n-e.byteOffset,i={json:this._parseJson(e.readString(r)),bin:null};if(0!==o){var a=e.byteOffset;i.bin={readAsync:function(n,r){return e.buffer.readAsync(a+n,r)},byteLength:o}}return Promise.resolve(i)},e.prototype._unpackBinaryV2Async=function(e,n){var r=this,t=1313821514,o=5130562,i=e.readUint32();if(e.readUint32()!==t)throw new Error("First chunk format is not JSON");return e.byteOffset+i===n?e.loadAsync(i).then(function(){return{json:r._parseJson(e.readString(i)),bin:null}}):e.loadAsync(i+8).then(function(){var a={json:r._parseJson(e.readString(i)),bin:null},s=function(){var r=e.readUint32();switch(e.readUint32()){case t:throw new Error("Unexpected JSON chunk");case o:var i=e.byteOffset;a.bin={readAsync:function(n,r){return e.buffer.readAsync(i+n,r)},byteLength:r},e.skipBytes(r);break;default:e.skipBytes(r)}return e.byteOffset!==n?e.loadAsync(8).then(s):Promise.resolve(a)};return s()})},e._parseVersion=function(e){if("1.0"===e||"1.0.1"===e)return{major:1,minor:0};var n=(e+"").match(/^(\d+)\.(\d+)/);return n?{major:parseInt(n[1]),minor:parseInt(n[2])}:null},e._compareVersion=function(e,n){return e.major>n.major?1:e.majorn.minor?1:e.minora.byteLength)throw new Error("Buffer access is out of range");var s=a.buffer;switch(r+=a.byteOffset,o){case i.BYTE:return new Int8Array(s,r,t);case i.UNSIGNED_BYTE:return new Uint8Array(s,r,t);case i.SHORT:return new Int16Array(s,r,t);case i.UNSIGNED_SHORT:return new Uint16Array(s,r,t);default:return new Float32Array(s,r,t)}},e.GetBufferFromAccessor=function(n,r){var t=n.bufferViews[r.bufferView],o=r.count*e.GetByteStrideFromType(r);return e.GetBufferFromBufferView(n,t,r.byteOffset,o,r.componentType)},e.DecodeBufferToText=function(e){for(var n="",r=e.byteLength,t=0;t=this._maxPos},e}(),y=["MODEL","VIEW","PROJECTION","MODELVIEW","MODELVIEWPROJECTION","JOINTMATRIX"],A=["world","view","projection","worldView","worldViewProjection","mBones"],E=["translation","rotation","scale"],_=["position","rotationQuaternion","scaling"],O=function(e,n,r){for(var t in e){var o=e[t];r[n][t]=o}},g=function(e){if(e)for(var n=0;n0&&(f=S(i,o))&&-1===a.indexOf(f)&&a.push(f),new p.Bone(u.jointName||"",t,f,y).id=o}}else p.Tools.Warn("Joint named "+n.jointNames[s]+" does not exist")}}var A=t.bones;t.bones=[];for(s=0;s1?(i=new p.MultiMaterial("multimat"+t,e.scene)).subMaterials=a:i=new p.StandardMaterial("multimat"+t,e.scene),1===a.length&&(i=a[0]),o.material||(o.material=i),new p.Geometry(t,e.scene,s,!1,o),o.computeWorldMatrix(!0),e.scene._blockEntityCollection=!1,o.subMeshes=[];var R=0;for(d=0;d0&&-1===e.importMeshesNames.indexOf(n.name||""))return null;if(n.skin){if(n.meshes){var i=e.skins[n.skin];(a=R(e,n,n.meshes,r,n.babylonNode)).skeleton=e.scene.getLastSkeletonByID(n.skin),null===a.skeleton&&(a.skeleton=x(e,i,0,i.babylonSkeleton,n.skin),i.babylonSkeleton||(i.babylonSkeleton=a.skeleton)),o=a}}else if(n.meshes){var a;o=a=R(e,n,n.mesh?[n.mesh]:n.meshes,r,n.babylonNode)}else if(!n.light||n.babylonNode||e.importOnlyMeshes){if(n.camera&&!n.babylonNode&&!e.importOnlyMeshes){var s=e.cameras[n.camera];if(s){if(e.scene._blockEntityCollection=e.forAssetContainer,"orthographic"===s.type){var u=new p.FreeCamera(n.camera,p.Vector3.Zero(),e.scene,!1);u.name=n.name||"",u.mode=p.Camera.ORTHOGRAPHIC_CAMERA,u.attachControl(e.scene.getEngine().getInputElement()),o=u}else if("perspective"===s.type){var l=s[s.type],c=new p.FreeCamera(n.camera,p.Vector3.Zero(),e.scene,!1);c.name=n.name||"",c.attachControl(e.scene.getEngine().getInputElement()),l.aspectRatio||(l.aspectRatio=e.scene.getEngine().getRenderWidth()/e.scene.getEngine().getRenderHeight()),l.znear&&l.zfar&&(c.maxZ=l.zfar,c.minZ=l.znear),o=c}e.scene._blockEntityCollection=!1}}}else{var f=e.lights[n.light];if(f)if("ambient"===f.type){var d=f[f.type],m=new p.HemisphericLight(n.light,p.Vector3.Zero(),e.scene);m.name=n.name||"",d.color&&(m.diffuse=p.Color3.FromArray(d.color)),o=m}else if("directional"===f.type){var h=f[f.type],v=new p.DirectionalLight(n.light,p.Vector3.Zero(),e.scene);v.name=n.name||"",h.color&&(v.diffuse=p.Color3.FromArray(h.color)),o=v}else if("point"===f.type){var b=f[f.type],y=new p.PointLight(n.light,p.Vector3.Zero(),e.scene);y.name=n.name||"",b.color&&(y.diffuse=p.Color3.FromArray(b.color)),o=y}else if("spot"===f.type){var A=f[f.type],E=new p.SpotLight(n.light,p.Vector3.Zero(),p.Vector3.Zero(),0,0,e.scene);E.name=n.name||"",A.color&&(E.diffuse=p.Color3.FromArray(A.color)),A.fallOfAngle&&(E.angle=A.fallOfAngle),A.fallOffExponent&&(E.exponent=A.fallOffExponent),o=E}}if(!n.jointName){if(n.babylonNode)return n.babylonNode;if(null===o){e.scene._blockEntityCollection=e.forAssetContainer;var _=new p.Mesh(n.name||"",e.scene);e.scene._blockEntityCollection=!1,n.babylonNode=_,o=_}}if(null!==o){if(n.matrix&&o instanceof p.Mesh)!function(e,n,r){if(n.matrix){var t=new p.Vector3(0,0,0),o=new p.Quaternion,i=new p.Vector3(0,0,0);p.Matrix.FromArray(n.matrix).decompose(i,o,t),P(e,t,o,i)}else n.translation&&n.rotation&&n.scale&&P(e,p.Vector3.FromArray(n.translation),p.Quaternion.FromArray(n.rotation),p.Vector3.FromArray(n.scale));e.computeWorldMatrix(!0)}(o,n);else{var O=n.translation||[0,0,0],g=n.rotation||[0,0,0,1],L=n.scale||[1,1,1];P(o,p.Vector3.FromArray(O),p.Quaternion.FromArray(g),p.Vector3.FromArray(L))}o.updateCache(!0),n.babylonNode=o}return o},I=function(e,n,r,t){void 0===t&&(t=!1);var o=e.nodes[n],i=null;if(t=!(e.importOnlyMeshes&&!t&&e.importMeshesNames)||(-1!==e.importMeshesNames.indexOf(o.name||"")||0===e.importMeshesNames.length),!o.jointName&&t&&null!==(i=w(e,o,n))&&(i.id=n,i.parent=r),o.children)for(var a=0;a