@galacean/engine-loader 1.0.0-beta.1 → 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.
@@ -1824,21 +1824,31 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1824
1824
  var vertexCount;
1825
1825
  var bufferBindIndex = 0;
1826
1826
  var positions;
1827
- 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
+ }
1828
1834
  for(var attribute in attributes){
1829
1835
  var accessor = accessors[attributes[attribute]];
1830
1836
  var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1831
1837
  var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1832
- var attributeCount = accessor.count;
1838
+ var accessorCount = accessor.count;
1833
1839
  var vertices = accessorBuffer.data;
1834
1840
  var vertexElement = void 0;
1835
1841
  var meshId = mesh.instanceId;
1836
1842
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1837
- 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;
1838
1848
  if (accessorBuffer.interleaved) {
1839
1849
  var byteOffset = accessor.byteOffset || 0;
1840
1850
  var stride = accessorBuffer.stride;
1841
- var elementOffset = byteOffset % stride;
1851
+ elementOffset = byteOffset % stride;
1842
1852
  if (vertexBindingInfos[meshId] === undefined) {
1843
1853
  vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1844
1854
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1854,7 +1864,8 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1854
1864
  vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1855
1865
  }
1856
1866
  } else {
1857
- vertexElement = new miniprogram.VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1867
+ elementOffset = 0;
1868
+ vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1858
1869
  var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1859
1870
  vertexBuffer1.setData(vertices);
1860
1871
  meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
@@ -1863,35 +1874,61 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1863
1874
  }
1864
1875
  vertexElements.push(vertexElement);
1865
1876
  if (attribute === "POSITION") {
1866
- vertexCount = attributeCount;
1877
+ vertexCount = accessorCount;
1867
1878
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1868
1879
  if (accessor.min && accessor.max) {
1869
1880
  min.copyFromArray(accessor.min);
1870
1881
  max.copyFromArray(accessor.max);
1871
1882
  if (keepMeshData) {
1872
- var stride1 = vertices.length / attributeCount;
1873
- for(var j = 0; j < attributeCount; j++){
1874
- var offset = j * stride1;
1875
- 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;
1876
1890
  }
1877
1891
  }
1878
1892
  } else {
1879
- var position = GLTFMeshParser._tempVector3;
1893
+ var position1 = GLTFMeshParser._tempVector3;
1880
1894
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1881
1895
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1882
- var stride2 = vertices.length / attributeCount;
1883
- for(var j1 = 0; j1 < attributeCount; j1++){
1884
- var offset1 = j1 * stride2;
1885
- position.copyFromArray(vertices, offset1);
1886
- miniprogram$1.Vector3.min(min, position, min);
1887
- 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
+ }
1888
1908
  }
1889
1909
  }
1890
- if (accessor.normalized) {
1891
- var scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType);
1910
+ if (elementNormalized) {
1892
1911
  min.scale(scaleFactor);
1893
1912
  max.scale(scaleFactor);
1894
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
+ }
1895
1932
  }
1896
1933
  }
1897
1934
  mesh.setVertexElements(vertexElements);
@@ -1910,6 +1947,10 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1910
1947
  mesh.uploadData(!keepMeshData);
1911
1948
  //@ts-ignore
1912
1949
  mesh._positions = positions;
1950
+ //@ts-ignore
1951
+ mesh._boneIndices = boneIndices;
1952
+ //@ts-ignore
1953
+ mesh._boneWeights = boneWeights;
1913
1954
  return Promise.resolve(mesh);
1914
1955
  };
