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