Browse Source

Merge branch 'master' of https://github.com/BabylonJS/Babylon.js into TexturePacker

Pryme8 5 years ago
parent
commit
a1f6faf583
100 changed files with 4678 additions and 2467 deletions
  1. 107 0
      azure-pipelines-cd.yml
  2. 326 114
      dist/preview release/babylon.d.ts
  3. 2 2
      dist/preview release/babylon.js
  4. 1621 852
      dist/preview release/babylon.max.js
  5. 1 1
      dist/preview release/babylon.max.js.map
  6. 679 234
      dist/preview release/babylon.module.d.ts
  7. 326 114
      dist/preview release/documentation.d.ts
  8. 1 1
      dist/preview release/glTF2Interface/package.json
  9. 1 1
      dist/preview release/gui/babylon.gui.js
  10. 1 1
      dist/preview release/gui/babylon.gui.js.map
  11. 2 2
      dist/preview release/gui/babylon.gui.min.js
  12. 2 2
      dist/preview release/gui/package.json
  13. 8 14
      dist/preview release/inspector/babylon.inspector.bundle.js
  14. 366 314
      dist/preview release/inspector/babylon.inspector.bundle.max.js
  15. 1 1
      dist/preview release/inspector/babylon.inspector.bundle.max.js.map
  16. 2 0
      dist/preview release/inspector/babylon.inspector.d.ts
  17. 4 0
      dist/preview release/inspector/babylon.inspector.module.d.ts
  18. 7 7
      dist/preview release/inspector/package.json
  19. 1 1
      dist/preview release/loaders/babylon.glTF1FileLoader.js
  20. 1 1
      dist/preview release/loaders/babylon.glTF1FileLoader.js.map
  21. 2 2
      dist/preview release/loaders/babylon.glTF1FileLoader.min.js
  22. 1 1
      dist/preview release/loaders/babylon.glTF2FileLoader.js.map
  23. 1 1
      dist/preview release/loaders/babylon.glTF2FileLoader.min.js
  24. 1 1
      dist/preview release/loaders/babylon.glTFFileLoader.js
  25. 1 1
      dist/preview release/loaders/babylon.glTFFileLoader.js.map
  26. 2 2
      dist/preview release/loaders/babylon.glTFFileLoader.min.js
  27. 1 1
      dist/preview release/loaders/babylon.objFileLoader.js.map
  28. 1 1
      dist/preview release/loaders/babylon.objFileLoader.min.js
  29. 1 1
      dist/preview release/loaders/babylon.stlFileLoader.js.map
  30. 1 1
      dist/preview release/loaders/babylon.stlFileLoader.min.js
  31. 1 1
      dist/preview release/loaders/babylonjs.loaders.js
  32. 1 1
      dist/preview release/loaders/babylonjs.loaders.js.map
  33. 2 2
      dist/preview release/loaders/babylonjs.loaders.min.js
  34. 3 3
      dist/preview release/loaders/package.json
  35. 1 1
      dist/preview release/materialsLibrary/babylon.cellMaterial.js
  36. 1 1
      dist/preview release/materialsLibrary/babylon.cellMaterial.js.map
  37. 2 2
      dist/preview release/materialsLibrary/babylon.cellMaterial.min.js
  38. 1 1
      dist/preview release/materialsLibrary/babylon.customMaterial.js
  39. 1 1
      dist/preview release/materialsLibrary/babylon.customMaterial.js.map
  40. 2 2
      dist/preview release/materialsLibrary/babylon.customMaterial.min.js
  41. 1 1
      dist/preview release/materialsLibrary/babylon.fireMaterial.js
  42. 1 1
      dist/preview release/materialsLibrary/babylon.fireMaterial.js.map
  43. 2 2
      dist/preview release/materialsLibrary/babylon.fireMaterial.min.js
  44. 1 1
      dist/preview release/materialsLibrary/babylon.furMaterial.js
  45. 1 1
      dist/preview release/materialsLibrary/babylon.furMaterial.js.map
  46. 2 2
      dist/preview release/materialsLibrary/babylon.furMaterial.min.js
  47. 1 1
      dist/preview release/materialsLibrary/babylon.gradientMaterial.js
  48. 1 1
      dist/preview release/materialsLibrary/babylon.gradientMaterial.js.map
  49. 2 2
      dist/preview release/materialsLibrary/babylon.gradientMaterial.min.js
  50. 1 1
      dist/preview release/materialsLibrary/babylon.gridMaterial.js
  51. 1 1
      dist/preview release/materialsLibrary/babylon.gridMaterial.js.map
  52. 2 2
      dist/preview release/materialsLibrary/babylon.gridMaterial.min.js
  53. 1 1
      dist/preview release/materialsLibrary/babylon.lavaMaterial.js
  54. 1 1
      dist/preview release/materialsLibrary/babylon.lavaMaterial.js.map
  55. 2 2
      dist/preview release/materialsLibrary/babylon.lavaMaterial.min.js
  56. 1 1
      dist/preview release/materialsLibrary/babylon.mixMaterial.js
  57. 1 1
      dist/preview release/materialsLibrary/babylon.mixMaterial.js.map
  58. 2 2
      dist/preview release/materialsLibrary/babylon.mixMaterial.min.js
  59. 1 1
      dist/preview release/materialsLibrary/babylon.normalMaterial.js
  60. 1 1
      dist/preview release/materialsLibrary/babylon.normalMaterial.js.map
  61. 2 2
      dist/preview release/materialsLibrary/babylon.normalMaterial.min.js
  62. 1 1
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js
  63. 1 1
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js.map
  64. 2 2
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js
  65. 1 1
      dist/preview release/materialsLibrary/babylon.simpleMaterial.js
  66. 1 1
      dist/preview release/materialsLibrary/babylon.simpleMaterial.js.map
  67. 2 2
      dist/preview release/materialsLibrary/babylon.simpleMaterial.min.js
  68. 1 1
      dist/preview release/materialsLibrary/babylon.skyMaterial.js
  69. 1 1
      dist/preview release/materialsLibrary/babylon.skyMaterial.js.map
  70. 2 2
      dist/preview release/materialsLibrary/babylon.skyMaterial.min.js
  71. 1 1
      dist/preview release/materialsLibrary/babylon.terrainMaterial.js
  72. 1 1
      dist/preview release/materialsLibrary/babylon.terrainMaterial.js.map
  73. 2 2
      dist/preview release/materialsLibrary/babylon.terrainMaterial.min.js
  74. 1 1
      dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js
  75. 1 1
      dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js.map
  76. 2 2
      dist/preview release/materialsLibrary/babylon.triPlanarMaterial.min.js
  77. 1 1
      dist/preview release/materialsLibrary/babylon.waterMaterial.js
  78. 1 1
      dist/preview release/materialsLibrary/babylon.waterMaterial.js.map
  79. 2 2
      dist/preview release/materialsLibrary/babylon.waterMaterial.min.js
  80. 1 1
      dist/preview release/materialsLibrary/babylonjs.materials.js
  81. 1 1
      dist/preview release/materialsLibrary/babylonjs.materials.js.map
  82. 2 2
      dist/preview release/materialsLibrary/babylonjs.materials.min.js
  83. 2 2
      dist/preview release/materialsLibrary/package.json
  84. 67 13
      dist/preview release/nodeEditor/babylon.nodeEditor.d.ts
  85. 6 6
      dist/preview release/nodeEditor/babylon.nodeEditor.js
  86. 876 642
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js
  87. 1 1
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map
  88. 155 29
      dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts
  89. 2 2
      dist/preview release/nodeEditor/package.json
  90. 1 1
      dist/preview release/package.json
  91. 1 1
      dist/preview release/packagesSizeBaseLine.json
  92. 6 6
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js
  93. 1 1
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js.map
  94. 2 2
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js
  95. 6 6
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js
  96. 1 1
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js.map
  97. 2 2
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js
  98. 6 6
      dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js
  99. 1 1
      dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js.map
  100. 0 0
      dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.min.js

+ 107 - 0
azure-pipelines-cd.yml

@@ -0,0 +1,107 @@
+trigger:
+- preview
+
+jobs:
+- job: NetlifyStaticDeploy
+  displayName: 'Deploy'
+  pool:
+    vmImage: 'Ubuntu-16.04'
+    demands: npm
+  steps:
+  - script: 'npm install netlify-cli'
+    displayName: 'npm install netlify'
+  - script: 'npm install --prefix Playground/'
+    displayName: 'npm install playground'
+# Controllers
+  - script: 'npx netlify link --id=220a52f0-ea85-4244-8342-8ec149cd78d6'
+    displayName: 'netlify link babylonjscontrollers'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir=assets/meshes/controllers'
+    displayName: 'netlify deploy babylonjscontrollers'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# Sandbox
+  - script: 'npx netlify unlink'
+    displayName: 'netlify unlink'
+  - script: 'npx netlify link --id=4deda23f-f382-458b-897e-2f2111b5f263'
+    displayName: 'netlify link babylonjs-sandbox'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir=sandbox/'
+    displayName: 'netlify deploy babylonjs-sandbox'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# playground
+#  - script: 'npx netlify unlink'
+#    displayName: 'netlify unlink'
+#  - script: 'npx netlify link --id=9161d5f0-b208-4b86-a281-9300386f6c94'
+#    displayName: 'netlify link babylonjs-playground'
+#    env:
+#      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+#      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+#  - script: 'npx netlify deploy --prod --dir=Playground/'
+#    displayName: 'netlify deploy babylonjs-playground'
+#    env:
+#      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+#      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# babylonjs-preview
+  - script: 'npx netlify unlink'
+    displayName: 'netlify unlink'
+  - script: 'npx netlify link --id=e1c1c520-e3a4-4d5b-91e6-254f1bea1b6b'
+    displayName: 'netlify link babylonjs-preview'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir="dist/preview release"'
+    displayName: 'netlify deploy babylonjs-preview'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# assets-babylonjs
+  - script: 'npx netlify unlink'
+    displayName: 'netlify unlink'
+  - script: 'npx netlify link --id=bd58224a-5f56-42de-afd2-ffa72b85fd71'
+    displayName: 'netlify link assets-babylonjs'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir=assets/'
+    displayName: 'netlify deploy assets-babylonjs'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# nodeeditor
+  - script: 'npm install --prefix Tools/Gulp && npx gulp nodeEditor --gulpfile ./Tools/Gulp/gulpfile.js'
+    displayName: 'gulp build nodeeditor'
+  - script: 'npx netlify unlink'
+    displayName: 'netlify unlink'
+  - script: 'npx netlify link --id=d232f0dc-cdb2-473e-b0f5-91fb1dd1d398'
+    displayName: 'netlify link nodeeditor'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir=nodeEditor/public'
+    displayName: 'netlify deploy nodeeditor'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+# viewer-babylonjs
+  - script: 'npm install --prefix Tools/Gulp && npx gulp viewer --gulpfile ./Tools/Gulp/gulpfile.js'
+    displayName: 'gulp build viewer-babylonjs'
+  - script: 'npx netlify unlink'
+    displayName: 'netlify unlink'
+  - script: 'npx netlify link --id=a32b113f-8187-43ab-9133-8844521f26f4'
+    displayName: 'netlify link viewer-babylonjs'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)
+  - script: 'npx netlify deploy --prod --dir=Viewer/dist/'
+    displayName: 'netlify deploy viewer-babylonjs'
+    env:
+      AZURE_PULLREQUESTID: $(System.PullRequest.PullRequestId)
+      NETLIFY_AUTH_TOKEN: $(babylon.netlify.authToken)

+ 326 - 114
dist/preview release/babylon.d.ts

@@ -19370,7 +19370,7 @@ declare module BABYLON {
          *
          * Returns the clone.
          */
-        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): Nullable<AbstractMesh>;
+        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): InstancedMesh;
         /**
          * Disposes the InstancedMesh.
          * Returns nothing.
@@ -19820,7 +19820,7 @@ declare module BABYLON {
         /**
          * Returns a new LineMesh object cloned from the current one.
          */
-        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): Nullable<AbstractMesh>;
+        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): LinesMesh;
         /**
          * Creates a new InstancedLinesMesh object from the mesh model.
          * @see http://doc.babylonjs.com/how_to/how_to_use_instances
@@ -20297,6 +20297,14 @@ declare module BABYLON {
         */
         get renderList(): Nullable<Array<AbstractMesh>>;
         set renderList(value: Nullable<Array<AbstractMesh>>);
+        /**
+         * Use this function to overload the renderList array at rendering time.
+         * Return null to render with the curent renderList, else return the list of meshes to use for rendering.
+         * For 2DArray RTT, layerOrFace is the index of the layer that is going to be rendered, else it is the faceIndex of
+         * the cube (if the RTT is a cube, else layerOrFace=0).
+         * The renderList passed to the function is the current render list (the one that will be used if the function returns null)
+        */
+        getCustomRenderList: (layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>) => Nullable<Array<AbstractMesh>>;
         private _hookArray;
         /**
          * Define if particles should be rendered in your texture.
@@ -20545,6 +20553,7 @@ declare module BABYLON {
         } | {
             ratio: number;
         }): void;
+        private _defaultRenderListPrepared;
         /**
          * Renders all the objects from the render list into the texture.
          * @param useCameraPostProcess Define if camera post processes should be used during the rendering
@@ -20552,6 +20561,7 @@ declare module BABYLON {
          */
         render(useCameraPostProcess?: boolean, dumpForDebug?: boolean): void;
         private _bestReflectionRenderTargetDimension;