1915
1956
  /**
@@ -2000,14 +2041,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2000
2041
  camera.enabled = false;
2001
2042
  };
2002
2043
  _proto._createRenderer = function _createRenderer(context, glTFNode, entity) {
2003
- var glTFResource = context.glTFResource, glTF = context.glTF;
2004
- var glTFMeshes = glTF.meshes;
2005
- var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2006
- var meshID = glTFNode.mesh, skinID = glTFNode.skin;
2007
- var glTFMesh = glTFMeshes[meshID];
2008
- var glTFMeshPrimitives = glTFMesh.primitives;
2009
- var blendShapeWeights = glTFNode.weights || glTFMesh.weights;
2010
- for(var i = 0; i < glTFMeshPrimitives.length; i++){
2044
+ var _loop = function(i) {
2011
2045
  var gltfPrimitive = glTFMeshPrimitives[i];
2012
2046
  var mesh = meshes[meshID][i];
2013
2047
  var renderer = void 0;
@@ -2029,8 +2063,22 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
2029
2063
  var materialIndex = gltfPrimitive.material;
2030
2064
  var material = (materials == null ? void 0 : materials[materialIndex]) || GLTFSceneParser._getDefaultMaterial(engine);
2031
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
+ });
2032
2072
  GLTFParser.executeExtensionsAdditiveAndParse(gltfPrimitive.extensions, context, renderer, gltfPrimitive);
2033
- }
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);
2034
2082
  };
2035
2083
  _proto._createAnimator = function _createAnimator(context) {
2036
2084
  if (!context.hasSkinned && !context.glTFResource.animations) {
@@ -2328,7 +2376,9 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2328
2376
  return _this;
2329
2377
  }
2330
2378
  var _proto = GLTFResource.prototype;
2331
- _proto._onDestroy = function _onDestroy() {
2379
+ /**
2380
+ * @internal
2381
+ */ _proto._onDestroy = function _onDestroy() {
2332
2382
  EngineObject.prototype._onDestroy.call(this);
2333
2383
  this.defaultSceneRoot.destroy();
2334
2384
  this.textures = null;
@@ -2976,6 +3026,15 @@ KTXLoader = __decorate([
2976
3026
  ])
2977
3027
  ], KTXLoader);
2978
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
+ }
2979
3038
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
2980
3039
  _inherits(MaterialLoader, Loader);
2981
3040
  function MaterialLoader() {
@@ -2987,7 +3046,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
2987
3046
  return new miniprogram.AssetPromise(function(resolve, reject) {
2988
3047
  _this.request(item.url, _extends({}, item, {
2989
3048
  type: "json"
2990
- })).then(function(json) {
3049
+ })).then(function(materialSchema) {
2991
3050
  var _loop = function(key) {
2992
3051
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
2993
3052
  switch(type){
@@ -3015,27 +3074,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3015
3074
  }
3016
3075
  };
3017
3076
  var engine = resourceManager.engine;
3018
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3019
- var material;
3020
- switch(shader){
3021
- case "pbr":
3022
- material = new miniprogram.PBRMaterial(engine);
3023
- break;
3024
- case "pbr-specular":
3025
- material = new miniprogram.PBRSpecularMaterial(engine);
3026
- break;
3027
- case "unlit":
3028
- material = new miniprogram.UnlitMaterial(engine);
3029
- break;
3030
- case "blinn-phong":
3031
- material = new miniprogram.BlinnPhongMaterial(engine);
3032
- break;
3033
- case "bake-pbr":
3034
- // @todo refactor custom shader later
3035
- // @ts-ignore
3036
- material = new miniprogram.PBRBaseMaterial(engine, miniprogram.Shader.find("bake-pbr"));
3037
- break;
3038
- }
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));
3039
3079
  material.name = name;
3040
3080
  var texturePromises = new Array();
3041
3081
  var materialShaderData = material.shaderData;
@@ -3048,9 +3088,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3048
3088
  materialShaderData.enableMacro(name1, value);
3049
3089
  }
3050
3090
  }
3051
- for(var key1 in renderState){
3052
- material[key1] = renderState[key1];
3053
- }
3091
+ parseProperty(material, "renderState", renderState);
3054
3092
  return Promise.all(texturePromises).then(function() {
3055
3093
  resolve(material);
3056
3094
  });
@@ -3805,6 +3843,12 @@ exports.AnimationClipDecoder = __decorate([
3805
3843
  decoder("AnimationClip")
3806
3844
  ], exports.AnimationClipDecoder);
3807
3845
 
