Browse Source

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

Pamela Wolf 4 years ago
parent
commit
fc5edecd48
43 changed files with 711 additions and 361 deletions
  1. 37 4
      dist/preview release/babylon.d.ts
  2. 1 1
      dist/preview release/babylon.js
  3. 148 32
      dist/preview release/babylon.max.js
  4. 1 1
      dist/preview release/babylon.max.js.map
  5. 74 8
      dist/preview release/babylon.module.d.ts
  6. 37 4
      dist/preview release/documentation.d.ts
  7. 1 1
      dist/preview release/glTF2Interface/package.json
  8. 48 48
      dist/preview release/gui/babylon.gui.js
  9. 1 1
      dist/preview release/gui/babylon.gui.js.map
  10. 2 2
      dist/preview release/gui/package.json
  11. 4 4
      dist/preview release/inspector/babylon.inspector.bundle.js
  12. 2 107
      dist/preview release/inspector/babylon.inspector.bundle.max.js
  13. 1 1
      dist/preview release/inspector/babylon.inspector.bundle.max.js.map
  14. 3 3
      dist/preview release/inspector/babylon.inspector.d.ts
  15. 7 7
      dist/preview release/inspector/babylon.inspector.module.d.ts
  16. 7 7
      dist/preview release/inspector/package.json
  17. 3 3
      dist/preview release/loaders/package.json
  18. 2 2
      dist/preview release/materialsLibrary/package.json
  19. 6 0
      dist/preview release/nodeEditor/babylon.nodeEditor.d.ts
  20. 5 5
      dist/preview release/nodeEditor/babylon.nodeEditor.js
  21. 136 55
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js
  22. 1 1
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map
  23. 12 0
      dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts
  24. 2 2
      dist/preview release/nodeEditor/package.json
  25. 1 1
      dist/preview release/package.json
  26. 1 1
      dist/preview release/packagesSizeBaseLine.json
  27. 2 2
      dist/preview release/postProcessesLibrary/package.json
  28. 2 2
      dist/preview release/proceduralTexturesLibrary/package.json
  29. 3 3
      dist/preview release/serializers/package.json
  30. 74 8
      dist/preview release/viewer/babylon.module.d.ts
  31. 20 20
      dist/preview release/viewer/babylon.viewer.js
  32. 1 1
      dist/preview release/viewer/babylon.viewer.max.js
  33. 1 1
      package.json
  34. 7 3
      src/Debug/skeletonViewer.ts
  35. 36 2
      src/Engines/nativeEngine.ts
  36. 2 2
      src/Engines/thinEngine.ts
  37. 1 1
      src/Materials/Node/Blocks/PBR/ambientOcclusionBlock.ts
  38. 6 2
      src/Materials/Node/nodeMaterial.ts
  39. 1 2
      src/Maths/math.vector.ts
  40. 1 1
      src/Meshes/Builders/capsuleBuilder.ts
  41. 3 1
      src/Particles/particleHelper.ts
  42. 6 8
      src/XR/features/WebXRControllerTeleportation.ts
  43. 2 1
      tests/validation/config.json

+ 37 - 4
dist/preview release/babylon.d.ts

