@babylonjs/viewer 6.23.1 → 6.25.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.
@@ -688,34 +688,6 @@ var SceneManager = /** @class */ (function () {
688
688
  floorMeshName: floorMeshName,
689
689
  });
690
690
  }
691
- if (vrConfig.rotateUsingControllers) {
692
- var rotationOffset_1;
693
- this._vrHelper.onControllerMeshLoadedObservable.add(function (controller) {
694
- controller.onTriggerStateChangedObservable.add(function (data) {
695
- if (controller.mesh && controller.mesh.rotationQuaternion) {
696
- if (data.pressed) {
697
- if (!rotationOffset_1) {
698
- _this.models[0].rootMesh.rotationQuaternion = _this.models[0].rootMesh.rotationQuaternion || new Quaternion();
699
- rotationOffset_1 = controller.mesh.rotationQuaternion.conjugate().multiply(_this.models[0].rootMesh.rotationQuaternion);
700
- }
701
- }
702
- else {
703
- rotationOffset_1 = null;
704
- }
705
- }
706
- });
707
- _this.scene.registerBeforeRender(function () {
708
- if (_this.models[0]) {
709
- if (rotationOffset_1 && controller.mesh && controller.mesh.rotationQuaternion) {
710
- _this.models[0].rootMesh.rotationQuaternion.copyFrom(controller.mesh.rotationQuaternion).multiplyInPlace(rotationOffset_1);
711
- }
712
- else {
713
- _this.models[0].rootMesh.rotationQuaternion = null;
714
- }
715
- }
716
- });
717
- });
718
- }
719
691
  this._vrHelper.onEnteringVRObservable.add(function () {
720
692
  if (_this._observablesManager) {
721
693
  _this._observablesManager.onEnteringVRObservable.notifyObservers(_this);
@@ -1 +1 @@
1
- {"version":3,"file":"sceneManager.js","sourceRoot":"","sources":["../../../../tools/viewer/src/managers/sceneManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n ILightConfiguration,\r\n ISceneConfiguration,\r\n ISceneOptimizerConfiguration,\r\n ICameraConfiguration,\r\n ISkyboxConfiguration,\r\n IGroundConfiguration,\r\n IModelConfiguration,\r\n IDefaultRenderingPipelineConfiguration,\r\n IVRConfiguration,\r\n} from \"../configuration/interfaces/index\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { getConfigurationKey } from \"../configuration/configuration\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { ModelState } from \"../model/viewerModel\";\r\nimport { extendClassWithConfig, deepmerge } from \"../helper/index\";\r\nimport { CameraBehavior } from \"../interfaces\";\r\nimport { ViewerLabs } from \"../labs/viewerLabs\";\r\nimport { getCustomOptimizerByName } from \"../optimizer/custom/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport type { IEnvironmentMapConfiguration } from \"../configuration/interfaces/environmentMapConfiguration\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { SceneOptimizer, SceneOptimizerOptions } from \"core/Misc/sceneOptimizer\";\r\nimport { ArcRotateCamera } from \"core/Cameras/arcRotateCamera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport type { IEnvironmentHelperOptions } from \"core/Helpers/environmentHelper\";\r\nimport { EnvironmentHelper } from \"core/Helpers/environmentHelper\";\r\nimport type { VRExperienceHelper, VRExperienceHelperOptions } from \"core/Cameras/VR/vrExperienceHelper\";\r\nimport { Color3, Quaternion, Vector3, Axis, Matrix } from \"core/Maths/math\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { DefaultRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Animation } from \"core/Animations/index\";\r\nimport { AnimationPropertiesOverride } from \"core/Animations/animationPropertiesOverride\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport type { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { HemisphericLight } from \"core/Lights/hemisphericLight\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport type { PointLight } from \"core/Lights/pointLight\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Behavior } from \"core/Behaviors/behavior\";\r\nimport type { FramingBehavior } from \"core/Behaviors/Cameras/framingBehavior\";\r\nimport { Scene } from \"core/scene\";\r\nimport { ShadowGenerator } from \"core/Lights/Shadows/shadowGenerator\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport \"core/Audio/audioSceneComponent\";\r\nimport \"core/Helpers/sceneHelpers\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\n/**\r\n * This interface describes the structure of the variable sent with the configuration observables of the scene manager.\r\n * O - the type of object we are dealing with (Light, ArcRotateCamera, Scene, etc')\r\n * T - the configuration type\r\n */\r\nexport interface IPostConfigurationCallback<OBJ, CONF> {\r\n newConfiguration: CONF;\r\n sceneManager: SceneManager;\r\n object: OBJ;\r\n model?: ViewerModel;\r\n}\r\n\r\nexport class SceneManager {\r\n //Observers\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n onSceneInitObservable: Observable<Scene>;\r\n /**\r\n * Will notify after the scene was configured. Can be used to further configure the scene\r\n */\r\n onSceneConfiguredObservable: Observable<IPostConfigurationCallback<Scene, ISceneConfiguration>>;\r\n /**\r\n * Will notify after the scene optimized was configured. Can be used to further configure the scene optimizer\r\n */\r\n onSceneOptimizerConfiguredObservable: Observable<IPostConfigurationCallback<SceneOptimizer, ISceneOptimizerConfiguration | boolean>>;\r\n /**\r\n * Will notify after the camera was configured. Can be used to further configure the camera\r\n */\r\n onCameraConfiguredObservable: Observable<IPostConfigurationCallback<ArcRotateCamera, ICameraConfiguration>>;\r\n /**\r\n * Will notify after the lights were configured. Can be used to further configure lights\r\n */\r\n onLightsConfiguredObservable: Observable<IPostConfigurationCallback<Array<Light>, { [name: string]: ILightConfiguration | boolean | number }>>;\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onModelsConfiguredObservable: Observable<IPostConfigurationCallback<Array<ViewerModel>, IModelConfiguration>>;\r\n /**\r\n * Will notify after the environment was configured. Can be used to further configure the environment\r\n */\r\n onEnvironmentConfiguredObservable: Observable<\r\n IPostConfigurationCallback<EnvironmentHelper, { skybox?: ISkyboxConfiguration | boolean; ground?: IGroundConfiguration | boolean }>\r\n >;\r\n\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onVRConfiguredObservable: Observable<IPostConfigurationCallback<VRExperienceHelper, IVRConfiguration>>;\r\n\r\n /**\r\n * The Babylon Scene of this viewer\r\n */\r\n public scene: Scene;\r\n /**\r\n * The camera used in this viewer\r\n */\r\n public camera: ArcRotateCamera;\r\n /**\r\n * Babylon's scene optimizer\r\n */\r\n public sceneOptimizer?: SceneOptimizer;\r\n /**\r\n * Models displayed in this viewer.\r\n */\r\n public models: Array<ViewerModel>;\r\n /**\r\n * Babylon's environment helper of this viewer\r\n */\r\n public environmentHelper?: EnvironmentHelper;\r\n\r\n //The following are configuration objects, default values.\r\n protected _defaultHighpTextureType: number;\r\n protected _shadowGeneratorBias: number;\r\n protected _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * The maximum number of shadows supported by the current viewer\r\n */\r\n protected _maxShadows: number;\r\n /**\r\n * is HDR supported?\r\n */\r\n private _hdrSupport: boolean;\r\n\r\n private readonly _white = Color3.White();\r\n\r\n private _forceShadowUpdate: boolean = false;\r\n\r\n /**\r\n * The labs variable consists of objects that will have their API change.\r\n * Please be careful when using labs in production.\r\n */\r\n public labs: ViewerLabs;\r\n\r\n private _defaultRenderingPipeline: Nullable<DefaultRenderingPipeline>;\r\n\r\n private _assetsRootURL: string;\r\n\r\n public get defaultRenderingPipeline() {\r\n return this._defaultRenderingPipeline;\r\n }\r\n\r\n protected _vrHelper?: VRExperienceHelper;\r\n\r\n public get vrHelper() {\r\n return this._vrHelper;\r\n }\r\n\r\n constructor(private _engine: Engine, private _configurationContainer: ConfigurationContainer, private _observablesManager?: ObservablesManager) {\r\n this.models = [];\r\n\r\n this.onCameraConfiguredObservable = new Observable();\r\n this.onLightsConfiguredObservable = new Observable();\r\n this.onModelsConfiguredObservable = new Observable();\r\n this.onSceneConfiguredObservable = new Observable();\r\n this.onSceneInitObservable = new Observable();\r\n this.onSceneOptimizerConfiguredObservable = new Observable();\r\n this.onEnvironmentConfiguredObservable = new Observable();\r\n this.onVRConfiguredObservable = new Observable();\r\n\r\n //this._viewer.onEngineInitObservable.add(() => {\r\n this._handleHardwareLimitations();\r\n //});\r\n\r\n this.onSceneInitObservable.add((scene) => {\r\n this.scene.animationPropertiesOverride = this.scene.animationPropertiesOverride || new AnimationPropertiesOverride();\r\n\r\n this.labs = new ViewerLabs(scene);\r\n\r\n const updateShadows = () => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n scene.registerBeforeRender(() => {\r\n if (this._forceShadowUpdate || (scene.animatables && scene.animatables.length > 0)) {\r\n // make sure all models are loaded\r\n updateShadows();\r\n this._forceShadowUpdate = false;\r\n } else if (\r\n !this.models.every((model) => {\r\n if (!model.shadowsRenderedAfterLoad) {\r\n model.shadowsRenderedAfterLoad = true;\r\n return false;\r\n }\r\n return model.state === ModelState.COMPLETE && !model.currentAnimation;\r\n })\r\n ) {\r\n updateShadows();\r\n }\r\n });\r\n return this._observablesManager && this._observablesManager.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n });\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n this._focusOnModel(model);\r\n });\r\n\r\n this._observablesManager.onModelAddedObservable.add((model) => {\r\n this.models.push(model);\r\n });\r\n this._observablesManager.onModelRemovedObservable.add((model) => {\r\n this.models.splice(this.models.indexOf(model), 1);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean representing HDR support\r\n */\r\n public get isHdrSupported() {\r\n return this._hdrSupport;\r\n }\r\n\r\n /**\r\n * Return the main color defined in the configuration.\r\n */\r\n public get mainColor(): Color3 {\r\n return this._configurationContainer.mainColor;\r\n }\r\n\r\n public get reflectionColor(): Color3 {\r\n return this._configurationContainer.reflectionColor;\r\n }\r\n\r\n public get animationBlendingEnabled() {\r\n return this.scene && this.scene.animationPropertiesOverride!.enableBlending;\r\n }\r\n\r\n public set animationBlendingEnabled(value: boolean) {\r\n this.scene.animationPropertiesOverride!.enableBlending = value;\r\n }\r\n\r\n public get observablesManager() {\r\n return this._observablesManager;\r\n }\r\n\r\n private _processShadows: boolean = true;\r\n\r\n /**\r\n * The flag defining whether shadows are rendered constantly or once.\r\n */\r\n public get processShadows() {\r\n return this._processShadows;\r\n }\r\n\r\n /**\r\n * Should shadows be rendered every frame, or only once and stop.\r\n * This can be used to optimize a scene.\r\n *\r\n * Not that the shadows will NOT disapear but will remain in place.\r\n * @param process if true shadows will be updated once every frame. if false they will stop being updated.\r\n */\r\n public set processShadows(process: boolean) {\r\n const refreshType = process ? RenderTargetTexture.REFRESHRATE_RENDER_ONEVERYFRAME : RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n\r\n if (generators) {\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = refreshType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._processShadows = process;\r\n }\r\n\r\n private _groundEnabled: boolean = true;\r\n\r\n public get groundEnabled() {\r\n return this._groundEnabled;\r\n }\r\n\r\n public set groundEnabled(newValue: boolean) {\r\n if (newValue === this._groundEnabled) {\r\n return;\r\n }\r\n\r\n this._groundEnabled = newValue;\r\n\r\n if (this.environmentHelper && this.environmentHelper.ground) {\r\n this.environmentHelper.ground.setEnabled(this._groundEnabled);\r\n }\r\n }\r\n\r\n private _groundMirrorEnabled = true;\r\n /**\r\n * gets whether the reflection is disabled.\r\n */\r\n public get groundMirrorEnabled(): boolean {\r\n return this._groundMirrorEnabled;\r\n }\r\n /**\r\n * sets whether the reflection is disabled.\r\n */\r\n public set groundMirrorEnabled(value: boolean) {\r\n if (this._groundMirrorEnabled === value) {\r\n return;\r\n }\r\n\r\n this._groundMirrorEnabled = value;\r\n if (this.environmentHelper && this.environmentHelper.groundMaterial && this.environmentHelper.groundMirror) {\r\n if (!value) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n } else {\r\n this.environmentHelper.groundMaterial.reflectionTexture = this.environmentHelper.groundMirror;\r\n }\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineEnabled: boolean = false;\r\n\r\n public get defaultRenderingPipelineEnabled() {\r\n return this._defaultRenderingPipelineEnabled;\r\n }\r\n\r\n public set defaultRenderingPipelineEnabled(value: boolean) {\r\n if (value === this._defaultRenderingPipelineEnabled) {\r\n return;\r\n }\r\n\r\n this._defaultRenderingPipelineEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the engine flags to unlock all babylon features.\r\n * Can also be configured using the scene.flags configuration object\r\n */\r\n public unlockBabylonFeatures() {\r\n this.scene.shadowsEnabled = true;\r\n this.scene.particlesEnabled = true;\r\n this.scene.postProcessesEnabled = true;\r\n this.scene.collisionsEnabled = true;\r\n this.scene.lightsEnabled = true;\r\n this.scene.texturesEnabled = true;\r\n this.scene.lensFlaresEnabled = true;\r\n this.scene.proceduralTexturesEnabled = true;\r\n this.scene.renderTargetsEnabled = true;\r\n this.scene.spritesEnabled = true;\r\n this.scene.skeletonsEnabled = true;\r\n this.scene.audioEnabled = true;\r\n }\r\n\r\n /**\r\n * initialize the scene. Calling this function again will dispose the old scene, if exists.\r\n * @param sceneConfiguration\r\n */\r\n public initScene(sceneConfiguration: ISceneConfiguration = {}): Promise<Scene> {\r\n // if the scene exists, dispose it.\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n\r\n // create a new scene\r\n this.scene = new Scene(this._engine);\r\n\r\n this._configurationContainer.scene = this.scene;\r\n\r\n // set a default PBR material\r\n if (!sceneConfiguration.defaultMaterial) {\r\n const defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n defaultMaterial.reflectivityColor = new Color3(0.1, 0.1, 0.1);\r\n defaultMaterial.microSurface = 0.6;\r\n\r\n if (this.scene.defaultMaterial) {\r\n this.scene.defaultMaterial.dispose();\r\n }\r\n\r\n this.scene.defaultMaterial = defaultMaterial;\r\n }\r\n\r\n this.scene.animationPropertiesOverride = new AnimationPropertiesOverride();\r\n\r\n Animation.AllowMatricesInterpolation = true;\r\n\r\n /*if (sceneConfiguration.glow) {\r\n let options: Partial<IGlowLayerOptions> = {\r\n mainTextureFixedSize: 512\r\n };\r\n if (typeof sceneConfiguration.glow === 'object') {\r\n options = sceneConfiguration.glow\r\n }\r\n var gl = new GlowLayer(\"glow\", this.scene, options);\r\n }*/\r\n\r\n return this.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n }\r\n\r\n public clearScene(clearModels: boolean = true, clearLights: boolean = false) {\r\n if (clearModels) {\r\n this.models.forEach((m) => m.dispose());\r\n this.models.length = 0;\r\n }\r\n if (clearLights) {\r\n this.scene.lights.forEach((l) => l.dispose());\r\n }\r\n }\r\n\r\n private _globalConfiguration: ViewerConfiguration = {};\r\n\r\n /**\r\n * This will update the scene's configuration, including camera, lights, environment.\r\n * @param newConfiguration the delta that should be configured. This includes only the changes\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration>) {\r\n if (this._configurationContainer) {\r\n this._globalConfiguration = this._configurationContainer.configuration;\r\n } else {\r\n this._globalConfiguration = newConfiguration;\r\n }\r\n\r\n // update scene configuration\r\n if (newConfiguration.scene) {\r\n this._configureScene(newConfiguration.scene);\r\n }\r\n\r\n // optimizer\r\n if (newConfiguration.optimizer !== undefined) {\r\n this._configureOptimizer(newConfiguration.optimizer);\r\n }\r\n\r\n // configure model\r\n /*if (newConfiguration.model && typeof newConfiguration.model === 'object') {\r\n this._configureModel(newConfiguration.model);\r\n }*/\r\n\r\n // lights\r\n this._configureLights(newConfiguration.lights);\r\n\r\n // environment\r\n if (newConfiguration.skybox !== undefined || newConfiguration.ground !== undefined) {\r\n this._configureEnvironment(newConfiguration.skybox, newConfiguration.ground);\r\n }\r\n\r\n // camera\r\n this._configureCamera(newConfiguration.camera);\r\n\r\n if (newConfiguration.environmentMap !== undefined) {\r\n this._configureEnvironmentMap(newConfiguration.environmentMap);\r\n }\r\n\r\n if (newConfiguration.vr !== undefined) {\r\n this._configureVR(newConfiguration.vr);\r\n }\r\n\r\n if (newConfiguration.lab) {\r\n // rendering pipelines\r\n if (newConfiguration.lab.defaultRenderingPipelines) {\r\n const pipelineConfig = newConfiguration.lab.defaultRenderingPipelines;\r\n if (typeof pipelineConfig === \"boolean\") {\r\n this.defaultRenderingPipelineEnabled = pipelineConfig;\r\n } else {\r\n this.defaultRenderingPipelineEnabled = true;\r\n }\r\n }\r\n\r\n if (this.environmentHelper && newConfiguration.lab.environmentMainColor) {\r\n const mainColor = new Color3(newConfiguration.lab.environmentMainColor.r, newConfiguration.lab.environmentMainColor.g, newConfiguration.lab.environmentMainColor.b);\r\n this.environmentHelper.setMainColor(mainColor);\r\n }\r\n\r\n if (newConfiguration.lab.globalLightRotation !== undefined) {\r\n // rotate all lights that are shadow lights\r\n this.scene.lights\r\n .filter((light) => light instanceof ShadowLight)\r\n .forEach((light) => {\r\n // casting and '!' are safe, due to the constraints tested before\r\n this.labs.rotateShadowLight(<ShadowLight>light, newConfiguration.lab!.globalLightRotation!);\r\n });\r\n this._forceShadowUpdate = true;\r\n }\r\n }\r\n\r\n if (this._defaultRenderingPipeline && this._defaultRenderingPipeline.imageProcessing) {\r\n this._defaultRenderingPipeline.imageProcessing.fromLinearSpace = true;\r\n }\r\n\r\n if (this._defaultRenderingPipelineShouldBuild && this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineShouldBuild: boolean = true;\r\n\r\n private _rebuildPostprocesses(configuration?: IDefaultRenderingPipelineConfiguration): void {\r\n if (!this._defaultRenderingPipelineEnabled || !getConfigurationKey(\"scene.imageProcessingConfiguration.isEnabled\", this._globalConfiguration)) {\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n this._defaultRenderingPipeline = null;\r\n this.scene.autoClearDepthAndStencil = true;\r\n this.scene.autoClear = true;\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const pipelineConfig = configuration || (this._globalConfiguration.lab && this._globalConfiguration.lab.defaultRenderingPipelines);\r\n if (pipelineConfig) {\r\n if (!this._defaultRenderingPipeline) {\r\n // Create pipeline in manual mode to avoid triggering multiple shader compilations\r\n this._defaultRenderingPipeline = new DefaultRenderingPipeline(\"default rendering pipeline\", this._hdrSupport, this.scene, [this.camera], false);\r\n }\r\n this.scene.autoClear = false;\r\n this.scene.autoClearDepthAndStencil = false;\r\n this._defaultRenderingPipelineShouldBuild = true;\r\n\r\n let bloomEnabled = this._bloomEnabled;\r\n\r\n if (typeof pipelineConfig !== \"boolean\") {\r\n extendClassWithConfig(this._defaultRenderingPipeline, pipelineConfig);\r\n this._bloomEnabled = !!pipelineConfig.bloomEnabled;\r\n this._fxaaEnabled = !!pipelineConfig.fxaaEnabled;\r\n bloomEnabled = this._bloomEnabled && pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight > 0;\r\n\r\n this._defaultRenderingPipeline.bloomWeight = (pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight) || this._defaultRenderingPipeline.bloomWeight;\r\n }\r\n\r\n this._defaultRenderingPipeline.bloomEnabled = bloomEnabled;\r\n this._defaultRenderingPipeline.fxaaEnabled = this.fxaaEnabled;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _bloomEnabled: boolean = false;\r\n\r\n public get bloomEnabled() {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set bloomEnabled(value: boolean) {\r\n if (this._bloomEnabled === value) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _fxaaEnabled: boolean = false;\r\n\r\n public get fxaaEnabled() {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(value: boolean) {\r\n if (this._fxaaEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setDefaultMaterial(sceneConfig: ISceneConfiguration) {}\r\n\r\n /**\r\n * internally configure the scene using the provided configuration.\r\n * The scene will not be recreated, but just updated.\r\n * @param sceneConfig the (new) scene configuration\r\n */\r\n protected _configureScene(sceneConfig: ISceneConfiguration) {\r\n // sanity check!\r\n if (!this.scene) {\r\n return;\r\n }\r\n\r\n const cc = sceneConfig.clearColor;\r\n const oldcc = this.scene.clearColor;\r\n if (cc) {\r\n if (cc.r !== undefined) {\r\n oldcc.r = cc.r;\r\n }\r\n if (cc.g !== undefined) {\r\n oldcc.g = cc.g;\r\n }\r\n if (cc.b !== undefined) {\r\n oldcc.b = cc.b;\r\n }\r\n if (cc.a !== undefined) {\r\n oldcc.a = cc.a;\r\n }\r\n }\r\n\r\n if (sceneConfig.assetsRootURL) {\r\n this._assetsRootURL = sceneConfig.assetsRootURL;\r\n }\r\n\r\n // image processing configuration - optional.\r\n if (sceneConfig.imageProcessingConfiguration) {\r\n extendClassWithConfig(this.scene.imageProcessingConfiguration, sceneConfig.imageProcessingConfiguration);\r\n }\r\n //animation properties override\r\n if (sceneConfig.animationPropertiesOverride) {\r\n extendClassWithConfig(this.scene.animationPropertiesOverride, sceneConfig.animationPropertiesOverride);\r\n }\r\n if (sceneConfig.environmentTexture) {\r\n if (!(this.scene.environmentTexture && (<CubeTexture>this.scene.environmentTexture).url === sceneConfig.environmentTexture)) {\r\n if (this.scene.environmentTexture && this.scene.environmentTexture.dispose) {\r\n this.scene.environmentTexture.dispose();\r\n }\r\n const environmentTexture = CubeTexture.CreateFromPrefilteredData(sceneConfig.environmentTexture, this.scene);\r\n this.scene.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n if (sceneConfig.debug === true) {\r\n this.scene.debugLayer.show();\r\n } else if (sceneConfig.debug === false) {\r\n if (this.scene.debugLayer.isVisible()) {\r\n this.scene.debugLayer.hide();\r\n }\r\n }\r\n\r\n if (sceneConfig.disableHdr) {\r\n this._handleHardwareLimitations(false);\r\n } else {\r\n this._handleHardwareLimitations(true);\r\n }\r\n\r\n if (sceneConfig.renderInBackground !== undefined) {\r\n this._engine.renderEvenInBackground = !!sceneConfig.renderInBackground;\r\n }\r\n\r\n const canvas = this._engine.getInputElement();\r\n\r\n if (canvas) {\r\n if (this.camera && sceneConfig.disableCameraControl) {\r\n this.camera.detachControl();\r\n } else if (this.camera && sceneConfig.disableCameraControl === false) {\r\n this.camera.attachControl();\r\n }\r\n }\r\n\r\n this.setDefaultMaterial(sceneConfig);\r\n\r\n if (sceneConfig.flags) {\r\n extendClassWithConfig(this.scene, sceneConfig.flags);\r\n }\r\n\r\n this.onSceneConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene,\r\n newConfiguration: sceneConfig,\r\n });\r\n }\r\n\r\n /**\r\n * Configure the scene optimizer.\r\n * The existing scene optimizer will be disposed and a new one will be created.\r\n * @param optimizerConfig the (new) optimizer configuration\r\n */\r\n protected _configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean) {\r\n if (typeof optimizerConfig === \"boolean\") {\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n delete this.sceneOptimizer;\r\n }\r\n if (optimizerConfig) {\r\n this.sceneOptimizer = new SceneOptimizer(this.scene);\r\n this.sceneOptimizer.start();\r\n }\r\n } else {\r\n let optimizerOptions: SceneOptimizerOptions = new SceneOptimizerOptions(optimizerConfig.targetFrameRate, optimizerConfig.trackerDuration);\r\n // check for degradation\r\n if (optimizerConfig.degradation) {\r\n switch (optimizerConfig.degradation) {\r\n case \"low\":\r\n optimizerOptions = SceneOptimizerOptions.LowDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"moderate\":\r\n optimizerOptions = SceneOptimizerOptions.ModerateDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"hight\":\r\n optimizerOptions = SceneOptimizerOptions.HighDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n }\r\n }\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n if (optimizerConfig.custom) {\r\n const customOptimizer = getCustomOptimizerByName(optimizerConfig.custom, optimizerConfig.improvementMode);\r\n if (customOptimizer) {\r\n optimizerOptions.addCustomOptimization(\r\n () => {\r\n return customOptimizer(this);\r\n },\r\n () => {\r\n return `Babylon Viewer ${optimizerConfig.custom} custom optimization`;\r\n }\r\n );\r\n }\r\n }\r\n this.sceneOptimizer = new SceneOptimizer(this.scene, optimizerOptions, optimizerConfig.autoGeneratePriorities, optimizerConfig.improvementMode);\r\n this.sceneOptimizer.start();\r\n }\r\n\r\n this.onSceneOptimizerConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.sceneOptimizer!,\r\n newConfiguration: optimizerConfig,\r\n });\r\n }\r\n\r\n /**\r\n * configure all models using the configuration.\r\n * @param modelConfiguration the configuration to use to reconfigure the models\r\n */\r\n /*protected _configureModel(modelConfiguration: Partial<IModelConfiguration>) {\r\n this.models.forEach(model => {\r\n model.updateConfiguration(modelConfiguration);\r\n });\r\n\r\n this.onModelsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.models,\r\n newConfiguration: modelConfiguration\r\n });\r\n }*/\r\n\r\n protected _configureVR(vrConfig: IVRConfiguration) {\r\n if (vrConfig.disabled) {\r\n if (this._vrHelper) {\r\n if (this._vrHelper.isInVRMode) {\r\n this._vrHelper.exitVR();\r\n }\r\n this._vrHelper.dispose();\r\n this._vrHelper = undefined;\r\n }\r\n return;\r\n }\r\n const vrOptions: VRExperienceHelperOptions = deepmerge(\r\n {\r\n useCustomVRButton: true,\r\n createDeviceOrientationCamera: false,\r\n trackPosition: true,\r\n },\r\n vrConfig.vrOptions || {}\r\n );\r\n\r\n this._vrHelper = this.scene.createDefaultVRExperience(vrOptions);\r\n if (!vrConfig.disableInteractions) {\r\n this._vrHelper.enableInteractions();\r\n }\r\n if (!vrConfig.disableTeleportation) {\r\n const floorMeshName = vrConfig.overrideFloorMeshName || \"BackgroundPlane\";\r\n this._vrHelper.enableTeleportation({\r\n floorMeshName,\r\n });\r\n }\r\n if (vrConfig.rotateUsingControllers) {\r\n let rotationOffset: Quaternion | null;\r\n this._vrHelper.onControllerMeshLoadedObservable.add((controller) => {\r\n controller.onTriggerStateChangedObservable.add((data) => {\r\n if (controller.mesh && controller.mesh.rotationQuaternion) {\r\n if (data.pressed) {\r\n if (!rotationOffset) {\r\n this.models[0].rootMesh.rotationQuaternion = this.models[0].rootMesh.rotationQuaternion || new Quaternion();\r\n rotationOffset = controller.mesh.rotationQuaternion.conjugate().multiply(this.models[0].rootMesh.rotationQuaternion!);\r\n }\r\n } else {\r\n rotationOffset = null;\r\n }\r\n }\r\n });\r\n this.scene.registerBeforeRender(() => {\r\n if (this.models[0]) {\r\n if (rotationOffset && controller.mesh && controller.mesh.rotationQuaternion) {\r\n this.models[0].rootMesh.rotationQuaternion!.copyFrom(controller.mesh.rotationQuaternion).multiplyInPlace(rotationOffset);\r\n } else {\r\n this.models[0].rootMesh.rotationQuaternion = null;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n this._vrHelper.onEnteringVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this._vrHelper.onExitingVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onExitingVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this.onVRConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this._vrHelper,\r\n newConfiguration: vrConfig,\r\n });\r\n }\r\n\r\n protected _configureEnvironmentMap(environmentMapConfiguration: IEnvironmentMapConfiguration): any {\r\n if (environmentMapConfiguration.texture) {\r\n this.scene.environmentTexture = new CubeTexture(this._getAssetUrl(environmentMapConfiguration.texture), this.scene);\r\n }\r\n\r\n //sanity check\r\n if (this.scene.environmentTexture) {\r\n const rotatquatRotationionY = Quaternion.RotationAxis(Axis.Y, environmentMapConfiguration.rotationY || 0);\r\n Matrix.FromQuaternionToRef(rotatquatRotationionY, this.scene.environmentTexture.getReflectionTextureMatrix());\r\n }\r\n\r\n // process mainColor changes:\r\n if (environmentMapConfiguration.mainColor) {\r\n this._configurationContainer.mainColor = this.mainColor || Color3.White();\r\n const mc = environmentMapConfiguration.mainColor;\r\n if (mc.r !== undefined) {\r\n this.mainColor.r = mc.r;\r\n }\r\n if (mc.g !== undefined) {\r\n this.mainColor.g = mc.g;\r\n }\r\n if (mc.b !== undefined) {\r\n this.mainColor.b = mc.b;\r\n }\r\n\r\n this.reflectionColor.copyFrom(this.mainColor);\r\n\r\n const environmentTint = getConfigurationKey(\"environmentMap.tintLevel\", this._globalConfiguration) || 0;\r\n\r\n // reflection color\r\n this.reflectionColor.toLinearSpaceToRef(this.reflectionColor);\r\n this.reflectionColor.scaleToRef(1 / this.scene.imageProcessingConfiguration.exposure, this.reflectionColor);\r\n const tmpColor3 = Color3.Lerp(this._white, this.reflectionColor, environmentTint);\r\n this.reflectionColor.copyFrom(tmpColor3);\r\n\r\n //update the environment, if exists\r\n if (this.environmentHelper) {\r\n if (this.environmentHelper.groundMaterial) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n }\r\n\r\n if (this.environmentHelper.skyboxMaterial) {\r\n this.environmentHelper.skyboxMaterial._perceptualColor = this.mainColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * (Re) configure the camera. The camera will only be created once and from this point will only be reconfigured.\r\n * @param cameraConfig the new camera configuration\r\n */\r\n protected _configureCamera(cameraConfig: ICameraConfiguration = {}) {\r\n if (!this.scene.activeCamera) {\r\n // Inline scene.createDefaultCamera to reduce file size\r\n // Dispose existing camera in replace mode.\r\n if (this.scene.activeCamera) {\r\n (this.scene.activeCamera as ArcRotateCamera).dispose();\r\n this.scene.activeCamera = null;\r\n }\r\n // Camera\r\n if (!this.scene.activeCamera) {\r\n const worldExtends = this.scene.getWorldExtends();\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius)) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this.scene);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n const camera = arcRotateCamera;\r\n\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.scene.activeCamera = camera;\r\n }\r\n const canvas = this.scene.getEngine().getInputElement();\r\n if (canvas) {\r\n this.scene.activeCamera.attachControl();\r\n }\r\n\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n this.camera.setTarget(Vector3.Zero());\r\n }\r\n if (!this.camera) {\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n }\r\n if (cameraConfig.position) {\r\n const newPosition = this.camera.position.clone();\r\n extendClassWithConfig(newPosition, cameraConfig.position);\r\n this.camera.setPosition(newPosition);\r\n }\r\n\r\n if (cameraConfig.target) {\r\n const newTarget = this.camera.target.clone();\r\n extendClassWithConfig(newTarget, cameraConfig.target);\r\n this.camera.setTarget(newTarget);\r\n } /*else if (this.models.length && !cameraConfig.disableAutoFocus) {\r\n this._focusOnModel(this.models[0]);\r\n }*/\r\n\r\n if (cameraConfig.rotation) {\r\n this.camera.rotationQuaternion = new Quaternion(cameraConfig.rotation.x || 0, cameraConfig.rotation.y || 0, cameraConfig.rotation.z || 0, cameraConfig.rotation.w || 0);\r\n }\r\n\r\n if (cameraConfig.behaviors) {\r\n for (const name in cameraConfig.behaviors) {\r\n if (cameraConfig.behaviors[name] !== undefined) {\r\n this._setCameraBehavior(name, cameraConfig.behaviors[name]);\r\n }\r\n }\r\n }\r\n\r\n const sceneExtends = this.scene.getWorldExtends((mesh) => {\r\n return !this.environmentHelper || (mesh !== this.environmentHelper.ground && mesh !== this.environmentHelper.rootMesh && mesh !== this.environmentHelper.skybox);\r\n });\r\n const sceneDiagonal = sceneExtends.max.subtract(sceneExtends.min);\r\n const sceneDiagonalLength = sceneDiagonal.length();\r\n if (isFinite(sceneDiagonalLength)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLength * 4;\r\n }\r\n\r\n // sanity check!\r\n if (this.scene.imageProcessingConfiguration) {\r\n this.scene.imageProcessingConfiguration.colorCurvesEnabled = true;\r\n this.scene.imageProcessingConfiguration.vignetteEnabled = true;\r\n this.scene.imageProcessingConfiguration.toneMappingEnabled = !!getConfigurationKey(\"camera.toneMappingEnabled\", this._globalConfiguration);\r\n }\r\n\r\n extendClassWithConfig(this.camera, cameraConfig);\r\n\r\n this.onCameraConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.camera,\r\n newConfiguration: cameraConfig,\r\n });\r\n }\r\n\r\n private _focusOnModel = (model: ViewerModel) => {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n this.camera.setTarget(center);\r\n this.camera.alpha = (this._globalConfiguration.camera && this._globalConfiguration.camera.alpha) || this.camera.alpha;\r\n this.camera.beta = (this._globalConfiguration.camera && this._globalConfiguration.camera.beta) || this.camera.beta;\r\n this.camera.radius = (this._globalConfiguration.camera && this._globalConfiguration.camera.radius) || this.camera.radius;\r\n\r\n const sceneDiagonalLenght = sizeVec.length();\r\n if (isFinite(sceneDiagonalLenght)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLenght * 4;\r\n }\r\n\r\n if (this._configurationContainer.configuration) {\r\n this._configureEnvironment(this._configurationContainer.configuration.skybox, this._configurationContainer.configuration.ground);\r\n }\r\n /*this.scene.lights.filter(light => light instanceof ShadowLight).forEach(light => {\r\n // casting ais safe, due to the constraints tested before\r\n (<ShadowLight>light).setDirectionToTarget(center);\r\n });*/\r\n };\r\n\r\n protected _configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean) {\r\n if (!skyboxConifguration && !groundConfiguration) {\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = undefined;\r\n }\r\n } else {\r\n const options: Partial<IEnvironmentHelperOptions> = {\r\n createGround: !!groundConfiguration && this._groundEnabled,\r\n createSkybox: !!skyboxConifguration,\r\n setupImageProcessing: false, // will be done at the scene level!,\r\n };\r\n\r\n // will that cause problems with model ground configuration?\r\n /*if (model) {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n options.groundYBias = -center.y;\r\n }*/\r\n\r\n if (groundConfiguration) {\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n\r\n const groundSize = groundConfig.size || (typeof skyboxConifguration === \"object\" && skyboxConifguration.scale);\r\n if (groundSize) {\r\n options.groundSize = groundSize;\r\n }\r\n\r\n options.enableGroundShadow = groundConfiguration === true || groundConfig.receiveShadows;\r\n if (groundConfig.shadowLevel !== undefined) {\r\n options.groundShadowLevel = groundConfig.shadowLevel;\r\n }\r\n options.enableGroundMirror = !!groundConfig.mirror && this.groundMirrorEnabled;\r\n if (groundConfig.texture) {\r\n options.groundTexture = this._getAssetUrl(groundConfig.texture);\r\n }\r\n if (groundConfig.color) {\r\n options.groundColor = new Color3(groundConfig.color.r, groundConfig.color.g, groundConfig.color.b);\r\n }\r\n\r\n if (groundConfig.opacity !== undefined) {\r\n options.groundOpacity = groundConfig.opacity;\r\n }\r\n\r\n if (groundConfig.mirror) {\r\n options.enableGroundMirror = true;\r\n // to prevent undefines\r\n if (typeof groundConfig.mirror === \"object\") {\r\n if (groundConfig.mirror.amount !== undefined) {\r\n options.groundMirrorAmount = groundConfig.mirror.amount;\r\n }\r\n if (groundConfig.mirror.sizeRatio !== undefined) {\r\n options.groundMirrorSizeRatio = groundConfig.mirror.sizeRatio;\r\n }\r\n if (groundConfig.mirror.blurKernel !== undefined) {\r\n options.groundMirrorBlurKernel = groundConfig.mirror.blurKernel;\r\n }\r\n if (groundConfig.mirror.fresnelWeight !== undefined) {\r\n options.groundMirrorFresnelWeight = groundConfig.mirror.fresnelWeight;\r\n }\r\n if (groundConfig.mirror.fallOffDistance !== undefined) {\r\n options.groundMirrorFallOffDistance = groundConfig.mirror.fallOffDistance;\r\n }\r\n if (this._defaultPipelineTextureType !== undefined) {\r\n options.groundMirrorTextureType = this._defaultPipelineTextureType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let postInitSkyboxMaterial = false;\r\n if (skyboxConifguration) {\r\n const conf = skyboxConifguration === true ? {} : skyboxConifguration;\r\n if (conf.material && conf.material.imageProcessingConfiguration) {\r\n options.setupImageProcessing = false; // will be configured later manually.\r\n }\r\n const skyboxSize = conf.scale;\r\n if (skyboxSize) {\r\n options.skyboxSize = skyboxSize;\r\n }\r\n options.sizeAuto = !options.skyboxSize;\r\n if (conf.color) {\r\n options.skyboxColor = new Color3(conf.color.r, conf.color.g, conf.color.b);\r\n }\r\n if (conf.cubeTexture && conf.cubeTexture.url) {\r\n if (typeof conf.cubeTexture.url === \"string\") {\r\n options.skyboxTexture = this._getAssetUrl(conf.cubeTexture.url);\r\n } else {\r\n // init later!\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n if (conf.material) {\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n options.setupImageProcessing = false; // TMP\r\n\r\n if (!this.environmentHelper) {\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // unlikely, but there might be a new scene! we need to dispose.\r\n\r\n // get the scene used by the envHelper\r\n const scene: Scene = this.environmentHelper.rootMesh.getScene();\r\n // is it a different scene? Oh no!\r\n if (scene !== this.scene) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // recreate the ground\r\n if (this.environmentHelper.ground) {\r\n this.environmentHelper.ground.dispose();\r\n }\r\n // recreate the skybox\r\n if (this.environmentHelper.skybox) {\r\n this.environmentHelper.skybox.dispose();\r\n }\r\n\r\n this.environmentHelper.updateOptions(options)!;\r\n // update doesn't change the size of the skybox and ground, so we have to recreate!\r\n //this.environmentHelper.dispose();\r\n //this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n }\r\n }\r\n\r\n if (this.environmentHelper.rootMesh && this._globalConfiguration.scene && this._globalConfiguration.scene.environmentRotationY !== undefined) {\r\n this.environmentHelper.rootMesh.rotation.y = this._globalConfiguration.scene.environmentRotationY;\r\n }\r\n\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n if (this.environmentHelper.groundMaterial && groundConfig) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n if (groundConfig.material) {\r\n extendClassWithConfig(this.environmentHelper.groundMaterial, groundConfig.material);\r\n }\r\n\r\n if (this.environmentHelper.groundMirror) {\r\n const mirrorClearColor = this.environmentHelper.groundMaterial._perceptualColor.toLinearSpace();\r\n // TODO user camera exposure value to set the mirror clear color\r\n const exposure = Math.pow(2.0, -this.scene.imageProcessingConfiguration.exposure) * Math.PI;\r\n mirrorClearColor.scaleToRef(1 / exposure, mirrorClearColor);\r\n\r\n this.environmentHelper.groundMirror.clearColor.r = Scalar.Clamp(mirrorClearColor.r);\r\n this.environmentHelper.groundMirror.clearColor.g = Scalar.Clamp(mirrorClearColor.g);\r\n this.environmentHelper.groundMirror.clearColor.b = Scalar.Clamp(mirrorClearColor.b);\r\n this.environmentHelper.groundMirror.clearColor.a = 1;\r\n\r\n if (!this.groundMirrorEnabled) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n }\r\n }\r\n }\r\n\r\n const skyboxMaterial = this.environmentHelper.skyboxMaterial;\r\n if (skyboxMaterial) {\r\n skyboxMaterial._perceptualColor = this.mainColor;\r\n\r\n if (postInitSkyboxMaterial) {\r\n if (typeof skyboxConifguration === \"object\" && skyboxConifguration.material) {\r\n extendClassWithConfig(skyboxMaterial, skyboxConifguration.material);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateGroundMirrorRenderList(model);\r\n });\r\n\r\n this.onEnvironmentConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.environmentHelper!,\r\n newConfiguration: {\r\n skybox: skyboxConifguration,\r\n ground: groundConfiguration,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * configure the lights.\r\n * @param lightsConfiguration the (new) light(s) configuration\r\n */\r\n protected _configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean | number } = {}) {\r\n // sanity check!\r\n const lightKeys = Object.keys(lightsConfiguration).filter((name) => name !== \"globalRotation\");\r\n\r\n if (!lightKeys.length) {\r\n if (!this.scene.lights.length) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this.scene);\r\n }\r\n } else {\r\n let lightsAvailable: Array<string> = this.scene.lights.map((light) => light.name);\r\n // compare to the global (!) configuration object and dispose unneeded:\r\n const lightsToConfigure = Object.keys(this._globalConfiguration.lights || []);\r\n if (Object.keys(lightsToConfigure).length !== lightsAvailable.length) {\r\n lightsAvailable.forEach((lName) => {\r\n if (lightsToConfigure.indexOf(lName) === -1) {\r\n this.scene.getLightByName(lName)!.dispose();\r\n }\r\n });\r\n }\r\n\r\n lightKeys.forEach((name) => {\r\n let lightConfig: ILightConfiguration = { type: 0 };\r\n if (typeof lightsConfiguration[name] === \"object\") {\r\n lightConfig = <ILightConfiguration>lightsConfiguration[name];\r\n }\r\n if (typeof lightsConfiguration[name] === \"number\") {\r\n lightConfig.type = <number>lightsConfiguration[name];\r\n }\r\n\r\n lightConfig.name = name;\r\n\r\n let light: Light;\r\n // light is not already available\r\n if (lightsAvailable.indexOf(name) === -1) {\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n } else {\r\n // available? get it from the scene\r\n light = <Light>this.scene.getLightByName(name);\r\n if (typeof lightsConfiguration[name] === \"boolean\") {\r\n lightConfig.type = light.getTypeID();\r\n }\r\n lightsAvailable = lightsAvailable.filter((ln) => ln !== name);\r\n if (lightConfig.type !== undefined && light.getTypeID() !== lightConfig.type) {\r\n light.dispose();\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n }\r\n }\r\n\r\n // if config set the light to false, dispose it.\r\n if (lightsConfiguration[name] === false) {\r\n light.dispose();\r\n return;\r\n }\r\n\r\n //enabled\r\n const enabled = lightConfig.enabled !== undefined ? lightConfig.enabled : !lightConfig.disabled;\r\n light.setEnabled(enabled);\r\n\r\n extendClassWithConfig(light, lightConfig);\r\n\r\n //position. Some lights don't support shadows\r\n if (light instanceof ShadowLight) {\r\n // set default values\r\n light.shadowMinZ = light.shadowMinZ || 0.2;\r\n light.shadowMaxZ = Math.min(10, light.shadowMaxZ || 10); //large far clips reduce shadow depth precision\r\n\r\n if (lightConfig.target) {\r\n if (light.setDirectionToTarget) {\r\n const target = Vector3.Zero().copyFromFloats(lightConfig.target.x, lightConfig.target.y, lightConfig.target.z);\r\n light.setDirectionToTarget(target);\r\n }\r\n } else if (lightConfig.direction) {\r\n const direction = Vector3.Zero().copyFromFloats(lightConfig.direction.x, lightConfig.direction.y, lightConfig.direction.z);\r\n light.direction = direction;\r\n }\r\n\r\n let isShadowEnabled = false;\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n (<DirectionalLight>light).shadowFrustumSize = lightConfig.shadowFrustumSize || 2;\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spotLight: SpotLight = <SpotLight>light;\r\n if (lightConfig.spotAngle !== undefined) {\r\n spotLight.angle = (lightConfig.spotAngle * Math.PI) / 180;\r\n }\r\n if (spotLight.angle && lightConfig.shadowFieldOfView) {\r\n spotLight.shadowAngleScale = lightConfig.shadowFieldOfView / spotLight.angle;\r\n }\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n if (lightConfig.shadowFieldOfView) {\r\n (<PointLight>light).shadowAngle = (lightConfig.shadowFieldOfView * Math.PI) / 180;\r\n }\r\n isShadowEnabled = true;\r\n }\r\n\r\n let shadowGenerator = <ShadowGenerator>light.getShadowGenerator();\r\n if (isShadowEnabled && lightConfig.shadowEnabled && this._maxShadows) {\r\n const bufferSize = lightConfig.shadowBufferSize || 256;\r\n\r\n if (!shadowGenerator) {\r\n shadowGenerator = new ShadowGenerator(bufferSize, light);\r\n }\r\n\r\n const blurKernel = this.getBlurKernel(light, bufferSize);\r\n shadowGenerator.bias = this._shadowGeneratorBias;\r\n shadowGenerator.blurKernel = blurKernel;\r\n //override defaults\r\n extendClassWithConfig(shadowGenerator, lightConfig.shadowConfig || {});\r\n\r\n // add the focus meshes to the shadow list\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateShadowRenderList(shadowGenerator, model);\r\n });\r\n\r\n //if (model) {\r\n this._updateShadowRenderList(shadowGenerator);\r\n //}\r\n } else if (shadowGenerator) {\r\n shadowGenerator.dispose();\r\n }\r\n }\r\n });\r\n\r\n // render priority\r\n const globalLightsConfiguration = this._globalConfiguration.lights || {};\r\n Object.keys(globalLightsConfiguration)\r\n .sort()\r\n .forEach((name, idx) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const configuration = globalLightsConfiguration[name];\r\n const light = this.scene.getLightByName(name);\r\n // sanity check\r\n if (!light) {\r\n return;\r\n }\r\n light.renderPriority = -idx;\r\n });\r\n }\r\n\r\n this.onLightsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene.lights,\r\n newConfiguration: lightsConfiguration,\r\n });\r\n }\r\n\r\n private _shadowGroundPlane: Nullable<AbstractMesh>;\r\n\r\n private _updateShadowRenderList(shadowGenerator: ShadowGenerator, model?: ViewerModel, resetList?: boolean) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n // add the focus meshes to the shadow list\r\n const shadownMap = shadowGenerator.getShadowMap();\r\n if (!shadownMap) {\r\n return;\r\n }\r\n if (resetList && shadownMap.renderList) {\r\n shadownMap.renderList.length = 0;\r\n } else {\r\n shadownMap.renderList = shadownMap.renderList || [];\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (Tags.MatchesQuery(mesh, \"castShadow\") && shadownMap.renderList.indexOf(mesh) === -1) {\r\n shadownMap.renderList.push(mesh);\r\n }\r\n }\r\n\r\n if (!this._shadowGroundPlane) {\r\n if (shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n const shadowGroundPlane = CreatePlane(\"shadowGroundPlane\", { size: 100 }, this.scene);\r\n shadowGroundPlane.useVertexColors = false;\r\n //material isn't ever used in rendering, just used to set back face culling\r\n shadowGroundPlane.material = new PBRMaterial(\"shadowGroundPlaneMaterial\", this.scene);\r\n shadowGroundPlane.material.backFaceCulling = false;\r\n shadowGroundPlane.rotation.x = Math.PI * 0.5;\r\n shadowGroundPlane.freezeWorldMatrix();\r\n this._shadowGroundPlane = shadowGroundPlane;\r\n this.scene.removeMesh(shadowGroundPlane);\r\n }\r\n } else {\r\n if (!shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n this._shadowGroundPlane.dispose();\r\n this._shadowGroundPlane = null;\r\n }\r\n }\r\n\r\n if (this._shadowGroundPlane && shadownMap.renderList.indexOf(this._shadowGroundPlane) === -1) {\r\n shadownMap.renderList.push(this._shadowGroundPlane);\r\n }\r\n }\r\n\r\n private _updateGroundMirrorRenderList(model?: ViewerModel, resetList?: boolean) {\r\n if (this.environmentHelper && this.environmentHelper.groundMirror && this.environmentHelper.groundMirror.renderList) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n const renderList = this.environmentHelper.groundMirror.renderList;\r\n if (resetList) {\r\n renderList.length = 0;\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (renderList.indexOf(mesh) === -1) {\r\n renderList.push(mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the shadow map blur kernel according to the light configuration.\r\n * @param light The light used to generate the shadows\r\n * @param bufferSize The size of the shadow map\r\n * @returns the kernel blur size\r\n */\r\n public getBlurKernel(light: IShadowLight, bufferSize: number): number {\r\n let normalizedBlurKernel = 0.05; // TODO Should come from the config.\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<DirectionalLight>light).shadowFrustumSize;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<PointLight>light).shadowAngle;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / ((<SpotLight>light).angle * (<SpotLight>light).shadowAngleScale);\r\n }\r\n\r\n const minimumBlurKernel = 5 / (bufferSize / 256); //magic number that aims to keep away sawtooth shadows\r\n\r\n const blurKernel = Math.max(bufferSize * normalizedBlurKernel, minimumBlurKernel);\r\n return blurKernel;\r\n }\r\n\r\n /**\r\n * Alters render settings to reduce features based on hardware feature limitations\r\n * @param enableHDR Allows the viewer to run in HDR mode.\r\n */\r\n protected _handleHardwareLimitations(enableHDR = true) {\r\n //flip rendering settings switches based on hardware support\r\n const maxVaryingRows = this._engine.getCaps().maxVaryingVectors;\r\n const maxFragmentSamplers = this._engine.getCaps().maxTexturesImageUnits;\r\n\r\n //shadows are disabled if there's not enough varyings for a single shadow\r\n if (maxVaryingRows < 8 || maxFragmentSamplers < 8) {\r\n this._maxShadows = 0;\r\n } else {\r\n this._maxShadows = 3;\r\n }\r\n\r\n //can we render to any >= 16-bit targets (required for HDR)\r\n const caps = this._engine.getCaps();\r\n const linearHalfFloatTargets = caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering;\r\n const linearFloatTargets = caps.textureFloatRender && caps.textureFloatLinearFiltering;\r\n\r\n this._hdrSupport = enableHDR && !!(linearFloatTargets || linearHalfFloatTargets);\r\n\r\n if (linearHalfFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n this._shadowGeneratorBias = 0.002;\r\n } else if (linearFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_FLOAT;\r\n this._shadowGeneratorBias = 0.001;\r\n } else {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n this._shadowGeneratorBias = 0.001;\r\n }\r\n\r\n this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n // this.onCameraConfiguredObservable.clear();\r\n this.onEnvironmentConfiguredObservable.clear();\r\n this.onLightsConfiguredObservable.clear();\r\n this.onModelsConfiguredObservable.clear();\r\n this.onSceneConfiguredObservable.clear();\r\n this.onSceneInitObservable.clear();\r\n this.onSceneOptimizerConfiguredObservable.clear();\r\n this.onVRConfiguredObservable.clear();\r\n\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n }\r\n\r\n this.models.forEach((model) => {\r\n model.dispose();\r\n });\r\n\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n }\r\n\r\n this.models.length = 0;\r\n\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Get an environment asset url by using the configuration if the path is not absolute.\r\n * @param url Asset url\r\n * @returns The Asset url using the `environmentAssetsRootURL` if the url is not an absolute path.\r\n */\r\n private _getAssetUrl(url: string): string {\r\n let returnUrl = url;\r\n if (url && url.toLowerCase().indexOf(\"//\") === -1) {\r\n if (!this._assetsRootURL) {\r\n // Tools.Warn(\"Please, specify the root url of your assets before loading the configuration (labs.environmentAssetsRootURL) or disable the background through the viewer options.\");\r\n return url;\r\n }\r\n\r\n returnUrl = this._assetsRootURL + returnUrl;\r\n }\r\n\r\n return returnUrl;\r\n }\r\n\r\n private _cameraBehaviorMapping: { [name: string]: number } = {};\r\n\r\n private _setCameraBehavior(\r\n name: string,\r\n behaviorConfig:\r\n | boolean\r\n | number\r\n | {\r\n type: number;\r\n [propName: string]: any;\r\n }\r\n ) {\r\n let behavior: Behavior<ArcRotateCamera> | null;\r\n let type: number;\r\n if (typeof behaviorConfig === \"object\") {\r\n type = behaviorConfig.type;\r\n } else if (typeof behaviorConfig === \"number\") {\r\n type = behaviorConfig;\r\n } else {\r\n type = this._cameraBehaviorMapping[name];\r\n }\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n const config: { [propName: string]: any } = typeof behaviorConfig === \"object\" ? behaviorConfig : {};\r\n\r\n let enabled = true;\r\n if (typeof behaviorConfig === \"boolean\") {\r\n enabled = behaviorConfig;\r\n }\r\n\r\n // constructing behavior\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n this.camera.useAutoRotationBehavior = enabled;\r\n behavior = this.camera.autoRotationBehavior;\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n this.camera.useBouncingBehavior = enabled;\r\n behavior = this.camera.bouncingBehavior;\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this.camera.useFramingBehavior = enabled;\r\n behavior = this.camera.framingBehavior;\r\n break;\r\n default:\r\n behavior = null;\r\n break;\r\n }\r\n\r\n if (behavior) {\r\n this._cameraBehaviorMapping[name] = type;\r\n\r\n if (typeof behaviorConfig === \"object\") {\r\n extendClassWithConfig(behavior, behaviorConfig);\r\n }\r\n }\r\n\r\n // post attach configuration. Some functionalities require the attached camera.\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n if (config.zoomOnBoundingInfo) {\r\n (<FramingBehavior>behavior).zoomOnMeshHierarchy(model.rootMesh);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"sceneManager.js","sourceRoot":"","sources":["../../../../tools/viewer/src/managers/sceneManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n ILightConfiguration,\r\n ISceneConfiguration,\r\n ISceneOptimizerConfiguration,\r\n ICameraConfiguration,\r\n ISkyboxConfiguration,\r\n IGroundConfiguration,\r\n IModelConfiguration,\r\n IDefaultRenderingPipelineConfiguration,\r\n IVRConfiguration,\r\n} from \"../configuration/interfaces/index\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { getConfigurationKey } from \"../configuration/configuration\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { ModelState } from \"../model/viewerModel\";\r\nimport { extendClassWithConfig, deepmerge } from \"../helper/index\";\r\nimport { CameraBehavior } from \"../interfaces\";\r\nimport { ViewerLabs } from \"../labs/viewerLabs\";\r\nimport { getCustomOptimizerByName } from \"../optimizer/custom/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport type { IEnvironmentMapConfiguration } from \"../configuration/interfaces/environmentMapConfiguration\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { SceneOptimizer, SceneOptimizerOptions } from \"core/Misc/sceneOptimizer\";\r\nimport { ArcRotateCamera } from \"core/Cameras/arcRotateCamera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport type { IEnvironmentHelperOptions } from \"core/Helpers/environmentHelper\";\r\nimport { EnvironmentHelper } from \"core/Helpers/environmentHelper\";\r\nimport type { VRExperienceHelper, VRExperienceHelperOptions } from \"core/Cameras/VR/vrExperienceHelper\";\r\nimport { Color3, Quaternion, Vector3, Axis, Matrix } from \"core/Maths/math\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { DefaultRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Animation } from \"core/Animations/index\";\r\nimport { AnimationPropertiesOverride } from \"core/Animations/animationPropertiesOverride\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport type { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { HemisphericLight } from \"core/Lights/hemisphericLight\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport type { PointLight } from \"core/Lights/pointLight\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Behavior } from \"core/Behaviors/behavior\";\r\nimport type { FramingBehavior } from \"core/Behaviors/Cameras/framingBehavior\";\r\nimport { Scene } from \"core/scene\";\r\nimport { ShadowGenerator } from \"core/Lights/Shadows/shadowGenerator\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport \"core/Audio/audioSceneComponent\";\r\nimport \"core/Helpers/sceneHelpers\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\n/**\r\n * This interface describes the structure of the variable sent with the configuration observables of the scene manager.\r\n * O - the type of object we are dealing with (Light, ArcRotateCamera, Scene, etc')\r\n * T - the configuration type\r\n */\r\nexport interface IPostConfigurationCallback<OBJ, CONF> {\r\n newConfiguration: CONF;\r\n sceneManager: SceneManager;\r\n object: OBJ;\r\n model?: ViewerModel;\r\n}\r\n\r\nexport class SceneManager {\r\n //Observers\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n onSceneInitObservable: Observable<Scene>;\r\n /**\r\n * Will notify after the scene was configured. Can be used to further configure the scene\r\n */\r\n onSceneConfiguredObservable: Observable<IPostConfigurationCallback<Scene, ISceneConfiguration>>;\r\n /**\r\n * Will notify after the scene optimized was configured. Can be used to further configure the scene optimizer\r\n */\r\n onSceneOptimizerConfiguredObservable: Observable<IPostConfigurationCallback<SceneOptimizer, ISceneOptimizerConfiguration | boolean>>;\r\n /**\r\n * Will notify after the camera was configured. Can be used to further configure the camera\r\n */\r\n onCameraConfiguredObservable: Observable<IPostConfigurationCallback<ArcRotateCamera, ICameraConfiguration>>;\r\n /**\r\n * Will notify after the lights were configured. Can be used to further configure lights\r\n */\r\n onLightsConfiguredObservable: Observable<IPostConfigurationCallback<Array<Light>, { [name: string]: ILightConfiguration | boolean | number }>>;\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onModelsConfiguredObservable: Observable<IPostConfigurationCallback<Array<ViewerModel>, IModelConfiguration>>;\r\n /**\r\n * Will notify after the environment was configured. Can be used to further configure the environment\r\n */\r\n onEnvironmentConfiguredObservable: Observable<\r\n IPostConfigurationCallback<EnvironmentHelper, { skybox?: ISkyboxConfiguration | boolean; ground?: IGroundConfiguration | boolean }>\r\n >;\r\n\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onVRConfiguredObservable: Observable<IPostConfigurationCallback<VRExperienceHelper, IVRConfiguration>>;\r\n\r\n /**\r\n * The Babylon Scene of this viewer\r\n */\r\n public scene: Scene;\r\n /**\r\n * The camera used in this viewer\r\n */\r\n public camera: ArcRotateCamera;\r\n /**\r\n * Babylon's scene optimizer\r\n */\r\n public sceneOptimizer?: SceneOptimizer;\r\n /**\r\n * Models displayed in this viewer.\r\n */\r\n public models: Array<ViewerModel>;\r\n /**\r\n * Babylon's environment helper of this viewer\r\n */\r\n public environmentHelper?: EnvironmentHelper;\r\n\r\n //The following are configuration objects, default values.\r\n protected _defaultHighpTextureType: number;\r\n protected _shadowGeneratorBias: number;\r\n protected _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * The maximum number of shadows supported by the current viewer\r\n */\r\n protected _maxShadows: number;\r\n /**\r\n * is HDR supported?\r\n */\r\n private _hdrSupport: boolean;\r\n\r\n private readonly _white = Color3.White();\r\n\r\n private _forceShadowUpdate: boolean = false;\r\n\r\n /**\r\n * The labs variable consists of objects that will have their API change.\r\n * Please be careful when using labs in production.\r\n */\r\n public labs: ViewerLabs;\r\n\r\n private _defaultRenderingPipeline: Nullable<DefaultRenderingPipeline>;\r\n\r\n private _assetsRootURL: string;\r\n\r\n public get defaultRenderingPipeline() {\r\n return this._defaultRenderingPipeline;\r\n }\r\n\r\n protected _vrHelper?: VRExperienceHelper;\r\n\r\n public get vrHelper() {\r\n return this._vrHelper;\r\n }\r\n\r\n constructor(private _engine: Engine, private _configurationContainer: ConfigurationContainer, private _observablesManager?: ObservablesManager) {\r\n this.models = [];\r\n\r\n this.onCameraConfiguredObservable = new Observable();\r\n this.onLightsConfiguredObservable = new Observable();\r\n this.onModelsConfiguredObservable = new Observable();\r\n this.onSceneConfiguredObservable = new Observable();\r\n this.onSceneInitObservable = new Observable();\r\n this.onSceneOptimizerConfiguredObservable = new Observable();\r\n this.onEnvironmentConfiguredObservable = new Observable();\r\n this.onVRConfiguredObservable = new Observable();\r\n\r\n //this._viewer.onEngineInitObservable.add(() => {\r\n this._handleHardwareLimitations();\r\n //});\r\n\r\n this.onSceneInitObservable.add((scene) => {\r\n this.scene.animationPropertiesOverride = this.scene.animationPropertiesOverride || new AnimationPropertiesOverride();\r\n\r\n this.labs = new ViewerLabs(scene);\r\n\r\n const updateShadows = () => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n scene.registerBeforeRender(() => {\r\n if (this._forceShadowUpdate || (scene.animatables && scene.animatables.length > 0)) {\r\n // make sure all models are loaded\r\n updateShadows();\r\n this._forceShadowUpdate = false;\r\n } else if (\r\n !this.models.every((model) => {\r\n if (!model.shadowsRenderedAfterLoad) {\r\n model.shadowsRenderedAfterLoad = true;\r\n return false;\r\n }\r\n return model.state === ModelState.COMPLETE && !model.currentAnimation;\r\n })\r\n ) {\r\n updateShadows();\r\n }\r\n });\r\n return this._observablesManager && this._observablesManager.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n });\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n this._focusOnModel(model);\r\n });\r\n\r\n this._observablesManager.onModelAddedObservable.add((model) => {\r\n this.models.push(model);\r\n });\r\n this._observablesManager.onModelRemovedObservable.add((model) => {\r\n this.models.splice(this.models.indexOf(model), 1);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean representing HDR support\r\n */\r\n public get isHdrSupported() {\r\n return this._hdrSupport;\r\n }\r\n\r\n /**\r\n * Return the main color defined in the configuration.\r\n */\r\n public get mainColor(): Color3 {\r\n return this._configurationContainer.mainColor;\r\n }\r\n\r\n public get reflectionColor(): Color3 {\r\n return this._configurationContainer.reflectionColor;\r\n }\r\n\r\n public get animationBlendingEnabled() {\r\n return this.scene && this.scene.animationPropertiesOverride!.enableBlending;\r\n }\r\n\r\n public set animationBlendingEnabled(value: boolean) {\r\n this.scene.animationPropertiesOverride!.enableBlending = value;\r\n }\r\n\r\n public get observablesManager() {\r\n return this._observablesManager;\r\n }\r\n\r\n private _processShadows: boolean = true;\r\n\r\n /**\r\n * The flag defining whether shadows are rendered constantly or once.\r\n */\r\n public get processShadows() {\r\n return this._processShadows;\r\n }\r\n\r\n /**\r\n * Should shadows be rendered every frame, or only once and stop.\r\n * This can be used to optimize a scene.\r\n *\r\n * Not that the shadows will NOT disapear but will remain in place.\r\n * @param process if true shadows will be updated once every frame. if false they will stop being updated.\r\n */\r\n public set processShadows(process: boolean) {\r\n const refreshType = process ? RenderTargetTexture.REFRESHRATE_RENDER_ONEVERYFRAME : RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n\r\n if (generators) {\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = refreshType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._processShadows = process;\r\n }\r\n\r\n private _groundEnabled: boolean = true;\r\n\r\n public get groundEnabled() {\r\n return this._groundEnabled;\r\n }\r\n\r\n public set groundEnabled(newValue: boolean) {\r\n if (newValue === this._groundEnabled) {\r\n return;\r\n }\r\n\r\n this._groundEnabled = newValue;\r\n\r\n if (this.environmentHelper && this.environmentHelper.ground) {\r\n this.environmentHelper.ground.setEnabled(this._groundEnabled);\r\n }\r\n }\r\n\r\n private _groundMirrorEnabled = true;\r\n /**\r\n * gets whether the reflection is disabled.\r\n */\r\n public get groundMirrorEnabled(): boolean {\r\n return this._groundMirrorEnabled;\r\n }\r\n /**\r\n * sets whether the reflection is disabled.\r\n */\r\n public set groundMirrorEnabled(value: boolean) {\r\n if (this._groundMirrorEnabled === value) {\r\n return;\r\n }\r\n\r\n this._groundMirrorEnabled = value;\r\n if (this.environmentHelper && this.environmentHelper.groundMaterial && this.environmentHelper.groundMirror) {\r\n if (!value) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n } else {\r\n this.environmentHelper.groundMaterial.reflectionTexture = this.environmentHelper.groundMirror;\r\n }\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineEnabled: boolean = false;\r\n\r\n public get defaultRenderingPipelineEnabled() {\r\n return this._defaultRenderingPipelineEnabled;\r\n }\r\n\r\n public set defaultRenderingPipelineEnabled(value: boolean) {\r\n if (value === this._defaultRenderingPipelineEnabled) {\r\n return;\r\n }\r\n\r\n this._defaultRenderingPipelineEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the engine flags to unlock all babylon features.\r\n * Can also be configured using the scene.flags configuration object\r\n */\r\n public unlockBabylonFeatures() {\r\n this.scene.shadowsEnabled = true;\r\n this.scene.particlesEnabled = true;\r\n this.scene.postProcessesEnabled = true;\r\n this.scene.collisionsEnabled = true;\r\n this.scene.lightsEnabled = true;\r\n this.scene.texturesEnabled = true;\r\n this.scene.lensFlaresEnabled = true;\r\n this.scene.proceduralTexturesEnabled = true;\r\n this.scene.renderTargetsEnabled = true;\r\n this.scene.spritesEnabled = true;\r\n this.scene.skeletonsEnabled = true;\r\n this.scene.audioEnabled = true;\r\n }\r\n\r\n /**\r\n * initialize the scene. Calling this function again will dispose the old scene, if exists.\r\n * @param sceneConfiguration\r\n */\r\n public initScene(sceneConfiguration: ISceneConfiguration = {}): Promise<Scene> {\r\n // if the scene exists, dispose it.\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n\r\n // create a new scene\r\n this.scene = new Scene(this._engine);\r\n\r\n this._configurationContainer.scene = this.scene;\r\n\r\n // set a default PBR material\r\n if (!sceneConfiguration.defaultMaterial) {\r\n const defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n defaultMaterial.reflectivityColor = new Color3(0.1, 0.1, 0.1);\r\n defaultMaterial.microSurface = 0.6;\r\n\r\n if (this.scene.defaultMaterial) {\r\n this.scene.defaultMaterial.dispose();\r\n }\r\n\r\n this.scene.defaultMaterial = defaultMaterial;\r\n }\r\n\r\n this.scene.animationPropertiesOverride = new AnimationPropertiesOverride();\r\n\r\n Animation.AllowMatricesInterpolation = true;\r\n\r\n /*if (sceneConfiguration.glow) {\r\n let options: Partial<IGlowLayerOptions> = {\r\n mainTextureFixedSize: 512\r\n };\r\n if (typeof sceneConfiguration.glow === 'object') {\r\n options = sceneConfiguration.glow\r\n }\r\n var gl = new GlowLayer(\"glow\", this.scene, options);\r\n }*/\r\n\r\n return this.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n }\r\n\r\n public clearScene(clearModels: boolean = true, clearLights: boolean = false) {\r\n if (clearModels) {\r\n this.models.forEach((m) => m.dispose());\r\n this.models.length = 0;\r\n }\r\n if (clearLights) {\r\n this.scene.lights.forEach((l) => l.dispose());\r\n }\r\n }\r\n\r\n private _globalConfiguration: ViewerConfiguration = {};\r\n\r\n /**\r\n * This will update the scene's configuration, including camera, lights, environment.\r\n * @param newConfiguration the delta that should be configured. This includes only the changes\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration>) {\r\n if (this._configurationContainer) {\r\n this._globalConfiguration = this._configurationContainer.configuration;\r\n } else {\r\n this._globalConfiguration = newConfiguration;\r\n }\r\n\r\n // update scene configuration\r\n if (newConfiguration.scene) {\r\n this._configureScene(newConfiguration.scene);\r\n }\r\n\r\n // optimizer\r\n if (newConfiguration.optimizer !== undefined) {\r\n this._configureOptimizer(newConfiguration.optimizer);\r\n }\r\n\r\n // configure model\r\n /*if (newConfiguration.model && typeof newConfiguration.model === 'object') {\r\n this._configureModel(newConfiguration.model);\r\n }*/\r\n\r\n // lights\r\n this._configureLights(newConfiguration.lights);\r\n\r\n // environment\r\n if (newConfiguration.skybox !== undefined || newConfiguration.ground !== undefined) {\r\n this._configureEnvironment(newConfiguration.skybox, newConfiguration.ground);\r\n }\r\n\r\n // camera\r\n this._configureCamera(newConfiguration.camera);\r\n\r\n if (newConfiguration.environmentMap !== undefined) {\r\n this._configureEnvironmentMap(newConfiguration.environmentMap);\r\n }\r\n\r\n if (newConfiguration.vr !== undefined) {\r\n this._configureVR(newConfiguration.vr);\r\n }\r\n\r\n if (newConfiguration.lab) {\r\n // rendering pipelines\r\n if (newConfiguration.lab.defaultRenderingPipelines) {\r\n const pipelineConfig = newConfiguration.lab.defaultRenderingPipelines;\r\n if (typeof pipelineConfig === \"boolean\") {\r\n this.defaultRenderingPipelineEnabled = pipelineConfig;\r\n } else {\r\n this.defaultRenderingPipelineEnabled = true;\r\n }\r\n }\r\n\r\n if (this.environmentHelper && newConfiguration.lab.environmentMainColor) {\r\n const mainColor = new Color3(newConfiguration.lab.environmentMainColor.r, newConfiguration.lab.environmentMainColor.g, newConfiguration.lab.environmentMainColor.b);\r\n this.environmentHelper.setMainColor(mainColor);\r\n }\r\n\r\n if (newConfiguration.lab.globalLightRotation !== undefined) {\r\n // rotate all lights that are shadow lights\r\n this.scene.lights\r\n .filter((light) => light instanceof ShadowLight)\r\n .forEach((light) => {\r\n // casting and '!' are safe, due to the constraints tested before\r\n this.labs.rotateShadowLight(<ShadowLight>light, newConfiguration.lab!.globalLightRotation!);\r\n });\r\n this._forceShadowUpdate = true;\r\n }\r\n }\r\n\r\n if (this._defaultRenderingPipeline && this._defaultRenderingPipeline.imageProcessing) {\r\n this._defaultRenderingPipeline.imageProcessing.fromLinearSpace = true;\r\n }\r\n\r\n if (this._defaultRenderingPipelineShouldBuild && this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineShouldBuild: boolean = true;\r\n\r\n private _rebuildPostprocesses(configuration?: IDefaultRenderingPipelineConfiguration): void {\r\n if (!this._defaultRenderingPipelineEnabled || !getConfigurationKey(\"scene.imageProcessingConfiguration.isEnabled\", this._globalConfiguration)) {\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n this._defaultRenderingPipeline = null;\r\n this.scene.autoClearDepthAndStencil = true;\r\n this.scene.autoClear = true;\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const pipelineConfig = configuration || (this._globalConfiguration.lab && this._globalConfiguration.lab.defaultRenderingPipelines);\r\n if (pipelineConfig) {\r\n if (!this._defaultRenderingPipeline) {\r\n // Create pipeline in manual mode to avoid triggering multiple shader compilations\r\n this._defaultRenderingPipeline = new DefaultRenderingPipeline(\"default rendering pipeline\", this._hdrSupport, this.scene, [this.camera], false);\r\n }\r\n this.scene.autoClear = false;\r\n this.scene.autoClearDepthAndStencil = false;\r\n this._defaultRenderingPipelineShouldBuild = true;\r\n\r\n let bloomEnabled = this._bloomEnabled;\r\n\r\n if (typeof pipelineConfig !== \"boolean\") {\r\n extendClassWithConfig(this._defaultRenderingPipeline, pipelineConfig);\r\n this._bloomEnabled = !!pipelineConfig.bloomEnabled;\r\n this._fxaaEnabled = !!pipelineConfig.fxaaEnabled;\r\n bloomEnabled = this._bloomEnabled && pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight > 0;\r\n\r\n this._defaultRenderingPipeline.bloomWeight = (pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight) || this._defaultRenderingPipeline.bloomWeight;\r\n }\r\n\r\n this._defaultRenderingPipeline.bloomEnabled = bloomEnabled;\r\n this._defaultRenderingPipeline.fxaaEnabled = this.fxaaEnabled;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _bloomEnabled: boolean = false;\r\n\r\n public get bloomEnabled() {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set bloomEnabled(value: boolean) {\r\n if (this._bloomEnabled === value) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _fxaaEnabled: boolean = false;\r\n\r\n public get fxaaEnabled() {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(value: boolean) {\r\n if (this._fxaaEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setDefaultMaterial(sceneConfig: ISceneConfiguration) {}\r\n\r\n /**\r\n * internally configure the scene using the provided configuration.\r\n * The scene will not be recreated, but just updated.\r\n * @param sceneConfig the (new) scene configuration\r\n */\r\n protected _configureScene(sceneConfig: ISceneConfiguration) {\r\n // sanity check!\r\n if (!this.scene) {\r\n return;\r\n }\r\n\r\n const cc = sceneConfig.clearColor;\r\n const oldcc = this.scene.clearColor;\r\n if (cc) {\r\n if (cc.r !== undefined) {\r\n oldcc.r = cc.r;\r\n }\r\n if (cc.g !== undefined) {\r\n oldcc.g = cc.g;\r\n }\r\n if (cc.b !== undefined) {\r\n oldcc.b = cc.b;\r\n }\r\n if (cc.a !== undefined) {\r\n oldcc.a = cc.a;\r\n }\r\n }\r\n\r\n if (sceneConfig.assetsRootURL) {\r\n this._assetsRootURL = sceneConfig.assetsRootURL;\r\n }\r\n\r\n // image processing configuration - optional.\r\n if (sceneConfig.imageProcessingConfiguration) {\r\n extendClassWithConfig(this.scene.imageProcessingConfiguration, sceneConfig.imageProcessingConfiguration);\r\n }\r\n //animation properties override\r\n if (sceneConfig.animationPropertiesOverride) {\r\n extendClassWithConfig(this.scene.animationPropertiesOverride, sceneConfig.animationPropertiesOverride);\r\n }\r\n if (sceneConfig.environmentTexture) {\r\n if (!(this.scene.environmentTexture && (<CubeTexture>this.scene.environmentTexture).url === sceneConfig.environmentTexture)) {\r\n if (this.scene.environmentTexture && this.scene.environmentTexture.dispose) {\r\n this.scene.environmentTexture.dispose();\r\n }\r\n const environmentTexture = CubeTexture.CreateFromPrefilteredData(sceneConfig.environmentTexture, this.scene);\r\n this.scene.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n if (sceneConfig.debug === true) {\r\n this.scene.debugLayer.show();\r\n } else if (sceneConfig.debug === false) {\r\n if (this.scene.debugLayer.isVisible()) {\r\n this.scene.debugLayer.hide();\r\n }\r\n }\r\n\r\n if (sceneConfig.disableHdr) {\r\n this._handleHardwareLimitations(false);\r\n } else {\r\n this._handleHardwareLimitations(true);\r\n }\r\n\r\n if (sceneConfig.renderInBackground !== undefined) {\r\n this._engine.renderEvenInBackground = !!sceneConfig.renderInBackground;\r\n }\r\n\r\n const canvas = this._engine.getInputElement();\r\n\r\n if (canvas) {\r\n if (this.camera && sceneConfig.disableCameraControl) {\r\n this.camera.detachControl();\r\n } else if (this.camera && sceneConfig.disableCameraControl === false) {\r\n this.camera.attachControl();\r\n }\r\n }\r\n\r\n this.setDefaultMaterial(sceneConfig);\r\n\r\n if (sceneConfig.flags) {\r\n extendClassWithConfig(this.scene, sceneConfig.flags);\r\n }\r\n\r\n this.onSceneConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene,\r\n newConfiguration: sceneConfig,\r\n });\r\n }\r\n\r\n /**\r\n * Configure the scene optimizer.\r\n * The existing scene optimizer will be disposed and a new one will be created.\r\n * @param optimizerConfig the (new) optimizer configuration\r\n */\r\n protected _configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean) {\r\n if (typeof optimizerConfig === \"boolean\") {\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n delete this.sceneOptimizer;\r\n }\r\n if (optimizerConfig) {\r\n this.sceneOptimizer = new SceneOptimizer(this.scene);\r\n this.sceneOptimizer.start();\r\n }\r\n } else {\r\n let optimizerOptions: SceneOptimizerOptions = new SceneOptimizerOptions(optimizerConfig.targetFrameRate, optimizerConfig.trackerDuration);\r\n // check for degradation\r\n if (optimizerConfig.degradation) {\r\n switch (optimizerConfig.degradation) {\r\n case \"low\":\r\n optimizerOptions = SceneOptimizerOptions.LowDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"moderate\":\r\n optimizerOptions = SceneOptimizerOptions.ModerateDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"hight\":\r\n optimizerOptions = SceneOptimizerOptions.HighDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n }\r\n }\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n if (optimizerConfig.custom) {\r\n const customOptimizer = getCustomOptimizerByName(optimizerConfig.custom, optimizerConfig.improvementMode);\r\n if (customOptimizer) {\r\n optimizerOptions.addCustomOptimization(\r\n () => {\r\n return customOptimizer(this);\r\n },\r\n () => {\r\n return `Babylon Viewer ${optimizerConfig.custom} custom optimization`;\r\n }\r\n );\r\n }\r\n }\r\n this.sceneOptimizer = new SceneOptimizer(this.scene, optimizerOptions, optimizerConfig.autoGeneratePriorities, optimizerConfig.improvementMode);\r\n this.sceneOptimizer.start();\r\n }\r\n\r\n this.onSceneOptimizerConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.sceneOptimizer!,\r\n newConfiguration: optimizerConfig,\r\n });\r\n }\r\n\r\n /**\r\n * configure all models using the configuration.\r\n * @param modelConfiguration the configuration to use to reconfigure the models\r\n */\r\n /*protected _configureModel(modelConfiguration: Partial<IModelConfiguration>) {\r\n this.models.forEach(model => {\r\n model.updateConfiguration(modelConfiguration);\r\n });\r\n\r\n this.onModelsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.models,\r\n newConfiguration: modelConfiguration\r\n });\r\n }*/\r\n\r\n protected _configureVR(vrConfig: IVRConfiguration) {\r\n if (vrConfig.disabled) {\r\n if (this._vrHelper) {\r\n if (this._vrHelper.isInVRMode) {\r\n this._vrHelper.exitVR();\r\n }\r\n this._vrHelper.dispose();\r\n this._vrHelper = undefined;\r\n }\r\n return;\r\n }\r\n const vrOptions: VRExperienceHelperOptions = deepmerge(\r\n {\r\n useCustomVRButton: true,\r\n createDeviceOrientationCamera: false,\r\n trackPosition: true,\r\n },\r\n vrConfig.vrOptions || {}\r\n );\r\n\r\n this._vrHelper = this.scene.createDefaultVRExperience(vrOptions);\r\n if (!vrConfig.disableInteractions) {\r\n this._vrHelper.enableInteractions();\r\n }\r\n if (!vrConfig.disableTeleportation) {\r\n const floorMeshName = vrConfig.overrideFloorMeshName || \"BackgroundPlane\";\r\n this._vrHelper.enableTeleportation({\r\n floorMeshName,\r\n });\r\n }\r\n this._vrHelper.onEnteringVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this._vrHelper.onExitingVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onExitingVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this.onVRConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this._vrHelper,\r\n newConfiguration: vrConfig,\r\n });\r\n }\r\n\r\n protected _configureEnvironmentMap(environmentMapConfiguration: IEnvironmentMapConfiguration): any {\r\n if (environmentMapConfiguration.texture) {\r\n this.scene.environmentTexture = new CubeTexture(this._getAssetUrl(environmentMapConfiguration.texture), this.scene);\r\n }\r\n\r\n //sanity check\r\n if (this.scene.environmentTexture) {\r\n const rotatquatRotationionY = Quaternion.RotationAxis(Axis.Y, environmentMapConfiguration.rotationY || 0);\r\n Matrix.FromQuaternionToRef(rotatquatRotationionY, this.scene.environmentTexture.getReflectionTextureMatrix());\r\n }\r\n\r\n // process mainColor changes:\r\n if (environmentMapConfiguration.mainColor) {\r\n this._configurationContainer.mainColor = this.mainColor || Color3.White();\r\n const mc = environmentMapConfiguration.mainColor;\r\n if (mc.r !== undefined) {\r\n this.mainColor.r = mc.r;\r\n }\r\n if (mc.g !== undefined) {\r\n this.mainColor.g = mc.g;\r\n }\r\n if (mc.b !== undefined) {\r\n this.mainColor.b = mc.b;\r\n }\r\n\r\n this.reflectionColor.copyFrom(this.mainColor);\r\n\r\n const environmentTint = getConfigurationKey(\"environmentMap.tintLevel\", this._globalConfiguration) || 0;\r\n\r\n // reflection color\r\n this.reflectionColor.toLinearSpaceToRef(this.reflectionColor);\r\n this.reflectionColor.scaleToRef(1 / this.scene.imageProcessingConfiguration.exposure, this.reflectionColor);\r\n const tmpColor3 = Color3.Lerp(this._white, this.reflectionColor, environmentTint);\r\n this.reflectionColor.copyFrom(tmpColor3);\r\n\r\n //update the environment, if exists\r\n if (this.environmentHelper) {\r\n if (this.environmentHelper.groundMaterial) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n }\r\n\r\n if (this.environmentHelper.skyboxMaterial) {\r\n this.environmentHelper.skyboxMaterial._perceptualColor = this.mainColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * (Re) configure the camera. The camera will only be created once and from this point will only be reconfigured.\r\n * @param cameraConfig the new camera configuration\r\n */\r\n protected _configureCamera(cameraConfig: ICameraConfiguration = {}) {\r\n if (!this.scene.activeCamera) {\r\n // Inline scene.createDefaultCamera to reduce file size\r\n // Dispose existing camera in replace mode.\r\n if (this.scene.activeCamera) {\r\n (this.scene.activeCamera as ArcRotateCamera).dispose();\r\n this.scene.activeCamera = null;\r\n }\r\n // Camera\r\n if (!this.scene.activeCamera) {\r\n const worldExtends = this.scene.getWorldExtends();\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius)) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this.scene);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n const camera = arcRotateCamera;\r\n\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.scene.activeCamera = camera;\r\n }\r\n const canvas = this.scene.getEngine().getInputElement();\r\n if (canvas) {\r\n this.scene.activeCamera.attachControl();\r\n }\r\n\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n this.camera.setTarget(Vector3.Zero());\r\n }\r\n if (!this.camera) {\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n }\r\n if (cameraConfig.position) {\r\n const newPosition = this.camera.position.clone();\r\n extendClassWithConfig(newPosition, cameraConfig.position);\r\n this.camera.setPosition(newPosition);\r\n }\r\n\r\n if (cameraConfig.target) {\r\n const newTarget = this.camera.target.clone();\r\n extendClassWithConfig(newTarget, cameraConfig.target);\r\n this.camera.setTarget(newTarget);\r\n } /*else if (this.models.length && !cameraConfig.disableAutoFocus) {\r\n this._focusOnModel(this.models[0]);\r\n }*/\r\n\r\n if (cameraConfig.rotation) {\r\n this.camera.rotationQuaternion = new Quaternion(cameraConfig.rotation.x || 0, cameraConfig.rotation.y || 0, cameraConfig.rotation.z || 0, cameraConfig.rotation.w || 0);\r\n }\r\n\r\n if (cameraConfig.behaviors) {\r\n for (const name in cameraConfig.behaviors) {\r\n if (cameraConfig.behaviors[name] !== undefined) {\r\n this._setCameraBehavior(name, cameraConfig.behaviors[name]);\r\n }\r\n }\r\n }\r\n\r\n const sceneExtends = this.scene.getWorldExtends((mesh) => {\r\n return !this.environmentHelper || (mesh !== this.environmentHelper.ground && mesh !== this.environmentHelper.rootMesh && mesh !== this.environmentHelper.skybox);\r\n });\r\n const sceneDiagonal = sceneExtends.max.subtract(sceneExtends.min);\r\n const sceneDiagonalLength = sceneDiagonal.length();\r\n if (isFinite(sceneDiagonalLength)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLength * 4;\r\n }\r\n\r\n // sanity check!\r\n if (this.scene.imageProcessingConfiguration) {\r\n this.scene.imageProcessingConfiguration.colorCurvesEnabled = true;\r\n this.scene.imageProcessingConfiguration.vignetteEnabled = true;\r\n this.scene.imageProcessingConfiguration.toneMappingEnabled = !!getConfigurationKey(\"camera.toneMappingEnabled\", this._globalConfiguration);\r\n }\r\n\r\n extendClassWithConfig(this.camera, cameraConfig);\r\n\r\n this.onCameraConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.camera,\r\n newConfiguration: cameraConfig,\r\n });\r\n }\r\n\r\n private _focusOnModel = (model: ViewerModel) => {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n this.camera.setTarget(center);\r\n this.camera.alpha = (this._globalConfiguration.camera && this._globalConfiguration.camera.alpha) || this.camera.alpha;\r\n this.camera.beta = (this._globalConfiguration.camera && this._globalConfiguration.camera.beta) || this.camera.beta;\r\n this.camera.radius = (this._globalConfiguration.camera && this._globalConfiguration.camera.radius) || this.camera.radius;\r\n\r\n const sceneDiagonalLenght = sizeVec.length();\r\n if (isFinite(sceneDiagonalLenght)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLenght * 4;\r\n }\r\n\r\n if (this._configurationContainer.configuration) {\r\n this._configureEnvironment(this._configurationContainer.configuration.skybox, this._configurationContainer.configuration.ground);\r\n }\r\n /*this.scene.lights.filter(light => light instanceof ShadowLight).forEach(light => {\r\n // casting ais safe, due to the constraints tested before\r\n (<ShadowLight>light).setDirectionToTarget(center);\r\n });*/\r\n };\r\n\r\n protected _configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean) {\r\n if (!skyboxConifguration && !groundConfiguration) {\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = undefined;\r\n }\r\n } else {\r\n const options: Partial<IEnvironmentHelperOptions> = {\r\n createGround: !!groundConfiguration && this._groundEnabled,\r\n createSkybox: !!skyboxConifguration,\r\n setupImageProcessing: false, // will be done at the scene level!,\r\n };\r\n\r\n // will that cause problems with model ground configuration?\r\n /*if (model) {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n options.groundYBias = -center.y;\r\n }*/\r\n\r\n if (groundConfiguration) {\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n\r\n const groundSize = groundConfig.size || (typeof skyboxConifguration === \"object\" && skyboxConifguration.scale);\r\n if (groundSize) {\r\n options.groundSize = groundSize;\r\n }\r\n\r\n options.enableGroundShadow = groundConfiguration === true || groundConfig.receiveShadows;\r\n if (groundConfig.shadowLevel !== undefined) {\r\n options.groundShadowLevel = groundConfig.shadowLevel;\r\n }\r\n options.enableGroundMirror = !!groundConfig.mirror && this.groundMirrorEnabled;\r\n if (groundConfig.texture) {\r\n options.groundTexture = this._getAssetUrl(groundConfig.texture);\r\n }\r\n if (groundConfig.color) {\r\n options.groundColor = new Color3(groundConfig.color.r, groundConfig.color.g, groundConfig.color.b);\r\n }\r\n\r\n if (groundConfig.opacity !== undefined) {\r\n options.groundOpacity = groundConfig.opacity;\r\n }\r\n\r\n if (groundConfig.mirror) {\r\n options.enableGroundMirror = true;\r\n // to prevent undefines\r\n if (typeof groundConfig.mirror === \"object\") {\r\n if (groundConfig.mirror.amount !== undefined) {\r\n options.groundMirrorAmount = groundConfig.mirror.amount;\r\n }\r\n if (groundConfig.mirror.sizeRatio !== undefined) {\r\n options.groundMirrorSizeRatio = groundConfig.mirror.sizeRatio;\r\n }\r\n if (groundConfig.mirror.blurKernel !== undefined) {\r\n options.groundMirrorBlurKernel = groundConfig.mirror.blurKernel;\r\n }\r\n if (groundConfig.mirror.fresnelWeight !== undefined) {\r\n options.groundMirrorFresnelWeight = groundConfig.mirror.fresnelWeight;\r\n }\r\n if (groundConfig.mirror.fallOffDistance !== undefined) {\r\n options.groundMirrorFallOffDistance = groundConfig.mirror.fallOffDistance;\r\n }\r\n if (this._defaultPipelineTextureType !== undefined) {\r\n options.groundMirrorTextureType = this._defaultPipelineTextureType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let postInitSkyboxMaterial = false;\r\n if (skyboxConifguration) {\r\n const conf = skyboxConifguration === true ? {} : skyboxConifguration;\r\n if (conf.material && conf.material.imageProcessingConfiguration) {\r\n options.setupImageProcessing = false; // will be configured later manually.\r\n }\r\n const skyboxSize = conf.scale;\r\n if (skyboxSize) {\r\n options.skyboxSize = skyboxSize;\r\n }\r\n options.sizeAuto = !options.skyboxSize;\r\n if (conf.color) {\r\n options.skyboxColor = new Color3(conf.color.r, conf.color.g, conf.color.b);\r\n }\r\n if (conf.cubeTexture && conf.cubeTexture.url) {\r\n if (typeof conf.cubeTexture.url === \"string\") {\r\n options.skyboxTexture = this._getAssetUrl(conf.cubeTexture.url);\r\n } else {\r\n // init later!\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n if (conf.material) {\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n options.setupImageProcessing = false; // TMP\r\n\r\n if (!this.environmentHelper) {\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // unlikely, but there might be a new scene! we need to dispose.\r\n\r\n // get the scene used by the envHelper\r\n const scene: Scene = this.environmentHelper.rootMesh.getScene();\r\n // is it a different scene? Oh no!\r\n if (scene !== this.scene) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // recreate the ground\r\n if (this.environmentHelper.ground) {\r\n this.environmentHelper.ground.dispose();\r\n }\r\n // recreate the skybox\r\n if (this.environmentHelper.skybox) {\r\n this.environmentHelper.skybox.dispose();\r\n }\r\n\r\n this.environmentHelper.updateOptions(options)!;\r\n // update doesn't change the size of the skybox and ground, so we have to recreate!\r\n //this.environmentHelper.dispose();\r\n //this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n }\r\n }\r\n\r\n if (this.environmentHelper.rootMesh && this._globalConfiguration.scene && this._globalConfiguration.scene.environmentRotationY !== undefined) {\r\n this.environmentHelper.rootMesh.rotation.y = this._globalConfiguration.scene.environmentRotationY;\r\n }\r\n\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n if (this.environmentHelper.groundMaterial && groundConfig) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n if (groundConfig.material) {\r\n extendClassWithConfig(this.environmentHelper.groundMaterial, groundConfig.material);\r\n }\r\n\r\n if (this.environmentHelper.groundMirror) {\r\n const mirrorClearColor = this.environmentHelper.groundMaterial._perceptualColor.toLinearSpace();\r\n // TODO user camera exposure value to set the mirror clear color\r\n const exposure = Math.pow(2.0, -this.scene.imageProcessingConfiguration.exposure) * Math.PI;\r\n mirrorClearColor.scaleToRef(1 / exposure, mirrorClearColor);\r\n\r\n this.environmentHelper.groundMirror.clearColor.r = Scalar.Clamp(mirrorClearColor.r);\r\n this.environmentHelper.groundMirror.clearColor.g = Scalar.Clamp(mirrorClearColor.g);\r\n this.environmentHelper.groundMirror.clearColor.b = Scalar.Clamp(mirrorClearColor.b);\r\n this.environmentHelper.groundMirror.clearColor.a = 1;\r\n\r\n if (!this.groundMirrorEnabled) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n }\r\n }\r\n }\r\n\r\n const skyboxMaterial = this.environmentHelper.skyboxMaterial;\r\n if (skyboxMaterial) {\r\n skyboxMaterial._perceptualColor = this.mainColor;\r\n\r\n if (postInitSkyboxMaterial) {\r\n if (typeof skyboxConifguration === \"object\" && skyboxConifguration.material) {\r\n extendClassWithConfig(skyboxMaterial, skyboxConifguration.material);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateGroundMirrorRenderList(model);\r\n });\r\n\r\n this.onEnvironmentConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.environmentHelper!,\r\n newConfiguration: {\r\n skybox: skyboxConifguration,\r\n ground: groundConfiguration,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * configure the lights.\r\n * @param lightsConfiguration the (new) light(s) configuration\r\n */\r\n protected _configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean | number } = {}) {\r\n // sanity check!\r\n const lightKeys = Object.keys(lightsConfiguration).filter((name) => name !== \"globalRotation\");\r\n\r\n if (!lightKeys.length) {\r\n if (!this.scene.lights.length) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this.scene);\r\n }\r\n } else {\r\n let lightsAvailable: Array<string> = this.scene.lights.map((light) => light.name);\r\n // compare to the global (!) configuration object and dispose unneeded:\r\n const lightsToConfigure = Object.keys(this._globalConfiguration.lights || []);\r\n if (Object.keys(lightsToConfigure).length !== lightsAvailable.length) {\r\n lightsAvailable.forEach((lName) => {\r\n if (lightsToConfigure.indexOf(lName) === -1) {\r\n this.scene.getLightByName(lName)!.dispose();\r\n }\r\n });\r\n }\r\n\r\n lightKeys.forEach((name) => {\r\n let lightConfig: ILightConfiguration = { type: 0 };\r\n if (typeof lightsConfiguration[name] === \"object\") {\r\n lightConfig = <ILightConfiguration>lightsConfiguration[name];\r\n }\r\n if (typeof lightsConfiguration[name] === \"number\") {\r\n lightConfig.type = <number>lightsConfiguration[name];\r\n }\r\n\r\n lightConfig.name = name;\r\n\r\n let light: Light;\r\n // light is not already available\r\n if (lightsAvailable.indexOf(name) === -1) {\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n } else {\r\n // available? get it from the scene\r\n light = <Light>this.scene.getLightByName(name);\r\n if (typeof lightsConfiguration[name] === \"boolean\") {\r\n lightConfig.type = light.getTypeID();\r\n }\r\n lightsAvailable = lightsAvailable.filter((ln) => ln !== name);\r\n if (lightConfig.type !== undefined && light.getTypeID() !== lightConfig.type) {\r\n light.dispose();\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n }\r\n }\r\n\r\n // if config set the light to false, dispose it.\r\n if (lightsConfiguration[name] === false) {\r\n light.dispose();\r\n return;\r\n }\r\n\r\n //enabled\r\n const enabled = lightConfig.enabled !== undefined ? lightConfig.enabled : !lightConfig.disabled;\r\n light.setEnabled(enabled);\r\n\r\n extendClassWithConfig(light, lightConfig);\r\n\r\n //position. Some lights don't support shadows\r\n if (light instanceof ShadowLight) {\r\n // set default values\r\n light.shadowMinZ = light.shadowMinZ || 0.2;\r\n light.shadowMaxZ = Math.min(10, light.shadowMaxZ || 10); //large far clips reduce shadow depth precision\r\n\r\n if (lightConfig.target) {\r\n if (light.setDirectionToTarget) {\r\n const target = Vector3.Zero().copyFromFloats(lightConfig.target.x, lightConfig.target.y, lightConfig.target.z);\r\n light.setDirectionToTarget(target);\r\n }\r\n } else if (lightConfig.direction) {\r\n const direction = Vector3.Zero().copyFromFloats(lightConfig.direction.x, lightConfig.direction.y, lightConfig.direction.z);\r\n light.direction = direction;\r\n }\r\n\r\n let isShadowEnabled = false;\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n (<DirectionalLight>light).shadowFrustumSize = lightConfig.shadowFrustumSize || 2;\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spotLight: SpotLight = <SpotLight>light;\r\n if (lightConfig.spotAngle !== undefined) {\r\n spotLight.angle = (lightConfig.spotAngle * Math.PI) / 180;\r\n }\r\n if (spotLight.angle && lightConfig.shadowFieldOfView) {\r\n spotLight.shadowAngleScale = lightConfig.shadowFieldOfView / spotLight.angle;\r\n }\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n if (lightConfig.shadowFieldOfView) {\r\n (<PointLight>light).shadowAngle = (lightConfig.shadowFieldOfView * Math.PI) / 180;\r\n }\r\n isShadowEnabled = true;\r\n }\r\n\r\n let shadowGenerator = <ShadowGenerator>light.getShadowGenerator();\r\n if (isShadowEnabled && lightConfig.shadowEnabled && this._maxShadows) {\r\n const bufferSize = lightConfig.shadowBufferSize || 256;\r\n\r\n if (!shadowGenerator) {\r\n shadowGenerator = new ShadowGenerator(bufferSize, light);\r\n }\r\n\r\n const blurKernel = this.getBlurKernel(light, bufferSize);\r\n shadowGenerator.bias = this._shadowGeneratorBias;\r\n shadowGenerator.blurKernel = blurKernel;\r\n //override defaults\r\n extendClassWithConfig(shadowGenerator, lightConfig.shadowConfig || {});\r\n\r\n // add the focus meshes to the shadow list\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateShadowRenderList(shadowGenerator, model);\r\n });\r\n\r\n //if (model) {\r\n this._updateShadowRenderList(shadowGenerator);\r\n //}\r\n } else if (shadowGenerator) {\r\n shadowGenerator.dispose();\r\n }\r\n }\r\n });\r\n\r\n // render priority\r\n const globalLightsConfiguration = this._globalConfiguration.lights || {};\r\n Object.keys(globalLightsConfiguration)\r\n .sort()\r\n .forEach((name, idx) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const configuration = globalLightsConfiguration[name];\r\n const light = this.scene.getLightByName(name);\r\n // sanity check\r\n if (!light) {\r\n return;\r\n }\r\n light.renderPriority = -idx;\r\n });\r\n }\r\n\r\n this.onLightsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene.lights,\r\n newConfiguration: lightsConfiguration,\r\n });\r\n }\r\n\r\n private _shadowGroundPlane: Nullable<AbstractMesh>;\r\n\r\n private _updateShadowRenderList(shadowGenerator: ShadowGenerator, model?: ViewerModel, resetList?: boolean) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n // add the focus meshes to the shadow list\r\n const shadownMap = shadowGenerator.getShadowMap();\r\n if (!shadownMap) {\r\n return;\r\n }\r\n if (resetList && shadownMap.renderList) {\r\n shadownMap.renderList.length = 0;\r\n } else {\r\n shadownMap.renderList = shadownMap.renderList || [];\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (Tags.MatchesQuery(mesh, \"castShadow\") && shadownMap.renderList.indexOf(mesh) === -1) {\r\n shadownMap.renderList.push(mesh);\r\n }\r\n }\r\n\r\n if (!this._shadowGroundPlane) {\r\n if (shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n const shadowGroundPlane = CreatePlane(\"shadowGroundPlane\", { size: 100 }, this.scene);\r\n shadowGroundPlane.useVertexColors = false;\r\n //material isn't ever used in rendering, just used to set back face culling\r\n shadowGroundPlane.material = new PBRMaterial(\"shadowGroundPlaneMaterial\", this.scene);\r\n shadowGroundPlane.material.backFaceCulling = false;\r\n shadowGroundPlane.rotation.x = Math.PI * 0.5;\r\n shadowGroundPlane.freezeWorldMatrix();\r\n this._shadowGroundPlane = shadowGroundPlane;\r\n this.scene.removeMesh(shadowGroundPlane);\r\n }\r\n } else {\r\n if (!shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n this._shadowGroundPlane.dispose();\r\n this._shadowGroundPlane = null;\r\n }\r\n }\r\n\r\n if (this._shadowGroundPlane && shadownMap.renderList.indexOf(this._shadowGroundPlane) === -1) {\r\n shadownMap.renderList.push(this._shadowGroundPlane);\r\n }\r\n }\r\n\r\n private _updateGroundMirrorRenderList(model?: ViewerModel, resetList?: boolean) {\r\n if (this.environmentHelper && this.environmentHelper.groundMirror && this.environmentHelper.groundMirror.renderList) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n const renderList = this.environmentHelper.groundMirror.renderList;\r\n if (resetList) {\r\n renderList.length = 0;\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (renderList.indexOf(mesh) === -1) {\r\n renderList.push(mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the shadow map blur kernel according to the light configuration.\r\n * @param light The light used to generate the shadows\r\n * @param bufferSize The size of the shadow map\r\n * @returns the kernel blur size\r\n */\r\n public getBlurKernel(light: IShadowLight, bufferSize: number): number {\r\n let normalizedBlurKernel = 0.05; // TODO Should come from the config.\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<DirectionalLight>light).shadowFrustumSize;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<PointLight>light).shadowAngle;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / ((<SpotLight>light).angle * (<SpotLight>light).shadowAngleScale);\r\n }\r\n\r\n const minimumBlurKernel = 5 / (bufferSize / 256); //magic number that aims to keep away sawtooth shadows\r\n\r\n const blurKernel = Math.max(bufferSize * normalizedBlurKernel, minimumBlurKernel);\r\n return blurKernel;\r\n }\r\n\r\n /**\r\n * Alters render settings to reduce features based on hardware feature limitations\r\n * @param enableHDR Allows the viewer to run in HDR mode.\r\n */\r\n protected _handleHardwareLimitations(enableHDR = true) {\r\n //flip rendering settings switches based on hardware support\r\n const maxVaryingRows = this._engine.getCaps().maxVaryingVectors;\r\n const maxFragmentSamplers = this._engine.getCaps().maxTexturesImageUnits;\r\n\r\n //shadows are disabled if there's not enough varyings for a single shadow\r\n if (maxVaryingRows < 8 || maxFragmentSamplers < 8) {\r\n this._maxShadows = 0;\r\n } else {\r\n this._maxShadows = 3;\r\n }\r\n\r\n //can we render to any >= 16-bit targets (required for HDR)\r\n const caps = this._engine.getCaps();\r\n const linearHalfFloatTargets = caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering;\r\n const linearFloatTargets = caps.textureFloatRender && caps.textureFloatLinearFiltering;\r\n\r\n this._hdrSupport = enableHDR && !!(linearFloatTargets || linearHalfFloatTargets);\r\n\r\n if (linearHalfFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n this._shadowGeneratorBias = 0.002;\r\n } else if (linearFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_FLOAT;\r\n this._shadowGeneratorBias = 0.001;\r\n } else {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n this._shadowGeneratorBias = 0.001;\r\n }\r\n\r\n this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n // this.onCameraConfiguredObservable.clear();\r\n this.onEnvironmentConfiguredObservable.clear();\r\n this.onLightsConfiguredObservable.clear();\r\n this.onModelsConfiguredObservable.clear();\r\n this.onSceneConfiguredObservable.clear();\r\n this.onSceneInitObservable.clear();\r\n this.onSceneOptimizerConfiguredObservable.clear();\r\n this.onVRConfiguredObservable.clear();\r\n\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n }\r\n\r\n this.models.forEach((model) => {\r\n model.dispose();\r\n });\r\n\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n }\r\n\r\n this.models.length = 0;\r\n\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Get an environment asset url by using the configuration if the path is not absolute.\r\n * @param url Asset url\r\n * @returns The Asset url using the `environmentAssetsRootURL` if the url is not an absolute path.\r\n */\r\n private _getAssetUrl(url: string): string {\r\n let returnUrl = url;\r\n if (url && url.toLowerCase().indexOf(\"//\") === -1) {\r\n if (!this._assetsRootURL) {\r\n // Tools.Warn(\"Please, specify the root url of your assets before loading the configuration (labs.environmentAssetsRootURL) or disable the background through the viewer options.\");\r\n return url;\r\n }\r\n\r\n returnUrl = this._assetsRootURL + returnUrl;\r\n }\r\n\r\n return returnUrl;\r\n }\r\n\r\n private _cameraBehaviorMapping: { [name: string]: number } = {};\r\n\r\n private _setCameraBehavior(\r\n name: string,\r\n behaviorConfig:\r\n | boolean\r\n | number\r\n | {\r\n type: number;\r\n [propName: string]: any;\r\n }\r\n ) {\r\n let behavior: Behavior<ArcRotateCamera> | null;\r\n let type: number;\r\n if (typeof behaviorConfig === \"object\") {\r\n type = behaviorConfig.type;\r\n } else if (typeof behaviorConfig === \"number\") {\r\n type = behaviorConfig;\r\n } else {\r\n type = this._cameraBehaviorMapping[name];\r\n }\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n const config: { [propName: string]: any } = typeof behaviorConfig === \"object\" ? behaviorConfig : {};\r\n\r\n let enabled = true;\r\n if (typeof behaviorConfig === \"boolean\") {\r\n enabled = behaviorConfig;\r\n }\r\n\r\n // constructing behavior\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n this.camera.useAutoRotationBehavior = enabled;\r\n behavior = this.camera.autoRotationBehavior;\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n this.camera.useBouncingBehavior = enabled;\r\n behavior = this.camera.bouncingBehavior;\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this.camera.useFramingBehavior = enabled;\r\n behavior = this.camera.framingBehavior;\r\n break;\r\n default:\r\n behavior = null;\r\n break;\r\n }\r\n\r\n if (behavior) {\r\n this._cameraBehaviorMapping[name] = type;\r\n\r\n if (typeof behaviorConfig === \"object\") {\r\n extendClassWithConfig(behavior, behaviorConfig);\r\n }\r\n }\r\n\r\n // post attach configuration. Some functionalities require the attached camera.\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n if (config.zoomOnBoundingInfo) {\r\n (<FramingBehavior>behavior).zoomOnMeshHierarchy(model.rootMesh);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/viewer",
3
- "version": "6.23.1",
3
+ "version": "6.25.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
@@ -18,10 +18,10 @@
18
18
  "postcompile": "build-tools -c add-js-to-es6"
19
19
  },
20
20
  "dependencies": {
21
- "@babylonjs/core": "^6.23.1",
22
- "@babylonjs/loaders": "^6.23.1",
23
- "babylonjs-gltf2interface": "^6.23.1",
24
- "babylonjs-viewer-assets": "^6.23.1",
21
+ "@babylonjs/core": "^6.25.0",
22
+ "@babylonjs/loaders": "^6.25.0",
23
+ "babylonjs-gltf2interface": "^6.25.0",
24
+ "babylonjs-viewer-assets": "^6.25.0",
25
25
  "deepmerge": "~4.2.2",
26
26
  "handlebars": "~4.7.7",
27
27
  "pepjs": "~0.5.3",
@@ -372,18 +372,6 @@ var DefaultViewer = /** @class */ (function (_super) {
372
372
  };
373
373
  DefaultViewer.prototype._initVR = function () {
374
374
  var _this = this;
375
- this.engine.onVRDisplayChangedObservable.add(function () {
376
- var viewerTemplate = _this.templateManager.getTemplate("viewer");
377
- var viewerElement = viewerTemplate && viewerTemplate.parent;
378
- if (viewerElement) {
379
- if (_this.sceneManager.vrHelper.isInVRMode) {
380
- viewerElement.classList.add("in-vr");
381
- }
382
- else {
383
- viewerElement.classList.remove("in-vr");
384
- }
385
- }
386
- });
387
375
  if (this.sceneManager.vrHelper) {
388
376
  // due to the way the experience helper is exisintg VR, this must be added.
389
377
  this.sceneManager.vrHelper.onExitingVR.add(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Template, EventCallback } from \"../templating/templateManager\";\r\nimport { TemplateManager } from \"../templating/templateManager\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { Vector3 } from \"core/Maths/math\";\r\n\r\nimport { AbstractViewerWithTemplate } from \"./viewerWithTemplate\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { extendClassWithConfig } from \"../helper/index\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport type { IModelAnimation } from \"../model/modelAnimation\";\r\nimport { AnimationState } from \"../model/modelAnimation\";\r\nimport type { IViewerTemplatePlugin } from \"../templating/viewerTemplatePlugin\";\r\nimport { HDButtonPlugin } from \"../templating/plugins/hdButtonPlugin\";\r\nimport { PrintButtonPlugin } from \"../templating/plugins/printButton\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { ISceneConfiguration } from \"../configuration/interfaces/sceneConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\nimport \"core/Lights/Shadows/shadowGeneratorSceneComponent\";\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = { extends: \"default\" }) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add(() => {\r\n this._configureLights();\r\n });\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n const conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if (\r\n (conf.materialType === \"standard\" && this.scene.defaultMaterial.getClassName() !== \"StandardMaterial\") ||\r\n (conf.materialType === \"pbr\" && this.scene.defaultMaterial.getClassName() !== \"PBRMaterial\")\r\n ) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === \"standard\") {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n };\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n const template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent &&\r\n this.templateManager.eventManager.registerCallback(\r\n plugin.templateName,\r\n (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n },\r\n eventName\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (template) {\r\n const closeButton = template.parent.querySelector(\".close-button\");\r\n if (closeButton) {\r\n closeButton.addEventListener(\"pointerdown\", () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n const filesInput = new FilesInput(\r\n this.engine,\r\n this.sceneManager.scene,\r\n () => {},\r\n () => {},\r\n () => {},\r\n () => {},\r\n function () {},\r\n (file: File) => {\r\n this.loadModel(file);\r\n },\r\n () => {}\r\n );\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback(\"navBar\", this._handlePointerClick, \"click\");\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n // do your thing\r\n },\r\n \"pointerdown\",\r\n \".help-button\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>evt.target;\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const gotoFrame = (+element.value / 100) * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) {\r\n return;\r\n }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n },\r\n \"input\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n },\r\n \"pointerup\",\r\n \".progress-wrapper\"\r\n );\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true,\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n const pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) {\r\n return;\r\n }\r\n const element = <HTMLElement>event.event.target;\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const parentClasses = element.parentElement!.classList;\r\n\r\n const elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n const className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\": {\r\n const value = element.dataset[\"value\"];\r\n const label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n }\r\n case \"speed-option-button\": {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n }\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * Plays or Pauses animation\r\n * @param noUiUpdate\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) {\r\n return;\r\n }\r\n\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n };\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n const progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = (this._currentAnimation.currentFrame / this._currentAnimation.frames) * 100;\r\n const currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) {\r\n // Only move if greater than a 1% change\r\n progressSlider.value = \"\" + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Speed\r\n * @param speed\r\n * @param paramsObject\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Type\r\n * @param data\r\n * @param data.label\r\n * @param data.value\r\n * @param paramsObject\r\n */\r\n private _updateAnimationType = (data: { label: string; value: string }, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = this._animationList.indexOf(data.value) + 1;\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: this._animationList.indexOf(data.value) + 1,\r\n selectedAnimationName: data.label,\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n };\r\n\r\n protected _initVR() {\r\n this.engine.onVRDisplayChangedObservable.add(() => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n if (this.sceneManager.vrHelper!.isInVRMode) {\r\n viewerElement.classList.add(\"in-vr\");\r\n } else {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n }\r\n });\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n const fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n const currentElement =\r\n (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n const requestFullScreen =\r\n fullscreenElement.requestFullscreen ||\r\n (<any>fullscreenElement).webkitRequestFullscreen ||\r\n (<any>fullscreenElement).msRequestFullscreen ||\r\n (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n const exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = \"relative\";\r\n htmlElement.style.height = \"100%\";\r\n htmlElement.style.display = \"flex\";\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n const newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n const animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => {\r\n return { label: a, value: a };\r\n });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === \"string\") {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n console.log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n };\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n const subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + \" template not found\");\r\n }\r\n return subTemplate.show((template) => {\r\n template.parent.style.display = \"flex\";\r\n return Promise.resolve(template);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n const overlays = template.parent.querySelectorAll(\".overlay\");\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n const htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = \"none\";\r\n }\r\n }\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>) {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params && <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n const templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n const canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget: Nullable<Vector3> | undefined;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n const flashlight = new SpotLight(\"flashlight\", Vector3.Zero(), Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = eventData.pickInfo.pickedPoint;\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n const updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Template, EventCallback } from \"../templating/templateManager\";\r\nimport { TemplateManager } from \"../templating/templateManager\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { Vector3 } from \"core/Maths/math\";\r\n\r\nimport { AbstractViewerWithTemplate } from \"./viewerWithTemplate\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { extendClassWithConfig } from \"../helper/index\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport type { IModelAnimation } from \"../model/modelAnimation\";\r\nimport { AnimationState } from \"../model/modelAnimation\";\r\nimport type { IViewerTemplatePlugin } from \"../templating/viewerTemplatePlugin\";\r\nimport { HDButtonPlugin } from \"../templating/plugins/hdButtonPlugin\";\r\nimport { PrintButtonPlugin } from \"../templating/plugins/printButton\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { ISceneConfiguration } from \"../configuration/interfaces/sceneConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\nimport \"core/Lights/Shadows/shadowGeneratorSceneComponent\";\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = { extends: \"default\" }) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add(() => {\r\n this._configureLights();\r\n });\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n const conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if (\r\n (conf.materialType === \"standard\" && this.scene.defaultMaterial.getClassName() !== \"StandardMaterial\") ||\r\n (conf.materialType === \"pbr\" && this.scene.defaultMaterial.getClassName() !== \"PBRMaterial\")\r\n ) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === \"standard\") {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n };\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n const template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent &&\r\n this.templateManager.eventManager.registerCallback(\r\n plugin.templateName,\r\n (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n },\r\n eventName\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (template) {\r\n const closeButton = template.parent.querySelector(\".close-button\");\r\n if (closeButton) {\r\n closeButton.addEventListener(\"pointerdown\", () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n const filesInput = new FilesInput(\r\n this.engine,\r\n this.sceneManager.scene,\r\n () => {},\r\n () => {},\r\n () => {},\r\n () => {},\r\n function () {},\r\n (file: File) => {\r\n this.loadModel(file);\r\n },\r\n () => {}\r\n );\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback(\"navBar\", this._handlePointerClick, \"click\");\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n // do your thing\r\n },\r\n \"pointerdown\",\r\n \".help-button\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>evt.target;\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const gotoFrame = (+element.value / 100) * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) {\r\n return;\r\n }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n },\r\n \"input\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n },\r\n \"pointerup\",\r\n \".progress-wrapper\"\r\n );\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true,\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n const pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) {\r\n return;\r\n }\r\n const element = <HTMLElement>event.event.target;\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const parentClasses = element.parentElement!.classList;\r\n\r\n const elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n const className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\": {\r\n const value = element.dataset[\"value\"];\r\n const label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n }\r\n case \"speed-option-button\": {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n }\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * Plays or Pauses animation\r\n * @param noUiUpdate\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) {\r\n return;\r\n }\r\n\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n };\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n const progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = (this._currentAnimation.currentFrame / this._currentAnimation.frames) * 100;\r\n const currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) {\r\n // Only move if greater than a 1% change\r\n progressSlider.value = \"\" + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Speed\r\n * @param speed\r\n * @param paramsObject\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Type\r\n * @param data\r\n * @param data.label\r\n * @param data.value\r\n * @param paramsObject\r\n */\r\n private _updateAnimationType = (data: { label: string; value: string }, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = this._animationList.indexOf(data.value) + 1;\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: this._animationList.indexOf(data.value) + 1,\r\n selectedAnimationName: data.label,\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n };\r\n\r\n protected _initVR() {\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n const fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n const currentElement =\r\n (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n const requestFullScreen =\r\n fullscreenElement.requestFullscreen ||\r\n (<any>fullscreenElement).webkitRequestFullscreen ||\r\n (<any>fullscreenElement).msRequestFullscreen ||\r\n (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n const exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = \"relative\";\r\n htmlElement.style.height = \"100%\";\r\n htmlElement.style.display = \"flex\";\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n const newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n const animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => {\r\n return { label: a, value: a };\r\n });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === \"string\") {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n console.log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n };\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n const subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + \" template not found\");\r\n }\r\n return subTemplate.show((template) => {\r\n template.parent.style.display = \"flex\";\r\n return Promise.resolve(template);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n const overlays = template.parent.querySelectorAll(\".overlay\");\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n const htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = \"none\";\r\n }\r\n }\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>) {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params && <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n const templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n const canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget: Nullable<Vector3> | undefined;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n const flashlight = new SpotLight(\"flashlight\", Vector3.Zero(), Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = eventData.pickInfo.pickedPoint;\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n const updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}\r\n"]}