@galacean/engine-loader 1.0.0-beta.9 → 1.1.0-alpha.0

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.
package/dist/main.js CHANGED
@@ -3025,6 +3025,15 @@ KTXLoader = __decorate([
3025
3025
  ])
3026
3026
  ], KTXLoader);
3027
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
+ }
3028
3037
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
3029
3038
  _inherits(MaterialLoader, Loader);
3030
3039
  function MaterialLoader() {
@@ -3036,7 +3045,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3036
3045
  return new engineCore.AssetPromise(function(resolve, reject) {
3037
3046
  _this.request(item.url, _extends({}, item, {
3038
3047
  type: "json"
3039
- })).then(function(json) {
3048
+ })).then(function(materialSchema) {
3040
3049
  var _loop = function(key) {
3041
3050
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
3042
3051
  switch(type){
@@ -3064,27 +3073,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3064
3073
  }
3065
3074
  };
3066
3075
  var engine = resourceManager.engine;
3067
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3068
- var material;
3069
- switch(shader){
3070
- case "pbr":
3071
- material = new engineCore.PBRMaterial(engine);
3072
- break;
3073
- case "pbr-specular":
3074
- material = new engineCore.PBRSpecularMaterial(engine);
3075
- break;
3076
- case "unlit":
3077
- material = new engineCore.UnlitMaterial(engine);
3078
- break;
3079
- case "blinn-phong":
3080
- material = new engineCore.BlinnPhongMaterial(engine);
3081
- break;
3082
- case "bake-pbr":
3083
- // @todo refactor custom shader later
3084
- // @ts-ignore
3085
- material = new engineCore.PBRBaseMaterial(engine, engineCore.Shader.find("bake-pbr"));
3086
- break;
3087
- }
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));
3088
3078
  material.name = name;
3089
3079
  var texturePromises = new Array();
3090
3080
  var materialShaderData = material.shaderData;
@@ -3097,9 +3087,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3097
3087
  materialShaderData.enableMacro(name1, value);
3098
3088
  }
3099
3089
  }
3100
- for(var key1 in renderState){
3101
- material[key1] = renderState[key1];
3102
- }
3090
+ parseProperty(material, "renderState", renderState);
3103
3091
  return Promise.all(texturePromises).then(function() {
3104
3092
  resolve(material);
3105
3093
  });
@@ -3854,6 +3842,12 @@ exports.AnimationClipDecoder = __decorate([
3854
3842
  decoder("AnimationClip")
3855
3843
  ], exports.AnimationClipDecoder);
3856
3844
 
3845
+ exports.SpecularMode = void 0;
3846
+ (function(SpecularMode) {
3847
+ SpecularMode["Sky"] = "Sky";
3848
+ SpecularMode["Custom"] = "Custom";
3849
+ })(exports.SpecularMode || (exports.SpecularMode = {}));
3850
+
3857
3851
  var SceneParserContext = /*#__PURE__*/ function() {
3858
3852
  function SceneParserContext(originalData, scene) {
3859
3853
  this.originalData = originalData;
@@ -4412,47 +4406,63 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4412
4406
  // @ts-ignore
4413
4407
  engine.resourceManager.initVirtualResources(data.files);
4414
4408
  return SceneParser.parse(engine, data).then(function(scene) {
4409
+ var promises = [];
4415
4410
  // parse ambient light
4416
4411
  var ambient = data.scene.ambient;
4417
- var ambientLightPromise = Promise.resolve();
4418
- if (ambient.ambientLight) {
4419
- ambientLightPromise = resourceManager// @ts-ignore
4420
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4421
- 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;
4422
4418
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4423
4419
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4420
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4421
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4424
4422
  });
4425
- } else {
4426
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4427
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
4428
- 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);
4429
4435
  }
4430
4436
  var background = data.scene.background;
4431
4437
  scene.background.mode = background.mode;
4432
- var backgroundPromise = Promise.resolve();
4433
4438
  switch(scene.background.mode){
4434
4439
  case engineCore.BackgroundMode.SolidColor:
4435
4440
  scene.background.solidColor.copyFrom(background.color);
4436
4441
  break;
4437
4442
  case engineCore.BackgroundMode.Sky:
4438
- 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
+ });
4439
4448
  // @ts-ignore
4440
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4441
- var sky = scene.background.sky;
4442
- var skyMaterial = new engineCore.SkyBoxMaterial(engine);
4443
- skyMaterial.texture = light.specularTexture;
4444
- skyMaterial.textureDecodeRGBM = true;
4445
- sky.material = skyMaterial;
4446
- 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;
4447
4452
  });
4453
+ promises.push(skyMeshPromise, skyMaterialPromise);
4454
+ } else {
4455
+ engineCore.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4448
4456
  }
4449
4457
  break;
4450
4458
  case engineCore.BackgroundMode.Texture:
4451
4459
  if (background.texture) {
4452
4460
  // @ts-ignore
4453
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4461
+ // prettier-ignore
4462
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4454
4463
  scene.background.texture = texture;
4455
4464
  });
4465
+ promises.push(backgroundPromise);
4456
4466
  }
4457
4467
  break;
4458
4468
  }
@@ -4464,10 +4474,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4464
4474
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4465
4475
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4466
4476
  }
4467
- return Promise.all([
4468
- ambientLightPromise,
4469
- backgroundPromise
4470
- ]).then(function() {
4477
+ return Promise.all(promises).then(function() {
4471
4478
  resolve(scene);
4472
4479
  });
4473
4480
  });