@babylonjs/core 5.22.0 → 5.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/Engines/thinEngine.js +2 -2
  2. package/Engines/thinEngine.js.map +1 -1
  3. package/Materials/Background/backgroundMaterial.js +1 -0
  4. package/Materials/Background/backgroundMaterial.js.map +1 -1
  5. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  6. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  7. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -0
  8. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  9. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
  10. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  11. package/Materials/Node/nodeMaterial.d.ts +1 -0
  12. package/Materials/Node/nodeMaterial.js +1 -0
  13. package/Materials/Node/nodeMaterial.js.map +1 -1
  14. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  15. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  16. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  17. package/Materials/Textures/renderTargetTexture.d.ts +4 -1
  18. package/Materials/Textures/renderTargetTexture.js +15 -28
  19. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  20. package/Materials/imageProcessingConfiguration.d.ts +22 -0
  21. package/Materials/imageProcessingConfiguration.js +68 -13
  22. package/Materials/imageProcessingConfiguration.js.map +1 -1
  23. package/Materials/standardMaterial.d.ts +1 -0
  24. package/Materials/standardMaterial.js +1 -0
  25. package/Materials/standardMaterial.js.map +1 -1
  26. package/Misc/arrayTools.d.ts +12 -0
  27. package/Misc/arrayTools.js +44 -0
  28. package/Misc/arrayTools.js.map +1 -1
  29. package/Misc/fileTools.d.ts +4 -0
  30. package/Misc/fileTools.js +14 -2
  31. package/Misc/fileTools.js.map +1 -1
  32. package/Misc/index.d.ts +1 -0
  33. package/Misc/index.js +1 -0
  34. package/Misc/index.js.map +1 -1
  35. package/Misc/logger.d.ts +1 -4
  36. package/Misc/logger.js +28 -66
  37. package/Misc/logger.js.map +1 -1
  38. package/Misc/observable.d.ts +9 -37
  39. package/Misc/observable.extensions.d.ts +41 -0
  40. package/Misc/observable.extensions.js +82 -0
  41. package/Misc/observable.extensions.js.map +1 -0
  42. package/Misc/observable.js +4 -95
  43. package/Misc/observable.js.map +1 -1
  44. package/Navigation/Plugins/recastJSPlugin.d.ts +11 -0
  45. package/Navigation/Plugins/recastJSPlugin.js +19 -1
  46. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  47. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +2 -0
  48. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +20 -1
  49. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  50. package/PostProcesses/imageProcessingPostProcess.d.ts +16 -0
  51. package/PostProcesses/imageProcessingPostProcess.js +25 -0
  52. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  53. package/Rendering/edgesRenderer.js +1 -1
  54. package/Rendering/edgesRenderer.js.map +1 -1
  55. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  56. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  57. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +5 -1
  58. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  59. package/Shaders/ShadersInclude/imageProcessingFunctions.js +2 -0
  60. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  61. package/package.json +1 -1
  62. package/scene.d.ts +8 -1
  63. package/scene.js +13 -2
  64. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"imageProcessingDeclaration.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/imageProcessingDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"imageProcessingDeclaration\";\nconst shader = `#ifdef EXPOSURE\nuniform float exposureLinear;\r#endif\n#ifdef CONTRAST\nuniform float contrast;\r#endif\n#ifdef VIGNETTE\nuniform vec2 vInverseScreenSize;\runiform vec4 vignetteSettings1;\runiform vec4 vignetteSettings2;\r#endif\n#ifdef COLORCURVES\nuniform vec4 vCameraColorCurveNegative;\runiform vec4 vCameraColorCurveNeutral;\runiform vec4 vCameraColorCurvePositive;\r#endif\n#ifdef COLORGRADING\n#ifdef COLORGRADING3D\nuniform highp sampler3D txColorTransform;\r#else\nuniform sampler2D txColorTransform;\r#endif\nuniform vec4 colorTransformSettings;\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const imageProcessingDeclaration = { name, shader };\n"]}
