@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/module.js CHANGED
@@ -1,4 +1,4 @@
1
- import { resourceLoader, AssetType, AssetPromise, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, Loader, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, request, ContentRestorer, IndexFormat, VertexElementFormat, Utils, AnimationClip, InterpolationType, AnimationFloatArrayCurve, Keyframe, AnimationQuaternionCurve, AnimationVector3Curve, SkinnedMeshRenderer, Transform, Entity, PBRMaterial, Logger, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, BlendShape, ModelMesh, Camera, MeshRenderer, Animator, BlinnPhongMaterial, Skin, TextureWrapMode as TextureWrapMode$1, Texture2D, EngineObject, TextureFormat, PBRBaseMaterial, Shader, UnlitMaterial, DirectLight, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationEvent, AnimationColorCurve, AnimationVector4Curve, AnimationVector2Curve, AnimationArrayCurve, AnimationFloatCurve, Scene, SpriteAtlas, Sprite, BackgroundMode, SkyBoxMaterial, PrimitiveMesh } from '@galacean/engine-core';
1
+ import { resourceLoader, AssetType, AssetPromise, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, Loader, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, request, ContentRestorer, IndexFormat, VertexElementFormat, Utils, AnimationClip, InterpolationType, AnimationFloatArrayCurve, Keyframe, AnimationQuaternionCurve, AnimationVector3Curve, SkinnedMeshRenderer, Transform, Entity, PBRMaterial, Logger, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, BlendShape, ModelMesh, Camera, Animator, BlinnPhongMaterial, MeshRenderer, Skin, TextureWrapMode as TextureWrapMode$1, Texture2D, ReferResource, TextureFormat, Material, Shader, DirectLight, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationEvent, AnimationColorCurve, AnimationVector4Curve, AnimationVector2Curve, AnimationArrayCurve, AnimationFloatCurve, Scene, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
2
2
  import { SphericalHarmonics3, Vector2, Vector3, Vector4, Color, Quaternion, Matrix, Rect } from '@galacean/engine-math';
3
3
  import { GLCompressedTextureInternalFormat } from '@galacean/engine-rhi-webgl';
4
4
  import { DRACODecoder } from '@galacean/engine-draco';
@@ -1623,6 +1623,10 @@ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser) {
1623
1623
  }
1624
1624
  glTFResource.sceneRoots = sceneRoots;
1625
1625
  glTFResource.defaultSceneRoot = sceneRoots[sceneID];
1626
+ // @ts-ignore
1627
+ glTFResource.defaultSceneRoot._hookResource = glTFResource;
1628
+ // @ts-ignore
1629
+ glTFResource._addReferCount(1);
1626
1630
  };
1627
1631
  return GLTFEntityParser;
1628
1632
  }(GLTFParser);
@@ -1819,21 +1823,31 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1819
1823
  var vertexCount;
1820
1824
  var bufferBindIndex = 0;
1821
1825
  var positions;
1822
- keepMeshData && (positions = new Array(vertexCount));
1826
+ var boneIndices;
1827
+ var boneWeights;
1828
+ if (keepMeshData) {
1829
+ positions = new Array(vertexCount);
1830
+ boneIndices = new Array(vertexCount);
1831
+ boneWeights = new Array(vertexCount);
1832
+ }
1823
1833
  for(var attribute in attributes){
1824
1834
  var accessor = accessors[attributes[attribute]];
1825
1835
  var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1826
1836
  var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1827
- var attributeCount = accessor.count;
1837
+ var accessorCount = accessor.count;
1828
1838
  var vertices = accessorBuffer.data;
1829
1839
  var vertexElement = void 0;
1830
1840
  var meshId = mesh.instanceId;
1831
1841
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1832
- var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, accessor.normalized);
1842
+ var elementNormalized = accessor.normalized;
1843
+ var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1844
+ var scaleFactor = void 0;
1845
+ elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
1846
+ var elementOffset = void 0;
1833
1847
  if (accessorBuffer.interleaved) {
1834
1848
  var byteOffset = accessor.byteOffset || 0;
1835
1849
  var stride = accessorBuffer.stride;
1836
- var elementOffset = byteOffset % stride;
1850
+ elementOffset = byteOffset % stride;
1837
1851
  if (vertexBindingInfos[meshId] === undefined) {
1838
1852
  vertexElement = new VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1839
1853
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1849,7 +1863,8 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1849
1863
  vertexElement = new VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1850
1864
  }
1851
1865
  } else {
1852
- vertexElement = new VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1866
+ elementOffset = 0;
1867
+ vertexElement = new VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1853
1868
  var vertexBuffer1 = new Buffer(engine, BufferBindFlag.VertexBuffer, vertices.byteLength, BufferUsage.Static);
1854
1869
  vertexBuffer1.setData(vertices);
1855
1870
  meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
@@ -1858,35 +1873,61 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1858
1873
  }