@@ -3848,14 +3848,13 @@ declare module BABYLON {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -6848,7 +6847,7 @@ declare module BABYLON {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -50452,11 +50451,19 @@ declare module BABYLON {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -50619,6 +50626,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -51444,6 +51455,10 @@ declare module BABYLON.Debug {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -52871,6 +52886,7 @@ declare module BABYLON {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -52962,6 +52978,10 @@ declare module BABYLON {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -53667,6 +53687,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -53952,6 +53976,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -54036,6 +54064,10 @@ declare module BABYLON {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -72049,9 +72081,10 @@ declare module BABYLON {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)

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


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


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


+ 74 - 8
dist/preview release/babylon.module.d.ts

@@ -3884,14 +3884,13 @@ declare module "babylonjs/Maths/math.vector" {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -6894,7 +6893,7 @@ declare module "babylonjs/Meshes/Builders/capsuleBuilder" {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -52428,11 +52427,19 @@ declare module "babylonjs/Gizmos/gizmo" {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -52616,6 +52623,10 @@ declare module "babylonjs/Gizmos/positionGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -53504,6 +53515,10 @@ declare module "babylonjs/Debug/skeletonViewer" {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -55040,6 +55055,7 @@ declare module "babylonjs/Engines/nativeEngine" {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -55131,6 +55147,10 @@ declare module "babylonjs/Engines/nativeEngine" {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -55921,6 +55941,10 @@ declare module "babylonjs/Gizmos/scaleGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -56243,6 +56267,10 @@ declare module "babylonjs/Gizmos/rotationGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -56338,6 +56366,10 @@ declare module "babylonjs/Gizmos/gizmoManager" {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -76036,9 +76068,10 @@ declare module "babylonjs/Rendering/depthRendererSceneComponent" {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
@@ -84102,14 +84135,13 @@ declare module BABYLON {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -87102,7 +87134,7 @@ declare module BABYLON {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -130706,11 +130738,19 @@ declare module BABYLON {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -130873,6 +130913,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -131698,6 +131742,10 @@ declare module BABYLON.Debug {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -133125,6 +133173,7 @@ declare module BABYLON {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -133216,6 +133265,10 @@ declare module BABYLON {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -133921,6 +133974,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -134206,6 +134263,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -134290,6 +134351,10 @@ declare module BABYLON {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -152303,9 +152368,10 @@ declare module BABYLON {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)

+ 37 - 4
dist/preview release/documentation.d.ts

@@ -3848,14 +3848,13 @@ declare module BABYLON {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -6848,7 +6847,7 @@ declare module BABYLON {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -50452,11 +50451,19 @@ declare module BABYLON {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -50619,6 +50626,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -51444,6 +51455,10 @@ declare module BABYLON.Debug {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -52871,6 +52886,7 @@ declare module BABYLON {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -52962,6 +52978,10 @@ declare module BABYLON {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -53667,6 +53687,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -53952,6 +53976,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -54036,6 +54064,10 @@ declare module BABYLON {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -72049,9 +72081,10 @@ declare module BABYLON {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)

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

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

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

@@ -7,7 +7,7 @@
 		exports["babylonjs-gui"] = factory(require("babylonjs"));
 		exports["babylonjs-gui"] = factory(require("babylonjs"));
 	else
 	else
 		root["BABYLON"] = root["BABYLON"] || {}, root["BABYLON"]["GUI"] = factory(root["BABYLON"]);
 		root["BABYLON"] = root["BABYLON"] || {}, root["BABYLON"]["GUI"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_perfCounter__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Maths_math_vector__) {
 return /******/ (function(modules) { // webpackBootstrap
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
 /******/ 	var installedModules = {};
@@ -400,7 +400,7 @@ module.exports = g;
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedDynamicTextureInstrumentation", function() { return AdvancedDynamicTextureInstrumentation; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedDynamicTextureInstrumentation", function() { return AdvancedDynamicTextureInstrumentation; });
-/* harmony import */ var babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/perfCounter */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/perfCounter */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_perfCounter__WEBPACK_IMPORTED_MODULE_0__);
 
 
 /**
 /**
@@ -543,7 +543,7 @@ var AdvancedDynamicTextureInstrumentation = /** @class */ (function () {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedDynamicTexture", function() { return AdvancedDynamicTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedDynamicTexture", function() { return AdvancedDynamicTexture; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _controls_container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controls/container */ "./2D/controls/container.ts");
 /* harmony import */ var _controls_container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controls/container */ "./2D/controls/container.ts");
 /* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./2D/style.ts");
 /* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./2D/style.ts");
@@ -1530,7 +1530,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textBlock */ "./2D/controls/textBlock.ts");
 /* harmony import */ var _textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textBlock */ "./2D/controls/textBlock.ts");
 /* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./image */ "./2D/controls/image.ts");
 /* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./image */ "./2D/controls/image.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5__);
 
 
 
 
@@ -1762,7 +1762,7 @@ babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_5__["_TypeStore"].RegisteredTy
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Checkbox", function() { return Checkbox; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Checkbox", function() { return Checkbox; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
@@ -1945,7 +1945,7 @@ babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].RegisteredT
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPicker", function() { return ColorPicker; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPicker", function() { return ColorPicker; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _inputText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./inputText */ "./2D/controls/inputText.ts");
 /* harmony import */ var _inputText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./inputText */ "./2D/controls/inputText.ts");
@@ -3338,7 +3338,7 @@ babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].RegisteredT
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Container", function() { return Container; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Container", function() { return Container; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/logger */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/logger */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../measure */ "./2D/measure.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../measure */ "./2D/measure.ts");
@@ -3755,7 +3755,7 @@ babylonjs_Misc_logger__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].RegisteredTypes
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Control", function() { return Control; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Control", function() { return Control; });
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../measure */ "./2D/measure.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../measure */ "./2D/measure.ts");
@@ -5704,7 +5704,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisplayGrid", function() { return DisplayGrid; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisplayGrid", function() { return DisplayGrid; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 
 
 
 
@@ -5937,7 +5937,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__);
 
 
 
 
@@ -6034,7 +6034,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4__);
 
 
 
 
@@ -6492,7 +6492,7 @@ babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_4__["_TypeStore"].RegisteredTypes[
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Image", function() { return Image; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Image", function() { return Image; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 
 
@@ -7429,7 +7429,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputPassword", function() { return InputPassword; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputPassword", function() { return InputPassword; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _inputText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inputText */ "./2D/controls/inputText.ts");
 /* harmony import */ var _inputText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inputText */ "./2D/controls/inputText.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 
 
 
 
@@ -7468,7 +7468,7 @@ babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__["_TypeStore"].RegisteredTy
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputText", function() { return InputText; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputText", function() { return InputText; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
@@ -8481,7 +8481,7 @@ babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].RegisteredT
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line", function() { return Line; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line", function() { return Line; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
@@ -8752,7 +8752,7 @@ babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].Registere
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiLine", function() { return MultiLine; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiLine", function() { return MultiLine; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/abstractMesh */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/abstractMesh */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _multiLinePoint__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../multiLinePoint */ "./2D/multiLinePoint.ts");
 /* harmony import */ var _multiLinePoint__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../multiLinePoint */ "./2D/multiLinePoint.ts");
@@ -9022,7 +9022,7 @@ babylonjs_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_1__["_TypeStore"].Registe
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RadioButton", function() { return RadioButton; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RadioButton", function() { return RadioButton; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
@@ -9229,7 +9229,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rectangle", function() { return Rectangle; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rectangle", function() { return Rectangle; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 
 
 
 
@@ -9379,7 +9379,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _scrollViewerWindow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./scrollViewerWindow */ "./2D/controls/scrollViewers/scrollViewerWindow.ts");
 /* harmony import */ var _scrollViewerWindow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./scrollViewerWindow */ "./2D/controls/scrollViewers/scrollViewerWindow.ts");
 /* harmony import */ var _sliders_scrollBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../sliders/scrollBar */ "./2D/controls/sliders/scrollBar.ts");
 /* harmony import */ var _sliders_scrollBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../sliders/scrollBar */ "./2D/controls/sliders/scrollBar.ts");
 /* harmony import */ var _sliders_imageScrollBar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../sliders/imageScrollBar */ "./2D/controls/sliders/imageScrollBar.ts");
 /* harmony import */ var _sliders_imageScrollBar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../sliders/imageScrollBar */ "./2D/controls/sliders/imageScrollBar.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_7__);
 
 
 
 
@@ -11002,7 +11002,7 @@ var SelectionPanel = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseSlider", function() { return BaseSlider; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseSlider", function() { return BaseSlider; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../control */ "./2D/controls/control.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../valueAndUnit */ "./2D/valueAndUnit.ts");
@@ -11336,7 +11336,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _baseSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./baseSlider */ "./2D/controls/sliders/baseSlider.ts");
 /* harmony import */ var _baseSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./baseSlider */ "./2D/controls/sliders/baseSlider.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../measure */ "./2D/measure.ts");
 /* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../measure */ "./2D/measure.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_3__);
 
 
 
 
@@ -11929,7 +11929,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Slider", function() { return Slider; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Slider", function() { return Slider; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _baseSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./baseSlider */ "./2D/controls/sliders/baseSlider.ts");
 /* harmony import */ var _baseSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./baseSlider */ "./2D/controls/sliders/baseSlider.ts");
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__);
 
 
 
 
@@ -12201,7 +12201,7 @@ babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_2__["_TypeStore"].RegisteredTy
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StackPanel", function() { return StackPanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StackPanel", function() { return StackPanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container */ "./2D/controls/container.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
@@ -12471,7 +12471,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextWrapping", function() { return TextWrapping; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextWrapping", function() { return TextWrapping; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextBlock", function() { return TextBlock; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextBlock", function() { return TextBlock; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
 /* harmony import */ var _control__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./control */ "./2D/controls/control.ts");
@@ -13005,7 +13005,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyPropertySet", function() { return KeyPropertySet; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyPropertySet", function() { return KeyPropertySet; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualKeyboard", function() { return VirtualKeyboard; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualKeyboard", function() { return VirtualKeyboard; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
 /* harmony import */ var _stackPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stackPanel */ "./2D/controls/stackPanel.ts");
 /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./button */ "./2D/controls/button.ts");
 /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./button */ "./2D/controls/button.ts");
@@ -13394,7 +13394,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2WithInfo", function() { return Vector2WithInfo; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2WithInfo", function() { return Vector2WithInfo; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix2D", function() { return Matrix2D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix2D", function() { return Matrix2D; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 
 
 
 
@@ -13619,7 +13619,7 @@ var Matrix2D = /** @class */ (function () {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Measure", function() { return Measure; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Measure", function() { return Measure; });
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__);
 
 
 var tmpRect = [
 var tmpRect = [
@@ -13784,7 +13784,7 @@ var Measure = /** @class */ (function () {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiLinePoint", function() { return MultiLinePoint; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiLinePoint", function() { return MultiLinePoint; });
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./valueAndUnit */ "./2D/valueAndUnit.ts");
 
 
@@ -13927,7 +13927,7 @@ var MultiLinePoint = /** @class */ (function () {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Style", function() { return Style; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Style", function() { return Style; });
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./valueAndUnit */ "./2D/valueAndUnit.ts");
 /* harmony import */ var _valueAndUnit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./valueAndUnit */ "./2D/valueAndUnit.ts");
 
 
@@ -14233,7 +14233,7 @@ var ValueAndUnit = /** @class */ (function () {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XmlLoader", function() { return XmlLoader; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XmlLoader", function() { return XmlLoader; });
-/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/typeStore */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_typeStore__WEBPACK_IMPORTED_MODULE_0__);
 
 
 /**
 /**
@@ -14552,7 +14552,7 @@ var XmlLoader = /** @class */ (function () {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbstractButton3D", function() { return AbstractButton3D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbstractButton3D", function() { return AbstractButton3D; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/transformNode */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/transformNode */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control3D */ "./3D/controls/control3D.ts");
 /* harmony import */ var _control3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control3D */ "./3D/controls/control3D.ts");
 
 
@@ -14595,7 +14595,7 @@ var AbstractButton3D = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Button3D", function() { return Button3D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Button3D", function() { return Button3D; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _abstractButton3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./abstractButton3D */ "./3D/controls/abstractButton3D.ts");
 /* harmony import */ var _abstractButton3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./abstractButton3D */ "./3D/controls/abstractButton3D.ts");
 /* harmony import */ var _2D_advancedDynamicTexture__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../2D/advancedDynamicTexture */ "./2D/advancedDynamicTexture.ts");
 /* harmony import */ var _2D_advancedDynamicTexture__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../2D/advancedDynamicTexture */ "./2D/advancedDynamicTexture.ts");
@@ -14776,7 +14776,7 @@ var Button3D = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Container3D", function() { return Container3D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Container3D", function() { return Container3D; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/transformNode */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Meshes/transformNode */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Meshes_transformNode__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _control3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control3D */ "./3D/controls/control3D.ts");
 /* harmony import */ var _control3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./control3D */ "./3D/controls/control3D.ts");
 
 
@@ -14933,7 +14933,7 @@ var Container3D = /** @class */ (function (_super) {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Control3D", function() { return Control3D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Control3D", function() { return Control3D; });
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _vector3WithInfo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../vector3WithInfo */ "./3D/vector3WithInfo.ts");
 /* harmony import */ var _vector3WithInfo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../vector3WithInfo */ "./3D/vector3WithInfo.ts");
 
 
@@ -15339,7 +15339,7 @@ var Control3D = /** @class */ (function () {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderPanel", function() { return CylinderPanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderPanel", function() { return CylinderPanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
@@ -15425,7 +15425,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HolographicButton", function() { return HolographicButton; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HolographicButton", function() { return HolographicButton; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var _button3D__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button3D */ "./3D/controls/button3D.ts");
 /* harmony import */ var _button3D__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button3D */ "./3D/controls/button3D.ts");
-/* harmony import */ var babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Materials/standardMaterial */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babylonjs/Materials/standardMaterial */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_standardMaterial__WEBPACK_IMPORTED_MODULE_2__);
 /* harmony import */ var _materials_fluentMaterial__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../materials/fluentMaterial */ "./3D/materials/fluentMaterial.ts");
 /* harmony import */ var _materials_fluentMaterial__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../materials/fluentMaterial */ "./3D/materials/fluentMaterial.ts");
 /* harmony import */ var _2D_controls_stackPanel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../2D/controls/stackPanel */ "./2D/controls/stackPanel.ts");
 /* harmony import */ var _2D_controls_stackPanel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../2D/controls/stackPanel */ "./2D/controls/stackPanel.ts");
@@ -15919,7 +15919,7 @@ var MeshButton3D = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlanePanel", function() { return PlanePanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlanePanel", function() { return PlanePanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
@@ -15974,7 +15974,7 @@ var PlanePanel = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScatterPanel", function() { return ScatterPanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScatterPanel", function() { return ScatterPanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
@@ -16101,7 +16101,7 @@ var ScatterPanel = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpherePanel", function() { return SpherePanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpherePanel", function() { return SpherePanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _volumeBasedPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./volumeBasedPanel */ "./3D/controls/volumeBasedPanel.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
@@ -16187,7 +16187,7 @@ var SpherePanel = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StackPanel3D", function() { return StackPanel3D; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StackPanel3D", function() { return StackPanel3D; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 
 
@@ -16312,7 +16312,7 @@ var StackPanel3D = /** @class */ (function (_super) {
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VolumeBasedPanel", function() { return VolumeBasedPanel; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VolumeBasedPanel", function() { return VolumeBasedPanel; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _container3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container3D */ "./3D/controls/container3D.ts");
 
 
@@ -16503,7 +16503,7 @@ var VolumeBasedPanel = /** @class */ (function (_super) {
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GUI3DManager", function() { return GUI3DManager; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GUI3DManager", function() { return GUI3DManager; });
-/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/observable */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _controls_container3D__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./controls/container3D */ "./3D/controls/container3D.ts");
 /* harmony import */ var _controls_container3D__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./controls/container3D */ "./3D/controls/container3D.ts");
 
 
@@ -16770,7 +16770,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentMaterialDefines", function() { return FluentMaterialDefines; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentMaterialDefines", function() { return FluentMaterialDefines; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentMaterial", function() { return FluentMaterial; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentMaterial", function() { return FluentMaterial; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* 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/perfCounter");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Maths/math.vector");
 /* 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 babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _shaders_fluent_vertex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shaders/fluent.vertex */ "./3D/materials/shaders/fluent.vertex.ts");
 /* harmony import */ var _shaders_fluent_vertex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shaders/fluent.vertex */ "./3D/materials/shaders/fluent.vertex.ts");
 /* harmony import */ var _shaders_fluent_fragment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shaders/fluent.fragment */ "./3D/materials/shaders/fluent.fragment.ts");
 /* harmony import */ var _shaders_fluent_fragment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shaders/fluent.fragment */ "./3D/materials/shaders/fluent.fragment.ts");
@@ -17086,7 +17086,7 @@ __webpack_require__.r(__webpack_exports__);
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fluentPixelShader", function() { return fluentPixelShader; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fluentPixelShader", function() { return fluentPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 
 var name = 'fluentPixelShader';
 var name = 'fluentPixelShader';
@@ -17108,7 +17108,7 @@ var fluentPixelShader = { name: name, shader: shader };
 "use strict";
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fluentVertexShader", function() { return fluentVertexShader; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fluentVertexShader", function() { return fluentVertexShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 
 var name = 'fluentVertexShader';
 var name = 'fluentVertexShader';
@@ -17131,7 +17131,7 @@ var fluentVertexShader = { name: name, shader: shader };
 __webpack_require__.r(__webpack_exports__);
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3WithInfo", function() { return Vector3WithInfo; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3WithInfo", function() { return Vector3WithInfo; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Misc/perfCounter");
+/* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Maths/math.vector */ "babylonjs/Maths/math.vector");
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_1__);
 
 
 
 
@@ -17433,14 +17433,14 @@ if (typeof globalObject !== "undefined") {
 
 
 /***/ }),
 /***/ }),
 
 
-/***/ "babylonjs/Misc/perfCounter":
+/***/ "babylonjs/Maths/math.vector":
 /*!****************************************************************************************************!*\
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
   \****************************************************************************************************/
 /*! no static exports found */
 /*! no static exports found */
 /***/ (function(module, exports) {
 /***/ (function(module, exports) {
 
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_perfCounter__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Maths_math_vector__;
 
 
 /***/ })
 /***/ })
 
 

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


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

@@ -4,7 +4,7 @@
     },
     },
     "name": "babylonjs-gui",
     "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.",
     "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.2.0-beta.3",
+    "version": "4.2.0-beta.5",
     "repository": {
     "repository": {
         "type": "git",
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,7 +28,7 @@
     ],
     ],
     "license": "Apache-2.0",
     "license": "Apache-2.0",
     "dependencies": {
     "dependencies": {
-        "babylonjs": "4.2.0-beta.3"
+        "babylonjs": "4.2.0-beta.5"
     },
     },
     "engines": {
     "engines": {
         "node": "*"
         "node": "*"

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


File diff suppressed because it is too large
+ 2 - 107
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


+ 3 - 3
dist/preview release/inspector/babylon.inspector.d.ts

@@ -1554,9 +1554,6 @@ declare module INSPECTOR {
     export const Floodfill: IToolData;
     export const Floodfill: IToolData;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
-    export const Contrast: IToolData;
-}
-declare module INSPECTOR {
     export const RectangleSelect: IToolData;
     export const RectangleSelect: IToolData;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
@@ -3498,4 +3495,7 @@ declare module INSPECTOR {
         calculateMove(): string;
         calculateMove(): string;
         render(): JSX.Element;
         render(): JSX.Element;
     }
     }
+}
+declare module INSPECTOR {
+    export const Contrast: IToolData;
 }
 }

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

@@ -1751,10 +1751,6 @@ declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/mat
     import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
     import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
     export const Floodfill: IToolData;
     export const Floodfill: IToolData;
 }
 }
-declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/defaultTools/contrast" {
-    import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
-    export const Contrast: IToolData;
-}
 declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/defaultTools/rectangleSelect" {
 declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/defaultTools/rectangleSelect" {
     import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
     import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
     export const RectangleSelect: IToolData;
     export const RectangleSelect: IToolData;
@@ -4237,6 +4233,10 @@ declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/ani
         render(): JSX.Element;
         render(): JSX.Element;
     }
     }
 }
 }
+declare module "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/defaultTools/contrast" {
+    import { IToolData } from "babylonjs-inspector/components/actionTabs/tabs/propertyGrids/materials/textures/textureEditorComponent";
+    export const Contrast: IToolData;
+}
 declare module "babylonjs-inspector/legacy/legacy" {
 declare module "babylonjs-inspector/legacy/legacy" {
     export * from "babylonjs-inspector/index";
     export * from "babylonjs-inspector/index";
 }
 }
@@ -5799,9 +5799,6 @@ declare module INSPECTOR {
     export const Floodfill: IToolData;
     export const Floodfill: IToolData;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
-    export const Contrast: IToolData;
-}
-declare module INSPECTOR {
     export const RectangleSelect: IToolData;
     export const RectangleSelect: IToolData;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
@@ -7743,4 +7740,7 @@ declare module INSPECTOR {
         calculateMove(): string;
         calculateMove(): string;
         render(): JSX.Element;
         render(): JSX.Element;
     }
     }
+}
+declare module INSPECTOR {
+    export const Contrast: IToolData;
 }
 }

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

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

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

@@ -4,7 +4,7 @@
     },
     },
     "name": "babylonjs-loaders",
     "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.",
     "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.2.0-beta.3",