+        private _prepareRenderingManager;
         /**
          * @hidden
          * @param faceIndex face index to bind to if this is a cubetexture
@@ -23762,7 +23772,7 @@ declare module BABYLON {
          */
         getObjectCenter(): Vector3;
         /**
-         * Get a specific parametes from the options parameter
+         * Get a specific parameter from the options parameters
          * @param paramName The object parameter name
          * @returns The object parameter
          */
@@ -24720,7 +24730,7 @@ declare module BABYLON {
          * @param clonePhysicsImpostor allows/denies the cloning in the same time of the original mesh `body` used by the physics engine, if any (default `true`)
          * @returns a new mesh
          */
-        clone(name?: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean, clonePhysicsImpostor?: boolean): Nullable<AbstractMesh>;
+        clone(name?: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean, clonePhysicsImpostor?: boolean): Mesh;
         /**
          * Releases resources associated with this mesh.
          * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)
@@ -25290,6 +25300,10 @@ declare module BABYLON {
          */
         static readonly RIG_MODE_STEREOSCOPIC_OVERUNDER: number;
         /**
+         * Defines that both eyes of the camera will be rendered on successive lines interlaced for passive 3d monitors.
+         */
+        static readonly RIG_MODE_STEREOSCOPIC_INTERLACED: number;
+        /**
          * Defines that both eyes of the camera should be renderered in a VR mode (carbox).
          */
         static readonly RIG_MODE_VR: number;
@@ -41633,6 +41647,24 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * StereoscopicInterlacePostProcessI used to render stereo views from a rigged camera with support for alternate line interlacing
+     */
+    export class StereoscopicInterlacePostProcessI extends PostProcess {
+        private _stepSize;
+        private _passedProcess;
+        /**
+         * Initializes a StereoscopicInterlacePostProcessI
+         * @param name The name of the effect.
+         * @param rigCameras The rig cameras to be appled to the post process
+         * @param isStereoscopicHoriz If the rendered results are horizontal or vertical
+         * @param isStereoscopicInterlaced If the rendered results are alternate line interlaced
+         * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)
+         * @param engine The engine which the post process will be applied. (default: current engine)
+         * @param reusable If the post process can be reused on the same frame. (default: false)
+         */
+        constructor(name: string, rigCameras: Camera[], isStereoscopicHoriz: boolean, isStereoscopicInterlaced: boolean, samplingMode?: number, engine?: Engine, reusable?: boolean);
+    }
+    /**
      * StereoscopicInterlacePostProcess used to render stereo views from a rigged camera
      */
     export class StereoscopicInterlacePostProcess extends PostProcess {
@@ -42354,7 +42386,7 @@ declare module BABYLON {
          * @param xrSession xr session
          * @returns a promise that will resolve once the XR Layer has been created
          */
-        initializeXRLayerAsync(xrSession: XRSession): Promise<void>;
+        initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;
     }
 }
 declare module BABYLON {
@@ -42365,12 +42397,17 @@ declare module BABYLON {
         /**
          * Options for this XR Layer output
          */
-        canvasOptions: XRWebGLLayerOptions;
+        canvasOptions?: XRWebGLLayerOptions;
         /**
          * CSS styling for a newly created canvas (if not provided)
          */
         newCanvasCssStyle?: string;
         /**
+         * An optional canvas in case you wish to create it yourself and provide it here.
+         * If not provided, a new canvas will be created
+         */
+        canvasElement?: HTMLCanvasElement;
+        /**
          * Get the default values of the configuration object
          * @returns default values of this configuration object
          */
@@ -42380,11 +42417,11 @@ declare module BABYLON {
      * Creates a canvas that is added/removed from the webpage when entering/exiting XR
      */
     export class WebXRManagedOutputCanvas implements WebXRRenderTarget {
-        private configuration;
+        private _options;
         private _engine;
         private _canvas;
         /**
-         * xrpresent context of the canvas which can be used to display/mirror xr content
+         * Rendering context of the canvas which can be used to display/mirror xr content
          */
         canvasContext: WebGLRenderingContext;
         /**
@@ -42396,15 +42433,13 @@ declare module BABYLON {
          * @param xrSession xr session
          * @returns a promise that will resolve once the XR Layer has been created
          */
-        initializeXRLayerAsync(xrSession: any): any;
+        initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;
         /**
          * Initializes the canvas to be added/removed upon entering/exiting xr
-         * @param engine the Babylon engine
-         * @param canvas The canvas to be added/removed (If not specified a full screen canvas will be created)
-         * @param onStateChangedObservable the mechanism by which the canvas will be added/removed based on XR state
-         * @param configuration optional configuration for this canvas output. defaults will be used if not provided
+         * @param _xrSessionManager The XR Session manager
+         * @param _options optional configuration for this canvas output. defaults will be used if not provided
          */
-        constructor(engine: ThinEngine, canvas?: HTMLCanvasElement, onStateChangedObservable?: Observable<WebXRState>, configuration?: WebXRManagedOutputCanvasOptions);
+        constructor(_xrSessionManager: WebXRSessionManager, _options?: WebXRManagedOutputCanvasOptions);
         /**
          * Disposes of the object
          */
@@ -42504,6 +42539,10 @@ declare module BABYLON {
          */
         setReferenceSpaceAsync(referenceSpace: XRReferenceSpaceType): Promise<void>;
         /**
+         * Resets the reference space to the one started the session
+         */
+        resetReferenceSpace(): void;
+        /**
          * Updates the render state of the session
          * @param state state to set
          * @returns a promise that resolves once the render state has been updated
@@ -42537,7 +42576,7 @@ declare module BABYLON {
          * @param options optional options to provide when creating a new render target
          * @returns a WebXR render target to which the session can render
          */
-        getWebXRRenderTarget(onStateChangedObservable?: Observable<WebXRState>, options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget;
+        getWebXRRenderTarget(options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget;
         /**
          * @hidden
          * Converts the render layer of xrSession to a render target
@@ -42545,15 +42584,15 @@ declare module BABYLON {
          * @param scene scene the new render target should be created for
          * @param baseLayer the webgl layer to create the render target for
          */
-        static _CreateRenderTargetTextureFromSession(session: XRSession, scene: Scene, baseLayer: XRWebGLLayer): RenderTargetTexture;
+        static _CreateRenderTargetTextureFromSession(_session: XRSession, scene: Scene, baseLayer: XRWebGLLayer): RenderTargetTexture;
         /**
          * Disposes of the session manager
          */
         dispose(): void;
         /**
-         * Gets a promise returning true when fullfiled if the given session mode is supported
+         * Returns a promise that resolves with a boolean indicating if the provided session mode is supported by this browser
          * @param sessionMode defines the session to test
-         * @returns a promise
+         * @returns a promise with boolean as final value
          */
         static IsSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean>;
     }
@@ -42581,6 +42620,12 @@ declare module BABYLON {
          */
         constructor(name: string, scene: Scene, _xrSessionManager: WebXRSessionManager);
         private _updateNumberOfRigCameras;
+        /**
+         * Sets this camera's transformation based on a non-vr camera
+         * @param otherCamera the non-vr camera to copy the transformation from
+         * @param resetToBaseReferenceSpace should XR reset to the base reference space
+         */
+        setTransformationFromNonVRCamera(otherCamera: Camera, resetToBaseReferenceSpace?: boolean): void;
         /** @hidden */
         _updateForDualEyeDebugging(): void;
         private _updateReferenceSpace;
@@ -42678,6 +42723,7 @@ declare module BABYLON {
         constructor(_xrSessionManager: WebXRSessionManager);
         /**
          * Enable a feature using its name and a version. This will enable it in the scene, and will be responsible to attach it when the session starts.
+         * If used twice, the old version will be disposed and a new one will be constructed. This way you can re-enable with different configuration.
          *
          * @param featureName the name of the feature to load or the class of the feature
          * @param version optional version to load. if not provided the latest version will be enabled
@@ -42690,6 +42736,7 @@ declare module BABYLON {
         }, version?: number | string, moduleOptions?: any, attachIfPossible?: boolean): IWebXRFeature;
         /**
          * Used to disable an already-enabled feature
+         * The feature will be disposed and will be recreated once enabled.
          * @param featureName the feature to disable
          * @returns true if disable was successful
          */
@@ -43744,12 +43791,23 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * Configuration options for the WebXR controller creation
+     */
+    export interface IWebXRControllerOptions {
+        /**
+         * Force a specific controller type for this controller.
+         * This can be used when creating your own profile or when testing different controllers
+         */
+        forceControllerProfile?: string;
+    }
+    /**
      * Represents an XR controller
      */
     export class WebXRController {
-        private scene;
+        private _scene;
         /** The underlying input source for the controller  */
         inputSource: XRInputSource;
+        private _options;
         /**
          * Represents the part of the controller that is held. This may not exist if the controller is the head mounted display itself, if thats the case only the pointer from the head will be availible
          */
@@ -43774,13 +43832,13 @@ declare module BABYLON {
         /**
          * Creates the controller
          * @see https://doc.babylonjs.com/how_to/webxr
-         * @param scene the scene which the controller should be associated to
+         * @param _scene the scene which the controller should be associated to
          * @param inputSource the underlying input source for the controller
-         * @param controllerProfile An optional controller profile for this input. This will override the xrInput profile.
+         * @param _options options for this controller creation
          */
-        constructor(scene: Scene, 
+        constructor(_scene: Scene, 
         /** The underlying input source for the controller  */
-        inputSource: XRInputSource, controllerProfile?: string);
+        inputSource: XRInputSource, _options?: IWebXRControllerOptions);
         /**
          * Get this controllers unique id
          */
@@ -43797,11 +43855,6 @@ declare module BABYLON {
          */
         getWorldPointerRayToRef(result: Ray): void;
         /**
-         * Get the scene associated with this controller
-         * @returns the scene object
-         */
-        getScene(): Scene;
-        /**
          * Disposes of the object
          */
         dispose(): void;
@@ -43876,6 +43929,55 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * This is the base class for all WebXR features.
+     * Since most features require almost the same resources and callbacks, this class can be used to simplify the development
+     * Note that since the features manager is using the `IWebXRFeature` you are in no way obligated to use this class
+     */
+    export abstract class WebXRAbstractFeature implements IWebXRFeature {
+        protected _xrSessionManager: WebXRSessionManager;
+        /**
+         * Construct a new (abstract) webxr feature
+         * @param _xrSessionManager the xr session manager for this feature
+         */
+        constructor(_xrSessionManager: WebXRSessionManager);
+        private _attached;
+        private _removeOnDetach;
+        /**
+         * Is this feature attached
+         */
+        get attached(): boolean;
+        /**
+         * attach this feature
+         *
+         * @returns true if successful.
+         */
+        attach(): boolean;
+        /**
+         * detach this feature.
+         *
+         * @returns true if successful.
+         */
+        detach(): boolean;
+        /**
+         * Dispose this feature and all of the resources attached
+         */
+        dispose(): void;
+        /**
+         * Code in this function will be executed on each xrFrame received from the browser.
+         * This function will not execute after the feature is detached.
+         * @param _xrFrame the current frame
+         */
+        protected _onXRFrame(_xrFrame: XRFrame): void;
+        /**
+         * This is used to register callbacks that will automatically be removed when detach is called.
+         * @param observable the observable to which the observer will be attached
+         * @param callback the callback to register
+         */
+        protected _addNewAttachObserver<T>(observable: Observable<T>, callback: (eventData: T, eventState: EventState) => void): void;
+    }
+}
+declare module BABYLON {
+    /**
      * Options interface for the pointer selection module
      */
     export interface IWebXRControllerPointerSelectionOptions {
@@ -43887,12 +43989,34 @@ declare module BABYLON {
          * Different button type to use instead of the main component
          */
         overrideButtonId?: string;
+        /**
+         * The amount of time in miliseconds it takes between pick found something to a pointer down event.
+         * Used in gaze modes. Tracked pointer uses the trigger, screen uses touch events
+         * 3000 means 3 seconds between pointing at something and selecting it
+         */
+        timeToSelect?: number;
+        /**
+         * Disable the pointer up event when the xr controller in screen and gaze mode is disposed (meaning - when the user removed the finger from the screen)
+         * If not disabled, the last picked point will be used to execute a pointer up event
+         * If disabled, pointer up event will be triggered right after the pointer down event.
+         * Used in screen and gaze target ray mode only
+         */
+        disablePointerUpOnTouchOut: boolean;
+        /**
+         * For gaze mode (time to select instead of press)
+         */
+        forceGazeMode: boolean;
+        /**
+         * Factor to be applied to the pointer-moved function in the gaze mode. How sensitive should the gaze mode be when checking if the pointer moved
+         * to start a new countdown to the pointer down event.
+         * Defaults to 1.
+         */
+        gazeModePointerMovedFactor?: number;
     }
     /**
      * A module that will enable pointer selection for motion controllers of XR Input Sources
      */
-    export class WebXRControllerPointerSelection implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRControllerPointerSelection extends WebXRAbstractFeature implements IWebXRFeature {
         private readonly _options;
         /**
          * The module's name
@@ -43907,11 +44031,11 @@ declare module BABYLON {
         /**
          * This color will be set to the laser pointer when selection is triggered
          */
-        onPickedLaserPointerColor: Color3;
+        laserPointerPickedColor: Color3;
         /**
          * This color will be applied to the selection ring when selection is triggered
          */
-        onPickedSelectionMeshColor: Color3;
+        selectionMeshPickedColor: Color3;
         /**
          * default color of the selection ring
          */
@@ -43921,14 +44045,8 @@ declare module BABYLON {
          */
         lasterPointerDefaultColor: Color3;
         private static _idCounter;
-        private _observerTracked;
-        private _attached;
         private _tmpRay;
         private _controllers;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _scene;
         /**
          * constructs a new background remover module
@@ -43950,15 +44068,24 @@ declare module BABYLON {
          * @returns true if successful.
          */
         detach(): boolean;
+        /**
+         * Get the xr controller that correlates to the pointer id in the pointer event
+         *
+         * @param id the pointer id to search for
+         * @returns the controller that correlates to this id or null if not found
+         */
+        getXRControllerByPointerId(id: number): Nullable<WebXRController>;
+        protected _onXRFrame(_xrFrame: XRFrame): void;
         private _attachController;
+        private _attachScreenRayMode;
+        private _attachGazeMode;
+        private _tmpVectorForPickCompare;
+        private _pickingMoved;
+        private _attachTrackedPointerRayMode;
         private _detachController;
         private _generateNewMeshPair;
         private _convertNormalToDirectionOfRay;
         private _updatePointerDistance;
-        /**
-         * Dispose this feature and all of the resources attached
-         */
-        dispose(): void;
     }
 }
 declare module BABYLON {
@@ -44175,14 +44302,22 @@ declare module BABYLON {
              */
             disableAnimation?: boolean;
         };
+        /**
+         * Disable using the thumbstick and use the main component (usuallly trigger) on long press.
+         * This will be automatically true if the controller doesnt have a thumbstick or touchpad.
+         */
+        useMainComponentOnly?: boolean;
+        /**
+         * If main component is used (no thumbstick), how long should the "long press" take before teleporting
+         */
+        timeToTeleport?: number;
     }
     /**
      * This is a teleportation feature to be used with webxr-enabled motion controllers.
      * When enabled and attached, the feature will allow a user to move aroundand rotate in the scene using
      * the input of the attached controllers.
      */
-    export class WebXRMotionControllerTeleportation implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRMotionControllerTeleportation extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -44219,12 +44354,6 @@ declare module BABYLON {
          * Distance to travel when moving backwards
          */
         backwardsTeleportationDistance: number;
-        private _observerTracked;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * Add a new mesh to the floor meshes array
          * @param mesh the mesh to use as floor mesh
@@ -44257,26 +44386,13 @@ declare module BABYLON {
          * @param selectionFeature the feature to disable when forward movement is enabled
          */
         setSelectionFeature(selectionFeature: IWebXRFeature): void;
-        /**
-         * attach this feature
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
         attach(): boolean;
-        /**
-         * detach this feature.
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
         detach(): boolean;
-        /**
-         * Dispose this feature and all of the resources attached
-         */
         dispose(): void;
+        protected _onXRFrame(_xrFrame: XRFrame): void;
         private _currentTeleportationControllerId;
         private _attachController;
+        private _teleportForward;
         private _detachController;
         private createDefaultTargetMesh;
         private setTargetMeshVisibility;
@@ -44805,8 +44921,7 @@ declare module BABYLON {
      * Hit test (or raycasting) is used to interact with the real world.
      * For further information read here - https://github.com/immersive-web/hit-test
      */
-    export class WebXRHitTestLegacy implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRHitTestLegacy extends WebXRAbstractFeature implements IWebXRFeature {
         /**
          * options to use when constructing this feature
          */
@@ -44821,11 +44936,6 @@ declare module BABYLON {
          * This number does not correspond to the webxr specs version
          */
         static readonly Version: number;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * Execute a hit test on the current running session using a select event returned from a transient input (such as touch)
          * @param event the (select) event to use to select with
@@ -44848,7 +44958,6 @@ declare module BABYLON {
          */
         onHitTestResultObservable: Observable<IWebXRHitResult[]>;
         private _onSelectEnabled;
-        private _xrFrameObserver;
         /**
          * Creates a new instance of the (legacy version) hit test feature
          * @param _xrSessionManager an instance of WebXRSessionManager
@@ -44878,6 +44987,10 @@ declare module BABYLON {
          */
         detach(): boolean;
         private _onHitTestResults;
+        private _origin;
+        private _direction;
+        private _mat;
+        protected _onXRFrame(frame: XRFrame): void;
         private _onSelect;
         /**
          * Dispose this feature and all of the resources attached
@@ -44922,8 +45035,7 @@ declare module BABYLON {
      * The plane detector is used to detect planes in the real world when in AR
      * For more information see https://github.com/immersive-web/real-world-geometry/
      */
-    export class WebXRPlaneDetector implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRPlaneDetector extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -44948,35 +45060,16 @@ declare module BABYLON {
          * This can execute N times every frame
          */
         onPlaneUpdatedObservable: Observable<IWebXRPlane>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _enabled;
         private _detectedPlanes;
         private _lastFrameDetected;
-        private _observerTracked;
         /**
          * construct a new Plane Detector
          * @param _xrSessionManager an instance of xr Session manager
          * @param _options configuration to use when constructing this feature
          */
         constructor(_xrSessionManager: WebXRSessionManager, _options?: IWebXRPlaneDetectorOptions);
-        /**
-         * attach this feature
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
-        attach(): boolean;
-        /**
-         * detach this feature.
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
-        detach(): boolean;
+        protected _onXRFrame(frame: XRFrame): void;
         /**
          * Dispose this feature and all of the resources attached
          */
@@ -45031,8 +45124,7 @@ declare module BABYLON {
      * will use the frame to create an anchor and not the session or a detected plane
      * For further information see https://github.com/immersive-web/anchors/
      */
-    export class WebXRAnchorSystem implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRAnchorSystem extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -45057,17 +45149,11 @@ declare module BABYLON {
          * Observers registered here will be executed when an anchor was removed from the session
          */
         onAnchorRemovedObservable: Observable<IWebXRAnchor>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _planeDetector;
         private _hitTestModule;
         private _enabled;
         private _trackedAnchors;
         private _lastFrameDetected;
-        private _observerTracked;
         /**
          * constructs a new anchor system
          * @param _xrSessionManager an instance of WebXRSessionManager
@@ -45103,6 +45189,7 @@ declare module BABYLON {
          * Dispose this feature and all of the resources attached
          */
         dispose(): void;
+        protected _onXRFrame(frame: XRFrame): void;
         private _onSelect;
         /**
          * Add anchor at a specific XR point.
@@ -45151,8 +45238,7 @@ declare module BABYLON {
     /**
      * A module that will automatically disable background meshes when entering AR and will enable them when leaving AR.
      */
-    export class WebXRBackgroundRemover implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRBackgroundRemover extends WebXRAbstractFeature implements IWebXRFeature {
         /**
          * read-only options to be used in this module
          */
@@ -45171,11 +45257,6 @@ declare module BABYLON {
          * registered observers will be triggered when the background state changes
          */
         onBackgroundStateChangedObservable: Observable<boolean>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * constructs a new background remover module
          * @param _xrSessionManager the session manager for this module
@@ -54411,6 +54492,10 @@ declare module BABYLON {
          * @param max maximal distance for the breaks (default to 1.)
          */
         setMinMaxDistance(min: number, max: number): void;
+        /** Gets the minimal distance used in the cascade break computation */
+        get minDistance(): number;
+        /** Gets the maximal distance used in the cascade break computation */
+        get maxDistance(): number;
         /**
          * Gets the class name of that object
          * @returns "ShadowGenerator"
@@ -54464,10 +54549,8 @@ declare module BABYLON {
         private _lightDirection;
         private _effect;
         private _cascades;
-        private _cachedPosition;
         private _cachedDirection;
         private _cachedDefines;
-        private _currentRenderID;
         private _mapSize;
         private _currentLayer;
         private _textureType;
@@ -54512,11 +54595,13 @@ declare module BABYLON {
          */
         get depthClamp(): boolean;
         set depthClamp(value: boolean);
+        private _cascadeBlendPercentage;
         /**
          * Gets or sets the percentage of blending between two cascades (value between 0. and 1.).
          * It defaults to 0.1 (10% blending).
          */
-        cascadeBlendPercentage: number;
+        get cascadeBlendPercentage(): number;
+        set cascadeBlendPercentage(value: number);
         private _lambda;
         /**
          * Gets or set the lambda parameter.
@@ -54532,6 +54617,12 @@ declare module BABYLON {
          * @returns the cascade view matrix
          */
         getCascadeViewMatrix(cascadeNum: number): Nullable<Matrix>;
+        /**
+         * Gets the projection matrix corresponding to a given cascade
+         * @param cascadeNum cascade to retrieve the projection matrix from
+         * @returns the cascade projection matrix
+         */
+        getCascadeProjectionMatrix(cascadeNum: number): Nullable<Matrix>;
         private _depthRenderer;
         /**
          * Sets the depth renderer to use when autoCalcDepthBounds is enabled.
@@ -54578,6 +54669,7 @@ declare module BABYLON {
          * @returns The transform matrix used to create the CSM shadow map
          */
         getCSMTransformMatrix(cascadeIndex: number): Matrix;
+        private _computeMatrices;
         private _computeFrustumInWorldSpace;
         private _computeCascadeFrustum;
         /** @hidden */
@@ -57007,6 +57099,9 @@ declare module BABYLON {
     }
     /** @hidden */
     export class NodeMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {
+        NORMAL: boolean;
+        TANGENT: boolean;
+        UV1: boolean;
         /** BONES */
         NUM_BONE_INFLUENCERS: number;
         BonesPerMesh: number;
@@ -57061,8 +57156,10 @@ declare module BABYLON {
         private _cachedWorldViewProjectionMatrix;
         private _optimizers;
         private _animationFrame;
-        /** Define the URl to load node editor script */
+        /** Define the Url to load node editor script */
         static EditorURL: string;
+        /** Define the Url to load snippets */
+        static SnippetUrl: string;
         private BJSNODEMATERIALEDITOR;
         /** Get the inspector from bundle or global */
         private _getGlobalNodeMaterialEditor;
@@ -57308,6 +57405,14 @@ declare module BABYLON {
          */
         static Parse(source: any, scene: Scene, rootUrl?: string): NodeMaterial;
         /**
+         * Creates a node material from a snippet saved by the node material editor
+         * @param snippetId defines the snippet to load
+         * @param scene defines the hosting scene
+         * @param rootUrl defines the root URL to use to load textures and relative dependencies
+         * @returns a promise that will resolve to the new node material
+         */
+        static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl?: string): Promise<NodeMaterial>;
+        /**
          * Creates a new node material set to default basic configuration
          * @param name defines the name of the material
          * @param scene defines the hosting scene
@@ -57864,6 +57969,8 @@ declare module BABYLON {
         min: number;
         /** Gets or set a value used to limit the range of float values */
         max: number;
+        /** Gets or set a value indicating that this input can only get 0 and 1 values */
+        isBoolean: boolean;
         /** Gets or sets a value used by the Node Material editor to determine how to configure the current value if it is a matrix */
         matrixMode: number;
         /** @hidden */
@@ -64559,6 +64666,11 @@ declare module BABYLON {
          */
         static readonly VELOCITY_TEXTURE_TYPE: number;
         /**
+         * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array
+         * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)
+         */
+        static readonly REFLECTIVITY_TEXTURE_TYPE: number;
+        /**
          * Dictionary used to store the previous transformation matrices of each rendered mesh
          * in order to compute objects velocities when enableVelocity is set to "true"
          * @hidden
@@ -64586,8 +64698,10 @@ declare module BABYLON {
         private _ratio;
         private _enablePosition;
         private _enableVelocity;
+        private _enableReflectivity;
         private _positionIndex;
         private _velocityIndex;
+        private _reflectivityIndex;
         protected _effect: Effect;
         protected _cachedDefines: string;
         /**
@@ -64622,6 +64736,14 @@ declare module BABYLON {
          */
         set enableVelocity(enable: boolean);
         /**
+         * Gets a boolean indicating if objects roughness are enabled in the G buffer.
+         */
+        get enableReflectivity(): boolean;
+        /**
+         * Sets wether or not objects roughness are enabled for the G buffer.
+         */
+        set enableReflectivity(enable: boolean);
+        /**
          * Gets the scene associated with the buffer.
          */
         get scene(): Scene;
@@ -65778,6 +65900,86 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /** @hidden */
+    export var screenSpaceReflectionPixelShader: {
+        name: string;
+        shader: string;
+    };
+}
+declare module BABYLON {
+    /**
+     * The ScreenSpaceReflectionPostProcess performs realtime reflections using only and only the available informations on the screen (positions and normals).
+     * Basically, the screen space reflection post-process will compute reflections according the material's reflectivity.
+     */
+    export class ScreenSpaceReflectionPostProcess extends PostProcess {
+        /**
+         * Gets or sets a reflection threshold mainly used to adjust the reflection's height.
+         */
+        threshold: number;
+        /**
+         * Gets or sets the current reflection strength. 1.0 is an ideal value but can be increased/decreased for particular results.
+         */
+        strength: number;
+        /**
+         * Gets or sets the falloff exponent used while computing fresnel. More the exponent is high, more the reflections will be discrete.
+         */
+        reflectionSpecularFalloffExponent: number;
+        /**
+         * Gets or sets the step size used to iterate until the effect finds the color of the reflection's pixel. Typically in interval [0.1, 1.0]
+         */
+        step: number;
+        /**
+         * Gets or sets the factor applied when computing roughness. Default value is 0.2.
+         */
+        roughnessFactor: number;
+        private _geometryBufferRenderer;
+        private _enableSmoothReflections;
+        private _reflectionSamples;
+        private _smoothSteps;
+        /**
+         * Creates a new instance of ScreenSpaceReflectionPostProcess.
+         * @param name The name of the effect.
+         * @param scene The scene containing the objects to calculate reflections.
+         * @param options The required width/height ratio to downsize to before computing the render pass.
+         * @param camera The camera to apply the render pass to.
+         * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)
+         * @param engine The engine which the post process will be applied. (default: current engine)
+         * @param reusable If the post process can be reused on the same frame. (default: false)
+         * @param textureType Type of textures used when performing the post process. (default: 0)
+         * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)
+         */
+        constructor(name: string, scene: Scene, options: number | PostProcessOptions, camera: Nullable<Camera>, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType?: number, blockCompilation?: boolean);
+        /**
+         * Gets wether or not smoothing reflections is enabled.
+         * Enabling smoothing will require more GPU power and can generate a drop in FPS.
+         */
+        get enableSmoothReflections(): boolean;
+        /**
+         * Sets wether or not smoothing reflections is enabled.
+         * Enabling smoothing will require more GPU power and can generate a drop in FPS.
+         */
+        set enableSmoothReflections(enabled: boolean);
+        /**
+         * Gets the number of samples taken while computing reflections. More samples count is high,
+         * more the post-process wil require GPU power and can generate a drop in FPS. Basically in interval [25, 100].
+         */
+        get reflectionSamples(): number;
+        /**
+         * Sets the number of samples taken while computing reflections. More samples count is high,
+         * more the post-process wil require GPU power and can generate a drop in FPS. Basically in interval [25, 100].
+         */
+        set reflectionSamples(samples: number);
+        /**
+         * Gets the number of samples taken while smoothing reflections. More samples count is high,
+         * more the post-process will require GPU power and can generate a drop in FPS.
+         * Default value (5.0) work pretty well in all cases but can be adjusted.
+         */
+        get smoothSteps(): number;
+        set smoothSteps(steps: number);
+        private _updateEffectDefines;
+    }
+}
+declare module BABYLON {
+    /** @hidden */
     export var standardPixelShader: {
         name: string;
         shader: string;
@@ -65884,6 +66086,10 @@ declare module BABYLON {
          */
         fxaaPostProcess: Nullable<FxaaPostProcess>;
         /**
+         * Post-process used to simulate realtime reflections using the screen space and geometry renderer.
+         */
+        screenSpaceReflectionPostProcess: Nullable<ScreenSpaceReflectionPostProcess>;
+        /**
          * Represents the brightness threshold in order to configure the illuminated surfaces
          */
         brightThreshold: number;
@@ -66030,6 +66236,7 @@ declare module BABYLON {
         private _hdrEnabled;
         private _motionBlurEnabled;
         private _fxaaEnabled;
+        private _screenSpaceReflectionsEnabled;
         private _motionBlurSamples;
         private _volumetricLightStepsCount;
         private _samples;
@@ -66075,6 +66282,11 @@ declare module BABYLON {
         get fxaaEnabled(): boolean;
         set fxaaEnabled(enabled: boolean);
         /**
+         * Specifies if screen space reflections are enabled.
+         */
+        get screenSpaceReflectionsEnabled(): boolean;
+        set screenSpaceReflectionsEnabled(enabled: boolean);
+        /**
          * Specifies the number of steps used to calculate the volumetric lights
          * Typically in interval [50, 200]
          */

File diff suppressed because it is too large
+ 2 - 2
dist/preview release/babylon.js


File diff suppressed because it is too large
+ 1621 - 852
dist/preview release/babylon.max.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/babylon.max.js.map


File diff suppressed because it is too large
+ 679 - 234
dist/preview release/babylon.module.d.ts


+ 326 - 114
dist/preview release/documentation.d.ts

@@ -19370,7 +19370,7 @@ declare module BABYLON {
          *
          * Returns the clone.
          */
-        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): Nullable<AbstractMesh>;
+        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): InstancedMesh;
         /**
          * Disposes the InstancedMesh.
          * Returns nothing.
@@ -19820,7 +19820,7 @@ declare module BABYLON {
         /**
          * Returns a new LineMesh object cloned from the current one.
          */
-        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): Nullable<AbstractMesh>;
+        clone(name: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean): LinesMesh;
         /**
          * Creates a new InstancedLinesMesh object from the mesh model.
          * @see http://doc.babylonjs.com/how_to/how_to_use_instances
@@ -20297,6 +20297,14 @@ declare module BABYLON {
         */
         get renderList(): Nullable<Array<AbstractMesh>>;
         set renderList(value: Nullable<Array<AbstractMesh>>);
+        /**
+         * Use this function to overload the renderList array at rendering time.
+         * Return null to render with the curent renderList, else return the list of meshes to use for rendering.
+         * For 2DArray RTT, layerOrFace is the index of the layer that is going to be rendered, else it is the faceIndex of
+         * the cube (if the RTT is a cube, else layerOrFace=0).
+         * The renderList passed to the function is the current render list (the one that will be used if the function returns null)
+        */
+        getCustomRenderList: (layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>) => Nullable<Array<AbstractMesh>>;
         private _hookArray;
         /**
          * Define if particles should be rendered in your texture.
@@ -20545,6 +20553,7 @@ declare module BABYLON {
         } | {
             ratio: number;
         }): void;
+        private _defaultRenderListPrepared;
         /**
          * Renders all the objects from the render list into the texture.
          * @param useCameraPostProcess Define if camera post processes should be used during the rendering
@@ -20552,6 +20561,7 @@ declare module BABYLON {
          */
         render(useCameraPostProcess?: boolean, dumpForDebug?: boolean): void;
         private _bestReflectionRenderTargetDimension;
+        private _prepareRenderingManager;
         /**
          * @hidden
          * @param faceIndex face index to bind to if this is a cubetexture
@@ -23762,7 +23772,7 @@ declare module BABYLON {
          */
         getObjectCenter(): Vector3;
         /**
-         * Get a specific parametes from the options parameter
+         * Get a specific parameter from the options parameters
          * @param paramName The object parameter name
          * @returns The object parameter
          */
@@ -24720,7 +24730,7 @@ declare module BABYLON {
          * @param clonePhysicsImpostor allows/denies the cloning in the same time of the original mesh `body` used by the physics engine, if any (default `true`)
          * @returns a new mesh
          */
-        clone(name?: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean, clonePhysicsImpostor?: boolean): Nullable<AbstractMesh>;
+        clone(name?: string, newParent?: Nullable<Node>, doNotCloneChildren?: boolean, clonePhysicsImpostor?: boolean): Mesh;
         /**
          * Releases resources associated with this mesh.
          * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)
@@ -25290,6 +25300,10 @@ declare module BABYLON {
          */
         static readonly RIG_MODE_STEREOSCOPIC_OVERUNDER: number;
         /**
+         * Defines that both eyes of the camera will be rendered on successive lines interlaced for passive 3d monitors.
+         */
+        static readonly RIG_MODE_STEREOSCOPIC_INTERLACED: number;
+        /**
          * Defines that both eyes of the camera should be renderered in a VR mode (carbox).
          */
         static readonly RIG_MODE_VR: number;
@@ -41633,6 +41647,24 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * StereoscopicInterlacePostProcessI used to render stereo views from a rigged camera with support for alternate line interlacing
+     */
+    export class StereoscopicInterlacePostProcessI extends PostProcess {
+        private _stepSize;
+        private _passedProcess;
+        /**
+         * Initializes a StereoscopicInterlacePostProcessI
+         * @param name The name of the effect.
+         * @param rigCameras The rig cameras to be appled to the post process
+         * @param isStereoscopicHoriz If the rendered results are horizontal or vertical
+         * @param isStereoscopicInterlaced If the rendered results are alternate line interlaced
+         * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)
+         * @param engine The engine which the post process will be applied. (default: current engine)
+         * @param reusable If the post process can be reused on the same frame. (default: false)
+         */
+        constructor(name: string, rigCameras: Camera[], isStereoscopicHoriz: boolean, isStereoscopicInterlaced: boolean, samplingMode?: number, engine?: Engine, reusable?: boolean);
+    }
+    /**
      * StereoscopicInterlacePostProcess used to render stereo views from a rigged camera
      */
     export class StereoscopicInterlacePostProcess extends PostProcess {
@@ -42354,7 +42386,7 @@ declare module BABYLON {
          * @param xrSession xr session
          * @returns a promise that will resolve once the XR Layer has been created
          */
-        initializeXRLayerAsync(xrSession: XRSession): Promise<void>;
+        initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;
     }
 }
 declare module BABYLON {
@@ -42365,12 +42397,17 @@ declare module BABYLON {
         /**
          * Options for this XR Layer output
          */
-        canvasOptions: XRWebGLLayerOptions;
+        canvasOptions?: XRWebGLLayerOptions;
         /**
          * CSS styling for a newly created canvas (if not provided)
          */
         newCanvasCssStyle?: string;
         /**
+         * An optional canvas in case you wish to create it yourself and provide it here.
+         * If not provided, a new canvas will be created
+         */
+        canvasElement?: HTMLCanvasElement;
+        /**
          * Get the default values of the configuration object
          * @returns default values of this configuration object
          */
@@ -42380,11 +42417,11 @@ declare module BABYLON {
      * Creates a canvas that is added/removed from the webpage when entering/exiting XR
      */
     export class WebXRManagedOutputCanvas implements WebXRRenderTarget {
-        private configuration;
+        private _options;
         private _engine;
         private _canvas;
         /**
-         * xrpresent context of the canvas which can be used to display/mirror xr content
+         * Rendering context of the canvas which can be used to display/mirror xr content
          */
         canvasContext: WebGLRenderingContext;
         /**
@@ -42396,15 +42433,13 @@ declare module BABYLON {
          * @param xrSession xr session
          * @returns a promise that will resolve once the XR Layer has been created
          */
-        initializeXRLayerAsync(xrSession: any): any;
+        initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;
         /**
          * Initializes the canvas to be added/removed upon entering/exiting xr
-         * @param engine the Babylon engine
-         * @param canvas The canvas to be added/removed (If not specified a full screen canvas will be created)
-         * @param onStateChangedObservable the mechanism by which the canvas will be added/removed based on XR state
-         * @param configuration optional configuration for this canvas output. defaults will be used if not provided
+         * @param _xrSessionManager The XR Session manager
+         * @param _options optional configuration for this canvas output. defaults will be used if not provided
          */
-        constructor(engine: ThinEngine, canvas?: HTMLCanvasElement, onStateChangedObservable?: Observable<WebXRState>, configuration?: WebXRManagedOutputCanvasOptions);
+        constructor(_xrSessionManager: WebXRSessionManager, _options?: WebXRManagedOutputCanvasOptions);
         /**
          * Disposes of the object
          */
@@ -42504,6 +42539,10 @@ declare module BABYLON {
          */
         setReferenceSpaceAsync(referenceSpace: XRReferenceSpaceType): Promise<void>;
         /**
+         * Resets the reference space to the one started the session
+         */
+        resetReferenceSpace(): void;
+        /**
          * Updates the render state of the session
          * @param state state to set
          * @returns a promise that resolves once the render state has been updated
@@ -42537,7 +42576,7 @@ declare module BABYLON {
          * @param options optional options to provide when creating a new render target
          * @returns a WebXR render target to which the session can render
          */
-        getWebXRRenderTarget(onStateChangedObservable?: Observable<WebXRState>, options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget;
+        getWebXRRenderTarget(options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget;
         /**
          * @hidden
          * Converts the render layer of xrSession to a render target
@@ -42545,15 +42584,15 @@ declare module BABYLON {
          * @param scene scene the new render target should be created for
          * @param baseLayer the webgl layer to create the render target for
          */
-        static _CreateRenderTargetTextureFromSession(session: XRSession, scene: Scene, baseLayer: XRWebGLLayer): RenderTargetTexture;
+        static _CreateRenderTargetTextureFromSession(_session: XRSession, scene: Scene, baseLayer: XRWebGLLayer): RenderTargetTexture;
         /**
          * Disposes of the session manager
          */
         dispose(): void;
         /**
-         * Gets a promise returning true when fullfiled if the given session mode is supported
+         * Returns a promise that resolves with a boolean indicating if the provided session mode is supported by this browser
          * @param sessionMode defines the session to test
-         * @returns a promise
+         * @returns a promise with boolean as final value
          */
         static IsSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean>;
     }
@@ -42581,6 +42620,12 @@ declare module BABYLON {
          */
         constructor(name: string, scene: Scene, _xrSessionManager: WebXRSessionManager);
         private _updateNumberOfRigCameras;
+        /**
+         * Sets this camera's transformation based on a non-vr camera
+         * @param otherCamera the non-vr camera to copy the transformation from
+         * @param resetToBaseReferenceSpace should XR reset to the base reference space
+         */
+        setTransformationFromNonVRCamera(otherCamera: Camera, resetToBaseReferenceSpace?: boolean): void;
         /** @hidden */
         _updateForDualEyeDebugging(): void;
         private _updateReferenceSpace;
@@ -42678,6 +42723,7 @@ declare module BABYLON {
         constructor(_xrSessionManager: WebXRSessionManager);
         /**
          * Enable a feature using its name and a version. This will enable it in the scene, and will be responsible to attach it when the session starts.
+         * If used twice, the old version will be disposed and a new one will be constructed. This way you can re-enable with different configuration.
          *
          * @param featureName the name of the feature to load or the class of the feature
          * @param version optional version to load. if not provided the latest version will be enabled
@@ -42690,6 +42736,7 @@ declare module BABYLON {
         }, version?: number | string, moduleOptions?: any, attachIfPossible?: boolean): IWebXRFeature;
         /**
          * Used to disable an already-enabled feature
+         * The feature will be disposed and will be recreated once enabled.
          * @param featureName the feature to disable
          * @returns true if disable was successful
          */
@@ -43744,12 +43791,23 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * Configuration options for the WebXR controller creation
+     */
+    export interface IWebXRControllerOptions {
+        /**
+         * Force a specific controller type for this controller.
+         * This can be used when creating your own profile or when testing different controllers
+         */
+        forceControllerProfile?: string;
+    }
+    /**
      * Represents an XR controller
      */
     export class WebXRController {
-        private scene;
+        private _scene;
         /** The underlying input source for the controller  */
         inputSource: XRInputSource;
+        private _options;
         /**
          * Represents the part of the controller that is held. This may not exist if the controller is the head mounted display itself, if thats the case only the pointer from the head will be availible
          */
@@ -43774,13 +43832,13 @@ declare module BABYLON {
         /**
          * Creates the controller
          * @see https://doc.babylonjs.com/how_to/webxr
-         * @param scene the scene which the controller should be associated to
+         * @param _scene the scene which the controller should be associated to
          * @param inputSource the underlying input source for the controller
-         * @param controllerProfile An optional controller profile for this input. This will override the xrInput profile.
+         * @param _options options for this controller creation
          */
-        constructor(scene: Scene, 
+        constructor(_scene: Scene, 
         /** The underlying input source for the controller  */
-        inputSource: XRInputSource, controllerProfile?: string);
+        inputSource: XRInputSource, _options?: IWebXRControllerOptions);
         /**
          * Get this controllers unique id
          */
@@ -43797,11 +43855,6 @@ declare module BABYLON {
          */
         getWorldPointerRayToRef(result: Ray): void;
         /**
-         * Get the scene associated with this controller
-         * @returns the scene object
-         */
-        getScene(): Scene;
-        /**
          * Disposes of the object
          */
         dispose(): void;
@@ -43876,6 +43929,55 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /**
+     * This is the base class for all WebXR features.
+     * Since most features require almost the same resources and callbacks, this class can be used to simplify the development
+     * Note that since the features manager is using the `IWebXRFeature` you are in no way obligated to use this class
+     */
+    export abstract class WebXRAbstractFeature implements IWebXRFeature {
+        protected _xrSessionManager: WebXRSessionManager;
+        /**
+         * Construct a new (abstract) webxr feature
+         * @param _xrSessionManager the xr session manager for this feature
+         */
+        constructor(_xrSessionManager: WebXRSessionManager);
+        private _attached;
+        private _removeOnDetach;
+        /**
+         * Is this feature attached
+         */
+        get attached(): boolean;
+        /**
+         * attach this feature
+         *
+         * @returns true if successful.
+         */
+        attach(): boolean;
+        /**
+         * detach this feature.
+         *
+         * @returns true if successful.
+         */
+        detach(): boolean;
+        /**
+         * Dispose this feature and all of the resources attached
+         */
+        dispose(): void;
+        /**
+         * Code in this function will be executed on each xrFrame received from the browser.
+         * This function will not execute after the feature is detached.
+         * @param _xrFrame the current frame
+         */
+        protected _onXRFrame(_xrFrame: XRFrame): void;
+        /**
+         * This is used to register callbacks that will automatically be removed when detach is called.
+         * @param observable the observable to which the observer will be attached
+         * @param callback the callback to register
+         */
+        protected _addNewAttachObserver<T>(observable: Observable<T>, callback: (eventData: T, eventState: EventState) => void): void;
+    }
+}
+declare module BABYLON {
+    /**
      * Options interface for the pointer selection module
      */
     export interface IWebXRControllerPointerSelectionOptions {
@@ -43887,12 +43989,34 @@ declare module BABYLON {
          * Different button type to use instead of the main component
          */
         overrideButtonId?: string;
+        /**
+         * The amount of time in miliseconds it takes between pick found something to a pointer down event.
+         * Used in gaze modes. Tracked pointer uses the trigger, screen uses touch events
+         * 3000 means 3 seconds between pointing at something and selecting it
+         */
+        timeToSelect?: number;
+        /**
+         * Disable the pointer up event when the xr controller in screen and gaze mode is disposed (meaning - when the user removed the finger from the screen)
+         * If not disabled, the last picked point will be used to execute a pointer up event
+         * If disabled, pointer up event will be triggered right after the pointer down event.
+         * Used in screen and gaze target ray mode only
+         */
+        disablePointerUpOnTouchOut: boolean;
+        /**
+         * For gaze mode (time to select instead of press)
+         */
+        forceGazeMode: boolean;
+        /**
+         * Factor to be applied to the pointer-moved function in the gaze mode. How sensitive should the gaze mode be when checking if the pointer moved
+         * to start a new countdown to the pointer down event.
+         * Defaults to 1.
+         */
+        gazeModePointerMovedFactor?: number;
     }
     /**
      * A module that will enable pointer selection for motion controllers of XR Input Sources
      */
-    export class WebXRControllerPointerSelection implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRControllerPointerSelection extends WebXRAbstractFeature implements IWebXRFeature {
         private readonly _options;
         /**
          * The module's name
@@ -43907,11 +44031,11 @@ declare module BABYLON {
         /**
          * This color will be set to the laser pointer when selection is triggered
          */
-        onPickedLaserPointerColor: Color3;
+        laserPointerPickedColor: Color3;
         /**
          * This color will be applied to the selection ring when selection is triggered
          */
-        onPickedSelectionMeshColor: Color3;
+        selectionMeshPickedColor: Color3;
         /**
          * default color of the selection ring
          */
@@ -43921,14 +44045,8 @@ declare module BABYLON {
          */
         lasterPointerDefaultColor: Color3;
         private static _idCounter;
-        private _observerTracked;
-        private _attached;
         private _tmpRay;
         private _controllers;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _scene;
         /**
          * constructs a new background remover module
@@ -43950,15 +44068,24 @@ declare module BABYLON {
          * @returns true if successful.
          */
         detach(): boolean;
+        /**
+         * Get the xr controller that correlates to the pointer id in the pointer event
+         *
+         * @param id the pointer id to search for
+         * @returns the controller that correlates to this id or null if not found
+         */
+        getXRControllerByPointerId(id: number): Nullable<WebXRController>;
+        protected _onXRFrame(_xrFrame: XRFrame): void;
         private _attachController;
+        private _attachScreenRayMode;
+        private _attachGazeMode;
+        private _tmpVectorForPickCompare;
+        private _pickingMoved;
+        private _attachTrackedPointerRayMode;
         private _detachController;
         private _generateNewMeshPair;
         private _convertNormalToDirectionOfRay;
         private _updatePointerDistance;
-        /**
-         * Dispose this feature and all of the resources attached
-         */
-        dispose(): void;
     }
 }
 declare module BABYLON {
@@ -44175,14 +44302,22 @@ declare module BABYLON {
              */
             disableAnimation?: boolean;
         };
+        /**
+         * Disable using the thumbstick and use the main component (usuallly trigger) on long press.
+         * This will be automatically true if the controller doesnt have a thumbstick or touchpad.
+         */
+        useMainComponentOnly?: boolean;
+        /**
+         * If main component is used (no thumbstick), how long should the "long press" take before teleporting
+         */
+        timeToTeleport?: number;
     }
     /**
      * This is a teleportation feature to be used with webxr-enabled motion controllers.
      * When enabled and attached, the feature will allow a user to move aroundand rotate in the scene using
      * the input of the attached controllers.
      */
-    export class WebXRMotionControllerTeleportation implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRMotionControllerTeleportation extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -44219,12 +44354,6 @@ declare module BABYLON {
          * Distance to travel when moving backwards
          */
         backwardsTeleportationDistance: number;
-        private _observerTracked;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * Add a new mesh to the floor meshes array
          * @param mesh the mesh to use as floor mesh
@@ -44257,26 +44386,13 @@ declare module BABYLON {
          * @param selectionFeature the feature to disable when forward movement is enabled
          */
         setSelectionFeature(selectionFeature: IWebXRFeature): void;
-        /**
-         * attach this feature
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
         attach(): boolean;
-        /**
-         * detach this feature.
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
         detach(): boolean;
-        /**
-         * Dispose this feature and all of the resources attached
-         */
         dispose(): void;
+        protected _onXRFrame(_xrFrame: XRFrame): void;
         private _currentTeleportationControllerId;
         private _attachController;
+        private _teleportForward;
         private _detachController;
         private createDefaultTargetMesh;
         private setTargetMeshVisibility;
@@ -44805,8 +44921,7 @@ declare module BABYLON {
      * Hit test (or raycasting) is used to interact with the real world.
      * For further information read here - https://github.com/immersive-web/hit-test
      */
-    export class WebXRHitTestLegacy implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRHitTestLegacy extends WebXRAbstractFeature implements IWebXRFeature {
         /**
          * options to use when constructing this feature
          */
@@ -44821,11 +44936,6 @@ declare module BABYLON {
          * This number does not correspond to the webxr specs version
          */
         static readonly Version: number;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * Execute a hit test on the current running session using a select event returned from a transient input (such as touch)
          * @param event the (select) event to use to select with
@@ -44848,7 +44958,6 @@ declare module BABYLON {
          */
         onHitTestResultObservable: Observable<IWebXRHitResult[]>;
         private _onSelectEnabled;
-        private _xrFrameObserver;
         /**
          * Creates a new instance of the (legacy version) hit test feature
          * @param _xrSessionManager an instance of WebXRSessionManager
@@ -44878,6 +44987,10 @@ declare module BABYLON {
          */
         detach(): boolean;
         private _onHitTestResults;
+        private _origin;
+        private _direction;
+        private _mat;
+        protected _onXRFrame(frame: XRFrame): void;
         private _onSelect;
         /**
          * Dispose this feature and all of the resources attached
@@ -44922,8 +45035,7 @@ declare module BABYLON {
      * The plane detector is used to detect planes in the real world when in AR
      * For more information see https://github.com/immersive-web/real-world-geometry/
      */
-    export class WebXRPlaneDetector implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRPlaneDetector extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -44948,35 +45060,16 @@ declare module BABYLON {
          * This can execute N times every frame
          */
         onPlaneUpdatedObservable: Observable<IWebXRPlane>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _enabled;
         private _detectedPlanes;
         private _lastFrameDetected;
-        private _observerTracked;
         /**
          * construct a new Plane Detector
          * @param _xrSessionManager an instance of xr Session manager
          * @param _options configuration to use when constructing this feature
          */
         constructor(_xrSessionManager: WebXRSessionManager, _options?: IWebXRPlaneDetectorOptions);
-        /**
-         * attach this feature
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
-        attach(): boolean;
-        /**
-         * detach this feature.
-         * Will usually be called by the features manager
-         *
-         * @returns true if successful.
-         */
-        detach(): boolean;
+        protected _onXRFrame(frame: XRFrame): void;
         /**
          * Dispose this feature and all of the resources attached
          */
@@ -45031,8 +45124,7 @@ declare module BABYLON {
      * will use the frame to create an anchor and not the session or a detected plane
      * For further information see https://github.com/immersive-web/anchors/
      */
-    export class WebXRAnchorSystem implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRAnchorSystem extends WebXRAbstractFeature implements IWebXRFeature {
         private _options;
         /**
          * The module's name
@@ -45057,17 +45149,11 @@ declare module BABYLON {
          * Observers registered here will be executed when an anchor was removed from the session
          */
         onAnchorRemovedObservable: Observable<IWebXRAnchor>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         private _planeDetector;
         private _hitTestModule;
         private _enabled;
         private _trackedAnchors;
         private _lastFrameDetected;
-        private _observerTracked;
         /**
          * constructs a new anchor system
          * @param _xrSessionManager an instance of WebXRSessionManager
@@ -45103,6 +45189,7 @@ declare module BABYLON {
          * Dispose this feature and all of the resources attached
          */
         dispose(): void;
+        protected _onXRFrame(frame: XRFrame): void;
         private _onSelect;
         /**
          * Add anchor at a specific XR point.
@@ -45151,8 +45238,7 @@ declare module BABYLON {
     /**
      * A module that will automatically disable background meshes when entering AR and will enable them when leaving AR.
      */
-    export class WebXRBackgroundRemover implements IWebXRFeature {
-        private _xrSessionManager;
+    export class WebXRBackgroundRemover extends WebXRAbstractFeature implements IWebXRFeature {
         /**
          * read-only options to be used in this module
          */
@@ -45171,11 +45257,6 @@ declare module BABYLON {
          * registered observers will be triggered when the background state changes
          */
         onBackgroundStateChangedObservable: Observable<boolean>;
-        private _attached;
-        /**
-         * Is this feature attached
-         */
-        get attached(): boolean;
         /**
          * constructs a new background remover module
          * @param _xrSessionManager the session manager for this module
@@ -54411,6 +54492,10 @@ declare module BABYLON {
          * @param max maximal distance for the breaks (default to 1.)
          */
         setMinMaxDistance(min: number, max: number): void;
+        /** Gets the minimal distance used in the cascade break computation */
+        get minDistance(): number;
+        /** Gets the maximal distance used in the cascade break computation */
+        get maxDistance(): number;
         /**
          * Gets the class name of that object
          * @returns "ShadowGenerator"
@@ -54464,10 +54549,8 @@ declare module BABYLON {
         private _lightDirection;
         private _effect;
         private _cascades;
-        private _cachedPosition;
         private _cachedDirection;
         private _cachedDefines;
-        private _currentRenderID;
         private _mapSize;
         private _currentLayer;
         private _textureType;
@@ -54512,11 +54595,13 @@ declare module BABYLON {
          */
         get depthClamp(): boolean;
         set depthClamp(value: boolean);
+        private _cascadeBlendPercentage;
         /**
          * Gets or sets the percentage of blending between two cascades (value between 0. and 1.).
          * It defaults to 0.1 (10% blending).
          */
-        cascadeBlendPercentage: number;
+        get cascadeBlendPercentage(): number;
+        set cascadeBlendPercentage(value: number);
         private _lambda;
         /**
          * Gets or set the lambda parameter.
@@ -54532,6 +54617,12 @@ declare module BABYLON {
          * @returns the cascade view matrix
          */
         getCascadeViewMatrix(cascadeNum: number): Nullable<Matrix>;
+        /**
+         * Gets the projection matrix corresponding to a given cascade
+         * @param cascadeNum cascade to retrieve the projection matrix from
+         * @returns the cascade projection matrix
+         */
+        getCascadeProjectionMatrix(cascadeNum: number): Nullable<Matrix>;
         private _depthRenderer;
         /**
          * Sets the depth renderer to use when autoCalcDepthBounds is enabled.
@@ -54578,6 +54669,7 @@ declare module BABYLON {
          * @returns The transform matrix used to create the CSM shadow map
          */
         getCSMTransformMatrix(cascadeIndex: number): Matrix;
+        private _computeMatrices;
         private _computeFrustumInWorldSpace;
         private _computeCascadeFrustum;
         /** @hidden */
@@ -57007,6 +57099,9 @@ declare module BABYLON {
     }
     /** @hidden */
     export class NodeMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {
+        NORMAL: boolean;
+        TANGENT: boolean;
+        UV1: boolean;
         /** BONES */
         NUM_BONE_INFLUENCERS: number;
         BonesPerMesh: number;
@@ -57061,8 +57156,10 @@ declare module BABYLON {
         private _cachedWorldViewProjectionMatrix;
         private _optimizers;
         private _animationFrame;
-        /** Define the URl to load node editor script */
+        /** Define the Url to load node editor script */
         static EditorURL: string;
+        /** Define the Url to load snippets */
+        static SnippetUrl: string;
         private BJSNODEMATERIALEDITOR;
         /** Get the inspector from bundle or global */
         private _getGlobalNodeMaterialEditor;
@@ -57308,6 +57405,14 @@ declare module BABYLON {
          */
         static Parse(source: any, scene: Scene, rootUrl?: string): NodeMaterial;
         /**
+         * Creates a node material from a snippet saved by the node material editor
+         * @param snippetId defines the snippet to load
+         * @param scene defines the hosting scene
+         * @param rootUrl defines the root URL to use to load textures and relative dependencies
+         * @returns a promise that will resolve to the new node material
+         */
+        static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl?: string): Promise<NodeMaterial>;
+        /**
          * Creates a new node material set to default basic configuration
          * @param name defines the name of the material
          * @param scene defines the hosting scene
@@ -57864,6 +57969,8 @@ declare module BABYLON {
         min: number;
         /** Gets or set a value used to limit the range of float values */
         max: number;
+        /** Gets or set a value indicating that this input can only get 0 and 1 values */
+        isBoolean: boolean;
         /** Gets or sets a value used by the Node Material editor to determine how to configure the current value if it is a matrix */
         matrixMode: number;
         /** @hidden */
@@ -64559,6 +64666,11 @@ declare module BABYLON {
          */
         static readonly VELOCITY_TEXTURE_TYPE: number;
         /**
+         * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array
+         * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)
+         */
+        static readonly REFLECTIVITY_TEXTURE_TYPE: number;
+        /**
          * Dictionary used to store the previous transformation matrices of each rendered mesh
          * in order to compute objects velocities when enableVelocity is set to "true"
          * @hidden
@@ -64586,8 +64698,10 @@ declare module BABYLON {
         private _ratio;
         private _enablePosition;
         private _enableVelocity;
+        private _enableReflectivity;
         private _positionIndex;
         private _velocityIndex;
+        private _reflectivityIndex;
         protected _effect: Effect;
         protected _cachedDefines: string;
         /**
@@ -64622,6 +64736,14 @@ declare module BABYLON {
          */
         set enableVelocity(enable: boolean);
         /**
+         * Gets a boolean indicating if objects roughness are enabled in the G buffer.
+         */
+        get enableReflectivity(): boolean;
+        /**
+         * Sets wether or not objects roughness are enabled for the G buffer.
+         */
+        set enableReflectivity(enable: boolean);
+        /**
          * Gets the scene associated with the buffer.
          */
         get scene(): Scene;
@@ -65778,6 +65900,86 @@ declare module BABYLON {
 }
 declare module BABYLON {
     /** @hidden */
+    export var screenSpaceReflectionPixelShader: {
+        name: string;
+        shader: string;
+    };
+}
+declare module BABYLON {
+    /**
+     * The ScreenSpaceReflectionPostProcess performs realtime reflections using only and only the available informations on the screen (positions and normals).
+     * Basically, the screen space reflection post-process will compute reflections according the material's reflectivity.
+     */
+    export class ScreenSpaceReflectionPostProcess extends PostProcess {
+        /**
+         * Gets or sets a reflection threshold mainly used to adjust the reflection's height.
+         */
+        threshold: number;
+        /**
+         * Gets or sets the current reflection strength. 1.0 is an ideal value but can be increased/decreased for particular results.
+         */
+        strength: number;
+        /**
+         * Gets or sets the falloff exponent used while computing fresnel. More the exponent is high, more the reflections will be discrete.
+         */
+        reflectionSpecularFalloffExponent: number;
+        /**
+         * Gets or sets the step size used to iterate until the effect finds the color of the reflection's pixel. Typically in interval [0.1, 1.0]
+         */
+        step: number;
+        /**
+         * Gets or sets the factor applied when computing roughness. Default value is 0.2.
+         */
+        roughnessFactor: number;
+        private _geometryBufferRenderer;
+        private _enableSmoothReflections;
+        private _reflectionSamples;
+        private _smoothSteps;
+        /**
+         * Creates a new instance of ScreenSpaceReflectionPostProcess.
+         * @param name The name of the effect.
+         * @param scene The scene containing the objects to calculate reflections.
+         * @param options The required width/height ratio to downsize to before computing the render pass.
+         * @param camera The camera to apply the render pass to.
+         * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)
+         * @param engine The engine which the post process will be applied. (default: current engine)
+         * @param reusable If the post process can be reused on the same frame. (default: false)
+         * @param textureType Type of textures used when performing the post process. (default: 0)
+         * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)
+         */
+        constructor(name: string, scene: Scene, options: number | PostProcessOptions, camera: Nullable<Camera>, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType?: number, blockCompilation?: boolean);
+        /**
+         * Gets wether or not smoothing reflections is enabled.
+         * Enabling smoothing will require more GPU power and can generate a drop in FPS.
+         */
+        get enableSmoothReflections(): boolean;
+        /**
+         * Sets wether or not smoothing reflections is enabled.
+         * Enabling smoothing will require more GPU power and can generate a drop in FPS.
+         */
+        set enableSmoothReflections(enabled: boolean);
+        /**
+         * Gets the number of samples taken while computing reflections. More samples count is high,
+         * more the post-process wil require GPU power and can generate a drop in FPS. Basically in interval [25, 100].
+         */
+        get reflectionSamples(): number;
+        /**
+         * Sets the number of samples taken while computing reflections. More samples count is high,
+         * more the post-process wil require GPU power and can generate a drop in FPS. Basically in interval [25, 100].
+         */
+        set reflectionSamples(samples: number);
+        /**
+         * Gets the number of samples taken while smoothing reflections. More samples count is high,
+         * more the post-process will require GPU power and can generate a drop in FPS.
+         * Default value (5.0) work pretty well in all cases but can be adjusted.
+         */
+        get smoothSteps(): number;
+        set smoothSteps(steps: number);
+        private _updateEffectDefines;
+    }
+}
+declare module BABYLON {
+    /** @hidden */
     export var standardPixelShader: {
         name: string;
         shader: string;
@@ -65884,6 +66086,10 @@ declare module BABYLON {
          */
         fxaaPostProcess: Nullable<FxaaPostProcess>;
         /**
+         * Post-process used to simulate realtime reflections using the screen space and geometry renderer.
+         */
+        screenSpaceReflectionPostProcess: Nullable<ScreenSpaceReflectionPostProcess>;
+        /**
          * Represents the brightness threshold in order to configure the illuminated surfaces
          */
         brightThreshold: number;
@@ -66030,6 +66236,7 @@ declare module BABYLON {
         private _hdrEnabled;
         private _motionBlurEnabled;
         private _fxaaEnabled;
+        private _screenSpaceReflectionsEnabled;
         private _motionBlurSamples;
         private _volumetricLightStepsCount;
         private _samples;
@@ -66075,6 +66282,11 @@ declare module BABYLON {
         get fxaaEnabled(): boolean;
         set fxaaEnabled(enabled: boolean);
         /**
+         * Specifies if screen space reflections are enabled.
+         */
+        get screenSpaceReflectionsEnabled(): boolean;
+        set screenSpaceReflectionsEnabled(enabled: boolean);
+        /**
          * Specifies the number of steps used to calculate the volumetric lights
          * Typically in interval [50, 200]
          */

+ 1 - 1
dist/preview release/glTF2Interface/package.json

@@ -1,7 +1,7 @@
 {
     "name": "babylonjs-gltf2interface",
     "description": "A typescript declaration of babylon's gltf2 inteface.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"

+ 1 - 1
dist/preview release/gui/babylon.gui.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/gui/babylon.gui.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/gui/babylon.gui.min.js


+ 2 - 2
dist/preview release/gui/package.json

@@ -4,7 +4,7 @@
     },
     "name": "babylonjs-gui",
     "description": "The Babylon.js GUI library is an extension you can use to generate interactive user interface. It is build on top of the DynamicTexture.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,7 +28,7 @@
     ],
     "license": "Apache-2.0",
     "dependencies": {
-        "babylonjs": "4.1.0-beta.18"
+        "babylonjs": "4.1.0-beta.20"
     },
     "engines": {
         "node": "*"

File diff suppressed because it is too large
+ 8 - 14
dist/preview release/inspector/babylon.inspector.bundle.js


File diff suppressed because it is too large
+ 366 - 314
dist/preview release/inspector/babylon.inspector.bundle.max.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/inspector/babylon.inspector.bundle.max.js.map


+ 2 - 0
dist/preview release/inspector/babylon.inspector.d.ts

@@ -723,8 +723,10 @@ declare module INSPECTOR {
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
     }
     export class CommonShadowLightPropertyGridComponent extends React.Component<ICommonShadowLightPropertyGridComponentProps> {
+        private _internals;
         constructor(props: ICommonShadowLightPropertyGridComponentProps);
         createShadowGenerator(): void;
+        disposeShadowGenerator(): void;
         render(): JSX.Element;
     }
 }

+ 4 - 0
dist/preview release/inspector/babylon.inspector.module.d.ts

@@ -865,8 +865,10 @@ declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/lig
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
     }
     export class CommonShadowLightPropertyGridComponent extends React.Component<ICommonShadowLightPropertyGridComponentProps> {
+        private _internals;
         constructor(props: ICommonShadowLightPropertyGridComponentProps);
         createShadowGenerator(): void;
+        disposeShadowGenerator(): void;
         render(): JSX.Element;
     }
 }
@@ -3081,8 +3083,10 @@ declare module INSPECTOR {
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
     }
     export class CommonShadowLightPropertyGridComponent extends React.Component<ICommonShadowLightPropertyGridComponentProps> {
+        private _internals;
         constructor(props: ICommonShadowLightPropertyGridComponentProps);
         createShadowGenerator(): void;
+        disposeShadowGenerator(): void;
         render(): JSX.Element;
     }
 }

+ 7 - 7
dist/preview release/inspector/package.json

@@ -4,7 +4,7 @@
     },
     "name": "babylonjs-inspector",
     "description": "The Babylon.js inspector.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -29,12 +29,12 @@
     ],
     "license": "Apache-2.0",
     "dependencies": {
-        "babylonjs": "4.1.0-beta.18",
-        "babylonjs-gui": "4.1.0-beta.18",
-        "babylonjs-loaders": "4.1.0-beta.18",
-        "babylonjs-materials": "4.1.0-beta.18",
-        "babylonjs-serializers": "4.1.0-beta.18",
-        "babylonjs-gltf2interface": "4.1.0-beta.18"
+        "babylonjs": "4.1.0-beta.20",
+        "babylonjs-gui": "4.1.0-beta.20",
+        "babylonjs-loaders": "4.1.0-beta.20",
+        "babylonjs-materials": "4.1.0-beta.20",
+        "babylonjs-serializers": "4.1.0-beta.20",
+        "babylonjs-gltf2interface": "4.1.0-beta.20"
     },
     "devDependencies": {
         "@types/react": "~16.7.3",

+ 1 - 1
dist/preview release/loaders/babylon.glTF1FileLoader.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.glTF1FileLoader.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/loaders/babylon.glTF1FileLoader.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.glTF2FileLoader.js.map


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.glTF2FileLoader.min.js


+ 1 - 1
dist/preview release/loaders/babylon.glTFFileLoader.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.glTFFileLoader.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/loaders/babylon.glTFFileLoader.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.js.map


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.stlFileLoader.js.map


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylon.stlFileLoader.min.js


+ 1 - 1
dist/preview release/loaders/babylonjs.loaders.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/loaders/babylonjs.loaders.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/loaders/babylonjs.loaders.min.js


+ 3 - 3
dist/preview release/loaders/package.json

@@ -4,7 +4,7 @@
     },
     "name": "babylonjs-loaders",
     "description": "The Babylon.js file loaders library is an extension you can use to load different 3D file types into a Babylon scene.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,8 +28,8 @@
     ],
     "license": "Apache-2.0",
     "dependencies": {
-        "babylonjs-gltf2interface": "4.1.0-beta.18",
-        "babylonjs": "4.1.0-beta.18"
+        "babylonjs-gltf2interface": "4.1.0-beta.20",
+        "babylonjs": "4.1.0-beta.20"
     },
     "engines": {
         "node": "*"

+ 1 - 1
dist/preview release/materialsLibrary/babylon.cellMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.cellMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.cellMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.customMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.customMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.customMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.fireMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.fireMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.fireMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.furMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.furMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.furMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.gradientMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.gradientMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.gradientMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.gridMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.gridMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.gridMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.lavaMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.lavaMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.lavaMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.mixMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.mixMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.mixMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.normalMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.normalMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.normalMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.simpleMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.simpleMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.simpleMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.skyMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.skyMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.skyMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.terrainMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.terrainMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.terrainMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.triPlanarMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylon.waterMaterial.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylon.waterMaterial.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylon.waterMaterial.min.js


+ 1 - 1
dist/preview release/materialsLibrary/babylonjs.materials.js

@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/materialsLibrary/babylonjs.materials.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/materialsLibrary/babylonjs.materials.min.js


+ 2 - 2
dist/preview release/materialsLibrary/package.json

@@ -4,7 +4,7 @@
     },
     "name": "babylonjs-materials",
     "description": "The Babylon.js materials library is a collection of advanced materials to be used in a Babylon.js scene.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,7 +28,7 @@
     ],
     "license": "Apache-2.0",
     "dependencies": {
-        "babylonjs": "4.1.0-beta.18"
+        "babylonjs": "4.1.0-beta.20"
     },
     "engines": {
         "node": "*"

+ 67 - 13
dist/preview release/nodeEditor/babylon.nodeEditor.d.ts

@@ -150,6 +150,7 @@ declare module NODEEDITOR {
         private _ports;
         private _controlledPorts;
         private _id;
+        onExpandStateChanged: BABYLON.Observable<GraphFrame>;
         private readonly CloseSVG;
         private readonly ExpandSVG;
         private readonly CollapseSVG;
@@ -369,6 +370,7 @@ declare module NODEEDITOR {
         value: number;
         step?: number;
         onChange: (value: number) => void;
+        globalState: GlobalState;
     }
     export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
         value: string;
@@ -393,6 +395,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector2) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
         isExpanded: boolean;
@@ -430,6 +433,7 @@ declare module NODEEDITOR {
         propertyName: string;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
         onChange?: () => void;
+        globalState: GlobalState;
     }
     export class Color3LineComponent extends React.Component<IColor3LineComponentProps, {
         isExpanded: boolean;
@@ -467,6 +471,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector3) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
         isExpanded: boolean;
@@ -508,6 +513,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector4) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector4LineComponent extends React.Component<IVector4LineComponentProps, {
         isExpanded: boolean;
@@ -583,6 +589,7 @@ declare module NODEEDITOR {
         onModeChange?: (mode: number) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
         mode?: number;
+        globalState: GlobalState;
     }
     export class MatrixLineComponent extends React.Component<IMatrixLineComponentProps, {
         value: BABYLON.Matrix;
@@ -678,14 +685,6 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
-    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
-        constructor(props: IPropertyComponentProps);
-        renderValue(globalState: GlobalState): JSX.Element | null;
-        setDefaultValue(): void;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     export interface ICheckBoxLineComponentProps {
         label: string;
         target?: any;
@@ -710,6 +709,52 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
+    export interface IColor4LineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        onChange?: () => void;
+        globalState: GlobalState;
+    }
+    export class Color4LineComponent extends React.Component<IColor4LineComponentProps, {
+        isExpanded: boolean;
+        color: BABYLON.Color4;
+    }> {
+        private _localChange;
+        constructor(props: IColor4LineComponentProps);
+        shouldComponentUpdate(nextProps: IColor4LineComponentProps, nextState: {
+            color: BABYLON.Color4;
+        }): boolean;
+        onChange(newValue: string): void;
+        switchExpandState(): void;
+        raiseOnPropertyChanged(previousValue: BABYLON.Color4): void;
+        updateStateR(value: number): void;
+        updateStateG(value: number): void;
+        updateStateB(value: number): void;
+        updateStateA(value: number): void;
+        copyToClipboard(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    interface IColor4PropertyTabComponentProps {
+        globalState: GlobalState;
+        inputBlock: BABYLON.InputBlock;
+    }
+    export class Color4PropertyTabComponent extends React.Component<IColor4PropertyTabComponentProps> {
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
+        constructor(props: IPropertyComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     export class TransformPropertyTabComponent extends React.Component<IPropertyComponentProps> {
         constructor(props: IPropertyComponentProps);
         render(): JSX.Element;
@@ -1070,6 +1115,19 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
+    export interface IFramePropertyTabComponentProps {
+        globalState: GlobalState;
+        frame: GraphFrame;
+    }
+    export class FramePropertyTabComponent extends React.Component<IFramePropertyTabComponentProps> {
+        private onFrameExpandStateChangedObserver;
+        constructor(props: IFramePropertyTabComponentProps);
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     interface IPropertyTabComponentProps {
         globalState: GlobalState;
     }
@@ -1178,11 +1236,7 @@ declare module NODEEDITOR {
         private _mouseLocationX;
         private _mouseLocationY;
         private _onWidgetKeyUpPointer;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(block: BABYLON.NodeMaterialBlock): GraphNode;
+        createNodeFromObject(block: BABYLON.NodeMaterialBlock, recursion?: boolean): GraphNode;
         addValueNode(type: string): GraphNode;
         componentDidMount(): void;
         componentWillUnmount(): void;

File diff suppressed because it is too large
+ 6 - 6
dist/preview release/nodeEditor/babylon.nodeEditor.js


File diff suppressed because it is too large
+ 876 - 642
dist/preview release/nodeEditor/babylon.nodeEditor.max.js


File diff suppressed because it is too large
+ 1 - 1
dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map


+ 155 - 29
dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts

@@ -198,6 +198,7 @@ declare module "babylonjs-node-editor/diagram/graphFrame" {
     import { GraphNode } from "babylonjs-node-editor/diagram/graphNode";
     import { GraphCanvasComponent } from "babylonjs-node-editor/diagram/graphCanvas";
     import { Nullable } from 'babylonjs/types';
+    import { Observable } from 'babylonjs/Misc/observable';
     import { IFrameData } from "babylonjs-node-editor/nodeLocationInfo";
     import { Color3 } from 'babylonjs/Maths/math.color';
     export class GraphFrame {
@@ -229,6 +230,7 @@ declare module "babylonjs-node-editor/diagram/graphFrame" {
         private _ports;
         private _controlledPorts;
         private _id;
+        onExpandStateChanged: Observable<GraphFrame>;
         private readonly CloseSVG;
         private readonly ExpandSVG;
         private readonly CollapseSVG;
@@ -466,11 +468,13 @@ declare module "babylonjs-node-editor/sharedComponents/sliderLineComponent" {
 }
 declare module "babylonjs-node-editor/sharedComponents/numericInputComponent" {
     import * as React from "react";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     interface INumericInputComponentProps {
         label: string;
         value: number;
         step?: number;
         onChange: (value: number) => void;
+        globalState: GlobalState;
     }
     export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
         value: string;
@@ -492,6 +496,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector2LineComponent" {
     import { Vector2 } from "babylonjs/Maths/math";
     import { Observable } from "babylonjs/Misc/observable";
     import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     interface IVector2LineComponentProps {
         label: string;
         target: any;
@@ -499,6 +504,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector2LineComponent" {
         step?: number;
         onChange?: (newvalue: Vector2) => void;
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
         isExpanded: boolean;
@@ -537,12 +543,14 @@ declare module "babylonjs-node-editor/sharedComponents/color3LineComponent" {
     import { Observable } from "babylonjs/Misc/observable";
     import { Color3 } from "babylonjs/Maths/math";
     import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     export interface IColor3LineComponentProps {
         label: string;
         target: any;
         propertyName: string;
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
         onChange?: () => void;
+        globalState: GlobalState;
     }
     export class Color3LineComponent extends React.Component<IColor3LineComponentProps, {
         isExpanded: boolean;
@@ -580,6 +588,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector3LineComponent" {
     import { Vector3 } from "babylonjs/Maths/math";
     import { Observable } from "babylonjs/Misc/observable";
     import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     interface IVector3LineComponentProps {
         label: string;
         target: any;
@@ -587,6 +596,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector3LineComponent" {
         step?: number;
         onChange?: (newvalue: Vector3) => void;
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
         isExpanded: boolean;
@@ -627,6 +637,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector4LineComponent" {
     import { Vector4 } from "babylonjs/Maths/math";
     import { Observable } from "babylonjs/Misc/observable";
     import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     interface IVector4LineComponentProps {
         label: string;
         target?: any;
@@ -635,6 +646,7 @@ declare module "babylonjs-node-editor/sharedComponents/vector4LineComponent" {
         step?: number;
         onChange?: (newvalue: Vector4) => void;
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector4LineComponent extends React.Component<IVector4LineComponentProps, {
         isExpanded: boolean;
@@ -711,6 +723,7 @@ declare module "babylonjs-node-editor/sharedComponents/matrixLineComponent" {
     import { Vector3, Matrix, Vector4 } from "babylonjs/Maths/math";
     import { Observable } from "babylonjs/Misc/observable";
     import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
     interface IMatrixLineComponentProps {
         label: string;
         target: any;
@@ -720,6 +733,7 @@ declare module "babylonjs-node-editor/sharedComponents/matrixLineComponent" {
         onModeChange?: (mode: number) => void;
         onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
         mode?: number;
+        globalState: GlobalState;
     }
     export class MatrixLineComponent extends React.Component<IMatrixLineComponentProps, {
         value: Matrix;
@@ -827,17 +841,6 @@ declare module "babylonjs-node-editor/diagram/properties/genericNodePropertyComp
         render(): JSX.Element;
     }
 }
-declare module "babylonjs-node-editor/diagram/properties/inputNodePropertyComponent" {
-    import * as React from "react";
-    import { GlobalState } from "babylonjs-node-editor/globalState";
-    import { IPropertyComponentProps } from "babylonjs-node-editor/diagram/properties/propertyComponentProps";
-    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
-        constructor(props: IPropertyComponentProps);
-        renderValue(globalState: GlobalState): JSX.Element | null;
-        setDefaultValue(): void;
-        render(): JSX.Element;
-    }
-}
 declare module "babylonjs-node-editor/sharedComponents/checkBoxLineComponent" {
     import * as React from "react";
     import { Observable } from "babylonjs/Misc/observable";
@@ -865,6 +868,63 @@ declare module "babylonjs-node-editor/sharedComponents/checkBoxLineComponent" {
         render(): JSX.Element;
     }
 }
+declare module "babylonjs-node-editor/sharedComponents/color4LineComponent" {
+    import * as React from "react";
+    import { Observable } from "babylonjs/Misc/observable";
+    import { Color4 } from "babylonjs/Maths/math";
+    import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    export interface IColor4LineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+        onChange?: () => void;
+        globalState: GlobalState;
+    }
+    export class Color4LineComponent extends React.Component<IColor4LineComponentProps, {
+        isExpanded: boolean;
+        color: Color4;
+    }> {
+        private _localChange;
+        constructor(props: IColor4LineComponentProps);
+        shouldComponentUpdate(nextProps: IColor4LineComponentProps, nextState: {
+            color: Color4;
+        }): boolean;
+        onChange(newValue: string): void;
+        switchExpandState(): void;
+        raiseOnPropertyChanged(previousValue: Color4): void;
+        updateStateR(value: number): void;
+        updateStateG(value: number): void;
+        updateStateB(value: number): void;
+        updateStateA(value: number): void;
+        copyToClipboard(): void;
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/components/propertyTab/properties/color4PropertyTabComponent" {
+    import * as React from "react";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
+    interface IColor4PropertyTabComponentProps {
+        globalState: GlobalState;
+        inputBlock: InputBlock;
+    }
+    export class Color4PropertyTabComponent extends React.Component<IColor4PropertyTabComponentProps> {
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/diagram/properties/inputNodePropertyComponent" {
+    import * as React from "react";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { IPropertyComponentProps } from "babylonjs-node-editor/diagram/properties/propertyComponentProps";
+    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
+        constructor(props: IPropertyComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
 declare module "babylonjs-node-editor/diagram/properties/transformNodePropertyComponent" {
     import * as React from "react";
     import { IPropertyComponentProps } from "babylonjs-node-editor/diagram/properties/propertyComponentProps";
@@ -1294,6 +1354,22 @@ declare module "babylonjs-node-editor/components/nodeList/nodeListComponent" {
         render(): JSX.Element;
     }
 }
+declare module "babylonjs-node-editor/diagram/properties/framePropertyComponent" {
+    import * as React from "react";
+    import { GraphFrame } from "babylonjs-node-editor/diagram/graphFrame";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    export interface IFramePropertyTabComponentProps {
+        globalState: GlobalState;
+        frame: GraphFrame;
+    }
+    export class FramePropertyTabComponent extends React.Component<IFramePropertyTabComponentProps> {
+        private onFrameExpandStateChangedObserver;
+        constructor(props: IFramePropertyTabComponentProps);
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        render(): JSX.Element;
+    }
+}
 declare module "babylonjs-node-editor/components/propertyTab/propertyTabComponent" {
     import * as React from "react";
     import { GlobalState } from "babylonjs-node-editor/globalState";
@@ -1424,11 +1500,7 @@ declare module "babylonjs-node-editor/graphEditor" {
         private _mouseLocationX;
         private _mouseLocationY;
         private _onWidgetKeyUpPointer;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(block: NodeMaterialBlock): GraphNode;
+        createNodeFromObject(block: NodeMaterialBlock, recursion?: boolean): GraphNode;
         addValueNode(type: string): GraphNode;
         componentDidMount(): void;
         componentWillUnmount(): void;
@@ -1641,6 +1713,7 @@ declare module NODEEDITOR {
         private _ports;
         private _controlledPorts;
         private _id;
+        onExpandStateChanged: BABYLON.Observable<GraphFrame>;
         private readonly CloseSVG;
         private readonly ExpandSVG;
         private readonly CollapseSVG;
@@ -1860,6 +1933,7 @@ declare module NODEEDITOR {
         value: number;
         step?: number;
         onChange: (value: number) => void;
+        globalState: GlobalState;
     }
     export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
         value: string;
@@ -1884,6 +1958,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector2) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
         isExpanded: boolean;
@@ -1921,6 +1996,7 @@ declare module NODEEDITOR {
         propertyName: string;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
         onChange?: () => void;
+        globalState: GlobalState;
     }
     export class Color3LineComponent extends React.Component<IColor3LineComponentProps, {
         isExpanded: boolean;
@@ -1958,6 +2034,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector3) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
         isExpanded: boolean;
@@ -1999,6 +2076,7 @@ declare module NODEEDITOR {
         step?: number;
         onChange?: (newvalue: BABYLON.Vector4) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        globalState: GlobalState;
     }
     export class Vector4LineComponent extends React.Component<IVector4LineComponentProps, {
         isExpanded: boolean;
@@ -2074,6 +2152,7 @@ declare module NODEEDITOR {
         onModeChange?: (mode: number) => void;
         onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
         mode?: number;
+        globalState: GlobalState;
     }
     export class MatrixLineComponent extends React.Component<IMatrixLineComponentProps, {
         value: BABYLON.Matrix;
@@ -2169,14 +2248,6 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
-    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
-        constructor(props: IPropertyComponentProps);
-        renderValue(globalState: GlobalState): JSX.Element | null;
-        setDefaultValue(): void;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     export interface ICheckBoxLineComponentProps {
         label: string;
         target?: any;
@@ -2201,6 +2272,52 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
+    export interface IColor4LineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+        onChange?: () => void;
+        globalState: GlobalState;
+    }
+    export class Color4LineComponent extends React.Component<IColor4LineComponentProps, {
+        isExpanded: boolean;
+        color: BABYLON.Color4;
+    }> {
+        private _localChange;
+        constructor(props: IColor4LineComponentProps);
+        shouldComponentUpdate(nextProps: IColor4LineComponentProps, nextState: {
+            color: BABYLON.Color4;
+        }): boolean;
+        onChange(newValue: string): void;
+        switchExpandState(): void;
+        raiseOnPropertyChanged(previousValue: BABYLON.Color4): void;
+        updateStateR(value: number): void;
+        updateStateG(value: number): void;
+        updateStateB(value: number): void;
+        updateStateA(value: number): void;
+        copyToClipboard(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    interface IColor4PropertyTabComponentProps {
+        globalState: GlobalState;
+        inputBlock: BABYLON.InputBlock;
+    }
+    export class Color4PropertyTabComponent extends React.Component<IColor4PropertyTabComponentProps> {
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    export class InputPropertyTabComponent extends React.Component<IPropertyComponentProps> {
+        constructor(props: IPropertyComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     export class TransformPropertyTabComponent extends React.Component<IPropertyComponentProps> {
         constructor(props: IPropertyComponentProps);
         render(): JSX.Element;
@@ -2561,6 +2678,19 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
+    export interface IFramePropertyTabComponentProps {
+        globalState: GlobalState;
+        frame: GraphFrame;
+    }
+    export class FramePropertyTabComponent extends React.Component<IFramePropertyTabComponentProps> {
+        private onFrameExpandStateChangedObserver;
+        constructor(props: IFramePropertyTabComponentProps);
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     interface IPropertyTabComponentProps {
         globalState: GlobalState;
     }
@@ -2669,11 +2799,7 @@ declare module NODEEDITOR {
         private _mouseLocationX;
         private _mouseLocationY;
         private _onWidgetKeyUpPointer;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(block: BABYLON.NodeMaterialBlock): GraphNode;
+        createNodeFromObject(block: BABYLON.NodeMaterialBlock, recursion?: boolean): GraphNode;
         addValueNode(type: string): GraphNode;
         componentDidMount(): void;
         componentWillUnmount(): void;

+ 2 - 2
dist/preview release/nodeEditor/package.json

@@ -4,14 +4,14 @@
     },
     "name": "babylonjs-node-editor",
     "description": "The Babylon.js node material editor.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
     },
     "license": "Apache-2.0",
     "dependencies": {
-        "babylonjs": "4.1.0-beta.18"
+        "babylonjs": "4.1.0-beta.20"
     },
     "files": [
         "babylon.nodeEditor.max.js.map",

+ 1 - 1
dist/preview release/package.json

@@ -7,7 +7,7 @@
     ],
     "name": "babylonjs",
     "description": "Babylon.js is a JavaScript 3D engine based on webgl.",
-    "version": "4.1.0-beta.18",
+    "version": "4.1.0-beta.20",
     "repository": {
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"

+ 1 - 1
dist/preview release/packagesSizeBaseLine.json

@@ -1 +1 @@
-{"thinEngineOnly":112302,"engineOnly":148393,"sceneOnly":502176,"minGridMaterial":632872,"minStandardMaterial":772863}
+{"thinEngineOnly":112401,"engineOnly":148514,"sceneOnly":502695,"minGridMaterial":633543,"minStandardMaterial":773582}

+ 6 - 6
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
@@ -368,7 +368,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtFontTexture", function() { return AsciiArtFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtPostProcess", function() { return AsciiArtPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _asciiart_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./asciiart.fragment */ "./asciiArt/asciiart.fragment.ts");
 
@@ -589,7 +589,7 @@ var AsciiArtPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asciiartPixelShader", function() { return asciiartPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'asciiartPixelShader';
@@ -651,14 +651,14 @@ if (typeof globalObject !== "undefined") {
 
 /***/ }),
 
-/***/ "babylonjs/Misc/decorators":
+/***/ "babylonjs/Materials/Textures/texture":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
 
 /***/ })
 

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js


+ 6 - 6
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
@@ -368,7 +368,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainFontTexture", function() { return DigitalRainFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainPostProcess", function() { return DigitalRainPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _digitalrain_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./digitalrain.fragment */ "./digitalRain/digitalrain.fragment.ts");
 
@@ -595,7 +595,7 @@ var DigitalRainPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "digitalrainPixelShader", function() { return digitalrainPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'digitalrainPixelShader';
@@ -657,14 +657,14 @@ if (typeof globalObject !== "undefined") {
 
 /***/ }),
 
-/***/ "babylonjs/Misc/decorators":
+/***/ "babylonjs/Materials/Textures/texture":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
 
 /***/ })
 

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js.map


File diff suppressed because it is too large
+ 2 - 2
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js


+ 6 - 6
dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -98,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ "../../node_modules/tslib/tslib.es6.js":
 /*!***********************************************************!*\
-  !*** C:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
+  !*** E:/Repos/Babylon.js/node_modules/tslib/tslib.es6.js ***!
   \***********************************************************/
 /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
@@ -412,7 +412,7 @@ __webpack_require__.r(__webpack_exports__);
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oceanPostProcessPixelShader", function() { return oceanPostProcessPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'oceanPostProcessPixelShader';
@@ -435,7 +435,7 @@ var oceanPostProcessPixelShader = { name: name, shader: shader };
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OceanPostProcess", function() { return OceanPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Misc/decorators");
+/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Materials/Textures/texture");
 /* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _oceanPostProcess_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./oceanPostProcess.fragment */ "./ocean/oceanPostProcess.fragment.ts");
 
@@ -639,14 +639,14 @@ var OceanPostProcess = /** @class */ (function (_super) {
 
 /***/ }),
 
-/***/ "babylonjs/Misc/decorators":
+/***/ "babylonjs/Materials/Textures/texture":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
 
 /***/ })
 

File diff suppressed because it is too large
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js.map


+ 0 - 0
dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.min.js


Some files were not shown because too many files changed in this diff