1859
1874
  vertexElements.push(vertexElement);
1860
1875
  if (attribute === "POSITION") {
1861
- vertexCount = attributeCount;
1876
+ vertexCount = accessorCount;
1862
1877
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1863
1878
  if (accessor.min && accessor.max) {
1864
1879
  min.copyFromArray(accessor.min);
1865
1880
  max.copyFromArray(accessor.max);
1866
1881
  if (keepMeshData) {
1867
- var stride1 = vertices.length / attributeCount;
1868
- for(var j = 0; j < attributeCount; j++){
1869
- var offset = j * stride1;
1870
- positions[j] = new Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1882
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1883
+ var stride1 = vertices.length / accessorCount;
1884
+ for(var j = 0; j < accessorCount; j++){
1885
+ var offset = baseOffset + j * stride1;
1886
+ var position = new Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1887
+ elementNormalized && position.scale(scaleFactor);
1888
+ positions[j] = position;
1871
1889
  }
1872
1890
  }
1873
1891
  } else {
1874
- var position = GLTFMeshParser._tempVector3;
1892
+ var position1 = GLTFMeshParser._tempVector3;
1875
1893
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1876
1894
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1877
- var stride2 = vertices.length / attributeCount;
1878
- for(var j1 = 0; j1 < attributeCount; j1++){
1879
- var offset1 = j1 * stride2;
1880
- position.copyFromArray(vertices, offset1);
1881
- Vector3.min(min, position, min);
1882
- Vector3.max(max, position, max);
1895
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1896
+ var stride2 = vertices.length / accessorCount;
1897
+ for(var j1 = 0; j1 < accessorCount; j1++){
1898
+ var offset1 = baseOffset1 + j1 * stride2;
1899
+ position1.copyFromArray(vertices, offset1);
1900
+ Vector3.min(min, position1, min);
1901
+ Vector3.max(max, position1, max);
1902
+ if (keepMeshData) {
1903
+ var clonePosition = position1.clone();
1904
+ elementNormalized && clonePosition.scale(scaleFactor);
1905
+ positions[j1] = clonePosition;
1906
+ }
1883
1907
  }
1884
1908
  }
1885
- if (accessor.normalized) {
1886
- var scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType);
1909
+ if (elementNormalized) {
1887
1910
  min.scale(scaleFactor);
1888
1911
  max.scale(scaleFactor);
1889
1912
  }
1913
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1914
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1915
+ var stride3 = vertices.length / accessorCount;
1916
+ for(var j2 = 0; j2 < accessorCount; j2++){
1917
+ var offset2 = baseOffset2 + j2 * stride3;
1918
+ var boneIndex = new Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1919
+ elementNormalized && boneIndex.scale(scaleFactor);
1920
+ boneIndices[j2] = boneIndex;
1921
+ }
1922
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1923
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1924
+ var stride4 = vertices.length / accessorCount;
1925
+ for(var j3 = 0; j3 < accessorCount; j3++){
1926
+ var offset3 = baseOffset3 + j3 * stride4;
1927
+ var boneWeight = new Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1928
+ elementNormalized && boneWeight.scale(scaleFactor);
1929
+ boneWeights[j3] = boneWeight;
1930
+ }
1890
1931
  }
1891
1932
  }
1892
1933
  mesh.setVertexElements(vertexElements);
@@ -1905,6 +1946,10 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1905
1946
  mesh.uploadData(!keepMeshData);
1906
1947
  //@ts-ignore
1907
1948
  mesh._positions = positions;
1949
+ //@ts-ignore
1950
+ mesh._boneIndices = boneIndices;
1951
+ //@ts-ignore
1952
+ mesh._boneWeights = boneWeights;
1908
1953
  return Promise.resolve(mesh);
1909
1954
  };