3846
+ exports.SpecularMode = void 0;
3847
+ (function(SpecularMode) {
3848
+ SpecularMode["Sky"] = "Sky";
3849
+ SpecularMode["Custom"] = "Custom";
3850
+ })(exports.SpecularMode || (exports.SpecularMode = {}));
3851
+
3808
3852
  var SceneParserContext = /*#__PURE__*/ function() {
3809
3853
  function SceneParserContext(originalData, scene) {
3810
3854
  this.originalData = originalData;
@@ -4087,7 +4131,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader) {
4087
4131
  var atlasItem = atlasItems[i];
4088
4132
  if (atlasItem.img) {
4089
4133
  chainPromises.push(resourceManager.load({
4090
- url: atlasItem.img,
4134
+ url: miniprogram.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
4091
4135
  type: miniprogram.AssetType.Texture2D,
4092
4136
  params: {
4093
4137
  format: format,
@@ -4363,47 +4407,63 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4363
4407
  // @ts-ignore
4364
4408
  engine.resourceManager.initVirtualResources(data.files);
4365
4409
  return SceneParser.parse(engine, data).then(function(scene) {
4410
+ var promises = [];
4366
4411
  // parse ambient light
4367
4412
  var ambient = data.scene.ambient;
4368
- var ambientLightPromise = Promise.resolve();
4369
- if (ambient.ambientLight) {
4370
- ambientLightPromise = resourceManager// @ts-ignore
4371
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4372
- 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;
4373
4419
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4374
4420
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4421
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4422
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4375
4423
  });
4376
- } else {
4377
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4378
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
4379
- 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);
4380
4436
  }
4381
4437
  var background = data.scene.background;
4382
4438
  scene.background.mode = background.mode;
4383
- var backgroundPromise = Promise.resolve();
4384
4439
  switch(scene.background.mode){
4385
4440
  case miniprogram.BackgroundMode.SolidColor:
4386
4441
  scene.background.solidColor.copyFrom(background.color);
4387
4442
  break;
4388
4443
  case miniprogram.BackgroundMode.Sky:
4389
- if (background.sky) {
4444
+ if (background.skyMesh && background.skyMaterial) {
4390
4445
  // @ts-ignore
4391
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4392
- var sky = scene.background.sky;
4393
- var skyMaterial = new miniprogram.SkyBoxMaterial(engine);
4394
- skyMaterial.texture = light.specularTexture;
4395
- skyMaterial.textureDecodeRGBM = true;
4396
- sky.material = skyMaterial;
4397
- sky.mesh = miniprogram.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4446
+ var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
4447
+ scene.background.sky.mesh = mesh;
4398
4448
  });
4449
+ // @ts-ignore
4450
+ // prettier-ignore
4451
+ var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
4452
+ scene.background.sky.material = material;
4453
+ });
4454
+ promises.push(skyMeshPromise, skyMaterialPromise);
4455
+ } else {
4456
+ miniprogram.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4399
4457
  }
4400
4458
  break;
4401
4459
  case miniprogram.BackgroundMode.Texture:
4402
4460
  if (background.texture) {
4403
4461
  // @ts-ignore
4404
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4462
+ // prettier-ignore
4463
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4405
4464
  scene.background.texture = texture;
4406
4465
  });
4466
+ promises.push(backgroundPromise);
4407
4467
  }
4408
4468
  break;
4409
4469
  }
@@ -4415,10 +4475,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4415
4475
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4416
4476
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4417
4477
  }
4418
- return Promise.all([
4419
- ambientLightPromise,
4420
- backgroundPromise
4421
- ]).then(function() {
4478
+ return Promise.all(promises).then(function() {
4422
4479
  resolve(scene);
4423
4480
  });
4424
4481
  });
@@ -4678,6 +4735,22 @@ KHR_materials_clearcoat = __decorate([
4678
4735
  registerGLTFExtension("KHR_materials_clearcoat", exports.GLTFExtensionMode.AdditiveParse)
4679
4736
  ], KHR_materials_clearcoat);
4680
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
+
4681
4754
  var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(GLTFExtensionParser) {
4682
4755
  _inherits(KHR_materials_pbrSpecularGlossiness, GLTFExtensionParser);
4683
4756
  function KHR_materials_pbrSpecularGlossiness() {