Prechádzať zdrojové kódy

Merge remote-tracking branch 'upstream/master'

MackeyK24 6 rokov pred
rodič
commit
64b8ec3a85
42 zmenil súbory, kde vykonal 1442 pridanie a 188 odobranie
  1. 103 2
      Playground/babylon.d.txt
  2. 104 2
      dist/preview release/babylon.d.ts
  3. 1 1
      dist/preview release/babylon.js
  4. 360 27
      dist/preview release/babylon.max.js
  5. 1 1
      dist/preview release/babylon.max.js.map
  6. 212 4
      dist/preview release/babylon.module.d.ts
  7. 104 2
      dist/preview release/documentation.d.ts
  8. 7 7
      dist/preview release/inspector/babylon.inspector.bundle.max.js
  9. 1 1
      dist/preview release/inspector/babylon.inspector.bundle.max.js.map
  10. 24 24
      dist/preview release/nodeEditor/babylon.nodeEditor.d.ts
  11. 1 1
      dist/preview release/nodeEditor/babylon.nodeEditor.js
  12. 4 4
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js
  13. 1 1
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map
  14. 51 51
      dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts
  15. 212 4
      dist/preview release/viewer/babylon.module.d.ts
  16. 30 26
      dist/preview release/viewer/babylon.viewer.js
  17. 1 1
      dist/preview release/viewer/babylon.viewer.max.js
  18. 4 4
      dist/preview release/what's new.md
  19. 1 0
      nodeEditor/src/components/diagram/input/inputNodePropertyComponent.tsx
  20. 2 0
      nodeEditor/src/components/diagram/texture/texturePropertyTabComponent.tsx
  21. 0 6
      nodeEditor/src/graphEditor.tsx
  22. 10 3
      src/Materials/Node/Blocks/Dual/fogBlock.ts
  23. 7 0
      src/Materials/Node/Blocks/Fragment/imageProcessingBlock.ts
  24. 2 1
      src/Materials/Node/Blocks/Fragment/index.ts
  25. 45 0
      src/Materials/Node/Blocks/Fragment/lightBlock.ts
  26. 7 0
      src/Materials/Node/Blocks/Fragment/rgbMergerBlock.ts
  27. 7 0
      src/Materials/Node/Blocks/Fragment/rgbaMergerBlock.ts
  28. 13 1
      src/Materials/Node/Blocks/Fragment/textureBlock.ts
  29. 12 5
      src/Materials/Node/Blocks/Vertex/bonesBlock.ts
  30. 3 3
      src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts
  31. 7 0
      src/Materials/Node/Blocks/addBlock.ts
  32. 7 0
      src/Materials/Node/Blocks/clampBlock.ts
  33. 7 0
      src/Materials/Node/Blocks/matrixMultiplicationBlock.ts
  34. 7 0
      src/Materials/Node/Blocks/multiplyBlock.ts
  35. 7 0
      src/Materials/Node/Blocks/scaleBlock.ts
  36. 7 0
      src/Materials/Node/Blocks/vector2TransformBlock.ts
  37. 7 0
      src/Materials/Node/Blocks/vector3TransformBlock.ts
  38. 7 0
      src/Materials/Node/Blocks/vector4TransformBlock.ts
  39. 33 2
      src/Materials/Node/nodeMaterialBlockConnectionPoint.ts
  40. 3 1
      src/Materials/Node/nodeMaterialBlockConnectionPointTypes.ts
  41. 15 3
      src/Materials/Node/nodeMaterialBuildState.ts
  42. 5 0
      src/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts

+ 103 - 2
Playground/babylon.d.txt