+    "version": "4.2.0-beta.5",
     "repository": {
     "repository": {
         "type": "git",
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,8 +28,8 @@
     ],
     ],
     "license": "Apache-2.0",
     "license": "Apache-2.0",
     "dependencies": {
     "dependencies": {
-        "babylonjs-gltf2interface": "4.2.0-beta.3",
-        "babylonjs": "4.2.0-beta.3"
+        "babylonjs-gltf2interface": "4.2.0-beta.5",
+        "babylonjs": "4.2.0-beta.5"
     },
     },
     "engines": {
     "engines": {
         "node": "*"
         "node": "*"

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

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

+ 6 - 0
dist/preview release/nodeEditor/babylon.nodeEditor.d.ts

@@ -162,6 +162,8 @@ declare module NODEEDITOR {
         private _frameInPorts;
         private _frameInPorts;
         private _frameOutPorts;
         private _frameOutPorts;
         private _controlledPorts;
         private _controlledPorts;
+        private _exposedInPorts;
+        private _exposedOutPorts;
         private _id;
         private _id;
         private _comments;
         private _comments;
         private _frameIsResizing;
         private _frameIsResizing;
@@ -178,6 +180,9 @@ declare module NODEEDITOR {
         private _createInputPort;
         private _createInputPort;
         private _markFramePortPositions;
         private _markFramePortPositions;
         private _createFramePorts;
         private _createFramePorts;
+        private removePortFromExposed;
+        private createInputPorts;
+        private createOutputPorts;
         private _redrawFramePorts;
         private _redrawFramePorts;
         set isCollapsed(value: boolean);
         set isCollapsed(value: boolean);
         get nodes(): GraphNode[];
         get nodes(): GraphNode[];
@@ -273,6 +278,7 @@ declare module NODEEDITOR {
         protected _onCandidateLinkMovedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<BABYLON.Vector2>>>;
         protected _onCandidateLinkMovedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<BABYLON.Vector2>>>;
         protected _onSelectionChangedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _onSelectionChangedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _exposedOnFrame: boolean;
         protected _exposedOnFrame: boolean;
+        isExposed: boolean;
         delegatedPort: BABYLON.Nullable<FrameNodePort>;
         delegatedPort: BABYLON.Nullable<FrameNodePort>;
         get element(): HTMLDivElement;
         get element(): HTMLDivElement;
         get portName(): string;
         get portName(): string;

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


+ 136 - 55
dist/preview release/nodeEditor/babylon.nodeEditor.max.js

@@ -67074,6 +67074,8 @@ var GraphFrame = /** @class */ (function () {
         this._frameInPorts = [];
         this._frameInPorts = [];
         this._frameOutPorts = [];
         this._frameOutPorts = [];
         this._controlledPorts = []; // Ports on Nodes that are shown on outside of frame
         this._controlledPorts = []; // Ports on Nodes that are shown on outside of frame
+        this._exposedInPorts = [];
+        this._exposedOutPorts = [];
         this._minFrameHeight = 40;
         this._minFrameHeight = 40;
         this._minFrameWidth = 220;
         this._minFrameWidth = 220;
         this.onExpandStateChanged = new babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
         this.onExpandStateChanged = new babylonjs_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
@@ -67713,6 +67715,10 @@ var GraphFrame = /** @class */ (function () {
         this._frameInPorts.push(localPort);
         this._frameInPorts.push(localPort);
         port.delegatedPort = localPort;
         port.delegatedPort = localPort;
         this._controlledPorts.push(port);
         this._controlledPorts.push(port);
+        if (!port.isExposed) {
+            port.isExposed = true;
+            this._exposedInPorts.push(port);
+        }
     };
     };
     // Mark ports with FramePortPosition for re-arrangement support
     // Mark ports with FramePortPosition for re-arrangement support
     GraphFrame.prototype._markFramePortPositions = function () {
     GraphFrame.prototype._markFramePortPositions = function () {
@@ -67756,67 +67762,124 @@ var GraphFrame = /** @class */ (function () {
         }
         }
     };
     };
     GraphFrame.prototype._createFramePorts = function () {
     GraphFrame.prototype._createFramePorts = function () {
-        var _this_1 = this;
         for (var _i = 0, _a = this._nodes; _i < _a.length; _i++) {
         for (var _i = 0, _a = this._nodes; _i < _a.length; _i++) {
             var node = _a[_i];
             var node = _a[_i];
             node.isVisible = false;
             node.isVisible = false;
-            for (var _b = 0, _c = node.outputPorts; _b < _c.length; _b++) { // Output
-                var port = _c[_b];
-                if (port.connectionPoint.hasEndpoints) {
-                    var portAdded = false;
-                    for (var _d = 0, _e = node.links; _d < _e.length; _d++) {
-                        var link = _e[_d];
-                        if (link.portA === port && this.nodes.indexOf(link.nodeB) === -1 || (link.portA === port && port.exposedOnFrame)) {
-                            var localPort = void 0;
-                            if (!portAdded) {
-                                portAdded = true;
-                                localPort = _frameNodePort__WEBPACK_IMPORTED_MODULE_3__["FrameNodePort"].CreateFrameNodePortElement(port.connectionPoint, link.nodeA, this._outputPortContainer, null, this._ownerCanvas.globalState, false, GraphFrame._FramePortCounter++, this.id);
-                                this._frameOutPorts.push(localPort);
-                                link.isVisible = true;
-                                var onLinkDisposedObserver = link.onDisposedObservable.add(function (nodeLink) {
-                                    _this_1._redrawFramePorts();
-                                });
-                                this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);
-                            }
-                            else if (this.nodes.indexOf(link.nodeB) === -1) {
-                                link.isVisible = true;
-                                localPort = this.ports.filter(function (p) { return p.connectionPoint === port.connectionPoint; })[0];
-                            }
-                            else {
-                                localPort = this.ports.filter(function (p) { return p.connectionPoint === port.connectionPoint; })[0];
-                            }
-                            port.delegatedPort = localPort;
-                            this._controlledPorts.push(port);
-                        }
+        }
+        for (var _b = 0, _c = this._exposedOutPorts; _b < _c.length; _b++) { // Output
+            var port = _c[_b];
+            if (port.node === null || port.node.enclosingFrameId != this.id) {
+                var index = this._exposedOutPorts.findIndex(function (nodePort) { return nodePort === port; });
+                this._exposedOutPorts.splice(index, 1);
+                port.isExposed = false;
+            }
+            else {
+                this.createOutputPorts(port, port.node);
+            }
+        }
+        for (var _d = 0, _e = this._exposedInPorts; _d < _e.length; _d++) { // Input
+            var port = _e[_d];
+            if (port.node === null || port.node.enclosingFrameId != this.id) {
+                var index = this._exposedInPorts.findIndex(function (nodePort) { return nodePort === port; });
+                this._exposedInPorts.splice(index, 1);
+                port.isExposed = false;
+            }
+            else {
+                this.createInputPorts(port, port.node);
+            }
+        }
+        for (var _f = 0, _g = this._nodes; _f < _g.length; _f++) {
+            var node = _g[_f];
+            for (var _h = 0, _j = node.outputPorts; _h < _j.length; _h++) { // Output
+                var port = _j[_h];
+                if (!port.isExposed) {
+                    if (this.createOutputPorts(port, node)) {
+                        this._exposedOutPorts.push(port);
+                        port.isExposed = true;
                     }
                     }
                 }
                 }
-                else if (port.exposedOnFrame) {
-                    var localPort = _frameNodePort__WEBPACK_IMPORTED_MODULE_3__["FrameNodePort"].CreateFrameNodePortElement(port.connectionPoint, node, this._outputPortContainer, null, this._ownerCanvas.globalState, false, GraphFrame._FramePortCounter++, this.id);
-                    this._frameOutPorts.push(localPort);
-                    port.delegatedPort = localPort;
-                    this._controlledPorts.push(port);
-                }
             }
             }
-            for (var _f = 0, _g = node.inputPorts; _f < _g.length; _f++) { // Input
-                var port = _g[_f];
-                if (port.connectionPoint.isConnected) {
-                    for (var _h = 0, _j = node.links; _h < _j.length; _h++) {
-                        var link = _j[_h];
-                        if (link.portB === port && this.nodes.indexOf(link.nodeA) === -1) {
-                            this._createInputPort(port, node);
-                            link.isVisible = true;
-                            var onLinkDisposedObserver = link.onDisposedObservable.add(function (nodeLink) {
-                                _this_1._redrawFramePorts();
-                            });
-                            this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);
-                        }
-                    }
+            for (var _k = 0, _l = node.inputPorts; _k < _l.length; _k++) { // Input
+                var port = _l[_k];
+                if (!port.isExposed) {
+                    this.createInputPorts(port, node);
                 }
                 }
-                else if (port.exposedOnFrame) {
+            }
+        }
+    };
+    GraphFrame.prototype.removePortFromExposed = function (nodeLink, exposedPorts) {
+        var aPort = exposedPorts.findIndex(function (nodePort) { return nodePort === nodeLink.portA; });
+        var bPort = exposedPorts.findIndex(function (nodePort) { return nodePort === nodeLink.portB; });
+        if (aPort >= 0) {
+            exposedPorts.splice(aPort, 1);
+            nodeLink.portA.isExposed = false;
+        }
+        else if (bPort >= 0) {
+            exposedPorts.splice(bPort, 1);
+            if (nodeLink.portB)
+                nodeLink.portB.isExposed = false;
+        }
+    };
+    GraphFrame.prototype.createInputPorts = function (port, node) {
+        var _this_1 = this;
+        if (port.connectionPoint.isConnected) {
+            for (var _i = 0, _a = node.links; _i < _a.length; _i++) {
+                var link = _a[_i];
+                if (link.portB === port && this.nodes.indexOf(link.nodeA) === -1) {
                     this._createInputPort(port, node);
                     this._createInputPort(port, node);
+                    link.isVisible = true;
+                    var onLinkDisposedObserver = link.onDisposedObservable.add(function (nodeLink) {
+                        _this_1.removePortFromExposed(nodeLink, _this_1._exposedInPorts);
+                        _this_1._redrawFramePorts();
+                    });
+                    this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);
                 }
                 }
             }
             }
         }
         }
+        else if (port.exposedOnFrame) {
+            this._createInputPort(port, node);
+        }
+    };
+    GraphFrame.prototype.createOutputPorts = function (port, node) {
+        var _this_1 = this;
+        if (port.connectionPoint.hasEndpoints) {
+            var portAdded = false;
+            for (var _i = 0, _a = node.links; _i < _a.length; _i++) {
+                var link = _a[_i];
+                if (link.portA === port && this.nodes.indexOf(link.nodeB) === -1 || (link.portA === port && port.exposedOnFrame)) {
+                    var localPort = void 0;
+                    if (!portAdded) {
+                        portAdded = true;
+                        localPort = _frameNodePort__WEBPACK_IMPORTED_MODULE_3__["FrameNodePort"].CreateFrameNodePortElement(port.connectionPoint, link.nodeA, this._outputPortContainer, null, this._ownerCanvas.globalState, false, GraphFrame._FramePortCounter++, this.id);
+                        this._frameOutPorts.push(localPort);
+                        link.isVisible = true;
+                        var onLinkDisposedObserver = link.onDisposedObservable.add(function (nodeLink) {
+                            _this_1.removePortFromExposed(nodeLink, _this_1._exposedOutPorts);
+                            _this_1._redrawFramePorts();
+                        });
+                        this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);
+                    }
+                    else if (this.nodes.indexOf(link.nodeB) === -1) {
+                        link.isVisible = true;
+                        localPort = this.ports.filter(function (p) { return p.connectionPoint === port.connectionPoint; })[0];
+                    }
+                    else {
+                        localPort = this.ports.filter(function (p) { return p.connectionPoint === port.connectionPoint; })[0];
+                    }
+                    port.delegatedPort = localPort;
+                    this._controlledPorts.push(port);
+                    return true;
+                }
+            }
+        }
+        else if (port.exposedOnFrame) {
+            var localPort = _frameNodePort__WEBPACK_IMPORTED_MODULE_3__["FrameNodePort"].CreateFrameNodePortElement(port.connectionPoint, node, this._outputPortContainer, null, this._ownerCanvas.globalState, false, GraphFrame._FramePortCounter++, this.id);
+            this._frameOutPorts.push(localPort);
+            port.delegatedPort = localPort;
+            this._controlledPorts.push(port);
+            return true;
+        }
+        return false;
     };
     };
     GraphFrame.prototype._redrawFramePorts = function () {
     GraphFrame.prototype._redrawFramePorts = function () {
         if (!this.isCollapsed) {
         if (!this.isCollapsed) {
@@ -68052,12 +68115,15 @@ var GraphFrame = /** @class */ (function () {
         evt.stopPropagation();
         evt.stopPropagation();
     };
     };
     GraphFrame.prototype.moveFramePortUp = function (nodePort) {
     GraphFrame.prototype.moveFramePortUp = function (nodePort) {
+        var _a, _b;
         var elementsArray;
         var elementsArray;
         if (nodePort.isInput) {
         if (nodePort.isInput) {
             if (this._inputPortContainer.children.length < 2) {
             if (this._inputPortContainer.children.length < 2) {
                 return;
                 return;
             }
             }
             elementsArray = Array.from(this._inputPortContainer.childNodes);
             elementsArray = Array.from(this._inputPortContainer.childNodes);
+            var indexInContainer = this._frameInPorts.findIndex(function (framePort) { return framePort === nodePort; });
+            _a = [this._exposedInPorts[indexInContainer], this._exposedInPorts[indexInContainer - 1]], this._exposedInPorts[indexInContainer - 1] = _a[0], this._exposedInPorts[indexInContainer] = _a[1]; // swap idicies
             this._movePortUp(elementsArray, nodePort, this._frameInPorts);
             this._movePortUp(elementsArray, nodePort, this._frameInPorts);
         }
         }
         else {
         else {
@@ -68065,6 +68131,8 @@ var GraphFrame = /** @class */ (function () {
                 return;
                 return;
             }
             }
             elementsArray = Array.from(this._outputPortContainer.childNodes);
             elementsArray = Array.from(this._outputPortContainer.childNodes);
+            var indexInContainer = this._frameOutPorts.findIndex(function (framePort) { return framePort === nodePort; });
+            _b = [this._exposedOutPorts[indexInContainer], this._exposedOutPorts[indexInContainer - 1]], this._exposedOutPorts[indexInContainer - 1] = _b[0], this._exposedOutPorts[indexInContainer] = _b[1]; // swap idicies
             this._movePortUp(elementsArray, nodePort, this._frameOutPorts);
             this._movePortUp(elementsArray, nodePort, this._frameOutPorts);
         }
         }
         this.ports.forEach(function (framePort) { return framePort.node._refreshLinks(); });
         this.ports.forEach(function (framePort) { return framePort.node._refreshLinks(); });
@@ -68104,12 +68172,15 @@ var GraphFrame = /** @class */ (function () {
         }
         }
     };
     };
     GraphFrame.prototype.moveFramePortDown = function (nodePort) {
     GraphFrame.prototype.moveFramePortDown = function (nodePort) {
+        var _a, _b;
         var elementsArray;
         var elementsArray;
         if (nodePort.isInput) {
         if (nodePort.isInput) {
             if (this._inputPortContainer.children.length < 2) {
             if (this._inputPortContainer.children.length < 2) {
                 return;
                 return;
             }
             }
             elementsArray = Array.from(this._inputPortContainer.childNodes);
             elementsArray = Array.from(this._inputPortContainer.childNodes);
+            var indexInContainer = this._frameInPorts.findIndex(function (framePort) { return framePort === nodePort; });
+            _a = [this._exposedInPorts[indexInContainer + 1], this._exposedInPorts[indexInContainer]], this._exposedInPorts[indexInContainer] = _a[0], this._exposedInPorts[indexInContainer + 1] = _a[1]; // swap idicies
             this._movePortDown(elementsArray, nodePort, this._frameInPorts);
             this._movePortDown(elementsArray, nodePort, this._frameInPorts);
         }
         }
         else {
         else {
@@ -68117,6 +68188,8 @@ var GraphFrame = /** @class */ (function () {
                 return;
                 return;
             }
             }
             elementsArray = Array.from(this._outputPortContainer.childNodes);
             elementsArray = Array.from(this._outputPortContainer.childNodes);
+            var indexInContainer = this._frameOutPorts.findIndex(function (framePort) { return framePort === nodePort; });
+            _b = [this._exposedOutPorts[indexInContainer + 1], this._exposedOutPorts[indexInContainer]], this._exposedOutPorts[indexInContainer] = _b[0], this._exposedOutPorts[indexInContainer + 1] = _b[1]; // swap idicies
             this._movePortDown(elementsArray, nodePort, this._frameOutPorts);
             this._movePortDown(elementsArray, nodePort, this._frameOutPorts);
         }
         }
         this.ports.forEach(function (framePort) { return framePort.node._refreshLinks(); });
         this.ports.forEach(function (framePort) { return framePort.node._refreshLinks(); });
@@ -68193,10 +68266,17 @@ var GraphFrame = /** @class */ (function () {
     };
     };
     GraphFrame.prototype.dispose = function () {
     GraphFrame.prototype.dispose = function () {
         var _a;
         var _a;
-        this.isCollapsed = false;
-        this._nodes.forEach(function (node) {
-            node.enclosingFrameId = -1;
-        });
+        if (this.isCollapsed) {
+            while (this._nodes.length > 0) {
+                this._nodes[0].dispose();
+            }
+            this.isCollapsed = false;
+        }
+        else {
+            this._nodes.forEach(function (node) {
+                node.enclosingFrameId = -1;
+            });
+        }
         if (this._onSelectionChangedObserver) {
         if (this._onSelectionChangedObserver) {
             this._ownerCanvas.globalState.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);
             this._ownerCanvas.globalState.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);
         }
         }
@@ -68221,7 +68301,7 @@ var GraphFrame = /** @class */ (function () {
             height: this._height,
             height: this._height,
             color: this._color.asArray(),
             color: this._color.asArray(),
             name: this.name,
             name: this.name,
-            isCollapsed: false,
+            isCollapsed: true,
             blocks: this.nodes.map(function (n) { return n.block.uniqueId; }),
             blocks: this.nodes.map(function (n) { return n.block.uniqueId; }),
             comments: this._comments
             comments: this._comments
         };
         };
@@ -68917,6 +68997,7 @@ var NodePort = /** @class */ (function () {
         var _this = this;
         var _this = this;
         this.connectionPoint = connectionPoint;
         this.connectionPoint = connectionPoint;
         this.node = node;
         this.node = node;
+        this.isExposed = false;
         this.delegatedPort = null;
         this.delegatedPort = null;
         this._element = portContainer.ownerDocument.createElement("div");
         this._element = portContainer.ownerDocument.createElement("div");
         this._element.classList.add("port");
         this._element.classList.add("port");

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


+ 12 - 0
dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts

@@ -263,6 +263,8 @@ declare module "babylonjs-node-editor/diagram/graphFrame" {
         private _frameInPorts;
         private _frameInPorts;
         private _frameOutPorts;
         private _frameOutPorts;
         private _controlledPorts;
         private _controlledPorts;
+        private _exposedInPorts;
+        private _exposedOutPorts;
         private _id;
         private _id;
         private _comments;
         private _comments;
         private _frameIsResizing;
         private _frameIsResizing;
@@ -279,6 +281,9 @@ declare module "babylonjs-node-editor/diagram/graphFrame" {
         private _createInputPort;
         private _createInputPort;
         private _markFramePortPositions;
         private _markFramePortPositions;
         private _createFramePorts;
         private _createFramePorts;
+        private removePortFromExposed;
+        private createInputPorts;
+        private createOutputPorts;
         private _redrawFramePorts;
         private _redrawFramePorts;
         set isCollapsed(value: boolean);
         set isCollapsed(value: boolean);
         get nodes(): GraphNode[];
         get nodes(): GraphNode[];
@@ -385,6 +390,7 @@ declare module "babylonjs-node-editor/diagram/nodePort" {
         protected _onCandidateLinkMovedObserver: Nullable<Observer<Nullable<Vector2>>>;
         protected _onCandidateLinkMovedObserver: Nullable<Observer<Nullable<Vector2>>>;
         protected _onSelectionChangedObserver: Nullable<Observer<Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _onSelectionChangedObserver: Nullable<Observer<Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _exposedOnFrame: boolean;
         protected _exposedOnFrame: boolean;
+        isExposed: boolean;
         delegatedPort: Nullable<FrameNodePort>;
         delegatedPort: Nullable<FrameNodePort>;
         get element(): HTMLDivElement;
         get element(): HTMLDivElement;
         get portName(): string;
         get portName(): string;
@@ -2069,6 +2075,8 @@ declare module NODEEDITOR {
         private _frameInPorts;
         private _frameInPorts;
         private _frameOutPorts;
         private _frameOutPorts;
         private _controlledPorts;
         private _controlledPorts;
+        private _exposedInPorts;
+        private _exposedOutPorts;
         private _id;
         private _id;
         private _comments;
         private _comments;
         private _frameIsResizing;
         private _frameIsResizing;
@@ -2085,6 +2093,9 @@ declare module NODEEDITOR {
         private _createInputPort;
         private _createInputPort;
         private _markFramePortPositions;
         private _markFramePortPositions;
         private _createFramePorts;
         private _createFramePorts;
+        private removePortFromExposed;
+        private createInputPorts;
+        private createOutputPorts;
         private _redrawFramePorts;
         private _redrawFramePorts;
         set isCollapsed(value: boolean);
         set isCollapsed(value: boolean);
         get nodes(): GraphNode[];
         get nodes(): GraphNode[];
@@ -2180,6 +2191,7 @@ declare module NODEEDITOR {
         protected _onCandidateLinkMovedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<BABYLON.Vector2>>>;
         protected _onCandidateLinkMovedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<BABYLON.Vector2>>>;
         protected _onSelectionChangedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _onSelectionChangedObserver: BABYLON.Nullable<BABYLON.Observer<BABYLON.Nullable<GraphFrame | GraphNode | NodeLink | NodePort | FramePortData>>>;
         protected _exposedOnFrame: boolean;
         protected _exposedOnFrame: boolean;
+        isExposed: boolean;
         delegatedPort: BABYLON.Nullable<FrameNodePort>;
         delegatedPort: BABYLON.Nullable<FrameNodePort>;
         get element(): HTMLDivElement;
         get element(): HTMLDivElement;
         get portName(): string;
         get portName(): string;

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

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

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

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

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

@@ -1 +1 @@
-{"thinEngineOnly":117927,"engineOnly":154367,"sceneOnly":519868,"minGridMaterial":659956,"minStandardMaterial":810491}
+{"thinEngineOnly":117927,"engineOnly":154367,"sceneOnly":519900,"minGridMaterial":659992,"minStandardMaterial":810527}

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

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

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

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

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

@@ -4,7 +4,7 @@
     },
     },
     "name": "babylonjs-serializers",
     "name": "babylonjs-serializers",
     "description": "The Babylon.js serializers library is an extension you can use to serialize Babylon scenes.",
     "description": "The Babylon.js serializers library is an extension you can use to serialize Babylon scenes.",
-    "version": "4.2.0-beta.3",
+    "version": "4.2.0-beta.5",
     "repository": {
     "repository": {
         "type": "git",
         "type": "git",
         "url": "https://github.com/BabylonJS/Babylon.js.git"
         "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -28,8 +28,8 @@
     ],
     ],
     "license": "Apache-2.0",
     "license": "Apache-2.0",
     "dependencies": {
     "dependencies": {
-        "babylonjs": "4.2.0-beta.3",
-        "babylonjs-gltf2interface": "4.2.0-beta.3"
+        "babylonjs": "4.2.0-beta.5",
+        "babylonjs-gltf2interface": "4.2.0-beta.5"
     },
     },
     "engines": {
     "engines": {
         "node": "*"
         "node": "*"

+ 74 - 8
dist/preview release/viewer/babylon.module.d.ts

@@ -3884,14 +3884,13 @@ declare module "babylonjs/Maths/math.vector" {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -6894,7 +6893,7 @@ declare module "babylonjs/Meshes/Builders/capsuleBuilder" {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -52427,11 +52426,19 @@ declare module "babylonjs/Gizmos/gizmo" {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -52615,6 +52622,10 @@ declare module "babylonjs/Gizmos/positionGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -53503,6 +53514,10 @@ declare module "babylonjs/Debug/skeletonViewer" {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -55039,6 +55054,7 @@ declare module "babylonjs/Engines/nativeEngine" {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -55130,6 +55146,10 @@ declare module "babylonjs/Engines/nativeEngine" {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -55920,6 +55940,10 @@ declare module "babylonjs/Gizmos/scaleGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -56242,6 +56266,10 @@ declare module "babylonjs/Gizmos/rotationGizmo" {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -56337,6 +56365,10 @@ declare module "babylonjs/Gizmos/gizmoManager" {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -76035,9 +76067,10 @@ declare module "babylonjs/Rendering/depthRendererSceneComponent" {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
@@ -84101,14 +84134,13 @@ declare module BABYLON {
         normalize(): Quaternion;
         normalize(): Quaternion;
         /**
         /**
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
          * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-         * @param order is a reserved parameter and is ignore for now
+         * @param order is a reserved parameter and is ignored for now
          * @returns a new Vector3 containing the Euler angles
          * @returns a new Vector3 containing the Euler angles
          */
          */
         toEulerAngles(order?: string): Vector3;
         toEulerAngles(order?: string): Vector3;
         /**
         /**
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
          * @param result defines the vector which will be filled with the Euler angles
          * @param result defines the vector which will be filled with the Euler angles
-         * @param order is a reserved parameter and is ignore for now
          * @returns the current unchanged quaternion
          * @returns the current unchanged quaternion
          */
          */
         toEulerAnglesToRef(result: Vector3): Quaternion;
         toEulerAnglesToRef(result: Vector3): Quaternion;
@@ -87101,7 +87133,7 @@ declare module BABYLON {
         height: number;
         height: number;
         /** Radius of the capsule. */
         /** Radius of the capsule. */
         radius: number;
         radius: number;
-        /** Height or Length of the capsule. */
+        /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
         capSubdivisions: number;
         capSubdivisions: number;
         /** Overwrite for the top radius. */
         /** Overwrite for the top radius. */
         radiusTop?: number;
         radiusTop?: number;
@@ -130705,11 +130737,19 @@ declare module BABYLON {
          */
          */
         protected _scaleRatio: number;
         protected _scaleRatio: number;
         /**
         /**
+         * boolean updated by pointermove when a gizmo mesh is hovered
+         */
+        protected _isHovered: boolean;
+        /**
          * Ratio for the scale of the gizmo (Default: 1)
          * Ratio for the scale of the gizmo (Default: 1)
          */
          */
         set scaleRatio(value: number);
         set scaleRatio(value: number);
         get scaleRatio(): number;
         get scaleRatio(): number;
         /**
         /**
+         * True when the mouse pointer is hovered a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * If a custom mesh has been set (Default: false)
          * If a custom mesh has been set (Default: false)
          */
          */
         protected _customMeshSet: boolean;
         protected _customMeshSet: boolean;
@@ -130872,6 +130912,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a PositionGizmo
          * Creates a PositionGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
           @param thickness display gizmo axis thickness
           @param thickness display gizmo axis thickness
@@ -131697,6 +131741,10 @@ declare module BABYLON.Debug {
          *
          *
          * | Option          | Type    | Default | Description |
          * | Option          | Type    | Default | Description |
          * | --------------- | ------- | ------- | ----------- |
          * | --------------- | ------- | ------- | ----------- |
+         * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+         * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
          *
          *
@@ -133124,6 +133172,7 @@ declare module BABYLON {
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
         private readonly INVALID_HANDLE;
         private readonly INVALID_HANDLE;
         private _boundBuffersVertexArray;
         private _boundBuffersVertexArray;
+        private _currentDepthTest;
         getHardwareScalingLevel(): number;
         getHardwareScalingLevel(): number;
         constructor();
         constructor();
         dispose(): void;
         dispose(): void;
@@ -133215,6 +133264,10 @@ declare module BABYLON {
          * @returns the current depth writing state
          * @returns the current depth writing state
          */
          */
         getDepthWrite(): boolean;
         getDepthWrite(): boolean;
+        setDepthFunctionToGreater(): void;
+        setDepthFunctionToGreaterOrEqual(): void;
+        setDepthFunctionToLess(): void;
+        setDepthFunctionToLessOrEqual(): void;
         /**
         /**
          * Enable or disable depth writing
          * Enable or disable depth writing
          * @param enable defines the state to set
          * @param enable defines the state to set
@@ -133920,6 +133973,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a ScaleGizmo
          * Creates a ScaleGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -134205,6 +134262,10 @@ declare module BABYLON {
         get attachedNode(): Nullable<Node>;
         get attachedNode(): Nullable<Node>;
         set attachedNode(node: Nullable<Node>);
         set attachedNode(node: Nullable<Node>);
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Creates a RotationGizmo
          * Creates a RotationGizmo
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param gizmoLayer The utility layer the gizmo will be added to
          * @param tessellation Amount of tessellation to be used when creating rotation circles
          * @param tessellation Amount of tessellation to be used when creating rotation circles
@@ -134289,6 +134350,10 @@ declare module BABYLON {
          */
          */
         get utilityLayer(): UtilityLayerRenderer;
         get utilityLayer(): UtilityLayerRenderer;
         /**
         /**
+         * True when the mouse pointer is hovering a gizmo mesh
+         */
+        get isHovered(): boolean;
+        /**
          * Instatiates a gizmo manager
          * Instatiates a gizmo manager
          * @param scene the scene to overlay the gizmos on top of
          * @param scene the scene to overlay the gizmos on top of
          * @param thickness display gizmo axis thickness
          * @param thickness display gizmo axis thickness
@@ -152302,9 +152367,10 @@ declare module BABYLON {
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * Creates a depth renderer a given camera which contains a depth map which can be used for post processing.
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param camera The camera to create the depth renderer on (default: scene's active camera)
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
              * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z
+             * @param force32bitsFloat Forces 32 bits float when supported (else 16 bits float is prioritized over 32 bits float if supported)
              * @returns the created depth renderer
              * @returns the created depth renderer
              */
              */
-            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean): DepthRenderer;
+            enableDepthRenderer(camera?: Nullable<Camera>, storeNonLinearDepth?: boolean, force32bitsFloat?: boolean): DepthRenderer;
             /**
             /**
              * Disables a depth renderer for a given camera
              * Disables a depth renderer for a given camera
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)
              * @param camera The camera to disable the depth renderer on (default: scene's active camera)

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


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


+ 1 - 1
package.json

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

+ 7 - 3
src/Debug/skeletonViewer.ts

@@ -864,12 +864,16 @@ export class SkeletonViewer {
     }
     }
 
 
     /** Sets a display option of the skeleton viewer
     /** Sets a display option of the skeleton viewer
-     *
+	 *
      * | Option          | Type    | Default | Description |
      * | Option          | Type    | Default | Description |
      * | --------------- | ------- | ------- | ----------- |
      * | --------------- | ------- | ------- | ----------- |
+     * | midStep         | float   | 0.235   | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+     * | midStepFactor   | float   | 0.15    | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+     * | sphereBaseSize  | float   | 2       | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
+     * | sphereScaleUnit | float   | 0.865   | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |
      * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
      * | showLocalAxes   | boolean | false   | Displays local axes on all bones. |
-     * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
-     *
+	 * | localAxesSize   | float   | 0.075   | Determines the length of each local axis. |
+	 *
      * @param option String of the option name
      * @param option String of the option name
      * @param value The numerical option value
      * @param value The numerical option value
      */
      */

+ 36 - 2
src/Engines/nativeEngine.ts

@@ -52,7 +52,7 @@ interface INativeEngine {
     setState(culling: boolean, zOffset: number, reverseSide: boolean): void;
     setState(culling: boolean, zOffset: number, reverseSide: boolean): void;
     setZOffset(zOffset: number): void;
     setZOffset(zOffset: number): void;
     getZOffset(): number;
     getZOffset(): number;
-    setDepthTest(enable: boolean): void;
+    setDepthTest(enable: number): void;
     getDepthWrite(): boolean;
     getDepthWrite(): boolean;
     setDepthWrite(enable: boolean): void;
     setDepthWrite(enable: boolean): void;
     setColorWrite(enable: boolean): void;
     setColorWrite(enable: boolean): void;
@@ -163,6 +163,19 @@ class NativeFilter {
     public static readonly MINLINEAR_MAGPOINT_MIPPOINT = 10;
     public static readonly MINLINEAR_MAGPOINT_MIPPOINT = 10;
 }
 }
 
 
+// depth test values
+// Values match bgfx defines
+class DepthTest {
+    public static readonly DEPTH_TEST_LESS = 16;
+    public static readonly DEPTH_TEST_LEQUAL = 32;
+    public static readonly DEPTH_TEST_EQUAL = 48;
+    public static readonly DEPTH_TEST_GEQUAL = 64;
+    public static readonly DEPTH_TEST_GREATER = 80;
+    public static readonly DEPTH_TEST_NOTEQUAL = 96;
+    public static readonly DEPTH_TEST_NEVER = 112;
+    public static readonly DEPTH_TEST_ALWAYS = 128;
+}
+
 // these flags match bgfx.
 // these flags match bgfx.
 class NativeClearFlags
 class NativeClearFlags
 {
 {
@@ -205,6 +218,7 @@ export class NativeEngine extends Engine {
     /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
     /** Defines the invalid handle returned by bgfx when resource creation goes wrong */
     private readonly INVALID_HANDLE = 65535;
     private readonly INVALID_HANDLE = 65535;
     private _boundBuffersVertexArray: any = null;
     private _boundBuffersVertexArray: any = null;
+    private _currentDepthTest: number = DepthTest.DEPTH_TEST_LEQUAL;
 
 
     public getHardwareScalingLevel(): number {
     public getHardwareScalingLevel(): number {
         return 1.0;
         return 1.0;
@@ -615,7 +629,7 @@ export class NativeEngine extends Engine {
      * @param enable defines the state to set
      * @param enable defines the state to set
      */
      */
     public setDepthBuffer(enable: boolean): void {
     public setDepthBuffer(enable: boolean): void {
-        this._native.setDepthTest(enable);
+        this._native.setDepthTest(enable ? this._currentDepthTest : DepthTest.DEPTH_TEST_ALWAYS);
     }
     }
 
 
     /**
     /**
@@ -626,6 +640,26 @@ export class NativeEngine extends Engine {
         return this._native.getDepthWrite();
         return this._native.getDepthWrite();
     }
     }
 
 
+    public setDepthFunctionToGreater(): void {
+        this._currentDepthTest = DepthTest.DEPTH_TEST_GREATER;
+        this._native.setDepthTest(this._currentDepthTest);
+    }
+
+    public setDepthFunctionToGreaterOrEqual(): void {
+        this._currentDepthTest = DepthTest.DEPTH_TEST_GEQUAL;
+        this._native.setDepthTest(this._currentDepthTest);
+    }
+
+    public setDepthFunctionToLess(): void {
+        this._currentDepthTest = DepthTest.DEPTH_TEST_LESS;
+        this._native.setDepthTest(this._currentDepthTest);
+    }
+
+    public setDepthFunctionToLessOrEqual(): void {
+        this._currentDepthTest = DepthTest.DEPTH_TEST_LEQUAL;
+        this._native.setDepthTest(this._currentDepthTest);
+    }
+
     /**
     /**
      * Enable or disable depth writing
      * Enable or disable depth writing
      * @param enable defines the state to set
      * @param enable defines the state to set

+ 2 - 2
src/Engines/thinEngine.ts

@@ -152,14 +152,14 @@ export class ThinEngine {
      */
      */
     // Not mixed with Version for tooling purpose.
     // Not mixed with Version for tooling purpose.
     public static get NpmPackage(): string {
     public static get NpmPackage(): string {
-        return "babylonjs@4.2.0-beta.3";
+        return "babylonjs@4.2.0-beta.5";
     }
     }
 
 
     /**
     /**
      * Returns the current version of the framework
      * Returns the current version of the framework
      */
      */
     public static get Version(): string {
     public static get Version(): string {
-        return "4.2.0-beta.3";
+        return "4.2.0-beta.5";
     }
     }
 
 
     /**
     /**

+ 1 - 1
src/Materials/Node/Blocks/PBR/ambientOcclusionBlock.ts

@@ -30,7 +30,7 @@ export class AmbientOcclusionBlock extends NodeMaterialBlock {
         this.registerInput("directLightIntensity", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);
         this.registerInput("directLightIntensity", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);
 
 
         this.registerOutput("ambientOcclusion", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.Fragment,
         this.registerOutput("ambientOcclusion", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.Fragment,
-            new NodeMaterialConnectionPointCustomObject("ambientOcclusion", this, NodeMaterialConnectionPointDirection.Output, AmbientOcclusionBlock, "AOBlock"));
+            new NodeMaterialConnectionPointCustomObject("ambientOcclusion", this, NodeMaterialConnectionPointDirection.Output, AmbientOcclusionBlock, "AOBlock", "ambientOcc"));
     }
     }
 
 
     /**
     /**

+ 6 - 2
src/Materials/Node/nodeMaterial.ts

@@ -1446,14 +1446,14 @@ export class NodeMaterial extends PushMaterial {
         vmerger.connectTo(vertexOutput);
         vmerger.connectTo(vertexOutput);
 
 
         // Pixel
         // Pixel
-        const scale = new InputBlock("scale");
+        const scale = new InputBlock("Scale");
         scale.visibleInInspector = true;
         scale.visibleInInspector = true;
         scale.value = new Vector2(1, 1);
         scale.value = new Vector2(1, 1);
 
 
         const uv0 = new RemapBlock("uv0");
         const uv0 = new RemapBlock("uv0");
         position.connectTo(uv0);
         position.connectTo(uv0);
 
 
-        const uv = new MultiplyBlock("uv");
+        const uv = new MultiplyBlock("UV scale");
         uv0.connectTo(uv);
         uv0.connectTo(uv);
         scale.connectTo(uv);
         scale.connectTo(uv);
 
 
@@ -1871,6 +1871,10 @@ export class NodeMaterial extends PushMaterial {
      * @returns a promise that will resolve to the new node material
      * @returns a promise that will resolve to the new node material
      */
      */
     public static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl: string = "", nodeMaterial?: NodeMaterial): Promise<NodeMaterial> {
     public static ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl: string = "", nodeMaterial?: NodeMaterial): Promise<NodeMaterial> {
+        if (snippetId === "_BLANK") {
+            return Promise.resolve(this.CreateDefault("blank", scene));
+        }
+
         return new Promise((resolve, reject) => {
         return new Promise((resolve, reject) => {
             var request = new WebRequest();
             var request = new WebRequest();
             request.addEventListener("readystatechange", () => {
             request.addEventListener("readystatechange", () => {

+ 1 - 2
src/Maths/math.vector.ts

@@ -3113,7 +3113,7 @@ export class Quaternion {
 
 
     /**
     /**
      * Returns a new Vector3 set with the Euler angles translated from the current quaternion
      * Returns a new Vector3 set with the Euler angles translated from the current quaternion
-     * @param order is a reserved parameter and is ignore for now
+     * @param order is a reserved parameter and is ignored for now
      * @returns a new Vector3 containing the Euler angles
      * @returns a new Vector3 containing the Euler angles
      */
      */
     public toEulerAngles(order = "YZX"): Vector3 {
     public toEulerAngles(order = "YZX"): Vector3 {
@@ -3125,7 +3125,6 @@ export class Quaternion {
     /**
     /**
      * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
      * Sets the given vector3 "result" with the Euler angles translated from the current quaternion
      * @param result defines the vector which will be filled with the Euler angles
      * @param result defines the vector which will be filled with the Euler angles
-     * @param order is a reserved parameter and is ignore for now
      * @returns the current unchanged quaternion
      * @returns the current unchanged quaternion
      */
      */
     public toEulerAnglesToRef(result: Vector3): Quaternion {
     public toEulerAnglesToRef(result: Vector3): Quaternion {

+ 1 - 1
src/Meshes/Builders/capsuleBuilder.ts

@@ -232,7 +232,7 @@ export interface ICreateCapsuleOptions{
     /** Radius of the capsule. */
     /** Radius of the capsule. */
     radius: number;
     radius: number;
 
 
-    /** Height or Length of the capsule. */
+    /** Number of sub segments on the cap sections of the capsule running parallel to orientation. */
     capSubdivisions: number;
     capSubdivisions: number;
 
 
     /** Overwrite for the top radius. */
     /** Overwrite for the top radius. */

+ 3 - 1
src/Particles/particleHelper.ts

@@ -167,7 +167,9 @@ export class ParticleHelper {
      */
      */
     public static CreateFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = ""): Promise<IParticleSystem> {
     public static CreateFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = ""): Promise<IParticleSystem> {
         if (snippetId === "_BLANK") {
         if (snippetId === "_BLANK") {
-            return Promise.resolve(this.CreateDefault(null));
+            let system = this.CreateDefault(null);
+            system.start();
+            return Promise.resolve(system);
         }
         }
 
 
         return new Promise((resolve, reject) => {
         return new Promise((resolve, reject) => {

+ 6 - 8
src/XR/features/WebXRControllerTeleportation.ts

@@ -359,20 +359,19 @@ export class WebXRMotionControllerTeleportation extends WebXRAbstractFeature {
                 controllerData.xrController.getWorldPointerRayToRef(this._tmpRay);
                 controllerData.xrController.getWorldPointerRayToRef(this._tmpRay);
                 // pick grounds that are LOWER only. upper will use parabolic path
                 // pick grounds that are LOWER only. upper will use parabolic path
                 let pick = scene.pickWithRay(this._tmpRay, (o) => {
                 let pick = scene.pickWithRay(this._tmpRay, (o) => {
-                    const index = this._floorMeshes.indexOf(o);
-                    if (index === -1) {
-                        return false;
-                    }
                     // check for mesh-blockers
                     // check for mesh-blockers
                     if (this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(o) !== -1) {
                     if (this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(o) !== -1) {
                         return true;
                         return true;
                     }
                     }
+                    const index = this._floorMeshes.indexOf(o);
+                    if (index === -1) {
+                        return false;
+                    }
                     return this._floorMeshes[index].absolutePosition.y < this._options.xrInput.xrCamera.position.y;
                     return this._floorMeshes[index].absolutePosition.y < this._options.xrInput.xrCamera.position.y;
                 });
                 });
                 if (pick && pick.pickedMesh && this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(pick.pickedMesh) !== -1) {
                 if (pick && pick.pickedMesh && this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(pick.pickedMesh) !== -1) {
                     return;
                     return;
-                }
-                if (pick && pick.pickedPoint) {
+                } else if (pick && pick.pickedPoint) {
                     hitPossible = true;
                     hitPossible = true;
                     this._setTargetMeshPosition(pick.pickedPoint);
                     this._setTargetMeshPosition(pick.pickedPoint);
                     this._setTargetMeshVisibility(true);
                     this._setTargetMeshVisibility(true);
@@ -399,8 +398,7 @@ export class WebXRMotionControllerTeleportation extends WebXRAbstractFeature {
                         });
                         });
                         if (pick && pick.pickedMesh && this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(pick.pickedMesh) !== -1) {
                         if (pick && pick.pickedMesh && this._options.pickBlockerMeshes && this._options.pickBlockerMeshes.indexOf(pick.pickedMesh) !== -1) {
                             return;
                             return;
-                        }
-                        if (pick && pick.pickedPoint) {
+                        } else if (pick && pick.pickedPoint) {
                             hitPossible = true;
                             hitPossible = true;
                             this._setTargetMeshPosition(pick.pickedPoint);
                             this._setTargetMeshPosition(pick.pickedPoint);
                             this._setTargetMeshVisibility(true);
                             this._setTargetMeshVisibility(true);

+ 2 - 1
tests/validation/config.json

@@ -2,7 +2,8 @@
     "root": "https://cdn.babylonjs.com",
     "root": "https://cdn.babylonjs.com",
     "tests": [   
     "tests": [   
         {
         {
-            "title": "Procedural texture with NME",
+            "title": "Procedural texture with NME",       
+            "renderCount": 10,
             "playgroundId": "#8S19ZC#1",            
             "playgroundId": "#8S19ZC#1",            
             "referenceImage": "procedural_nme.png"
             "referenceImage": "procedural_nme.png"
         },   
         },