@galacean/engine-loader 1.0.0-beta.0 → 1.0.0-beta.10

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 (44) hide show
  1. package/dist/main.js +164 -123
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +164 -123
  4. package/dist/module.js +166 -125
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFContentRestorer.d.ts +1 -4
  8. package/types/GLTFLoader.d.ts +0 -3
  9. package/types/Texture2DContentRestorer.d.ts +0 -3
  10. package/types/TextureCubeContentRestorer.d.ts +0 -3
  11. package/types/gltf/GLTFParser.d.ts +9 -0
  12. package/types/gltf/GLTFResource.d.ts +1 -1
  13. package/types/gltf/GLTFUtil.d.ts +53 -0
  14. package/types/gltf/GLTFUtils.d.ts +1 -1
  15. package/types/gltf/Schema.d.ts +814 -0
  16. package/types/gltf/extensions/ExtensionParser.d.ts +8 -0
  17. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +1 -1
  18. package/types/gltf/extensions/KHR_materials_ior.d.ts +1 -0
  19. package/types/gltf/extensions/Schema.d.ts +142 -0
  20. package/types/gltf/extensions/index.d.ts +1 -0
  21. package/types/gltf/parser/AnimationParser.d.ts +7 -0
  22. package/types/gltf/parser/BufferParser.d.ts +7 -0
  23. package/types/gltf/parser/EntityParser.d.ts +9 -0
  24. package/types/gltf/parser/GLTFMeshParser.d.ts +1 -1
  25. package/types/gltf/parser/GLTFParser.d.ts +1 -1
  26. package/types/gltf/parser/GLTFParserContext.d.ts +1 -1
  27. package/types/gltf/parser/MaterialParser.d.ts +8 -0
  28. package/types/gltf/parser/MeshParser.d.ts +13 -0
  29. package/types/gltf/parser/Parser.d.ts +21 -0
  30. package/types/gltf/parser/ParserContext.d.ts +46 -0
  31. package/types/gltf/parser/SceneParser.d.ts +11 -0
  32. package/types/gltf/parser/SkinParser.d.ts +6 -0
  33. package/types/gltf/parser/TextureParser.d.ts +8 -0
  34. package/types/gltf/parser/Validator.d.ts +5 -0
  35. package/types/resource-deserialize/index.d.ts +3 -3
  36. package/types/resource-deserialize/resources/mesh/MeshDecoder.d.ts +1 -1
  37. package/types/resource-deserialize/resources/parser/PrefabParser.d.ts +5 -0
  38. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +14 -0
  39. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -1
  40. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +1 -1
  41. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +61 -0
  42. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +91 -0
  43. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +41 -0
  44. package/types/resource-deserialize/resources/schema/index.d.ts +3 -0
package/dist/main.js CHANGED
@@ -397,9 +397,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
397
397
  return _this;
398
398
  }
399
399
  var _proto = GLTFContentRestorer.prototype;