@@ -12063,6 +12063,7 @@ declare module BABYLON {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -12071,6 +12072,7 @@ declare module BABYLON {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -12167,6 +12169,13 @@ declare module BABYLON {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -12222,6 +12231,13 @@ declare module BABYLON {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -33686,7 +33702,7 @@ declare module BABYLON {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -49368,6 +49384,7 @@ declare module BABYLON {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -49758,7 +49775,9 @@ declare module BABYLON {
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module BABYLON {
 declare module BABYLON {
@@ -49987,6 +50006,10 @@ declare module BABYLON {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -50433,6 +50456,7 @@ declare module BABYLON {
         /** @hidden */
private _wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         /** @hidden */
private _wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         /** @hidden */
private _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
private _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
private _needToEmitVarying: boolean;
         /** @hidden */
private _needToEmitVarying: boolean;
+        /** @hidden */
private _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -50471,6 +50495,10 @@ declare module BABYLON {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -50595,6 +50623,10 @@ declare module BABYLON {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -50757,6 +50789,10 @@ declare module BABYLON {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -50787,6 +50823,10 @@ declare module BABYLON {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -50878,6 +50918,10 @@ declare module BABYLON {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -50906,6 +50950,10 @@ declare module BABYLON {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -50918,6 +50966,27 @@ declare module BABYLON {
 }
 }
 declare module BABYLON {
 declare module BABYLON {
     /**
     /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
+declare module BABYLON {
+    /**
      * Block used to add support for scene fog
      * Block used to add support for scene fog
      */
      */
     export class FogBlock extends NodeMaterialBlock {
     export class FogBlock extends NodeMaterialBlock {
@@ -50951,6 +51020,10 @@ declare module BABYLON {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -50980,6 +51053,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51006,6 +51083,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51032,6 +51113,10 @@ declare module BABYLON {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51058,6 +51143,10 @@ declare module BABYLON {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51088,6 +51177,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51118,6 +51211,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51144,6 +51241,10 @@ declare module BABYLON {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */

+ 104 - 2
dist/preview release/babylon.d.ts

@@ -12222,6 +12222,7 @@ declare module BABYLON {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -12230,6 +12231,7 @@ declare module BABYLON {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -12326,6 +12328,13 @@ declare module BABYLON {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -12381,6 +12390,13 @@ declare module BABYLON {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -34360,7 +34376,7 @@ declare module BABYLON {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -50144,6 +50160,7 @@ declare module BABYLON {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -50535,7 +50552,9 @@ declare module BABYLON {
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module BABYLON {
 declare module BABYLON {
@@ -50776,6 +50795,10 @@ declare module BABYLON {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -51231,6 +51254,8 @@ declare module BABYLON {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -51269,6 +51294,10 @@ declare module BABYLON {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -51393,6 +51422,10 @@ declare module BABYLON {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -51555,6 +51588,10 @@ declare module BABYLON {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51585,6 +51622,10 @@ declare module BABYLON {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51676,6 +51717,10 @@ declare module BABYLON {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -51704,6 +51749,10 @@ declare module BABYLON {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -51716,6 +51765,27 @@ declare module BABYLON {
 }
 }
 declare module BABYLON {
 declare module BABYLON {
     /**
     /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
+declare module BABYLON {
+    /**
      * Block used to add support for scene fog
      * Block used to add support for scene fog
      */
      */
     export class FogBlock extends NodeMaterialBlock {
     export class FogBlock extends NodeMaterialBlock {
@@ -51749,6 +51819,10 @@ declare module BABYLON {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -51778,6 +51852,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51804,6 +51882,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51830,6 +51912,10 @@ declare module BABYLON {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51856,6 +51942,10 @@ declare module BABYLON {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51886,6 +51976,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51916,6 +52010,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51942,6 +52040,10 @@ declare module BABYLON {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/babylon.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 360 - 27
dist/preview release/babylon.max.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/babylon.max.js.map


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

@@ -12436,6 +12436,7 @@ declare module "babylonjs/Materials/shaderMaterial" {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -12444,6 +12445,7 @@ declare module "babylonjs/Materials/shaderMaterial" {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -12540,6 +12542,13 @@ declare module "babylonjs/Materials/shaderMaterial" {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -12595,6 +12604,13 @@ declare module "babylonjs/Materials/shaderMaterial" {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -35258,7 +35274,7 @@ declare module "babylonjs/Audio/sound" {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -52331,6 +52347,7 @@ declare module "babylonjs/Misc/basis" {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -52785,7 +52802,9 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes"
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
 declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
@@ -53036,6 +53055,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector4TransformBlock" {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -53527,6 +53550,8 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -53565,6 +53590,10 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -53696,6 +53725,10 @@ declare module "babylonjs/Materials/Node/Blocks/Vertex/bonesBlock" {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -53882,6 +53915,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/rgbaMergerBlock" {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -53915,6 +53952,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/rgbMergerBlock" {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54017,6 +54058,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/textureBlock" {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -54052,6 +54097,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock" {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -54062,6 +54111,30 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock" {
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
+declare module "babylonjs/Materials/Node/Blocks/Fragment/lightBlock" {
+    import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
+    import { NodeMaterialBuildState } from "babylonjs/Materials/Node/nodeMaterialBuildState";
+    import { NodeMaterialConnectionPoint } from "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint";
+    /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
 declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
 declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
     export * from "babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock";
@@ -54071,6 +54144,7 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
     export * from "babylonjs/Materials/Node/Blocks/Fragment/rgbSplitterBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/rgbSplitterBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/textureBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/textureBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock";
+    export * from "babylonjs/Materials/Node/Blocks/Fragment/lightBlock";
 }
 }
 declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
 declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
     import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
     import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
@@ -54114,6 +54188,10 @@ declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -54149,6 +54227,10 @@ declare module "babylonjs/Materials/Node/Blocks/multiplyBlock" {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54178,6 +54260,10 @@ declare module "babylonjs/Materials/Node/Blocks/addBlock" {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54207,6 +54293,10 @@ declare module "babylonjs/Materials/Node/Blocks/clampBlock" {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54236,6 +54326,10 @@ declare module "babylonjs/Materials/Node/Blocks/scaleBlock" {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54269,6 +54363,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector2TransformBlock" {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -54302,6 +54400,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector3TransformBlock" {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -54331,6 +54433,10 @@ declare module "babylonjs/Materials/Node/Blocks/matrixMultiplicationBlock" {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -74904,6 +75010,7 @@ declare module BABYLON {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -74912,6 +75019,7 @@ declare module BABYLON {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -75008,6 +75116,13 @@ declare module BABYLON {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -75063,6 +75178,13 @@ declare module BABYLON {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -97042,7 +97164,7 @@ declare module BABYLON {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -112826,6 +112948,7 @@ declare module BABYLON {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -113217,7 +113340,9 @@ declare module BABYLON {
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module BABYLON {
 declare module BABYLON {
@@ -113458,6 +113583,10 @@ declare module BABYLON {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -113913,6 +114042,8 @@ declare module BABYLON {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -113951,6 +114082,10 @@ declare module BABYLON {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -114075,6 +114210,10 @@ declare module BABYLON {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -114237,6 +114376,10 @@ declare module BABYLON {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114267,6 +114410,10 @@ declare module BABYLON {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114358,6 +114505,10 @@ declare module BABYLON {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -114386,6 +114537,10 @@ declare module BABYLON {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -114398,6 +114553,27 @@ declare module BABYLON {
 }
 }
 declare module BABYLON {
 declare module BABYLON {
     /**
     /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
+declare module BABYLON {
+    /**
      * Block used to add support for scene fog
      * Block used to add support for scene fog
      */
      */
     export class FogBlock extends NodeMaterialBlock {
     export class FogBlock extends NodeMaterialBlock {
@@ -114431,6 +114607,10 @@ declare module BABYLON {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -114460,6 +114640,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114486,6 +114670,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114512,6 +114700,10 @@ declare module BABYLON {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114538,6 +114730,10 @@ declare module BABYLON {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114568,6 +114764,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -114598,6 +114798,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -114624,6 +114828,10 @@ declare module BABYLON {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */

+ 104 - 2
dist/preview release/documentation.d.ts

@@ -12222,6 +12222,7 @@ declare module BABYLON {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -12230,6 +12231,7 @@ declare module BABYLON {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -12326,6 +12328,13 @@ declare module BABYLON {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -12381,6 +12390,13 @@ declare module BABYLON {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -34360,7 +34376,7 @@ declare module BABYLON {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -50144,6 +50160,7 @@ declare module BABYLON {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -50535,7 +50552,9 @@ declare module BABYLON {
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module BABYLON {
 declare module BABYLON {
@@ -50776,6 +50795,10 @@ declare module BABYLON {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -51231,6 +51254,8 @@ declare module BABYLON {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -51269,6 +51294,10 @@ declare module BABYLON {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -51393,6 +51422,10 @@ declare module BABYLON {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -51555,6 +51588,10 @@ declare module BABYLON {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51585,6 +51622,10 @@ declare module BABYLON {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51676,6 +51717,10 @@ declare module BABYLON {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -51704,6 +51749,10 @@ declare module BABYLON {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -51716,6 +51765,27 @@ declare module BABYLON {
 }
 }
 declare module BABYLON {
 declare module BABYLON {
     /**
     /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
+declare module BABYLON {
+    /**
      * Block used to add support for scene fog
      * Block used to add support for scene fog
      */
      */
     export class FogBlock extends NodeMaterialBlock {
     export class FogBlock extends NodeMaterialBlock {
@@ -51749,6 +51819,10 @@ declare module BABYLON {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -51778,6 +51852,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51804,6 +51882,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51830,6 +51912,10 @@ declare module BABYLON {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51856,6 +51942,10 @@ declare module BABYLON {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -51886,6 +51976,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51916,6 +52010,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -51942,6 +52040,10 @@ declare module BABYLON {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */

+ 7 - 7
dist/preview release/inspector/babylon.inspector.bundle.max.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-inspector"] = factory(require("babylonjs-gui"), require("babylonjs-loaders"), require("babylonjs-serializers"), require("babylonjs"));
 		exports["babylonjs-inspector"] = factory(require("babylonjs-gui"), require("babylonjs-loaders"), require("babylonjs-serializers"), require("babylonjs"));
 	else
 	else
 		root["INSPECTOR"] = factory(root["BABYLON"]["GUI"], root["BABYLON"], root["BABYLON"], root["BABYLON"]);
 		root["INSPECTOR"] = factory(root["BABYLON"]["GUI"], root["BABYLON"], root["BABYLON"], root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_controls_image__, __WEBPACK_EXTERNAL_MODULE_babylonjs_loaders_glTF_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_serializers_glTF_2_0_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_observable__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_adtInstrumentation__, __WEBPACK_EXTERNAL_MODULE_babylonjs_loaders_glTF_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_serializers_glTF_2_0_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_observable__) {
 return /******/ (function(modules) { // webpackBootstrap
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
 /******/ 	var installedModules = {};
@@ -36153,7 +36153,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lines_textLineComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lines/textLineComponent */ "./components/actionTabs/lines/textLineComponent.tsx");
 /* harmony import */ var _lines_textLineComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lines/textLineComponent */ "./components/actionTabs/lines/textLineComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/control */ "babylonjs-gui/2D/controls/image");
+/* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/control */ "babylonjs-gui/2D/adtInstrumentation");
 /* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var _lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/sliderLineComponent */ "./components/actionTabs/lines/sliderLineComponent.tsx");
 /* harmony import */ var _lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/sliderLineComponent */ "./components/actionTabs/lines/sliderLineComponent.tsx");
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
@@ -36458,7 +36458,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/image */ "babylonjs-gui/2D/controls/image");
+/* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/image */ "babylonjs-gui/2D/adtInstrumentation");
 /* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
 /* harmony import */ var _lines_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/checkBoxLineComponent */ "./components/actionTabs/lines/checkBoxLineComponent.tsx");
 /* harmony import */ var _lines_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/checkBoxLineComponent */ "./components/actionTabs/lines/checkBoxLineComponent.tsx");
@@ -36872,7 +36872,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../node_modules/react/index.js");
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../node_modules/react/index.js");
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs-gui/2D/controls/textBlock */ "babylonjs-gui/2D/controls/image");
+/* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs-gui/2D/controls/textBlock */ "babylonjs-gui/2D/adtInstrumentation");
 /* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__);
 /* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__);
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lines_textInputLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/textInputLineComponent */ "./components/actionTabs/lines/textInputLineComponent.tsx");
 /* harmony import */ var _lines_textInputLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/textInputLineComponent */ "./components/actionTabs/lines/textInputLineComponent.tsx");
@@ -38009,7 +38009,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../lines/optionsLineComponent */ "./components/actionTabs/lines/optionsLineComponent.tsx");
 /* harmony import */ var _lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../lines/optionsLineComponent */ "./components/actionTabs/lines/optionsLineComponent.tsx");
 /* harmony import */ var _lines_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../lines/fileButtonLineComponent */ "./components/actionTabs/lines/fileButtonLineComponent.tsx");
 /* harmony import */ var _lines_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../lines/fileButtonLineComponent */ "./components/actionTabs/lines/fileButtonLineComponent.tsx");
 /* harmony import */ var _lines_valueLineComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../lines/valueLineComponent */ "./components/actionTabs/lines/valueLineComponent.tsx");
 /* harmony import */ var _lines_valueLineComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../lines/valueLineComponent */ "./components/actionTabs/lines/valueLineComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! babylonjs-gui/2D/adtInstrumentation */ "babylonjs-gui/2D/controls/image");
+/* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! babylonjs-gui/2D/adtInstrumentation */ "babylonjs-gui/2D/adtInstrumentation");
 /* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__);
 /* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__);
 /* harmony import */ var _customPropertyGridComponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../customPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/customPropertyGridComponent.tsx");
 /* harmony import */ var _customPropertyGridComponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../customPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/customPropertyGridComponent.tsx");
 
 
@@ -42694,14 +42694,14 @@ var Tools = /** @class */ (function () {
 
 
 /***/ }),
 /***/ }),
 
 
-/***/ "babylonjs-gui/2D/controls/image":
+/***/ "babylonjs-gui/2D/adtInstrumentation":
 /*!************************************************************************************************************************!*\
 /*!************************************************************************************************************************!*\
   !*** external {"root":["BABYLON","GUI"],"commonjs":"babylonjs-gui","commonjs2":"babylonjs-gui","amd":"babylonjs-gui"} ***!
   !*** external {"root":["BABYLON","GUI"],"commonjs":"babylonjs-gui","commonjs2":"babylonjs-gui","amd":"babylonjs-gui"} ***!
   \************************************************************************************************************************/
   \************************************************************************************************************************/
 /*! no static exports found */
 /*! no static exports found */
 /***/ (function(module, exports) {
 /***/ (function(module, exports) {
 
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_controls_image__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_adtInstrumentation__;
 
 
 /***/ }),
 /***/ }),
 
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/inspector/babylon.inspector.bundle.max.js.map


+ 24 - 24
dist/preview release/nodeEditor/babylon.nodeEditor.d.ts

@@ -217,6 +217,30 @@ declare module NODEEDITOR {
     }
     }
 }
 }
 declare module NODEEDITOR {
 declare module NODEEDITOR {
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     interface ITexturePropertyTabComponentProps {
     interface ITexturePropertyTabComponentProps {
         globalState: GlobalState;
         globalState: GlobalState;
         node: TextureNodeModel;
         node: TextureNodeModel;
@@ -422,30 +446,6 @@ declare module NODEEDITOR {
     }
     }
 }
 }
 declare module NODEEDITOR {
 declare module NODEEDITOR {
-    export interface ICheckBoxLineComponentProps {
-        label: string;
-        target?: any;
-        propertyName?: string;
-        isSelected?: () => boolean;
-        onSelect?: (value: boolean) => void;
-        onValueChanged?: () => void;
-        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
-    }
-    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
-        isSelected: boolean;
-    }> {
-        private static _UniqueIdSeed;
-        private _uniqueId;
-        private _localChange;
-        constructor(props: ICheckBoxLineComponentProps);
-        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
-            isSelected: boolean;
-        }): boolean;
-        onChange(): void;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     class ListLineOption {
     class ListLineOption {
         label: string;
         label: string;
         value: number | string;
         value: number | string;

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/nodeEditor/babylon.nodeEditor.js


+ 4 - 4
dist/preview release/nodeEditor/babylon.nodeEditor.max.js

@@ -47460,6 +47460,7 @@ var InputPropertyTabComponentProps = /** @class */ (function (_super) {
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_4__["CheckBoxLineComponent"], { label: "Is mesh attribute", onSelect: function (value) {
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_4__["CheckBoxLineComponent"], { label: "Is mesh attribute", onSelect: function (value) {
                         if (!value) {
                         if (!value) {
                             connection.isUniform = true;
                             connection.isUniform = true;
+                            _this.setDefaultValue();
                         }
                         }
                         else {
                         else {
                             connection.isAttribute = true;
                             connection.isAttribute = true;
@@ -47816,6 +47817,8 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _sharedComponents_textLineComponent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../sharedComponents/textLineComponent */ "./sharedComponents/textLineComponent.tsx");
 /* harmony import */ var _sharedComponents_textLineComponent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../sharedComponents/textLineComponent */ "./sharedComponents/textLineComponent.tsx");
 /* harmony import */ var _sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../sharedComponents/lineContainerComponent */ "./sharedComponents/lineContainerComponent.tsx");
 /* harmony import */ var _sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../sharedComponents/lineContainerComponent */ "./sharedComponents/lineContainerComponent.tsx");
 /* harmony import */ var _sharedComponents_textInputLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../sharedComponents/textInputLineComponent */ "./sharedComponents/textInputLineComponent.tsx");
 /* harmony import */ var _sharedComponents_textInputLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../sharedComponents/textInputLineComponent */ "./sharedComponents/textInputLineComponent.tsx");
+/* harmony import */ var _sharedComponents_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../sharedComponents/checkBoxLineComponent */ "./sharedComponents/checkBoxLineComponent.tsx");
+
 
 
 
 
 
 
@@ -47871,6 +47874,7 @@ var TexturePropertyTabComponent = /** @class */ (function (_super) {
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_textInputLineComponent__WEBPACK_IMPORTED_MODULE_6__["TextInputLineComponent"], { label: "Name", propertyName: "name", target: this.props.node.block, onChange: function () { return _this.props.globalState.onUpdateRequiredObservable.notifyObservers(); } }),
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_textInputLineComponent__WEBPACK_IMPORTED_MODULE_6__["TextInputLineComponent"], { label: "Name", propertyName: "name", target: this.props.node.block, onChange: function () { return _this.props.globalState.onUpdateRequiredObservable.notifyObservers(); } }),
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_textLineComponent__WEBPACK_IMPORTED_MODULE_4__["TextLineComponent"], { label: "Type", value: "Texture" })),
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_textLineComponent__WEBPACK_IMPORTED_MODULE_4__["TextLineComponent"], { label: "Type", value: "Texture" })),
             react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_5__["LineContainerComponent"], { title: "PROPERTIES" },
             react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_5__["LineContainerComponent"], { title: "PROPERTIES" },
+                react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_7__["CheckBoxLineComponent"], { label: "Auto select UV", propertyName: "autoSelectUV", target: this.props.node.block }),
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_3__["FileButtonLineComponent"], { label: "Replace texture", onClick: function (file) { return _this.replaceTexture(file); }, accept: ".jpg, .png, .tga, .dds, .env" }))));
                 react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_sharedComponents_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_3__["FileButtonLineComponent"], { label: "Replace texture", onClick: function (file) { return _this.replaceTexture(file); }, accept: ".jpg, .png, .tga, .dds, .env" }))));
     };
     };
     return TexturePropertyTabComponent;
     return TexturePropertyTabComponent;
@@ -48505,10 +48509,6 @@ var GraphEditor = /** @class */ (function (_super) {
                     var link = _components_diagram_defaultPortModel__WEBPACK_IMPORTED_MODULE_10__["DefaultPortModel"].SortInputOutput(e.link.sourcePort, e.link.targetPort);
                     var link = _components_diagram_defaultPortModel__WEBPACK_IMPORTED_MODULE_10__["DefaultPortModel"].SortInputOutput(e.link.sourcePort, e.link.targetPort);
                     if (link) {
                     if (link) {
                         if (link.input.connection) {
                         if (link.input.connection) {
-                            var targetBlock = link.input.connection.ownerBlock;
-                            if (targetBlock.isFinalMerger) {
-                                _this.props.globalState.nodeMaterial.removeOutputNode(targetBlock);
-                            }
                             if (link.output.connection) {
                             if (link.output.connection) {
                                 // Disconnect standard nodes
                                 // Disconnect standard nodes
                                 link.output.connection.disconnectFrom(link.input.connection);
                                 link.output.connection.disconnectFrom(link.input.connection);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map


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

@@ -249,6 +249,33 @@ declare module "babylonjs-node-editor/sharedComponents/fileButtonLineComponent"
         render(): JSX.Element;
         render(): JSX.Element;
     }
     }
 }
 }
+declare module "babylonjs-node-editor/sharedComponents/checkBoxLineComponent" {
+    import * as React from "react";
+    import { Observable } from "babylonjs/Misc/observable";
+    import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
 declare module "babylonjs-node-editor/components/diagram/texture/texturePropertyTabComponent" {
 declare module "babylonjs-node-editor/components/diagram/texture/texturePropertyTabComponent" {
     import * as React from "react";
     import * as React from "react";
     import { GlobalState } from "babylonjs-node-editor/globalState";
     import { GlobalState } from "babylonjs-node-editor/globalState";
@@ -487,33 +514,6 @@ declare module "babylonjs-node-editor/components/propertyTab/properties/vector3P
         render(): JSX.Element;
         render(): JSX.Element;
     }
     }
 }
 }
-declare module "babylonjs-node-editor/sharedComponents/checkBoxLineComponent" {
-    import * as React from "react";
-    import { Observable } from "babylonjs/Misc/observable";
-    import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
-    export interface ICheckBoxLineComponentProps {
-        label: string;
-        target?: any;
-        propertyName?: string;
-        isSelected?: () => boolean;
-        onSelect?: (value: boolean) => void;
-        onValueChanged?: () => void;
-        onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
-    }
-    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
-        isSelected: boolean;
-    }> {
-        private static _UniqueIdSeed;
-        private _uniqueId;
-        private _localChange;
-        constructor(props: ICheckBoxLineComponentProps);
-        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
-            isSelected: boolean;
-        }): boolean;
-        onChange(): void;
-        render(): JSX.Element;
-    }
-}
 declare module "babylonjs-node-editor/sharedComponents/optionsLineComponent" {
 declare module "babylonjs-node-editor/sharedComponents/optionsLineComponent" {
     import * as React from "react";
     import * as React from "react";
     import { Observable } from "babylonjs/Misc/observable";
     import { Observable } from "babylonjs/Misc/observable";
@@ -1062,6 +1062,30 @@ declare module NODEEDITOR {
     }
     }
 }
 }
 declare module NODEEDITOR {
 declare module NODEEDITOR {
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     interface ITexturePropertyTabComponentProps {
     interface ITexturePropertyTabComponentProps {
         globalState: GlobalState;
         globalState: GlobalState;
         node: TextureNodeModel;
         node: TextureNodeModel;
@@ -1267,30 +1291,6 @@ declare module NODEEDITOR {
     }
     }
 }
 }
 declare module NODEEDITOR {
 declare module NODEEDITOR {
-    export interface ICheckBoxLineComponentProps {
-        label: string;
-        target?: any;
-        propertyName?: string;
-        isSelected?: () => boolean;
-        onSelect?: (value: boolean) => void;
-        onValueChanged?: () => void;
-        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
-    }
-    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
-        isSelected: boolean;
-    }> {
-        private static _UniqueIdSeed;
-        private _uniqueId;
-        private _localChange;
-        constructor(props: ICheckBoxLineComponentProps);
-        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
-            isSelected: boolean;
-        }): boolean;
-        onChange(): void;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     class ListLineOption {
     class ListLineOption {
         label: string;
         label: string;
         value: number | string;
         value: number | string;

+ 212 - 4
dist/preview release/viewer/babylon.module.d.ts

@@ -12436,6 +12436,7 @@ declare module "babylonjs/Materials/shaderMaterial" {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -12444,6 +12445,7 @@ declare module "babylonjs/Materials/shaderMaterial" {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -12540,6 +12542,13 @@ declare module "babylonjs/Materials/shaderMaterial" {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -12595,6 +12604,13 @@ declare module "babylonjs/Materials/shaderMaterial" {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -35258,7 +35274,7 @@ declare module "babylonjs/Audio/sound" {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -52331,6 +52347,7 @@ declare module "babylonjs/Misc/basis" {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -52785,7 +52802,9 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes"
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
 declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
@@ -53036,6 +53055,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector4TransformBlock" {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -53527,6 +53550,8 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -53565,6 +53590,10 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -53696,6 +53725,10 @@ declare module "babylonjs/Materials/Node/Blocks/Vertex/bonesBlock" {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -53882,6 +53915,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/rgbaMergerBlock" {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -53915,6 +53952,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/rgbMergerBlock" {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54017,6 +54058,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/textureBlock" {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -54052,6 +54097,10 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock" {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -54062,6 +54111,30 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock" {
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
+declare module "babylonjs/Materials/Node/Blocks/Fragment/lightBlock" {
+    import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
+    import { NodeMaterialBuildState } from "babylonjs/Materials/Node/nodeMaterialBuildState";
+    import { NodeMaterialConnectionPoint } from "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint";
+    /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
 declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
 declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
     export * from "babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock";
@@ -54071,6 +54144,7 @@ declare module "babylonjs/Materials/Node/Blocks/Fragment/index" {
     export * from "babylonjs/Materials/Node/Blocks/Fragment/rgbSplitterBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/rgbSplitterBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/textureBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/textureBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock";
     export * from "babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock";
+    export * from "babylonjs/Materials/Node/Blocks/Fragment/lightBlock";
 }
 }
 declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
 declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
     import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
     import { NodeMaterialBlock } from "babylonjs/Materials/Node/nodeMaterialBlock";
@@ -54114,6 +54188,10 @@ declare module "babylonjs/Materials/Node/Blocks/Dual/fogBlock" {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -54149,6 +54227,10 @@ declare module "babylonjs/Materials/Node/Blocks/multiplyBlock" {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54178,6 +54260,10 @@ declare module "babylonjs/Materials/Node/Blocks/addBlock" {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54207,6 +54293,10 @@ declare module "babylonjs/Materials/Node/Blocks/clampBlock" {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54236,6 +54326,10 @@ declare module "babylonjs/Materials/Node/Blocks/scaleBlock" {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -54269,6 +54363,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector2TransformBlock" {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -54302,6 +54400,10 @@ declare module "babylonjs/Materials/Node/Blocks/vector3TransformBlock" {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -54331,6 +54433,10 @@ declare module "babylonjs/Materials/Node/Blocks/matrixMultiplicationBlock" {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -74904,6 +75010,7 @@ declare module BABYLON {
         private _colors3;
         private _colors3;
         private _colors3Arrays;
         private _colors3Arrays;
         private _colors4;
         private _colors4;
+        private _colors4Arrays;
         private _vectors2;
         private _vectors2;
         private _vectors3;
         private _vectors3;
         private _vectors4;
         private _vectors4;
@@ -74912,6 +75019,7 @@ declare module BABYLON {
         private _matrices2x2;
         private _matrices2x2;
         private _vectors2Arrays;
         private _vectors2Arrays;
         private _vectors3Arrays;
         private _vectors3Arrays;
+        private _vectors4Arrays;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _cachedWorldViewProjectionMatrix;
         private _renderId;
         private _renderId;
@@ -75008,6 +75116,13 @@ declare module BABYLON {
          */
          */
         setColor4(name: string, value: Color4): ShaderMaterial;
         setColor4(name: string, value: Color4): ShaderMaterial;
         /**
         /**
+         * Set a vec4 array in the shader from a Color4 array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setColor4Array(name: string, value: Color4[]): ShaderMaterial;
+        /**
          * Set a vec2 in the shader from a Vector2.
          * Set a vec2 in the shader from a Vector2.
          * @param name Define the name of the uniform as defined in the shader
          * @param name Define the name of the uniform as defined in the shader
          * @param value Define the value to give to the uniform
          * @param value Define the value to give to the uniform
@@ -75063,6 +75178,13 @@ declare module BABYLON {
          * @return the material itself allowing "fluent" like uniform updates
          * @return the material itself allowing "fluent" like uniform updates
          */
          */
         setArray3(name: string, value: number[]): ShaderMaterial;
         setArray3(name: string, value: number[]): ShaderMaterial;
+        /**
+         * Set a vec4 array in the shader from a number array.
+         * @param name Define the name of the uniform as defined in the shader
+         * @param value Define the value to give to the uniform
+         * @return the material itself allowing "fluent" like uniform updates
+         */
+        setArray4(name: string, value: number[]): ShaderMaterial;
         private _checkCache;
         private _checkCache;
         /**
         /**
          * Specifies that the submesh is ready to be used
          * Specifies that the submesh is ready to be used
@@ -97042,7 +97164,7 @@ declare module BABYLON {
         /**
         /**
          * Sets a dedicated volume for this sounds
          * Sets a dedicated volume for this sounds
          * @param newVolume Define the new volume of the sound
          * @param newVolume Define the new volume of the sound
-         * @param time Define in how long the sound should be at this value
+         * @param time Define time for gradual change to new volume
          */
          */
         setVolume(newVolume: number, time?: number): void;
         setVolume(newVolume: number, time?: number): void;
         /**
         /**
@@ -112826,6 +112948,7 @@ declare module BABYLON {
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         static GetInternalFormatFromBasisFormat(basisFormat: number): number;
         private static _WorkerPromise;
         private static _WorkerPromise;
         private static _Worker;
         private static _Worker;
+        private static _actionId;
         private static _CreateWorkerAsync;
         private static _CreateWorkerAsync;
         /**
         /**
          * Transcodes a loaded image file to compressed pixel data
          * Transcodes a loaded image file to compressed pixel data
@@ -113217,7 +113340,9 @@ declare module BABYLON {
         /** Detect type based on connection */
         /** Detect type based on connection */
         AutoDetect = 1024,
         AutoDetect = 1024,
         /** Output type that will be defined by input type */
         /** Output type that will be defined by input type */
-        BasedOnInput = 2048
+        BasedOnInput = 2048,
+        /** Light */
+        Light = 4096
     }
     }
 }
 }
 declare module BABYLON {
 declare module BABYLON {
@@ -113458,6 +113583,10 @@ declare module BABYLON {
          */
          */
         readonly vector: NodeMaterialConnectionPoint;
         readonly vector: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the matrix transform input
          * Gets the matrix transform input
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
@@ -113913,6 +114042,8 @@ declare module BABYLON {
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         _typeConnectionSource: Nullable<NodeMaterialConnectionPoint>;
         /** @hidden */
         /** @hidden */
         _needToEmitVarying: boolean;
         _needToEmitVarying: boolean;
+        /** @hidden */
+        _forceUniformInVertexShaderOnly: boolean;
         private _type;
         private _type;
         /**
         /**
          * Gets or sets the connection point type (default is float)
          * Gets or sets the connection point type (default is float)
@@ -113951,6 +114082,10 @@ declare module BABYLON {
          */
          */
         associatedVariableName: string;
         associatedVariableName: string;
         /**
         /**
+         * Gets a boolean indicating that this connection point not defined yet
+         */
+        readonly isUndefined: boolean;
+        /**
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * Gets or sets a boolean indicating that this connection point is coming from an uniform.
          * In this case the connection point name must be the name of the uniform to use.
          * In this case the connection point name must be the name of the uniform to use.
          * Can only be set on inputs
          * Can only be set on inputs
@@ -114075,6 +114210,10 @@ declare module BABYLON {
          * Gets the world input component
          * Gets the world input component
          */
          */
         readonly world: NodeMaterialConnectionPoint;
         readonly world: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         provideFallbacks(mesh: AbstractMesh, fallbacks: EffectFallbacks): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -114237,6 +114376,10 @@ declare module BABYLON {
          * Gets the R input component
          * Gets the R input component
          */
          */
         readonly a: NodeMaterialConnectionPoint;
         readonly a: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114267,6 +114410,10 @@ declare module BABYLON {
          * Gets the B component input
          * Gets the B component input
          */
          */
         readonly b: NodeMaterialConnectionPoint;
         readonly b: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114358,6 +114505,10 @@ declare module BABYLON {
          * Gets the texture transform input component
          * Gets the texture transform input component
          */
          */
         readonly textureTransform: NodeMaterialConnectionPoint;
         readonly textureTransform: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         initialize(state: NodeMaterialBuildState): void;
         initialize(state: NodeMaterialBuildState): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
@@ -114386,6 +114537,10 @@ declare module BABYLON {
          */
          */
         readonly color: NodeMaterialConnectionPoint;
         readonly color: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Initialize the block and prepare the context for build
          * Initialize the block and prepare the context for build
          * @param state defines the state that will be used for the build
          * @param state defines the state that will be used for the build
          */
          */
@@ -114398,6 +114553,27 @@ declare module BABYLON {
 }
 }
 declare module BABYLON {
 declare module BABYLON {
     /**
     /**
+     * Block used to add light in the fragment shader
+     */
+    export class LightBlock extends NodeMaterialBlock {
+        /**
+         * Create a new LightBlock
+         * @param name defines the block name
+         */
+        constructor(name: string);
+        /**
+        * Gets the light input component
+        */
+        readonly light: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        protected _buildBlock(state: NodeMaterialBuildState): this;
+    }
+}
+declare module BABYLON {
+    /**
      * Block used to add support for scene fog
      * Block used to add support for scene fog
      */
      */
     export class FogBlock extends NodeMaterialBlock {
     export class FogBlock extends NodeMaterialBlock {
@@ -114431,6 +114607,10 @@ declare module BABYLON {
          * Gets the for parameter input component
          * Gets the for parameter input component
          */
          */
         readonly fogParameters: NodeMaterialConnectionPoint;
         readonly fogParameters: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         autoConfigure(): void;
         autoConfigure(): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
         bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
@@ -114460,6 +114640,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114486,6 +114670,10 @@ declare module BABYLON {
          * Gets the right operand input component
          * Gets the right operand input component
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114512,6 +114700,10 @@ declare module BABYLON {
          * Gets the value input component
          * Gets the value input component
          */
          */
         readonly value: NodeMaterialConnectionPoint;
         readonly value: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114538,6 +114730,10 @@ declare module BABYLON {
          * Gets the scale operand input component
          * Gets the scale operand input component
          */
          */
         readonly scale: NodeMaterialConnectionPoint;
         readonly scale: NodeMaterialConnectionPoint;
+        /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
         protected _buildBlock(state: NodeMaterialBuildState): this;
         protected _buildBlock(state: NodeMaterialBuildState): this;
     }
     }
 }
 }
@@ -114568,6 +114764,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -114598,6 +114798,10 @@ declare module BABYLON {
          */
          */
         readonly transform: NodeMaterialConnectionPoint;
         readonly transform: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */
@@ -114624,6 +114828,10 @@ declare module BABYLON {
          */
          */
         readonly right: NodeMaterialConnectionPoint;
         readonly right: NodeMaterialConnectionPoint;
         /**
         /**
+         * Gets the output component
+         */
+        readonly output: NodeMaterialConnectionPoint;
+        /**
          * Gets the current class name
          * Gets the current class name
          * @returns the class name
          * @returns the class name
          */
          */

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 30 - 26
dist/preview release/viewer/babylon.viewer.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/preview release/viewer/babylon.viewer.max.js


+ 4 - 4
dist/preview release/what's new.md

@@ -1,10 +1,10 @@
 # 4.1.0
 # 4.1.0
 
 
 ## Major updates
 ## Major updates
-- WIP: Node Material (NEED DOC AND SAMPLES) ([Deltakosh](https://github.com/deltakosh/))
-- WIP: Node material editor (NEED DOC AND VIDEOS) ([Deltakosh](https://github.com/deltakosh/)/[TrevorDev](https://github.com/TrevorDev))
-- WIP: WebGPU support (NEED DOC AND SAMPLES) ([Sebavan](https://github.com/sebavan/)
-- WIP: .basis texture file format support (mipmaps, web worker, webGL 1) [Demo](https://www.babylonjs-playground.com/#4RN0VF) ([TrevorDev](https://github.com/TrevorDev))
+- WIP: Node Material (NEED DOC OR SAMPLES) ([Deltakosh](https://github.com/deltakosh/))
+- WIP: Node material editor (NEED OR AND VIDEOS) ([Deltakosh](https://github.com/deltakosh/)/[TrevorDev](https://github.com/TrevorDev))
+- WIP: WebGPU support (NEED DOC OR SAMPLES) ([Sebavan](https://github.com/sebavan/)
+- WIP: .basis texture file format support [Doc](https://doc.babylonjs.com/resources/multi-platform_compressed_textures#basis-file-format) ([TrevorDev](https://github.com/TrevorDev))
 
 
 ## Optimizations
 ## Optimizations
 
 

+ 1 - 0
nodeEditor/src/components/diagram/input/inputNodePropertyComponent.tsx

@@ -124,6 +124,7 @@ export class InputPropertyTabComponentProps extends React.Component<IInputProper
                     <CheckBoxLineComponent label="Is mesh attribute" onSelect={value => {
                     <CheckBoxLineComponent label="Is mesh attribute" onSelect={value => {
                         if (!value) {
                         if (!value) {
                             connection.isUniform = true;
                             connection.isUniform = true;
+                            this.setDefaultValue();
                         } else {
                         } else {
                             connection.isAttribute = true;
                             connection.isAttribute = true;
                         }
                         }

+ 2 - 0
nodeEditor/src/components/diagram/texture/texturePropertyTabComponent.tsx

@@ -9,6 +9,7 @@ import { TextureNodeModel } from './textureNodeModel';
 import { TextLineComponent } from '../../../sharedComponents/textLineComponent';
 import { TextLineComponent } from '../../../sharedComponents/textLineComponent';
 import { LineContainerComponent } from '../../../sharedComponents/lineContainerComponent';
 import { LineContainerComponent } from '../../../sharedComponents/lineContainerComponent';
 import { TextInputLineComponent } from '../../../sharedComponents/textInputLineComponent';
 import { TextInputLineComponent } from '../../../sharedComponents/textInputLineComponent';
+import { CheckBoxLineComponent } from '../../../sharedComponents/checkBoxLineComponent';
 
 
 interface ITexturePropertyTabComponentProps {
 interface ITexturePropertyTabComponentProps {
     globalState: GlobalState;
     globalState: GlobalState;
@@ -63,6 +64,7 @@ export class TexturePropertyTabComponent extends React.Component<ITexturePropert
                 </LineContainerComponent>
                 </LineContainerComponent>
 
 
                 <LineContainerComponent title="PROPERTIES">
                 <LineContainerComponent title="PROPERTIES">
+                    <CheckBoxLineComponent label="Auto select UV" propertyName="autoSelectUV" target={this.props.node.block!} />
                     <FileButtonLineComponent label="Replace texture" onClick={(file) => this.replaceTexture(file)} accept=".jpg, .png, .tga, .dds, .env" />
                     <FileButtonLineComponent label="Replace texture" onClick={(file) => this.replaceTexture(file)} accept=".jpg, .png, .tga, .dds, .env" />
                 </LineContainerComponent>
                 </LineContainerComponent>
             </div>
             </div>

+ 0 - 6
nodeEditor/src/graphEditor.tsx

@@ -200,12 +200,6 @@ export class GraphEditor extends React.Component<IGraphEditorProps> {
                     var link = DefaultPortModel.SortInputOutput(e.link.sourcePort as DefaultPortModel, e.link.targetPort as DefaultPortModel);
                     var link = DefaultPortModel.SortInputOutput(e.link.sourcePort as DefaultPortModel, e.link.targetPort as DefaultPortModel);
                     if (link) {
                     if (link) {
                         if (link.input.connection) {
                         if (link.input.connection) {
-                            let targetBlock = link.input.connection.ownerBlock;
-
-                            if (targetBlock.isFinalMerger) {
-                                this.props.globalState.nodeMaterial!.removeOutputNode(targetBlock);
-                            }
-
                             if (link.output.connection) {
                             if (link.output.connection) {
                                 // Disconnect standard nodes
                                 // Disconnect standard nodes
                                 link.output.connection.disconnectFrom(link.input.connection)
                                 link.output.connection.disconnectFrom(link.input.connection)

+ 10 - 3
src/Materials/Node/Blocks/Dual/fogBlock.ts

@@ -78,14 +78,21 @@ export class FogBlock extends NodeMaterialBlock {
         return this._inputs[4];
         return this._inputs[4];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     public autoConfigure() {
     public autoConfigure() {
-        if (!this.view.connectedPoint) {
+        if (this.view.isUndefined) {
             this.view.setAsWellKnownValue(NodeMaterialWellKnownValues.View);
             this.view.setAsWellKnownValue(NodeMaterialWellKnownValues.View);
         }
         }
-        if (!this.fogColor.connectedPoint) {
+        if (this.fogColor.isUndefined) {
             this.fogColor.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
             this.fogColor.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
         }
         }
-        if (!this.fogParameters.connectedPoint) {
+        if (this.fogParameters.isUndefined) {
             this.fogParameters.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
             this.fogParameters.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
         }
         }
         this._outputs[0].isVarying = true;
         this._outputs[0].isVarying = true;

+ 7 - 0
src/Materials/Node/Blocks/Fragment/imageProcessingBlock.ts

@@ -39,6 +39,13 @@ export class ImageProcessingBlock extends NodeMaterialBlock {
     }
     }
 
 
     /**
     /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    /**
      * Initialize the block and prepare the context for build
      * Initialize the block and prepare the context for build
      * @param state defines the state that will be used for the build
      * @param state defines the state that will be used for the build
      */
      */

+ 2 - 1
src/Materials/Node/Blocks/Fragment/index.ts

@@ -6,4 +6,5 @@ export * from "./rgbMergerBlock";
 export * from "./rgbaSplitterBlock";
 export * from "./rgbaSplitterBlock";
 export * from "./rgbSplitterBlock";
 export * from "./rgbSplitterBlock";
 export * from "./textureBlock";
 export * from "./textureBlock";
-export * from "./imageProcessingBlock";
+export * from "./imageProcessingBlock";
+export * from "./lightBlock";

+ 45 - 0
src/Materials/Node/Blocks/Fragment/lightBlock.ts

@@ -0,0 +1,45 @@
+import { NodeMaterialBlock } from '../../nodeMaterialBlock';
+import { NodeMaterialBlockTargets } from '../../nodeMaterialBlockTargets';
+import { NodeMaterialBlockConnectionPointTypes } from '../../nodeMaterialBlockConnectionPointTypes';
+import { NodeMaterialBuildState } from '../../nodeMaterialBuildState';
+import { NodeMaterialConnectionPoint } from '../../nodeMaterialBlockConnectionPoint';
+
+/**
+ * Block used to add light in the fragment shader
+ */
+export class LightBlock extends NodeMaterialBlock {
+    /**
+     * Create a new LightBlock
+     * @param name defines the block name
+     */
+    public constructor(name: string) {
+        super(name, NodeMaterialBlockTargets.Fragment);
+
+        this.registerInput("light", NodeMaterialBlockConnectionPointTypes.Light);
+        this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Float);
+    }
+
+    /**
+    * Gets the light input component
+    */
+    public get light(): NodeMaterialConnectionPoint {
+        return this._inputs[0];
+    }
+
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    protected _buildBlock(state: NodeMaterialBuildState) {
+        super._buildBlock(state);
+
+        state._emitFunctionFromInclude("lightFragmentDeclaration", `//${this.name}`, {
+            replaceStrings: [{ search: /{X}/g, replace: "1" }]
+        });
+
+        return this;
+    }
+}

+ 7 - 0
src/Materials/Node/Blocks/Fragment/rgbMergerBlock.ts

@@ -51,6 +51,13 @@ export class RGBMergerBlock extends NodeMaterialBlock {
         return this._inputs[2];
         return this._inputs[2];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 7 - 0
src/Materials/Node/Blocks/Fragment/rgbaMergerBlock.ts

@@ -67,6 +67,13 @@ export class RGBAMergerBlock extends NodeMaterialBlock {
         return this._inputs[4];
         return this._inputs[4];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 13 - 1
src/Materials/Node/Blocks/Fragment/textureBlock.ts

@@ -41,6 +41,7 @@ export class TextureBlock extends NodeMaterialBlock {
 
 
         // Setup
         // Setup
         this._inputs[0]._needToEmitVarying = false;
         this._inputs[0]._needToEmitVarying = false;
+        this._inputs[0]._forceUniformInVertexShaderOnly = true;
     }
     }
 
 
     /**
     /**
@@ -86,11 +87,22 @@ export class TextureBlock extends NodeMaterialBlock {
         return this._inputs[4];
         return this._inputs[4];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     public autoConfigure() {
     public autoConfigure() {
-        if (!this.uv.connectedPoint) {
+        if (this.uv.isUndefined) {
             this.uv.setAsAttribute();
             this.uv.setAsAttribute();
             this.uv.connectTo(this.transformedUV);
             this.uv.connectTo(this.transformedUV);
         }
         }
+
+        if (this.transformedUV.isUndefined) {
+            this.uv.connectTo(this.transformedUV);
+        }
     }
     }
 
 
     public initialize(state: NodeMaterialBuildState) {
     public initialize(state: NodeMaterialBuildState) {

+ 12 - 5
src/Materials/Node/Blocks/Vertex/bonesBlock.ts

@@ -84,20 +84,27 @@ export class BonesBlock extends NodeMaterialBlock {
         return this._inputs[4];
         return this._inputs[4];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     public autoConfigure() {
     public autoConfigure() {
-        if (!this.matricesIndices.connectedPoint) {
+        if (this.matricesIndices.isUndefined) {
             this.matricesIndices.setAsAttribute();
             this.matricesIndices.setAsAttribute();
         }
         }
-        if (!this.matricesWeights.connectedPoint) {
+        if (this.matricesWeights.isUndefined) {
             this.matricesWeights.setAsAttribute();
             this.matricesWeights.setAsAttribute();
         }
         }
-        if (!this.matricesIndicesExtra.connectedPoint) {
+        if (this.matricesIndicesExtra.isUndefined) {
             this.matricesIndicesExtra.setAsAttribute();
             this.matricesIndicesExtra.setAsAttribute();
         }
         }
-        if (!this.matricesWeightsExtra.connectedPoint) {
+        if (this.matricesWeightsExtra.isUndefined) {
             this.matricesWeightsExtra.setAsAttribute();
             this.matricesWeightsExtra.setAsAttribute();
         }
         }
-        if (!this.world.connectedPoint) {
+        if (this.world.isUndefined) {
             this.world.setAsWellKnownValue(NodeMaterialWellKnownValues.World);
             this.world.setAsWellKnownValue(NodeMaterialWellKnownValues.World);
         }
         }
     }
     }

+ 3 - 3
src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts

@@ -87,14 +87,14 @@ export class MorphTargetsBlock extends NodeMaterialBlock {
     }
     }
 
 
     public autoConfigure() {
     public autoConfigure() {
-        if (!this.position.connectedPoint) {
+        if (this.position.isUndefined) {
             this.position.setAsAttribute();
             this.position.setAsAttribute();
         }
         }
-        if (!this.normal.connectedPoint) {
+        if (this.normal.isUndefined) {
             this.normal.setAsAttribute();
             this.normal.setAsAttribute();
             this.normal.define = "NORMAL";
             this.normal.define = "NORMAL";
         }
         }
-        if (!this.tangent.connectedPoint) {
+        if (this.tangent.isUndefined) {
             this.tangent.setAsAttribute();
             this.tangent.setAsAttribute();
             this.tangent.define = "TANGENT";
             this.tangent.define = "TANGENT";
         }
         }

+ 7 - 0
src/Materials/Node/Blocks/addBlock.ts

@@ -42,6 +42,13 @@ export class AddBlock extends NodeMaterialBlock {
         return this._inputs[1];
         return this._inputs[1];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 7 - 0
src/Materials/Node/Blocks/clampBlock.ts

@@ -38,6 +38,13 @@ export class ClampBlock extends NodeMaterialBlock {
         return this._inputs[0];
         return this._inputs[0];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 7 - 0
src/Materials/Node/Blocks/matrixMultiplicationBlock.ts

@@ -35,6 +35,13 @@ export class MatrixMultiplicationBlock extends NodeMaterialBlock {
     }
     }
 
 
     /**
     /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    /**
      * Gets the current class name
      * Gets the current class name
      * @returns the class name
      * @returns the class name
      */
      */

+ 7 - 0
src/Materials/Node/Blocks/multiplyBlock.ts

@@ -42,6 +42,13 @@ export class MultiplyBlock extends NodeMaterialBlock {
         return this._inputs[1];
         return this._inputs[1];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 7 - 0
src/Materials/Node/Blocks/scaleBlock.ts

@@ -44,6 +44,13 @@ export class ScaleBlock extends NodeMaterialBlock {
         return this._inputs[1];
         return this._inputs[1];
     }
     }
 
 
+    /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
     protected _buildBlock(state: NodeMaterialBuildState) {
     protected _buildBlock(state: NodeMaterialBuildState) {
         super._buildBlock(state);
         super._buildBlock(state);
 
 

+ 7 - 0
src/Materials/Node/Blocks/vector2TransformBlock.ts

@@ -45,6 +45,13 @@ export class Vector2TransformBlock extends NodeMaterialBlock {
     }
     }
 
 
     /**
     /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    /**
      * Gets the current class name
      * Gets the current class name
      * @returns the class name
      * @returns the class name
      */
      */

+ 7 - 0
src/Materials/Node/Blocks/vector3TransformBlock.ts

@@ -40,6 +40,13 @@ export class Vector3TransformBlock extends NodeMaterialBlock {
     }
     }
 
 
     /**
     /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    /**
      * Gets the current class name
      * Gets the current class name
      * @returns the class name
      * @returns the class name
      */
      */

+ 7 - 0
src/Materials/Node/Blocks/vector4TransformBlock.ts

@@ -41,6 +41,13 @@ export class Vector4TransformBlock extends NodeMaterialBlock {
     }
     }
 
 
     /**
     /**
+     * Gets the output component
+     */
+    public get output(): NodeMaterialConnectionPoint {
+        return this._outputs[0];
+    }
+
+    /**
      * Gets the matrix transform input
      * Gets the matrix transform input
      */
      */
     public get transform(): NodeMaterialConnectionPoint {
     public get transform(): NodeMaterialConnectionPoint {

+ 33 - 2
src/Materials/Node/nodeMaterialBlockConnectionPoint.ts

@@ -32,13 +32,33 @@ export class NodeMaterialConnectionPoint {
     /** @hidden */
     /** @hidden */
     public _needToEmitVarying = true;
     public _needToEmitVarying = true;
 
 
+    /** @hidden */
+    public _forceUniformInVertexShaderOnly = false;
+
     private _type = NodeMaterialBlockConnectionPointTypes.Float;
     private _type = NodeMaterialBlockConnectionPointTypes.Float;
     /**
     /**
      * Gets or sets the connection point type (default is float)
      * Gets or sets the connection point type (default is float)
      */
      */
     public get type(): NodeMaterialBlockConnectionPointTypes {
     public get type(): NodeMaterialBlockConnectionPointTypes {
-        if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect && this._connectedPoint) {
-            return this._connectedPoint.type;
+        if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect) {
+            if (this._connectedPoint) {
+                return this._connectedPoint.type;
+            }
+
+            if (this.isUniform && this.value != null) {
+                switch (this.value.getClassName()) {
+                    case "Vector2":
+                        return NodeMaterialBlockConnectionPointTypes.Vector2;
+                    case "Vector3":
+                        return NodeMaterialBlockConnectionPointTypes.Vector3;
+                    case "Vector4":
+                        return NodeMaterialBlockConnectionPointTypes.Vector4;
+                    case "Color3":
+                        return NodeMaterialBlockConnectionPointTypes.Color3;
+                    case "Color4":
+                        return NodeMaterialBlockConnectionPointTypes.Color4;
+                }
+            }
         }
         }
 
 
         if (this._type === NodeMaterialBlockConnectionPointTypes.BasedOnInput && this._typeConnectionSource) {
         if (this._type === NodeMaterialBlockConnectionPointTypes.BasedOnInput && this._typeConnectionSource) {
@@ -117,6 +137,13 @@ export class NodeMaterialConnectionPoint {
     }
     }
 
 
     /**
     /**
+     * Gets a boolean indicating that this connection point not defined yet
+     */
+    public get isUndefined(): boolean {
+        return this._mode === NodeMaterialBlockConnectionPointMode.Undefined;
+    }
+
+    /**
      * Gets or sets a boolean indicating that this connection point is coming from an uniform.
      * Gets or sets a boolean indicating that this connection point is coming from an uniform.
      * In this case the connection point name must be the name of the uniform to use.
      * In this case the connection point name must be the name of the uniform to use.
      * Can only be set on inputs
      * Can only be set on inputs
@@ -127,6 +154,7 @@ export class NodeMaterialConnectionPoint {
 
 
     public set isUniform(value: boolean) {
     public set isUniform(value: boolean) {
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Uniform : NodeMaterialBlockConnectionPointMode.Undefined;
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Uniform : NodeMaterialBlockConnectionPointMode.Undefined;
+        this.associatedVariableName = "";
     }
     }
 
 
     /**
     /**
@@ -140,6 +168,7 @@ export class NodeMaterialConnectionPoint {
 
 
     public set isAttribute(value: boolean) {
     public set isAttribute(value: boolean) {
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Attribute : NodeMaterialBlockConnectionPointMode.Undefined;
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Attribute : NodeMaterialBlockConnectionPointMode.Undefined;
+        this.associatedVariableName = "";
     }
     }
 
 
     /**
     /**
@@ -152,6 +181,7 @@ export class NodeMaterialConnectionPoint {
 
 
     public set isVarying(value: boolean) {
     public set isVarying(value: boolean) {
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Varying : NodeMaterialBlockConnectionPointMode.Undefined;
         this._mode = value ? NodeMaterialBlockConnectionPointMode.Varying : NodeMaterialBlockConnectionPointMode.Undefined;
+        this.associatedVariableName = "";
     }
     }
 
 
     /** Get the other side of the connection (if any) */
     /** Get the other side of the connection (if any) */
@@ -239,6 +269,7 @@ export class NodeMaterialConnectionPoint {
 
 
     public set wellKnownValue(value: Nullable<NodeMaterialWellKnownValues>) {
     public set wellKnownValue(value: Nullable<NodeMaterialWellKnownValues>) {
         this._mode = NodeMaterialBlockConnectionPointMode.Uniform;
         this._mode = NodeMaterialBlockConnectionPointMode.Uniform;
+        this.associatedVariableName = "";
         this._wellKnownValue = value;
         this._wellKnownValue = value;
     }
     }
 
 

+ 3 - 1
src/Materials/Node/nodeMaterialBlockConnectionPointTypes.ts

@@ -35,5 +35,7 @@ export enum NodeMaterialBlockConnectionPointTypes {
     /** Detect type based on connection */
     /** Detect type based on connection */
     AutoDetect = 1024,
     AutoDetect = 1024,
     /** Output type that will be defined by input type */
     /** Output type that will be defined by input type */
-    BasedOnInput = 2048
+    BasedOnInput = 2048,
+    /** Light */
+    Light = 4096
 }
 }

+ 15 - 3
src/Materials/Node/nodeMaterialBuildState.ts

@@ -302,6 +302,12 @@ export class NodeMaterialBuildState {
     public _emitUniformOrAttributes(point: NodeMaterialConnectionPoint, define?: string) {
     public _emitUniformOrAttributes(point: NodeMaterialConnectionPoint, define?: string) {
         define = define || point.define;
         define = define || point.define;
 
 
+        // Lights
+        if (point.type === NodeMaterialBlockConnectionPointTypes.Light) {
+            // Do nothing
+            return;
+        }
+
         // Samplers
         // Samplers
         if (point.type === NodeMaterialBlockConnectionPointTypes.Texture) {
         if (point.type === NodeMaterialBlockConnectionPointTypes.Texture) {
             point.name = this._getFreeVariableName(point.name);
             point.name = this._getFreeVariableName(point.name);
@@ -330,8 +336,14 @@ export class NodeMaterialBuildState {
         // Uniforms
         // Uniforms
         if (point.isUniform) {
         if (point.isUniform) {
             if (!point.associatedVariableName) {
             if (!point.associatedVariableName) {
-                point.associatedVariableName = this._getFreeVariableName(point.name);
+                point.associatedVariableName = this._getFreeVariableName("u_" + point.name);
+            }
+
+            if (point._forceUniformInVertexShaderOnly && this._vertexState) { // Uniform for fragment need to be carried over by varyings
+                this._vertexState._emitUniformOrAttributes(point);
+                return;
             }
             }
+
             if (this.uniforms.indexOf(point.associatedVariableName) !== -1) {
             if (this.uniforms.indexOf(point.associatedVariableName) !== -1) {
                 return;
                 return;
             }
             }
@@ -371,8 +383,8 @@ export class NodeMaterialBuildState {
                 this._vertexState._emitUniformOrAttributes(point);
                 this._vertexState._emitUniformOrAttributes(point);
 
 
                 if (point._needToEmitVarying) {
                 if (point._needToEmitVarying) {
-                    this._vertexState._emitVaryings(point, undefined, true, true, "v" + point.associatedVariableName);
-                    point.associatedVariableName = "v" + point.associatedVariableName;
+                    this._vertexState._emitVaryings(point, undefined, true, true, "v_" + point.associatedVariableName);
+                    point.associatedVariableName = "v_" + point.associatedVariableName;
                 }
                 }
                 return;
                 return;
             }
             }

+ 5 - 0
src/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts

@@ -134,6 +134,11 @@ export class CubeMapToSphericalPolynomialTools {
                     var g = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 1];
                     var g = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 1];
                     var b = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 2];
                     var b = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 2];
 
 
+                    // Prevent NaN harmonics with extreme HDRI data.
+                    if (isNaN(r)) { r = 0; }
+                    if (isNaN(g)) { g = 0; }
+                    if (isNaN(b)) { b = 0; }
+
                     // Handle Integer types.
                     // Handle Integer types.
                     if (cubeInfo.type === Constants.TEXTURETYPE_UNSIGNED_INT) {
                     if (cubeInfo.type === Constants.TEXTURETYPE_UNSIGNED_INT) {
                         r /= 255;
                         r /= 255;