1910
1955
  /**
@@ -1995,14 +2040,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
1995
2040
  camera.enabled = false;
1996
2041
  };
1997
2042
  _proto._createRenderer = function _createRenderer(context, glTFNode, entity) {
1998
- var glTFResource = context.glTFResource, glTF = context.glTF;
1999
- var glTFMeshes = glTF.meshes;
2000
- var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2001
- var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2002
- var glTFMesh = glTFMeshes[meshID];
2003
- var glTFMeshPrimitives = glTFMesh.primitives;
2004
- var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2005
- for(var i = 0; i < glTFMeshPrimitives.length; i++){
2043
+ var _loop = function(i) {
2006
2044
  var gltfPrimitive = glTFMeshPrimitives[i];
2007
2045
  var mesh = meshes[meshID][i];
2008
2046
  var renderer = void 0;
@@ -2024,8 +2062,22 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2024
2062
  var materialIndex = gltfPrimitive.material;
2025
2063
  var material = (materials == null ? void 0 : materials[materialIndex]) || GLTFSceneParser._getDefaultMaterial(engine);
2026
2064
  renderer.setMaterial(material);
2065
+ // Enable vertex color if mesh has COLOR_0 vertex element
2066
+ mesh.vertexElements.forEach(function(element) {
2067
+ if (element.semantic === "COLOR_0") {
2068
+ renderer.enableVertexColor = true;
2069
+ }
2070
+ });
2027
2071
  GLTFParser.executeExtensionsAdditiveAndParse(gltfPrimitive.extensions, context, renderer, gltfPrimitive);
2028
- }
2072
+ };
2073
+ var glTFResource = context.glTFResource, glTF = context.glTF;
2074
+ var glTFMeshes = glTF.meshes;
2075
+ var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2076
+ var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2077
+ var glTFMesh = glTFMeshes[meshID];
2078
+ var glTFMeshPrimitives = glTFMesh.primitives;
2079
+ var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2080
+ for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
2029
2081
  };
2030
2082
  _proto._createAnimator = function _createAnimator(context) {
2031
2083
  if (!context.hasSkinned && !context.glTFResource.animations) {
@@ -2314,31 +2366,16 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2314
2366
 
2315
2367
  /**
2316
2368
  * Product after glTF parser, usually, `defaultSceneRoot` is only needed to use.
2317
- */ var GLTFResource = /*#__PURE__*/ function(EngineObject) {
2318
- _inherits(GLTFResource, EngineObject);
2369
+ */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
2370
+ _inherits(GLTFResource, ReferResource);
2319
2371
  function GLTFResource(engine, url) {
2320
2372
  var _this;
2321
- _this = EngineObject.call(this, engine) || this;
2373
+ _this = ReferResource.call(this, engine) || this;
2322
2374
  _this.url = url;
2323
2375
  return _this;
2324
2376
  }
2325
- var _proto = GLTFResource.prototype;
2326
- _proto._onDestroy = function _onDestroy() {
2327
- EngineObject.prototype._onDestroy.call(this);
2328
- this.defaultSceneRoot.destroy();
2329
- this.textures = null;
2330
- this.materials = null;
2331
- this.meshes = null;
2332
- this.skins = null;
2333
- this.animations = null;
2334
- this.entities = null;
2335
- this.cameras = null;
2336
- this.lights = null;
2337
- this.sceneRoots = null;
2338
- this.extensionsData = null;
2339
- };
2340
2377
  return GLTFResource;
2341
- }(EngineObject);
2378
+ }(ReferResource);
2342
2379
 
2343
2380
  var GLTFLoader = /*#__PURE__*/ function(Loader) {
2344
2381
  _inherits(GLTFLoader, Loader);
@@ -2971,6 +3008,15 @@ KTXLoader = __decorate([
2971
3008
  ])
2972
3009
  ], KTXLoader);
2973
3010
 
3011
+ function parseProperty(object, key, value) {
3012
+ if (typeof value === "object") {
3013
+ for(var subKey in value){
3014
+ parseProperty(object[key], subKey, value[subKey]);
3015
+ }
3016
+ } else {
3017
+ object[key] = value;
3018
+ }
3019
+ }
2974
3020
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
2975
3021
  _inherits(MaterialLoader, Loader);
