@galacean/engine-loader 1.0.0-beta.1 → 1.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/main.js +156 -96
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +156 -96
  4. package/dist/module.js +158 -98
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFContentRestorer.d.ts +1 -1
  8. package/types/gltf/GLTFResource.d.ts +2 -3
  9. package/types/gltf/GLTFUtil.d.ts +4 -4
  10. package/types/gltf/GLTFUtils.d.ts +1 -1
  11. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +1 -1
  12. package/types/gltf/extensions/KHR_materials_ior.d.ts +1 -0
  13. package/types/gltf/extensions/index.d.ts +1 -0
  14. package/types/gltf/parser/GLTFMeshParser.d.ts +1 -1
  15. package/types/gltf/parser/GLTFParser.d.ts +1 -1
  16. package/types/gltf/parser/GLTFParserContext.d.ts +1 -1
  17. package/types/resource-deserialize/index.d.ts +3 -3
  18. package/types/resource-deserialize/resources/mesh/MeshDecoder.d.ts +1 -1
  19. package/types/resource-deserialize/resources/parser/PrefabParser.d.ts +5 -0
  20. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +14 -0
  21. package/types/resource-deserialize/resources/prefab/PrefabDesign.d.ts +4 -4
  22. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -1
  23. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +1 -1
  24. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +61 -0
  25. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +91 -0
  26. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +41 -0
  27. package/types/resource-deserialize/resources/schema/index.d.ts +3 -0
package/dist/main.js CHANGED
@@ -1627,6 +1627,10 @@ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser) {
1627
1627
  }
1628
1628
  glTFResource.sceneRoots = sceneRoots;
1629
1629
  glTFResource.defaultSceneRoot = sceneRoots[sceneID];
1630
+ // @ts-ignore
1631
+ glTFResource.defaultSceneRoot._hookResource = glTFResource;
1632
+ // @ts-ignore
1633
+ glTFResource._addReferCount(1);
1630
1634
  };
1631
1635
  return GLTFEntityParser;
1632
1636
  }(GLTFParser);
@@ -1823,21 +1827,31 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1823
1827
  var vertexCount;
1824
1828
  var bufferBindIndex = 0;
1825
1829
  var positions;
1826
- keepMeshData && (positions = new Array(vertexCount));
1830
+ var boneIndices;
1831
+ var boneWeights;
1832
+ if (keepMeshData) {
1833
+ positions = new Array(vertexCount);
1834
+ boneIndices = new Array(vertexCount);
1835
+ boneWeights = new Array(vertexCount);
1836
+ }
1827
1837
  for(var attribute in attributes){
1828
1838
  var accessor = accessors[attributes[attribute]];
1829
1839
  var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1830
1840
  var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1831
- var attributeCount = accessor.count;
1841
+ var accessorCount = accessor.count;
1832
1842
  var vertices = accessorBuffer.data;
1833
1843
  var vertexElement = void 0;
1834
1844
  var meshId = mesh.instanceId;
1835
1845
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1836
- var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, accessor.normalized);
1846
+ var elementNormalized = accessor.normalized;
1847
+ var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1848
+ var scaleFactor = void 0;
1849
+ elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
1850
+ var elementOffset = void 0;
1837
1851
  if (accessorBuffer.interleaved) {
1838
1852
  var byteOffset = accessor.byteOffset || 0;
1839
1853
  var stride = accessorBuffer.stride;
1840
- var elementOffset = byteOffset % stride;
1854
+ elementOffset = byteOffset % stride;
1841
1855
  if (vertexBindingInfos[meshId] === undefined) {
1842
1856
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1843
1857
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1853,7 +1867,8 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1853
1867
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1854
1868
  }
1855
1869
  } else {
1856
- vertexElement = new engineCore.VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1870
+ elementOffset = 0;
1871
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1857
1872
  var vertexBuffer1 = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1858
1873
  vertexBuffer1.setData(vertices);
1859
1874
  meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
@@ -1862,35 +1877,61 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1862
1877
  }
1863
1878
  vertexElements.push(vertexElement);
