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