400
- /**
401
- * @override
402
- */ _proto.restoreContent = function restoreContent() {
400
+ _proto.restoreContent = function restoreContent() {
403
401
  var _this = this;
404
402
  return new engineCore.AssetPromise(function(resolve, reject) {
405
403
  Promise.all(_this.bufferRequests.map(function(bufferRequestInfo) {
@@ -1825,21 +1823,31 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1825
1823
  var vertexCount;
1826
1824
  var bufferBindIndex = 0;
1827
1825
  var positions;
1828
- 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
+ }
1829
1833
  for(var attribute in attributes){
1830
1834
  var accessor = accessors[attributes[attribute]];
1831
1835
  var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1832
1836
  var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1833
- var attributeCount = accessor.count;
1837
+ var accessorCount = accessor.count;
1834
1838
  var vertices = accessorBuffer.data;
1835
1839
  var vertexElement = void 0;
1836
1840
  var meshId = mesh.instanceId;
1837
1841
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1838
- 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;
1839
1847
  if (accessorBuffer.interleaved) {
1840
1848
  var byteOffset = accessor.byteOffset || 0;
1841
1849
  var stride = accessorBuffer.stride;
1842
- var elementOffset = byteOffset % stride;
1850
+ elementOffset = byteOffset % stride;
1843
1851
  if (vertexBindingInfos[meshId] === undefined) {
1844
1852
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1845
1853
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1855,7 +1863,8 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1855
1863
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1856
1864
  }
1857
1865
  } else {
1858
- vertexElement = new engineCore.VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1866
+ elementOffset = 0;
1867
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1859
1868
  var vertexBuffer1 = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1860
1869
  vertexBuffer1.setData(vertices);
1861
1870
  meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
@@ -1864,35 +1873,61 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1864
1873
  }
1865
1874
  vertexElements.push(vertexElement);
1866
1875
  if (attribute === "POSITION") {
1867
- vertexCount = attributeCount;
1876
+ vertexCount = accessorCount;
1868
1877
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1869
1878
  if (accessor.min && accessor.max) {
1870
1879
  min.copyFromArray(accessor.min);
1871
1880
  max.copyFromArray(accessor.max);
1872
1881
  if (keepMeshData) {
1873
- var stride1 = vertices.length / attributeCount;
1874
- for(var j = 0; j < attributeCount; j++){
1875
- var offset = j * stride1;
1876
- positions[j] = new engineMath.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 engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1887
+ elementNormalized && position.scale(scaleFactor);
1888
+ positions[j] = position;
1877
1889
  }
1878
1890
  }
1879
1891
  } else {
1880
- var position = GLTFMeshParser._tempVector3;
1892
+ var position1 = GLTFMeshParser._tempVector3;
1881
1893
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1882
1894
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1883
- var stride2 = vertices.length / attributeCount;
1884
- for(var j1 = 0; j1 < attributeCount; j1++){
1885
- var offset1 = j1 * stride2;
1886
- position.copyFromArray(vertices, offset1);
1887
- engineMath.Vector3.min(min, position, min);
1888
- engineMath.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
+ engineMath.Vector3.min(min, position1, min);
1901
+ engineMath.Vector3.max(max, position1, max);
1902
+ if (keepMeshData) {
1903
+ var clonePosition = position1.clone();
1904
+ elementNormalized && clonePosition.scale(scaleFactor);
1905
+ positions[j1] = clonePosition;
1906
+ }
1889
1907
  }
1890
1908
  }
1891
- if (accessor.normalized) {
1892
- var scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType);
1909
+ if (elementNormalized) {
1893
1910
  min.scale(scaleFactor);
1894
1911
  max.scale(scaleFactor);
1895
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 engineMath.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 engineMath.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1928
+ elementNormalized && boneWeight.scale(scaleFactor);
1929
+ boneWeights[j3] = boneWeight;
1930
+ }
1896
1931
  }
1897
1932
  }
1898
1933
  mesh.setVertexElements(vertexElements);
@@ -1911,6 +1946,10 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1911
1946
  mesh.uploadData(!keepMeshData);
1912
1947
  //@ts-ignore
1913
1948
  mesh._positions = positions;
1949
+ //@ts-ignore
1950
+ mesh._boneIndices = boneIndices;
1951
+ //@ts-ignore
1952
+ mesh._boneWeights = boneWeights;
1914
1953
  return Promise.resolve(mesh);
1915
1954
  };
1916
1955
  /**
@@ -2001,14 +2040,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2001
2040
  camera.enabled = false;
2002
2041
  };
2003
2042
  _proto._createRenderer = function _createRenderer(context, glTFNode, entity) {
2004
- var glTFResource = context.glTFResource, glTF = context.glTF;
2005
- var glTFMeshes = glTF.meshes;
2006
- var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2007
- var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2008
- var glTFMesh = glTFMeshes[meshID];
2009
- var glTFMeshPrimitives = glTFMesh.primitives;
2010
- var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2011
- for(var i = 0; i < glTFMeshPrimitives.length; i++){
2043
+ var _loop = function(i) {
2012
2044
  var gltfPrimitive = glTFMeshPrimitives[i];
2013
2045
  var mesh = meshes[meshID][i];
2014
2046
  var renderer = void 0;
@@ -2030,8 +2062,22 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2030
2062
  var materialIndex = gltfPrimitive.material;
2031
2063
  var material = (materials == null ? void 0 : materials[materialIndex]) || GLTFSceneParser._getDefaultMaterial(engine);
2032
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
+ });
2033
2071
  GLTFParser.executeExtensionsAdditiveAndParse(gltfPrimitive.extensions, context, renderer, gltfPrimitive);
2034
- }
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);
2035
2081
  };
2036
2082
  _proto._createAnimator = function _createAnimator(context) {
2037
2083
  if (!context.hasSkinned && !context.glTFResource.animations) {
@@ -2330,7 +2376,7 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2330
2376
  }
2331
2377
  var _proto = GLTFResource.prototype;
2332
2378
  /**
2333
- * @override
2379
+ * @internal
2334
2380
  */ _proto._onDestroy = function _onDestroy() {
2335
2381
  EngineObject.prototype._onDestroy.call(this);
2336
2382
  this.defaultSceneRoot.destroy();
@@ -2354,9 +2400,7 @@ var GLTFLoader = /*#__PURE__*/ function(Loader) {
2354
2400
  return Loader.apply(this, arguments);
2355
2401
  }
2356
2402
  var _proto = GLTFLoader.prototype;
2357
- /**
2358
- * @override
2359
- */ _proto.load = function load(item, resourceManager) {
2403
+ _proto.load = function load(item, resourceManager) {
2360
2404
  var url = item.url;
2361
2405
  var params = item.params;
2362
2406
  var context = new GLTFParserContext(url);
@@ -2981,6 +3025,15 @@ KTXLoader = __decorate([
2981
3025
  ])
2982
3026
  ], KTXLoader);
2983
3027
 
3028
+ function parseProperty(object, key, value) {
3029
+ if (typeof value === "object") {
3030
+ for(var subKey in value){
3031
+ parseProperty(object[key], subKey, value[subKey]);
3032
+ }
3033
+ } else {
3034
+ object[key] = value;
3035
+ }
3036
+ }
2984
3037
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
2985
3038
  _inherits(MaterialLoader, Loader);
2986
3039
  function MaterialLoader() {
@@ -2992,7 +3045,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
2992
3045
  return new engineCore.AssetPromise(function(resolve, reject) {
2993
3046
  _this.request(item.url, _extends({}, item, {
2994
3047
  type: "json"
2995
- })).then(function(json) {
3048
+ })).then(function(materialSchema) {
2996
3049
  var _loop = function(key) {
2997
3050
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
2998
3051
  switch(type){
@@ -3020,27 +3073,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3020
3073
  }
3021
3074
  };
3022
3075
  var engine = resourceManager.engine;
3023
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3024
- var material;
3025
- switch(shader){
3026
- case "pbr":
3027
- material = new engineCore.PBRMaterial(engine);
3028
- break;
3029
- case "pbr-specular":
3030
- material = new engineCore.PBRSpecularMaterial(engine);
3031
- break;
3032
- case "unlit":
3033
- material = new engineCore.UnlitMaterial(engine);
3034
- break;
3035
- case "blinn-phong":
3036
- material = new engineCore.BlinnPhongMaterial(engine);
3037
- break;
3038
- case "bake-pbr":
3039
- // @todo refactor custom shader later
3040
- // @ts-ignore
3041
- material = new engineCore.PBRBaseMaterial(engine, engineCore.Shader.find("bake-pbr"));
3042
- break;
3043
- }
3076
+ var name = materialSchema.name, shader = materialSchema.shader, shaderData = materialSchema.shaderData, macros = materialSchema.macros, renderState = materialSchema.renderState;
3077
+ var material = new engineCore.Material(engine, engineCore.Shader.find(shader));
3044
3078
  material.name = name;
3045
3079
  var texturePromises = new Array();
3046
3080
  var materialShaderData = material.shaderData;
@@ -3053,9 +3087,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3053
3087
  materialShaderData.enableMacro(name1, value);
3054
3088
  }
3055
3089
  }
3056
- for(var key1 in renderState){
3057
- material[key1] = renderState[key1];
3058
- }
3090
+ parseProperty(material, "renderState", renderState);
3059
3091
  return Promise.all(texturePromises).then(function() {
3060
3092
  resolve(material);
3061
3093
  });
@@ -3810,6 +3842,12 @@ exports.AnimationClipDecoder = __decorate([
3810
3842
  decoder("AnimationClip")
3811
3843
  ], exports.AnimationClipDecoder);
3812
3844
 
3845
+ exports.SpecularMode = void 0;
3846
+ (function(SpecularMode) {
3847
+ SpecularMode["Sky"] = "Sky";
3848
+ SpecularMode["Custom"] = "Custom";
3849
+ })(exports.SpecularMode || (exports.SpecularMode = {}));
3850
+
3813
3851
  var SceneParserContext = /*#__PURE__*/ function() {
3814
3852
  function SceneParserContext(originalData, scene) {
3815
3853
  this.originalData = originalData;
@@ -4092,7 +4130,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader) {
4092
4130
  var atlasItem = atlasItems[i];
4093
4131
  if (atlasItem.img) {
4094
4132
  chainPromises.push(resourceManager.load({
4095
- url: atlasItem.img,
4133
+ url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
4096
4134
  type: engineCore.AssetType.Texture2D,
4097
4135
  params: {
4098
4136
  format: format,
@@ -4203,9 +4241,7 @@ SpriteLoader = __decorate([
4203
4241
  return _this;
4204
4242
  }
4205
4243
  var _proto = Texture2DContentRestorer.prototype;
4206
- /**
4207
- * @override
4208
- */ _proto.restoreContent = function restoreContent() {
4244
+ _proto.restoreContent = function restoreContent() {
4209
4245
  var _this = this;
4210
4246
  return engineCore.request(this.url, this.requestConfig).then(function(image) {
4211
4247
  var resource = _this.resource;
@@ -4223,9 +4259,7 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader) {
4223
4259
  return Loader.apply(this, arguments);
4224
4260
  }
4225
4261
  var _proto = Texture2DLoader.prototype;
4226
- /**
4227
- * @override
4228
- */ _proto.load = function load(item, resourceManager) {
4262
+ _proto.load = function load(item, resourceManager) {
4229
4263
  var _this = this;
4230
4264
  return new engineCore.AssetPromise(function(resolve, reject) {
4231
4265
  var url = item.url;
@@ -4271,9 +4305,7 @@ Texture2DLoader = __decorate([
4271
4305
  return _this;
4272
4306
  }
4273
4307
  var _proto = TextureCubeContentRestorer.prototype;
4274
- /**
4275
- * @override
4276
- */ _proto.restoreContent = function restoreContent() {
4308
+ _proto.restoreContent = function restoreContent() {
4277
4309
  var _this = this;
4278
4310
  return new engineCore.AssetPromise(function(resolve, reject) {
4279
4311
  Promise.all(_this.urls.map(function(url) {
@@ -4299,9 +4331,7 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
4299
4331
  return Loader.apply(this, arguments);
4300
4332
  }
4301
4333
  var _proto = TextureCubeLoader.prototype;
4302
- /**
4303
- * @override
4304
- */ _proto.load = function load(item, resourceManager) {
4334
+ _proto.load = function load(item, resourceManager) {
4305
4335
  var _this = this;
4306
4336
  return new engineCore.AssetPromise(function(resolve, reject) {
4307
4337
  var urls = item.urls;
@@ -4376,47 +4406,63 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4376
4406
  // @ts-ignore
4377
4407
  engine.resourceManager.initVirtualResources(data.files);
4378
4408
  return SceneParser.parse(engine, data).then(function(scene) {
4409
+ var promises = [];
4379
4410
  // parse ambient light
4380
4411
  var ambient = data.scene.ambient;
4381
- var ambientLightPromise = Promise.resolve();
4382
- if (ambient.ambientLight) {
4383
- ambientLightPromise = resourceManager// @ts-ignore
4384
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4385
- scene.ambientLight = light;
4412
+ var useCustomAmbient = ambient.specularMode === "Custom";
4413
+ if (useCustomAmbient && ambient.customAmbientLight) {
4414
+ // @ts-ignore
4415
+ // prettier-ignore
4416
+ var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
4417
+ scene.ambientLight = ambientLight;
4386
4418
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4387
4419
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4420
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4421
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4388
4422
  });
4389
- } else {
4390
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4391
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
4392
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4423
+ promises.push(customAmbientPromise);
4424
+ } else if (!useCustomAmbient && ambient.ambientLight) {
4425
+ // @ts-ignore
4426
+ // prettier-ignore
4427
+ var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
4428
+ scene.ambientLight = ambientLight;
4429
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4430
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4431
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4432
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4433
+ });
4434
+ promises.push(ambientLightPromise);
4393
4435
  }
4394
4436
  var background = data.scene.background;
4395
4437
  scene.background.mode = background.mode;
4396
- var backgroundPromise = Promise.resolve();
4397
4438
  switch(scene.background.mode){
4398
4439
  case engineCore.BackgroundMode.SolidColor:
4399
4440
  scene.background.solidColor.copyFrom(background.color);
4400
4441
  break;
4401
4442
  case engineCore.BackgroundMode.Sky:
4402
- if (background.sky) {
4443
+ if (background.skyMesh && background.skyMaterial) {
4444
+ // @ts-ignore
4445
+ var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
4446
+ scene.background.sky.mesh = mesh;
4447
+ });
4403
4448
  // @ts-ignore
4404
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4405
- var sky = scene.background.sky;
4406
- var skyMaterial = new engineCore.SkyBoxMaterial(engine);
4407
- skyMaterial.texture = light.specularTexture;
4408
- skyMaterial.textureDecodeRGBM = true;
4409
- sky.material = skyMaterial;
4410
- sky.mesh = engineCore.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4449
+ // prettier-ignore
4450
+ var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
4451
+ scene.background.sky.material = material;
4411
4452
  });
4453
+ promises.push(skyMeshPromise, skyMaterialPromise);
4454
+ } else {
4455
+ engineCore.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4412
4456
  }
4413
4457
  break;
4414
4458
  case engineCore.BackgroundMode.Texture:
4415
4459
  if (background.texture) {
4416
4460
  // @ts-ignore
4417
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4461
+ // prettier-ignore
4462
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4418
4463
  scene.background.texture = texture;
4419
4464
  });
4465
+ promises.push(backgroundPromise);
4420
4466
  }
4421
4467
  break;
4422
4468
  }
@@ -4428,10 +4474,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4428
4474
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4429
4475
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4430
4476
  }
4431
- return Promise.all([
4432
- ambientLightPromise,
4433
- backgroundPromise
4434
- ]).then(function() {
4477
+ return Promise.all(promises).then(function() {
4435
4478
  resolve(scene);
4436
4479
  });
4437
4480
  });
@@ -4467,16 +4510,12 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
4467
4510
  return GLTFExtensionParser.apply(this, arguments);
4468
4511
  }
4469
4512
  var _proto = KHR_draco_mesh_compression1.prototype;
4470
- /**
4471
- * @override
4472
- */ _proto.initialize = function initialize() {
4513
+ _proto.initialize = function initialize() {
4473
4514
  if (!KHR_draco_mesh_compression._decoder) {
4474
4515
  KHR_draco_mesh_compression._decoder = new engineDraco.DRACODecoder();
4475
4516
  }
4476
4517
  };
4477
- /**
4478
- * @override
4479
- */ _proto.createAndParse = function createAndParse(context, schema, glTFPrimitive, glTFMesh) {
4518
+ _proto.createAndParse = function createAndParse(context, schema, glTFPrimitive, glTFMesh) {
4480
4519
  var _this = this;
4481
4520
  var glTF = context.glTF, buffers = context.buffers, engine = context.glTFResource.engine;
4482
4521
  var bufferViews = glTF.bufferViews, accessors = glTF.accessors;
@@ -4631,9 +4670,7 @@ var KHR_lights_punctual = /*#__PURE__*/ function(GLTFExtensionParser) {
4631
4670
  return GLTFExtensionParser.apply(this, arguments);
4632
4671
  }
4633
4672
  var _proto = KHR_lights_punctual.prototype;
4634
- /**
4635
- * @override
4636
- */ _proto.additiveParse = function additiveParse(context, entity, extensionSchema) {
4673
+ _proto.additiveParse = function additiveParse(context, entity, extensionSchema) {
4637
4674
  var lightsSchema = context.glTF.extensions.KHR_lights_punctual.lights;
4638
4675
  var lightSchema = lightsSchema[extensionSchema.light];
4639
4676
  var color = lightSchema.color, _lightSchema_intensity = lightSchema.intensity, intensity = _lightSchema_intensity === void 0 ? 1 : _lightSchema_intensity, type = lightSchema.type, range = lightSchema.range, spot = lightSchema.spot;
@@ -4673,9 +4710,7 @@ var KHR_materials_clearcoat = /*#__PURE__*/ function(GLTFExtensionParser) {
4673
4710
  return GLTFExtensionParser.apply(this, arguments);
4674
4711
  }
4675
4712
  var _proto = KHR_materials_clearcoat.prototype;
4676
- /**
4677
- * @override
4678
- */ _proto.additiveParse = function additiveParse(context, material, schema) {
4713
+ _proto.additiveParse = function additiveParse(context, material, schema) {
4679
4714
  var textures = context.glTFResource.textures;
4680
4715
  var _schema_clearcoatFactor = schema.clearcoatFactor, clearcoatFactor = _schema_clearcoatFactor === void 0 ? 0 : _schema_clearcoatFactor, clearcoatTexture = schema.clearcoatTexture, _schema_clearcoatRoughnessFactor = schema.clearcoatRoughnessFactor, clearcoatRoughnessFactor = _schema_clearcoatRoughnessFactor === void 0 ? 0 : _schema_clearcoatRoughnessFactor, clearcoatRoughnessTexture = schema.clearcoatRoughnessTexture, clearcoatNormalTexture = schema.clearcoatNormalTexture;
4681
4716
  material.clearCoat = clearcoatFactor;
@@ -4699,15 +4734,29 @@ KHR_materials_clearcoat = __decorate([
4699
4734
  registerGLTFExtension("KHR_materials_clearcoat", exports.GLTFExtensionMode.AdditiveParse)
4700
4735
  ], KHR_materials_clearcoat);
4701
4736
 
4737
+ var KHR_materials_ior = /*#__PURE__*/ function(GLTFExtensionParser) {
4738
+ _inherits(KHR_materials_ior, GLTFExtensionParser);
4739
+ function KHR_materials_ior() {
4740
+ return GLTFExtensionParser.apply(this, arguments);
4741
+ }
4742
+ var _proto = KHR_materials_ior.prototype;
4743
+ _proto.additiveParse = function additiveParse(context, material, schema) {
4744
+ var _schema_ior = schema.ior, ior = _schema_ior === void 0 ? 1.5 : _schema_ior;
4745
+ material.ior = ior;
4746
+ };
4747
+ return KHR_materials_ior;
4748
+ }(GLTFExtensionParser);
4749
+ KHR_materials_ior = __decorate([
4750
+ registerGLTFExtension("KHR_materials_ior", exports.GLTFExtensionMode.AdditiveParse)
4751
+ ], KHR_materials_ior);
4752
+
4702
4753
  var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(GLTFExtensionParser) {
4703
4754
  _inherits(KHR_materials_pbrSpecularGlossiness, GLTFExtensionParser);
4704
4755
  function KHR_materials_pbrSpecularGlossiness() {
4705
4756
  return GLTFExtensionParser.apply(this, arguments);
4706
4757
  }
4707
4758
  var _proto = KHR_materials_pbrSpecularGlossiness.prototype;
4708
- /**
4709
- * @override
4710
- */ _proto.createAndParse = function createAndParse(context, schema, ownerSchema) {
4759
+ _proto.createAndParse = function createAndParse(context, schema, ownerSchema) {
4711
4760
  var _context_glTFResource = context.glTFResource, engine = _context_glTFResource.engine, textures = _context_glTFResource.textures;
4712
4761
  var material = new engineCore.PBRSpecularMaterial(engine);
4713
4762
  var diffuseFactor = schema.diffuseFactor, diffuseTexture = schema.diffuseTexture, specularFactor = schema.specularFactor, glossinessFactor = schema.glossinessFactor, specularGlossinessTexture = schema.specularGlossinessTexture;
@@ -4744,9 +4793,7 @@ var KHR_materials_unlit = /*#__PURE__*/ function(GLTFExtensionParser) {
4744
4793
  return GLTFExtensionParser.apply(this, arguments);
4745
4794
  }
4746
4795
  var _proto = KHR_materials_unlit.prototype;
4747
- /**
4748
- * @override
4749
- */ _proto.createAndParse = function createAndParse(context, _, ownerSchema) {
4796
+ _proto.createAndParse = function createAndParse(context, _, ownerSchema) {
4750
4797
  var engine = context.glTFResource.engine;
4751
4798
  var material = new engineCore.UnlitMaterial(engine);
4752
4799
  material.name = ownerSchema.name;
@@ -4776,9 +4823,7 @@ var KHR_texture_transform = /*#__PURE__*/ function(GLTFExtensionParser) {
4776
4823
  return GLTFExtensionParser.apply(this, arguments);
4777
4824
  }
4778
4825
  var _proto = KHR_texture_transform.prototype;
4779
- /**
4780
- * @override
4781
- */ _proto.additiveParse = function additiveParse(context, material, schema) {
4826
+ _proto.additiveParse = function additiveParse(context, material, schema) {
4782
4827
  var offset = schema.offset, rotation = schema.rotation, scale = schema.scale, texCoord = schema.texCoord;
4783
4828
  if (offset) {
4784
4829
  material.tilingOffset.z = offset[0];
@@ -4807,9 +4852,7 @@ var GALACEAN_materials_remap = /*#__PURE__*/ function(GLTFExtensionParser) {
4807
4852
  return GLTFExtensionParser.apply(this, arguments);
4808
4853
  }
4809
4854
  var _proto = GALACEAN_materials_remap.prototype;
4810
- /**
4811
- * @override
4812
- */ _proto.createAndParse = function createAndParse(context, schema) {
4855
+ _proto.createAndParse = function createAndParse(context, schema) {
4813
4856
  var engine = context.glTFResource.engine;
4814
4857
  // @ts-ignore
4815
4858
  return engine.resourceManager.getResourceByRef(schema);
@@ -4826,9 +4869,7 @@ var GALACEAN_animation_event = /*#__PURE__*/ function(GLTFExtensionParser) {
4826
4869
  return GLTFExtensionParser.apply(this, arguments);
4827
4870
  }
4828
4871
  var _proto = GALACEAN_animation_event.prototype;
4829
- /**
4830
- * @override
4831
- */ _proto.additiveParse = function additiveParse(context, animationClip, schema) {
4872
+ _proto.additiveParse = function additiveParse(context, animationClip, schema) {
4832
4873
  context.glTFResource.engine;
4833
4874
  var events = schema.events;
4834
4875
  events.map(function(eventData) {