1864
1879
  if (attribute === "POSITION") {
1865
- vertexCount = attributeCount;
1880
+ vertexCount = accessorCount;
1866
1881
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1867
1882
  if (accessor.min && accessor.max) {
1868
1883
  min.copyFromArray(accessor.min);
1869
1884
  max.copyFromArray(accessor.max);
1870
1885
  if (keepMeshData) {
1871
- var stride1 = vertices.length / attributeCount;
1872
- for(var j = 0; j < attributeCount; j++){
1873
- var offset = j * stride1;
1874
- positions[j] = new engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1886
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1887
+ var stride1 = vertices.length / accessorCount;
1888
+ for(var j = 0; j < accessorCount; j++){
1889
+ var offset = baseOffset + j * stride1;
1890
+ var position = new engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1891
+ elementNormalized && position.scale(scaleFactor);
1892
+ positions[j] = position;
1875
1893
  }
1876
1894
  }
1877
1895
  } else {
1878
- var position = GLTFMeshParser._tempVector3;
1896
+ var position1 = GLTFMeshParser._tempVector3;
1879
1897
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1880
1898
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1881
- var stride2 = vertices.length / attributeCount;
1882
- for(var j1 = 0; j1 < attributeCount; j1++){
1883
- var offset1 = j1 * stride2;
1884
- position.copyFromArray(vertices, offset1);
1885
- engineMath.Vector3.min(min, position, min);
1886
- engineMath.Vector3.max(max, position, max);
1899
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1900
+ var stride2 = vertices.length / accessorCount;
1901
+ for(var j1 = 0; j1 < accessorCount; j1++){
1902
+ var offset1 = baseOffset1 + j1 * stride2;
1903
+ position1.copyFromArray(vertices, offset1);
1904
+ engineMath.Vector3.min(min, position1, min);
1905
+ engineMath.Vector3.max(max, position1, max);
1906
+ if (keepMeshData) {
1907
+ var clonePosition = position1.clone();
1908
+ elementNormalized && clonePosition.scale(scaleFactor);
1909
+ positions[j1] = clonePosition;
1910
+ }
1887
1911
  }
1888
1912
  }
1889
- if (accessor.normalized) {
1890
- var scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType);
1913
+ if (elementNormalized) {
1891
1914
  min.scale(scaleFactor);
1892
1915
  max.scale(scaleFactor);
1893
1916
  }
1917
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1918
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1919
+ var stride3 = vertices.length / accessorCount;
1920
+ for(var j2 = 0; j2 < accessorCount; j2++){
1921
+ var offset2 = baseOffset2 + j2 * stride3;
1922
+ var boneIndex = new engineMath.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1923
+ elementNormalized && boneIndex.scale(scaleFactor);
1924
+ boneIndices[j2] = boneIndex;
1925
+ }
1926
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1927
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1928
+ var stride4 = vertices.length / accessorCount;
1929
+ for(var j3 = 0; j3 < accessorCount; j3++){
1930
+ var offset3 = baseOffset3 + j3 * stride4;
1931
+ var boneWeight = new engineMath.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1932
+ elementNormalized && boneWeight.scale(scaleFactor);
1933
+ boneWeights[j3] = boneWeight;
1934
+ }
1894
1935
  }
1895
1936
  }
1896
1937
  mesh.setVertexElements(vertexElements);
@@ -1909,6 +1950,10 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1909
1950
  mesh.uploadData(!keepMeshData);
1910
1951
  //@ts-ignore
1911
1952
  mesh._positions = positions;
1953
+ //@ts-ignore
1954
+ mesh._boneIndices = boneIndices;
1955
+ //@ts-ignore
1956
+ mesh._boneWeights = boneWeights;
1912
1957
  return Promise.resolve(mesh);
1913
1958
  };