1
+ {"version":3,"file":"imageProcessingDeclaration.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/imageProcessingDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"imageProcessingDeclaration\";\nconst shader = `#ifdef EXPOSURE\nuniform float exposureLinear;\r#endif\n#ifdef CONTRAST\nuniform float contrast;\r#endif\n#if defined(VIGNETTE) || defined(DITHER)\nuniform vec2 vInverseScreenSize;\r#endif\n#ifdef VIGNETTE\nuniform vec4 vignetteSettings1;\runiform vec4 vignetteSettings2;\r#endif\n#ifdef COLORCURVES\nuniform vec4 vCameraColorCurveNegative;\runiform vec4 vCameraColorCurveNeutral;\runiform vec4 vCameraColorCurvePositive;\r#endif\n#ifdef COLORGRADING\n#ifdef COLORGRADING3D\nuniform highp sampler3D txColorTransform;\r#else\nuniform sampler2D txColorTransform;\r#endif\nuniform vec4 colorTransformSettings;\r#endif\n#ifdef DITHER\nuniform float ditherIntensity;\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const imageProcessingDeclaration = { name, shader };\n"]}
@@ -37,6 +37,8 @@ vec3 colorTransformOutput=sampleTexture3D(txColorTransform,colorTransformInput,c
37
37
  result.rgb=mix(result.rgb,colorTransformOutput,colorTransformSettings.www);
38
38
  #ifdef COLORCURVES
39
39
  float luma=getLuminance(result.rgb);
40
+ #ifdef DITHER
41
+ float rand=getRand(gl_FragCoord.xy*vInverseScreenSize);
40
42
  return result;
41
43
  // Sideeffect
42
44
  ShaderStore.IncludesShadersStore[name] = shader;
@@ -1 +1 @@
1
- {"version":3,"file":"imageProcessingFunctions.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/imageProcessingFunctions.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsHb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"imageProcessingFunctions\";\nconst shader = `#if defined(COLORGRADING) && !defined(COLORGRADING3D)\n/** \r* Polyfill for SAMPLE_TEXTURE_3D,which is unsupported in WebGL.\r* sampler3dSetting.x=textureOffset (0.5/textureSize).\r* sampler3dSetting.y=textureSize.\r*/\r#define inline\nvec3 sampleTexture3D(sampler2D colorTransform,vec3 color,vec2 sampler3dSetting)\r{\rfloat sliceSize=2.0*sampler3dSetting.x; \r#ifdef SAMPLER3DGREENDEPTH\nfloat sliceContinuous=(color.g-sampler3dSetting.x)*sampler3dSetting.y;\r#else\nfloat sliceContinuous=(color.b-sampler3dSetting.x)*sampler3dSetting.y;\r#endif\nfloat sliceInteger=floor(sliceContinuous);\rfloat sliceFraction=sliceContinuous-sliceInteger;\r#ifdef SAMPLER3DGREENDEPTH\nvec2 sliceUV=color.rb;\r#else\nvec2 sliceUV=color.rg;\r#endif\nsliceUV.x*=sliceSize;\rsliceUV.x+=sliceInteger*sliceSize;\rsliceUV=saturate(sliceUV);\rvec4 slice0Color=texture2D(colorTransform,sliceUV);\rsliceUV.x+=sliceSize;\rsliceUV=saturate(sliceUV);\rvec4 slice1Color=texture2D(colorTransform,sliceUV);\rvec3 result=mix(slice0Color.rgb,slice1Color.rgb,sliceFraction);\r#ifdef SAMPLER3DBGRMAP\ncolor.rgb=result.rgb;\r#else\ncolor.rgb=result.bgr;\r#endif\nreturn color;\r}\r#endif\n#ifdef TONEMAPPING_ACES\nconst mat3 ACESInputMat=mat3(\rvec3(0.59719,0.07600,0.02840),\rvec3(0.35458,0.90834,0.13383),\rvec3(0.04823,0.01566,0.83777)\r);\rconst mat3 ACESOutputMat=mat3(\rvec3( 1.60475,-0.10208,-0.00327),\rvec3(-0.53108, 1.10813,-0.07276),\rvec3(-0.07367,-0.00605, 1.07602)\r);\rvec3 RRTAndODTFit(vec3 v)\r{\rvec3 a=v*(v+0.0245786)-0.000090537;\rvec3 b=v*(0.983729*v+0.4329510)+0.238081;\rreturn a/b;\r}\rvec3 ACESFitted(vec3 color)\r{\rcolor=ACESInputMat*color;\rcolor=RRTAndODTFit(color);\rcolor=ACESOutputMat*color;\rcolor=saturate(color);\rreturn color;\r}\r#endif\nvec4 applyImageProcessing(vec4 result) {\r#ifdef EXPOSURE\nresult.rgb*=exposureLinear;\r#endif\n#ifdef VIGNETTE\nvec2 viewportXY=gl_FragCoord.xy*vInverseScreenSize;\rviewportXY=viewportXY*2.0-1.0;\rvec3 vignetteXY1=vec3(viewportXY*vignetteSettings1.xy+vignetteSettings1.zw,1.0);\rfloat vignetteTerm=dot(vignetteXY1,vignetteXY1);\rfloat vignette=pow(vignetteTerm,vignetteSettings2.w);\rvec3 vignetteColor=vignetteSettings2.rgb;\r#ifdef VIGNETTEBLENDMODEMULTIPLY\nvec3 vignetteColorMultiplier=mix(vignetteColor,vec3(1,1,1),vignette);\rresult.rgb*=vignetteColorMultiplier;\r#endif\n#ifdef VIGNETTEBLENDMODEOPAQUE\nresult.rgb=mix(vignetteColor,result.rgb,vignette);\r#endif\n#endif\n#ifdef TONEMAPPING\n#ifdef TONEMAPPING_ACES\nresult.rgb=ACESFitted(result.rgb);\r#else\nconst float tonemappingCalibration=1.590579;\rresult.rgb=1.0-exp2(-tonemappingCalibration*result.rgb);\r#endif\n#endif\nresult.rgb=toGammaSpace(result.rgb);\rresult.rgb=saturate(result.rgb);\r#ifdef CONTRAST\nvec3 resultHighContrast=result.rgb*result.rgb*(3.0-2.0*result.rgb);\rif (contrast<1.0) {\rresult.rgb=mix(vec3(0.5,0.5,0.5),result.rgb,contrast);\r} else {\rresult.rgb=mix(result.rgb,resultHighContrast,contrast-1.0);\r}\r#endif\n#ifdef COLORGRADING\nvec3 colorTransformInput=result.rgb*colorTransformSettings.xxx+colorTransformSettings.yyy;\r#ifdef COLORGRADING3D\nvec3 colorTransformOutput=texture(txColorTransform,colorTransformInput).rgb;\r#else\nvec3 colorTransformOutput=sampleTexture3D(txColorTransform,colorTransformInput,colorTransformSettings.yz).rgb;\r#endif\nresult.rgb=mix(result.rgb,colorTransformOutput,colorTransformSettings.www);\r#endif\n#ifdef COLORCURVES\nfloat luma=getLuminance(result.rgb);\rvec2 curveMix=clamp(vec2(luma*3.0-1.5,luma*-3.0+1.5),vec2(0.0),vec2(1.0));\rvec4 colorCurve=vCameraColorCurveNeutral+curveMix.x*vCameraColorCurvePositive-curveMix.y*vCameraColorCurveNegative;\rresult.rgb*=colorCurve.rgb;\rresult.rgb=mix(vec3(luma),result.rgb,colorCurve.a);\r#endif\nreturn result;\r}`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const imageProcessingFunctions = { name, shader };\n"]}
1
+ {"version":3,"file":"imageProcessingFunctions.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/imageProcessingFunctions.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Hb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"imageProcessingFunctions\";\nconst shader = `#if defined(COLORGRADING) && !defined(COLORGRADING3D)\n/** \r* Polyfill for SAMPLE_TEXTURE_3D,which is unsupported in WebGL.\r* sampler3dSetting.x=textureOffset (0.5/textureSize).\r* sampler3dSetting.y=textureSize.\r*/\r#define inline\nvec3 sampleTexture3D(sampler2D colorTransform,vec3 color,vec2 sampler3dSetting)\r{\rfloat sliceSize=2.0*sampler3dSetting.x; \r#ifdef SAMPLER3DGREENDEPTH\nfloat sliceContinuous=(color.g-sampler3dSetting.x)*sampler3dSetting.y;\r#else\nfloat sliceContinuous=(color.b-sampler3dSetting.x)*sampler3dSetting.y;\r#endif\nfloat sliceInteger=floor(sliceContinuous);\rfloat sliceFraction=sliceContinuous-sliceInteger;\r#ifdef SAMPLER3DGREENDEPTH\nvec2 sliceUV=color.rb;\r#else\nvec2 sliceUV=color.rg;\r#endif\nsliceUV.x*=sliceSize;\rsliceUV.x+=sliceInteger*sliceSize;\rsliceUV=saturate(sliceUV);\rvec4 slice0Color=texture2D(colorTransform,sliceUV);\rsliceUV.x+=sliceSize;\rsliceUV=saturate(sliceUV);\rvec4 slice1Color=texture2D(colorTransform,sliceUV);\rvec3 result=mix(slice0Color.rgb,slice1Color.rgb,sliceFraction);\r#ifdef SAMPLER3DBGRMAP\ncolor.rgb=result.rgb;\r#else\ncolor.rgb=result.bgr;\r#endif\nreturn color;\r}\r#endif\n#ifdef TONEMAPPING_ACES\nconst mat3 ACESInputMat=mat3(\rvec3(0.59719,0.07600,0.02840),\rvec3(0.35458,0.90834,0.13383),\rvec3(0.04823,0.01566,0.83777)\r);\rconst mat3 ACESOutputMat=mat3(\rvec3( 1.60475,-0.10208,-0.00327),\rvec3(-0.53108, 1.10813,-0.07276),\rvec3(-0.07367,-0.00605, 1.07602)\r);\rvec3 RRTAndODTFit(vec3 v)\r{\rvec3 a=v*(v+0.0245786)-0.000090537;\rvec3 b=v*(0.983729*v+0.4329510)+0.238081;\rreturn a/b;\r}\rvec3 ACESFitted(vec3 color)\r{\rcolor=ACESInputMat*color;\rcolor=RRTAndODTFit(color);\rcolor=ACESOutputMat*color;\rcolor=saturate(color);\rreturn color;\r}\r#endif\nvec4 applyImageProcessing(vec4 result) {\r#ifdef EXPOSURE\nresult.rgb*=exposureLinear;\r#endif\n#ifdef VIGNETTE\nvec2 viewportXY=gl_FragCoord.xy*vInverseScreenSize;\rviewportXY=viewportXY*2.0-1.0;\rvec3 vignetteXY1=vec3(viewportXY*vignetteSettings1.xy+vignetteSettings1.zw,1.0);\rfloat vignetteTerm=dot(vignetteXY1,vignetteXY1);\rfloat vignette=pow(vignetteTerm,vignetteSettings2.w);\rvec3 vignetteColor=vignetteSettings2.rgb;\r#ifdef VIGNETTEBLENDMODEMULTIPLY\nvec3 vignetteColorMultiplier=mix(vignetteColor,vec3(1,1,1),vignette);\rresult.rgb*=vignetteColorMultiplier;\r#endif\n#ifdef VIGNETTEBLENDMODEOPAQUE\nresult.rgb=mix(vignetteColor,result.rgb,vignette);\r#endif\n#endif\n#ifdef TONEMAPPING\n#ifdef TONEMAPPING_ACES\nresult.rgb=ACESFitted(result.rgb);\r#else\nconst float tonemappingCalibration=1.590579;\rresult.rgb=1.0-exp2(-tonemappingCalibration*result.rgb);\r#endif\n#endif\nresult.rgb=toGammaSpace(result.rgb);\rresult.rgb=saturate(result.rgb);\r#ifdef CONTRAST\nvec3 resultHighContrast=result.rgb*result.rgb*(3.0-2.0*result.rgb);\rif (contrast<1.0) {\rresult.rgb=mix(vec3(0.5,0.5,0.5),result.rgb,contrast);\r} else {\rresult.rgb=mix(result.rgb,resultHighContrast,contrast-1.0);\r}\r#endif\n#ifdef COLORGRADING\nvec3 colorTransformInput=result.rgb*colorTransformSettings.xxx+colorTransformSettings.yyy;\r#ifdef COLORGRADING3D\nvec3 colorTransformOutput=texture(txColorTransform,colorTransformInput).rgb;\r#else\nvec3 colorTransformOutput=sampleTexture3D(txColorTransform,colorTransformInput,colorTransformSettings.yz).rgb;\r#endif\nresult.rgb=mix(result.rgb,colorTransformOutput,colorTransformSettings.www);\r#endif\n#ifdef COLORCURVES\nfloat luma=getLuminance(result.rgb);\rvec2 curveMix=clamp(vec2(luma*3.0-1.5,luma*-3.0+1.5),vec2(0.0),vec2(1.0));\rvec4 colorCurve=vCameraColorCurveNeutral+curveMix.x*vCameraColorCurvePositive-curveMix.y*vCameraColorCurveNegative;\rresult.rgb*=colorCurve.rgb;\rresult.rgb=mix(vec3(luma),result.rgb,colorCurve.a);\r#endif\n#ifdef DITHER\nfloat rand=getRand(gl_FragCoord.xy*vInverseScreenSize);\rfloat dither=mix(-ditherIntensity,ditherIntensity,rand);\rresult.rgb=saturate(result.rgb+vec3(dither));\r#endif\nreturn result;\r}`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const imageProcessingFunctions = { name, shader };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/core",
3
- "version": "5.22.0",
3
+ "version": "5.22.1",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
package/scene.d.ts CHANGED
@@ -30,6 +30,7 @@ import type { LoadFileError, RequestFileError, ReadFileError } from "./Misc/file
30
30
  import type { IClipPlanesHolder } from "./Misc/interfaces/iClipPlanesHolder";
31
31
  import type { IPointerEvent } from "./Events/deviceInputEvents";
32
32
  import type { IComputePressureData } from "./Misc/computePressure";
33
+ import type { INotifyArrayChangeType } from "./Misc/arrayTools";
33
34
  declare type Ray = import("./Culling/ray").Ray;
34
35
  declare type TrianglePickingPredicate = import("./Culling/ray").TrianglePickingPredicate;
35
36
  declare type Animation = import("./Animations/animation").Animation;
@@ -458,6 +459,10 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
458
459
  * An event triggered when the activeCamera property is updated
459
460
  */
460
461
  onActiveCameraChanged: Observable<Scene>;
462
+ /**
463
+ * An event triggered when the activeCameras property is updated
464
+ */
465
+ onActiveCamerasChanged: Observable<INotifyArrayChangeType<import("./Cameras/camera").Camera>>;
461
466
  /**
462
467
  * This Observable will be triggered before rendering each renderingGroup of each rendered camera.
463
468
  * The RenderingGroupInfo class contains all the information about the context in which the observable is called
@@ -668,8 +673,10 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
668
673
  */
669
674
  set lightsEnabled(value: boolean);
670
675
  get lightsEnabled(): boolean;
676
+ private _activeCameras;
671
677
  /** All of the active cameras added to this scene. */
672
- activeCameras: Nullable<Camera[]>;
678
+ get activeCameras(): Nullable<Camera[]>;
679
+ set activeCameras(cameras: Nullable<Camera[]>);
673
680
  /** @hidden */
674
681
  _activeCamera: Nullable<Camera>;
675
682
  /** Gets or sets the current active camera */
package/scene.js CHANGED
@@ -25,6 +25,7 @@ import { UniqueIdGenerator } from "./Misc/uniqueIdGenerator.js";
25
25
  import { ReadFile, RequestFile, LoadFile } from "./Misc/fileTools.js";
26
26
  import { LightConstants } from "./Lights/lightConstants.js";
27
27
  import { ComputePressureObserverWrapper } from "./Misc/computePressure.js";
28
+ import { ArrayTools } from "./Misc/arrayTools.js";
28
29
  /**
29
30
  * Represents a scene to be rendered by the engine.
30
31
  * @see https://doc.babylonjs.com/features/scene
@@ -289,6 +290,10 @@ export class Scene extends AbstractScene {
289
290
  * An event triggered when the activeCamera property is updated
290
291
  */
291
292
  this.onActiveCameraChanged = new Observable();
293
+ /**
294
+ * An event triggered when the activeCameras property is updated
295
+ */
296
+ this.onActiveCamerasChanged = new Observable();
292
297
  /**
293
298
  * This Observable will be triggered before rendering each renderingGroup of each rendered camera.
294
299
  * The RenderingGroupInfo class contains all the information about the context in which the observable is called
@@ -383,8 +388,7 @@ export class Scene extends AbstractScene {
383
388
  // Lights
384
389
  this._shadowsEnabled = true;
385
390
  this._lightsEnabled = true;
386
- /** All of the active cameras added to this scene. */
387
- this.activeCameras = new Array();
391
+ this._activeCameras = ArrayTools.MakeObservableArray(this.onActiveCamerasChanged, []);
388
392
  // Textures
389
393
  this._texturesEnabled = true;
390
394
  // Physics
@@ -1024,6 +1028,13 @@ export class Scene extends AbstractScene {
1024
1028
  get lightsEnabled() {
1025
1029
  return this._lightsEnabled;
1026
1030
  }
1031
+ /** All of the active cameras added to this scene. */
1032
+ get activeCameras() {
1033
+ return this._activeCameras;
1034
+ }
1035
+ set activeCameras(cameras) {
1036
+ this._activeCameras = ArrayTools.MakeObservableArray(this.onActiveCamerasChanged, cameras);
1037
+ }
1027
1038
  /** Gets or sets the current active camera */
1028
1039
  get activeCamera() {
1029
1040
  return this._activeCamera;