2976
3022
  function MaterialLoader() {
@@ -2982,7 +3028,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
2982
3028
  return new AssetPromise(function(resolve, reject) {
2983
3029
  _this.request(item.url, _extends({}, item, {
2984
3030
  type: "json"
2985
- })).then(function(json) {
3031
+ })).then(function(materialSchema) {
2986
3032
  var _loop = function(key) {
2987
3033
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
2988
3034
  switch(type){
@@ -3010,27 +3056,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3010
3056
  }
3011
3057
  };
3012
3058
  var engine = resourceManager.engine;
3013
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3014
- var material;
3015
- switch(shader){
3016
- case "pbr":
3017
- material = new PBRMaterial(engine);
3018
- break;
3019
- case "pbr-specular":
3020
- material = new PBRSpecularMaterial(engine);
3021
- break;
3022
- case "unlit":
3023
- material = new UnlitMaterial(engine);
3024
- break;
3025
- case "blinn-phong":
3026
- material = new BlinnPhongMaterial(engine);
3027
- break;
3028
- case "bake-pbr":
3029
- // @todo refactor custom shader later
3030
- // @ts-ignore
3031
- material = new PBRBaseMaterial(engine, Shader.find("bake-pbr"));
3032
- break;
3033
- }
3059
+ var name = materialSchema.name, shader = materialSchema.shader, shaderData = materialSchema.shaderData, macros = materialSchema.macros, renderState = materialSchema.renderState;
3060
+ var material = new Material(engine, Shader.find(shader));
3034
3061
  material.name = name;
3035
3062
  var texturePromises = new Array();
3036
3063
  var materialShaderData = material.shaderData;
@@ -3043,9 +3070,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3043
3070
  materialShaderData.enableMacro(name1, value);
3044
3071
  }
3045
3072
  }
3046
- for(var key1 in renderState){
3047
- material[key1] = renderState[key1];
3048
- }
3073
+ parseProperty(material, "renderState", renderState);
3049
3074
  return Promise.all(texturePromises).then(function() {
3050
3075
  resolve(material);
3051
3076
  });
@@ -3800,6 +3825,12 @@ AnimationClipDecoder = __decorate([
3800
3825
  decoder("AnimationClip")
3801
3826
  ], AnimationClipDecoder);
3802
3827
 
3828
+ var SpecularMode;
3829
+ (function(SpecularMode) {
3830
+ SpecularMode["Sky"] = "Sky";
3831
+ SpecularMode["Custom"] = "Custom";
3832
+ })(SpecularMode || (SpecularMode = {}));
3833
+
3803
3834
  var SceneParserContext = /*#__PURE__*/ function() {
3804
3835
  function SceneParserContext(originalData, scene) {
3805
3836
  this.originalData = originalData;
@@ -4082,7 +4113,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader) {
4082
4113
  var atlasItem = atlasItems[i];
4083
4114
  if (atlasItem.img) {
4084
4115
  chainPromises.push(resourceManager.load({
4085
- url: atlasItem.img,
4116
+ url: Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
4086
4117
  type: AssetType.Texture2D,
4087
4118
  params: {
4088
4119
  format: format,
@@ -4358,47 +4389,63 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4358
4389
  // @ts-ignore
4359
4390
  engine.resourceManager.initVirtualResources(data.files);
4360
4391
  return SceneParser.parse(engine, data).then(function(scene) {
4392
+ var promises = [];
4361
4393
  // parse ambient light
4362
4394
  var ambient = data.scene.ambient;
4363
- var ambientLightPromise = Promise.resolve();
4364
- if (ambient.ambientLight) {
4365
- ambientLightPromise = resourceManager// @ts-ignore
4366
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4367
- scene.ambientLight = light;
4395
+ var useCustomAmbient = ambient.specularMode === "Custom";
4396
+ if (useCustomAmbient && ambient.customAmbientLight) {
4397
+ // @ts-ignore
4398
+ // prettier-ignore
4399
+ var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
4400
+ scene.ambientLight = ambientLight;
4368
4401
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4369
4402
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4403
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4404
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4370
4405
  });
4371
- } else {
4372
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4373
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
4374
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4406
+ promises.push(customAmbientPromise);
4407
+ } else if (!useCustomAmbient && ambient.ambientLight) {
4408
+ // @ts-ignore
4409
+ // prettier-ignore
4410
+ var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
4411
+ scene.ambientLight = ambientLight;
4412
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4413
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4414
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4415
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4416
+ });
4417
+ promises.push(ambientLightPromise);
4375
4418
  }
4376
4419
  var background = data.scene.background;
4377
4420
  scene.background.mode = background.mode;
4378
- var backgroundPromise = Promise.resolve();
4379
4421
  switch(scene.background.mode){
4380
4422
  case BackgroundMode.SolidColor:
4381
4423
  scene.background.solidColor.copyFrom(background.color);
4382
4424
  break;
4383
4425
  case BackgroundMode.Sky:
4384
- if (background.sky) {
4426
+ if (background.skyMesh && background.skyMaterial) {
4385
4427
  // @ts-ignore
4386
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4387
- var sky = scene.background.sky;
4388
- var skyMaterial = new SkyBoxMaterial(engine);
4389
- skyMaterial.texture = light.specularTexture;
4390
- skyMaterial.textureDecodeRGBM = true;
4391
- sky.material = skyMaterial;
4392
- sky.mesh = PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4428
+ var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
4429
+ scene.background.sky.mesh = mesh;
4393
4430
  });
4431
+ // @ts-ignore
4432
+ // prettier-ignore
4433
+ var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
4434
+ scene.background.sky.material = material;
4435
+ });
4436
+ promises.push(skyMeshPromise, skyMaterialPromise);
4437
+ } else {
4438
+ Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4394
4439
  }
4395
4440
  break;
4396
4441
  case BackgroundMode.Texture:
4397
4442
  if (background.texture) {
4398
4443
  // @ts-ignore
4399
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4444
+ // prettier-ignore
4445
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4400
4446
  scene.background.texture = texture;
4401
4447
  });
4448
+ promises.push(backgroundPromise);
4402
4449
  }
4403
4450
  break;
4404
4451
  }
@@ -4410,10 +4457,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4410
4457
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4411
4458
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4412
4459
  }
4413
- return Promise.all([
4414
- ambientLightPromise,
4415
- backgroundPromise
4416
- ]).then(function() {
4460
+ return Promise.all(promises).then(function() {
4417
4461
  resolve(scene);
4418
4462
  });
4419
4463
  });
@@ -4673,6 +4717,22 @@ KHR_materials_clearcoat = __decorate([
4673
4717
  registerGLTFExtension("KHR_materials_clearcoat", GLTFExtensionMode.AdditiveParse)
4674
4718
  ], KHR_materials_clearcoat);
4675
4719
 
4720
+ var KHR_materials_ior = /*#__PURE__*/ function(GLTFExtensionParser) {
4721
+ _inherits(KHR_materials_ior, GLTFExtensionParser);
4722
+ function KHR_materials_ior() {
4723
+ return GLTFExtensionParser.apply(this, arguments);
4724
+ }
4725
+ var _proto = KHR_materials_ior.prototype;
4726
+ _proto.additiveParse = function additiveParse(context, material, schema) {
4727
+ var _schema_ior = schema.ior, ior = _schema_ior === void 0 ? 1.5 : _schema_ior;
4728
+ material.ior = ior;
4729
+ };
4730
+ return KHR_materials_ior;
4731
+ }(GLTFExtensionParser);
4732
+ KHR_materials_ior = __decorate([
4733
+ registerGLTFExtension("KHR_materials_ior", GLTFExtensionMode.AdditiveParse)
4734
+ ], KHR_materials_ior);
4735
+
4676
4736
  var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(GLTFExtensionParser) {
4677
4737
  _inherits(KHR_materials_pbrSpecularGlossiness, GLTFExtensionParser);
4678
4738
  function KHR_materials_pbrSpecularGlossiness() {
@@ -4809,5 +4869,5 @@ GALACEAN_animation_event = __decorate([
4809
4869
  registerGLTFExtension("GALACEAN_animation_event", GLTFExtensionMode.AdditiveParse)
4810
4870
  ], GALACEAN_animation_event);
4811
4871
 
4812
- export { AnimationClipDecoder, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFPipeline, GLTFResource, GLTFSceneParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension };
4872
+ export { AnimationClipDecoder, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFPipeline, GLTFResource, GLTFSceneParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension };
4813
4873
  //# sourceMappingURL=module.js.map