1914
1959
  /**
@@ -1999,14 +2044,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
1999
2044
  camera.enabled = false;
2000
2045
  };
2001
2046
  _proto._createRenderer = function _createRenderer(context, glTFNode, entity) {
2002
- var glTFResource = context.glTFResource, glTF = context.glTF;
2003
- var glTFMeshes = glTF.meshes;
2004
- var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2005
- var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2006
- var glTFMesh = glTFMeshes[meshID];
2007
- var glTFMeshPrimitives = glTFMesh.primitives;
2008
- var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2009
- for(var i = 0; i < glTFMeshPrimitives.length; i++){
2047
+ var _loop = function(i) {
2010
2048
  var gltfPrimitive = glTFMeshPrimitives[i];
2011
2049
  var mesh = meshes[meshID][i];
2012
2050
  var renderer = void 0;
@@ -2028,8 +2066,22 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2028
2066
  var materialIndex = gltfPrimitive.material;
2029
2067
  var material = (materials == null ? void 0 : materials[materialIndex]) || GLTFSceneParser._getDefaultMaterial(engine);
2030
2068
  renderer.setMaterial(material);
2069
+ // Enable vertex color if mesh has COLOR_0 vertex element
2070
+ mesh.vertexElements.forEach(function(element) {
2071
+ if (element.semantic === "COLOR_0") {
2072
+ renderer.enableVertexColor = true;
2073
+ }
2074
+ });
2031
2075
  GLTFParser.executeExtensionsAdditiveAndParse(gltfPrimitive.extensions, context, renderer, gltfPrimitive);
2032
- }
2076
+ };
2077
+ var glTFResource = context.glTFResource, glTF = context.glTF;
2078
+ var glTFMeshes = glTF.meshes;
2079
+ var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2080
+ var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2081
+ var glTFMesh = glTFMeshes[meshID];
2082
+ var glTFMeshPrimitives = glTFMesh.primitives;
2083
+ var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2084
+ for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
2033
2085
  };
2034
2086
  _proto._createAnimator = function _createAnimator(context) {
2035
2087
  if (!context.hasSkinned && !context.glTFResource.animations) {
@@ -2318,31 +2370,16 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2318
2370
 
2319
2371
  /**
2320
2372
  * Product after glTF parser, usually, `defaultSceneRoot` is only needed to use.
2321
- */ var GLTFResource = /*#__PURE__*/ function(EngineObject) {
2322
- _inherits(GLTFResource, EngineObject);
2373
+ */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
2374
+ _inherits(GLTFResource, ReferResource);
2323
2375
  function GLTFResource(engine, url) {
2324
2376
  var _this;
2325
- _this = EngineObject.call(this, engine) || this;
2377
+ _this = ReferResource.call(this, engine) || this;
2326
2378
  _this.url = url;
2327
2379
  return _this;
2328
2380
  }
2329
- var _proto = GLTFResource.prototype;
2330
- _proto._onDestroy = function _onDestroy() {
2331
- EngineObject.prototype._onDestroy.call(this);
2332
- this.defaultSceneRoot.destroy();
2333
- this.textures = null;
2334
- this.materials = null;
2335
- this.meshes = null;
2336
- this.skins = null;
2337
- this.animations = null;
2338
- this.entities = null;
2339
- this.cameras = null;
2340
- this.lights = null;
2341
- this.sceneRoots = null;
2342
- this.extensionsData = null;
2343
- };
2344
2381
  return GLTFResource;
2345
- }(engineCore.EngineObject);
2382
+ }(engineCore.ReferResource);
2346
2383
 
2347
2384
  var GLTFLoader = /*#__PURE__*/ function(Loader) {
2348
2385
  _inherits(GLTFLoader, Loader);
@@ -2975,6 +3012,15 @@ KTXLoader = __decorate([
2975
3012
  ])
2976
3013
  ], KTXLoader);
2977
3014
 
3015
+ function parseProperty(object, key, value) {
3016
+ if (typeof value === "object") {
3017
+ for(var subKey in value){
3018
+ parseProperty(object[key], subKey, value[subKey]);
3019
+ }
3020
+ } else {
3021
+ object[key] = value;
3022
+ }
3023
+ }
2978
3024
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
2979
3025
  _inherits(MaterialLoader, Loader);
2980
3026
  function MaterialLoader() {
@@ -2986,7 +3032,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
2986
3032
  return new engineCore.AssetPromise(function(resolve, reject) {
2987
3033
  _this.request(item.url, _extends({}, item, {
2988
3034
  type: "json"
2989
- })).then(function(json) {
3035
+ })).then(function(materialSchema) {
2990
3036
  var _loop = function(key) {
2991
3037
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
2992
3038
  switch(type){
@@ -3014,27 +3060,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3014
3060
  }
3015
3061
  };
3016
3062
  var engine = resourceManager.engine;
3017
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3018
- var material;
3019
- switch(shader){
3020
- case "pbr":
3021
- material = new engineCore.PBRMaterial(engine);
3022
- break;
3023
- case "pbr-specular":
3024
- material = new engineCore.PBRSpecularMaterial(engine);
3025
- break;
3026
- case "unlit":
3027
- material = new engineCore.UnlitMaterial(engine);
3028
- break;
3029
- case "blinn-phong":
3030
- material = new engineCore.BlinnPhongMaterial(engine);
3031
- break;
3032
- case "bake-pbr":
3033
- // @todo refactor custom shader later
3034
- // @ts-ignore
3035
- material = new engineCore.PBRBaseMaterial(engine, engineCore.Shader.find("bake-pbr"));
3036
- break;
3037
- }
3063
+ var name = materialSchema.name, shader = materialSchema.shader, shaderData = materialSchema.shaderData, macros = materialSchema.macros, renderState = materialSchema.renderState;
3064
+ var material = new engineCore.Material(engine, engineCore.Shader.find(shader));
3038
3065
  material.name = name;
3039
3066
  var texturePromises = new Array();
3040
3067
  var materialShaderData = material.shaderData;
@@ -3047,9 +3074,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3047
3074
  materialShaderData.enableMacro(name1, value);
3048
3075
  }
3049
3076
  }
3050
- for(var key1 in renderState){
3051
- material[key1] = renderState[key1];
3052
- }
3077
+ parseProperty(material, "renderState", renderState);
3053
3078
  return Promise.all(texturePromises).then(function() {
3054
3079
  resolve(material);
3055
3080
  });
@@ -3804,6 +3829,12 @@ exports.AnimationClipDecoder = __decorate([
3804
3829
  decoder("AnimationClip")
3805
3830
  ], exports.AnimationClipDecoder);
3806
3831
 
3832
+ exports.SpecularMode = void 0;
3833
+ (function(SpecularMode) {
3834
+ SpecularMode["Sky"] = "Sky";
3835
+ SpecularMode["Custom"] = "Custom";
3836
+ })(exports.SpecularMode || (exports.SpecularMode = {}));
3837
+
3807
3838
  var SceneParserContext = /*#__PURE__*/ function() {
3808
3839
  function SceneParserContext(originalData, scene) {
3809
3840
  this.originalData = originalData;
@@ -4086,7 +4117,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader) {
4086
4117
  var atlasItem = atlasItems[i];
4087
4118
  if (atlasItem.img) {
4088
4119
  chainPromises.push(resourceManager.load({
4089
- url: atlasItem.img,
4120
+ url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
4090
4121
  type: engineCore.AssetType.Texture2D,
4091
4122
  params: {
4092
4123
  format: format,
@@ -4362,47 +4393,63 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4362
4393
  // @ts-ignore
4363
4394
  engine.resourceManager.initVirtualResources(data.files);
4364
4395
  return SceneParser.parse(engine, data).then(function(scene) {
4396
+ var promises = [];
4365
4397
  // parse ambient light
4366
4398
  var ambient = data.scene.ambient;
4367
- var ambientLightPromise = Promise.resolve();
4368
- if (ambient.ambientLight) {
4369
- ambientLightPromise = resourceManager// @ts-ignore
4370
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4371
- scene.ambientLight = light;
4399
+ var useCustomAmbient = ambient.specularMode === "Custom";
4400
+ if (useCustomAmbient && ambient.customAmbientLight) {
4401
+ // @ts-ignore
4402
+ // prettier-ignore
4403
+ var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
4404
+ scene.ambientLight = ambientLight;
4372
4405
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4373
4406
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4407
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4408
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4374
4409
  });
4375
- } else {
4376
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4377
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
4378
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4410
+ promises.push(customAmbientPromise);
4411
+ } else if (!useCustomAmbient && ambient.ambientLight) {
4412
+ // @ts-ignore
4413
+ // prettier-ignore
4414
+ var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
4415
+ scene.ambientLight = ambientLight;
4416
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4417
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4418
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4419
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4420
+ });
4421
+ promises.push(ambientLightPromise);
4379
4422
  }
4380
4423
  var background = data.scene.background;
4381
4424
  scene.background.mode = background.mode;
4382
- var backgroundPromise = Promise.resolve();
4383
4425
  switch(scene.background.mode){
4384
4426
  case engineCore.BackgroundMode.SolidColor:
4385
4427
  scene.background.solidColor.copyFrom(background.color);
4386
4428
  break;
4387
4429
  case engineCore.BackgroundMode.Sky:
4388
- if (background.sky) {
4430
+ if (background.skyMesh && background.skyMaterial) {
4389
4431
  // @ts-ignore
4390
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4391
- var sky = scene.background.sky;
4392
- var skyMaterial = new engineCore.SkyBoxMaterial(engine);
4393
- skyMaterial.texture = light.specularTexture;
4394
- skyMaterial.textureDecodeRGBM = true;
4395
- sky.material = skyMaterial;
4396
- sky.mesh = engineCore.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4432
+ var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
4433
+ scene.background.sky.mesh = mesh;
4397
4434
  });
4435
+ // @ts-ignore
4436
+ // prettier-ignore
4437
+ var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
4438
+ scene.background.sky.material = material;
4439
+ });
4440
+ promises.push(skyMeshPromise, skyMaterialPromise);
4441
+ } else {
4442
+ engineCore.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4398
4443
  }
4399
4444
  break;
4400
4445
  case engineCore.BackgroundMode.Texture:
4401
4446
  if (background.texture) {
4402
4447
  // @ts-ignore
4403
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4448
+ // prettier-ignore
4449
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4404
4450
  scene.background.texture = texture;
4405
4451
  });
4452
+ promises.push(backgroundPromise);
4406
4453
  }
4407
4454
  break;
4408
4455
  }
@@ -4414,10 +4461,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4414
4461
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4415
4462
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4416
4463
  }
4417
- return Promise.all([
4418
- ambientLightPromise,
4419
- backgroundPromise
4420
- ]).then(function() {
4464
+ return Promise.all(promises).then(function() {
4421
4465
  resolve(scene);
4422
4466
  });
4423
4467
  });
@@ -4677,6 +4721,22 @@ KHR_materials_clearcoat = __decorate([
4677
4721
  registerGLTFExtension("KHR_materials_clearcoat", exports.GLTFExtensionMode.AdditiveParse)
4678
4722
  ], KHR_materials_clearcoat);
4679
4723
 
4724
+ var KHR_materials_ior = /*#__PURE__*/ function(GLTFExtensionParser) {
4725
+ _inherits(KHR_materials_ior, GLTFExtensionParser);
4726
+ function KHR_materials_ior() {
4727
+ return GLTFExtensionParser.apply(this, arguments);
4728
+ }
4729
+ var _proto = KHR_materials_ior.prototype;
4730
+ _proto.additiveParse = function additiveParse(context, material, schema) {
4731
+ var _schema_ior = schema.ior, ior = _schema_ior === void 0 ? 1.5 : _schema_ior;
4732
+ material.ior = ior;
4733
+ };
4734
+ return KHR_materials_ior;
4735
+ }(GLTFExtensionParser);
4736
+ KHR_materials_ior = __decorate([
4737
+ registerGLTFExtension("KHR_materials_ior", exports.GLTFExtensionMode.AdditiveParse)
4738
+ ], KHR_materials_ior);
4739
+
4680
4740
  var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(GLTFExtensionParser) {
4681
4741
  _inherits(KHR_materials_pbrSpecularGlossiness, GLTFExtensionParser);
4682
4742
  function KHR_materials_pbrSpecularGlossiness() {