API

Class NodeMaterial

Class used to create a node based material built by assembling shader blocks

Hierarchy

  • NodeMaterialBase
    • NodeMaterial
Index
_fragmentOutputNodes _imageProcessingConfiguration _imageProcessingObserver _vertexOutputNodes allowShaderHotSwapping animations attachedBlocks checkReadyOnEveryCall checkReadyOnlyOnce clipPlane clipPlane2 clipPlane3 clipPlane4 clipPlane5 clipPlane6 comment customShaderNameResolve depthFunction disableColorWrite disableDepthWrite doNotSerialize editorData forceAlphaBlending forceDepthWrite getRenderTargetTextures id ignoreAlpha inspectableCustomProperties maxSimultaneousLights metadata name onBuildErrorObservable onBuildObservable onCompiled onDisposeObservable onError pluginManager? pointSize reservedDataStore separateCullingPass shadowDepthWrapper sideOrientation snippetId state stencil textureRepetitionHexTilingParams uniqueId zOffset zOffsetUnits AllDirtyFlag AllowSerializationOfRenderTargetTextures AttributesDirtyFlag ClockWiseSideOrientation CounterClockWiseSideOrientation DefaultShaderLanguage EditorURL ForceVertexOutputInvariant FresnelDirtyFlag IgnoreTexturesAtLoadTime ImageProcessingDirtyFlag LightDirtyFlag LIGHTFALLOFF_GLTF LIGHTFALLOFF_PHYSICAL LIGHTFALLOFF_STANDARD LineListDrawMode LineLoopDrawMode LineStripDrawMode MATERIAL_ALPHABLEND MATERIAL_ALPHATEST MATERIAL_ALPHATESTANDBLEND MATERIAL_NORMALBLENDMETHOD_RNM MATERIAL_NORMALBLENDMETHOD_WHITEOUT MATERIAL_OPAQUE MiscDirtyFlag OnEventObservable PointFillMode PointListDrawMode PrePassDirtyFlag SnippetUrl TextureDirtyFlag TriangleFanDrawMode TriangleFillMode TriangleStripDrawMode UseNativeShaderLanguageOfEngine WireFrameFillMode
_fragmentOutputNodes: NodeMaterialBlock[] = ...

Gets or sets the root nodes of the material fragment (pixel) shader

_imageProcessingConfiguration: ImageProcessingConfiguration

Default configuration related to image processing available in the standard Material.

_imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>

Keep track of the image processing observer to allow dispose and replace.

_vertexOutputNodes: NodeMaterialBlock[] = ...

Gets or sets the root nodes of the material vertex shader

allowShaderHotSwapping: boolean = true

Gets or sets a boolean indicating that the material is allowed (if supported) to do shader hot swapping. This means that the material can keep using a previous shader while a new one is being compiled. This is mostly used when shader parallel compilation is supported (true by default)

animations: Nullable<Animation[]> = null

Stores the animations for the material

attachedBlocks: NodeMaterialBlock[] = []

Gets an array of blocks that needs to be serialized even if they are not yet connected

checkReadyOnEveryCall: boolean = false

Specifies if the ready state should be checked on each call

checkReadyOnlyOnce: boolean = false

Specifies if the ready state should be checked once

clipPlane: Nullable<Plane>

Gets or sets the active clipplane 1

clipPlane2: Nullable<Plane>

Gets or sets the active clipplane 2

clipPlane3: Nullable<Plane>

Gets or sets the active clipplane 3

clipPlane4: Nullable<Plane>

Gets or sets the active clipplane 4

clipPlane5: Nullable<Plane>

Gets or sets the active clipplane 5

clipPlane6: Nullable<Plane>

Gets or sets the active clipplane 6

comment: string

A free comment about the material

customShaderNameResolve: (
    shaderName: string,
    uniforms: string[],
    uniformBuffers: string[],
    samplers: string[],
    defines: string[] | MaterialDefines,
    attributes?: string[],
    options?: ICustomShaderNameResolveOptions,
) => string

Custom callback helping to override the default shader used in the material.

depthFunction: number = 0

Specifies the depth function that should be used. 0 means the default engine function

disableColorWrite: boolean = false

Specifies if color writing should be disabled

disableDepthWrite: boolean = false

Specifies if depth writing should be disabled

doNotSerialize: boolean = false

Specifies if the material should be serialized

editorData: any = null

Gets or sets data used by visual editor

forceAlphaBlending: boolean = false

Gets or sets a boolean indicating that alpha blending must be enabled no matter what alpha value or alpha channel of the FragmentBlock are

forceDepthWrite: boolean = false

Specifies if depth writing should be forced

getRenderTargetTextures: Nullable<() => SmartArray<RenderTargetTexture>> = null

Callback triggered to get the render target textures

id: string

The ID of the material

ignoreAlpha: boolean = false

Gets or sets a boolean indicating that alpha value must be ignored (This will turn alpha blending off even if an alpha value is produced by the material)

inspectableCustomProperties: IInspectable[]

List of inspectable custom properties (used by the Inspector)

maxSimultaneousLights: number = 4

Defines the maximum number of lights that can be used in the material

metadata: any = null

Gets or sets user defined metadata

name: string

The name of the material

onBuildErrorObservable: Observable<string> = ...

Observable raised when an error is detected

onBuildObservable: Observable<NodeMaterial> = ...

Observable raised when the material is built

onCompiled: Nullable<(effect: Effect) => void> = null

Callback triggered when the material is compiled

onDisposeObservable: Observable<Material> = ...

An event triggered when the material is disposed

onError: Nullable<(effect: Effect, errors: string) => void> = null

Callback triggered when an error occurs

pluginManager?: MaterialPluginManager

Plugin manager for this material

pointSize: number = 1.0

Stores the size of points

reservedDataStore: any = null

For internal use only. Please do not use.

separateCullingPass: boolean = false

Specifies if there should be a separate pass for culling

shadowDepthWrapper: Nullable<ShadowDepthWrapper> = null

Custom shadow depth material to use for shadow rendering instead of the in-built one

sideOrientation: Nullable<number> = null

Stores the value for side orientation

snippetId: string

Snippet ID if the material was created from the snippet server

state: string = ""

The state of the material

stencil: MaterialStencilState = ...

Gives access to the stencil properties of the material

textureRepetitionHexTilingParams: number[] = ...

Parameters for the hex tiling texture repetition mode (TEXTURE_REPETITION_HEX_TILING). x = rotation strength (0..1, default 1.0) — how much each hex tile is rotated. y = fall-off contrast (0..1, default 0.6) — how much luminance affects blending weight at tile borders. z = exponent (1..20, default 7.0) — controls the sharpness of weight falloff between tiles. w = contrast (0..1, default 0.5) — boost blending contrast via Gain3 (0.5 = neutral, >0.5 = higher contrast).

uniqueId: number

Gets or sets the unique id of the material

zOffset: number = 0

Stores the z offset Factor value

zOffsetUnits: number = 0

Stores the z offset Units value

AllDirtyFlag: 127 = Constants.MATERIAL_AllDirtyFlag

The all dirty flag value

AllowSerializationOfRenderTargetTextures: boolean = false

Gets or sets a boolean indicating that render target textures can be serialized

AttributesDirtyFlag: 8 = Constants.MATERIAL_AttributesDirtyFlag

The dirty attribute flag value

ClockWiseSideOrientation: 0 = Constants.MATERIAL_ClockWiseSideOrientation

Stores the clock-wise side orientation

CounterClockWiseSideOrientation: 1 = Constants.MATERIAL_CounterClockWiseSideOrientation

Stores the counter clock-wise side orientation

DefaultShaderLanguage: ShaderLanguage = ShaderLanguage.GLSL

Defines default shader language when no option is defined

EditorURL: string = ...

Define the Url to load node editor script

ForceVertexOutputInvariant: boolean = false

If true, all materials will have their vertex output set to invariant (see the vertexOutputInvariant property).

FresnelDirtyFlag: 4 = Constants.MATERIAL_FresnelDirtyFlag

The dirty fresnel flag value

IgnoreTexturesAtLoadTime: boolean = false

Gets or sets a boolean indicating that node materials should not deserialize textures from json / snippet content

ImageProcessingDirtyFlag: 64 = Constants.MATERIAL_ImageProcessingDirtyFlag

The dirty image processing flag value

LightDirtyFlag: 2 = Constants.MATERIAL_LightDirtyFlag

The dirty light flag value

LIGHTFALLOFF_GLTF: 1

PBRMaterialLightFalloff gltf: light is falling off as described in the gltf moving to PBR document to enhance interoperability with other engines.

LIGHTFALLOFF_PHYSICAL: 0

PBRMaterialLightFalloff Physical: light is falling off following the inverse squared distance law.

LIGHTFALLOFF_STANDARD: 2

PBRMaterialLightFalloff Standard: light is falling off like in the standard material to enhance interoperability with other materials.

LineListDrawMode: 4 = Constants.MATERIAL_LineListDrawMode

Returns the line list draw mode

LineLoopDrawMode: 5 = Constants.MATERIAL_LineLoopDrawMode

Returns the line loop draw mode

LineStripDrawMode: 6 = Constants.MATERIAL_LineStripDrawMode

Returns the line strip draw mode

MATERIAL_ALPHABLEND: 2

MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.

MATERIAL_ALPHATEST: 1

MaterialTransparencyMode: Alpha Test mode, pixel are discarded below a certain threshold defined by the alpha cutoff value.

MATERIAL_ALPHATESTANDBLEND: 3

MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer. They are also discarded below the alpha cutoff threshold to improve performances.

MATERIAL_NORMALBLENDMETHOD_RNM: 1

The Reoriented Normal Mapping method is used to blend normals. Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/

MATERIAL_NORMALBLENDMETHOD_WHITEOUT: 0

The Whiteout method is used to blend normals. Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/

MATERIAL_OPAQUE: 0

MaterialTransparencyMode: No transparency mode, Alpha channel is not use.

MiscDirtyFlag: 16 = Constants.MATERIAL_MiscDirtyFlag

The dirty misc flag value

OnEventObservable: Observable<Material> = ...

Event observable which raises global events common to all materials (like MaterialPluginEvent.Created)

PointFillMode: 2 = Constants.MATERIAL_PointFillMode

Returns the point fill mode

PointListDrawMode: 3 = Constants.MATERIAL_PointListDrawMode

Returns the point list draw mode

PrePassDirtyFlag: 32 = Constants.MATERIAL_PrePassDirtyFlag

The dirty prepass flag value

SnippetUrl: string = Constants.SnippetUrl

Define the Url to load snippets

TextureDirtyFlag: 1 = Constants.MATERIAL_TextureDirtyFlag

The dirty texture flag value

TriangleFanDrawMode: 8 = Constants.MATERIAL_TriangleFanDrawMode

Returns the triangle fan draw mode

TriangleFillMode: 0 = Constants.MATERIAL_TriangleFillMode

Returns the triangle fill mode

TriangleStripDrawMode: 7 = Constants.MATERIAL_TriangleStripDrawMode

Returns the triangle strip draw mode

UseNativeShaderLanguageOfEngine: boolean = false

If true, the node material will use GLSL if the engine is WebGL and WGSL if it's WebGPU. It takes priority over DefaultShaderLanguage if it's true

WireFrameFillMode: 1 = Constants.MATERIAL_WireFrameFillMode

Returns the wireframe mode

  • get alphaMode(): number

    Gets the value of the alpha mode

    Returns number

  • set alphaMode(value: number): void

    Sets the value of the alpha mode.

    ValueTypeDescription
    0ALPHA_DISABLE
    1ALPHA_ADDDefines that alpha blending is COLOR=SRC_ALPHA * SRC + DEST, ALPHA=DEST_ALPHA
    2ALPHA_COMBINEDefines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA
    3ALPHA_SUBTRACTDefines that alpha blending is COLOR=(1 - SRC) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA
    4ALPHA_MULTIPLYDefines that alpha blending is COLOR=DEST * SRC, ALPHA=SRC_ALPHA + DEST_ALPHA
    5ALPHA_MAXIMIZEDDefines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA
    6ALPHA_ONEONEDefines that alpha blending is COLOR=SRC + DEST, ALPHA=DEST_ALPHA
    7ALPHA_PREMULTIPLIEDDefines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA
    8ALPHA_PREMULTIPLIED_PORTERDUFFDefines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA
    9ALPHA_INTERPOLATEDefines that alpha blending is COLOR=CST * SRC + (1 - CST) * DEST, ALPHA=CST_ALPHA * SRC + (1 - CST_ALPHA) * DEST_ALPHA
    10ALPHA_SCREENMODEDefines that alpha blending is COLOR=SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA
    11ALPHA_ONEONE_ONEONEDefines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA + DEST_ALPHA
    12ALPHA_ALPHATOCOLORDefines that alpha blending is COLOR=DEST_ALPHA * SRC + DST, ALPHA=0
    13ALPHA_REVERSEONEMINUSDefines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=(1 - DEST_ALPHA) * SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA
    14ALPHA_SRC_DSTONEMINUSSRCALPHADefines that alpha blending is ALPHA=SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC ALPHA) * DEST_ALPHA
    15ALPHA_ONEONE_ONEZERODefines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA
    16ALPHA_EXCLUSIONDefines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=DEST_ALPHA
    17ALPHA_LAYER_ACCUMULATEDefines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA
    18ALPHA_MINDefines that alpha blending is COLOR=MIN(SRC, DEST), ALPHA=MIN(SRC_ALPHA, DEST_ALPHA)
    19ALPHA_MAXDefines that alpha blending is COLOR=MAX(SRC, DEST), ALPHA=MAX(SRC_ALPHA, DEST_ALPHA)
    20ALPHA_DUAL_SRC0_ADD_SRC1xDSTDefines that alpha blending uses dual source blending and is COLOR=SRC + SRC1 * DEST, ALPHA=DST_ALPHA
    21ALPHA_REPLACE_COLORDefines that alpha blending is COLOR=SRC, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA

    Parameters

    • value: number

    Returns void

  • get cameraColorCurves(): Nullable<ColorCurves>

    The color grading curves provide additional color adjustmnent that is applied after any color grading transform (3D LUT). They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects. These are similar to controls found in many professional imaging or colorist software. The global controls are applied to the entire image. For advanced tuning, extra controls are provided to adjust the shadow, midtone and highlight areas of the image; corresponding to low luminance, medium luminance, and high luminance areas respectively.

    Returns Nullable<ColorCurves>

  • set cameraColorCurves(value: Nullable<ColorCurves>): void

    The color grading curves provide additional color adjustment that is applied after any color grading transform (3D LUT). They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects. These are similar to controls found in many professional imaging or colorist software. The global controls are applied to the entire image. For advanced tuning, extra controls are provided to adjust the shadow, midtone and highlight areas of the image; corresponding to low luminance, medium luminance, and high luminance areas respectively.

    Parameters

    Returns void

  • get cameraExposure(): number

    The camera exposure used on this material. This property is here and not in the camera to allow controlling exposure without full screen post process. This corresponds to a photographic exposure.

    Returns number

  • set cameraExposure(value: number): void

    The camera exposure used on this material. This property is here and not in the camera to allow controlling exposure without full screen post process. This corresponds to a photographic exposure.

    Parameters

    • value: number

    Returns void

  • get isVertexOutputInvariant(): boolean

    Gets or sets the vertex output invariant state Setting this property to true will force the shader compiler to disable some optimization to make sure the vertex output is always calculated the same way across different compilation units. You may need to enable this option if you are seeing some depth artifacts when using a depth pre-pass, for e.g. Note that this may have an impact on performance, so leave this option disabled if not needed.

    Returns boolean

  • set isVertexOutputInvariant(value: boolean): void

    Parameters

    • value: boolean

    Returns void

  • get useVertexPulling(): boolean

    Tells the engine to draw geometry using vertex pulling instead of index drawing. This will automatically set the vertex buffers as storage buffers and make them accessible to the vertex shader (WebGPU only).

    Returns boolean

  • set useVertexPulling(value: boolean): void

    Parameters

    • value: boolean

    Returns void

  • This allows you to modify the material without marking it as dirty after every change. This function should be used if you need to make more than one dirty-enabling change to the material - adding a texture, setting a new fill mode and so on. The callback will pass the material as an argument, so you can make your changes to it.

    Parameters

    • callback: (material: this) => void

      the callback to be executed that will update the material

    Returns void

  • Binds the view matrix to the effect

    Parameters

    • effect: Effect

      defines the effect to bind the view matrix to

    • OptionalvariableName: string

      name of the shader variable that will hold the eye position

    Returns void

  • Binds the view projection and projection matrices to the effect

    Parameters

    • effect: Effect

      defines the effect to bind the view projection and projection matrices to

    Returns void

  • Build the material and generates the inner effect

    Parameters

    • verbose: boolean = false

      defines if the build should log activity

    • updateBuildId: boolean = true

      defines if the internal build Id should be updated (default is true)

    • autoConfigure: boolean = false

      defines if the autoConfigure method should be called when initializing blocks (default is false)

    Returns void

  • Create the effect to be used as the custom effect for a particle system. If the material has not been built successfully yet, the build is started when needed and the effect is only created once it completes, so the effect may not be set on the particle system when this method returns.

    Parameters

    • particleSystem: IParticleSystem

      Particle system to create the effect for

    • OptionalonCompiled: (effect: Effect) => void

      defines a function to call when the effect creation is successful

    • OptionalonError: (effect: Effect, errors: string) => void

      defines a function to call when the effect creation has failed

    Returns void

  • Create a post process from the material

    Parameters

    • camera: Nullable<Camera>

      The camera to apply the render pass to.

    • options: number | PostProcessOptions = 1

      The required width/height ratio to downsize to before computing the render pass. (Use 1.0 for full size)

    • samplingMode: number = Constants.TEXTURE_NEAREST_SAMPLINGMODE

      The sampling mode to be used when computing the pass. (default: 0)

    • Optionalengine: AbstractEngine

      The engine which the post process will be applied. (default: current engine)

    • Optionalreusable: boolean

      If the post process can be reused on the same frame. (default: false)

    • textureType: number = Constants.TEXTURETYPE_UNSIGNED_BYTE

      Type of textures used when performing the post process. (default: 0)

    • textureFormat: number = Constants.TEXTUREFORMAT_RGBA

      Format of textures used when performing the post process. (default: TEXTUREFORMAT_RGBA)

    Returns Nullable<PostProcess>

    the post process created

  • Disposes the material

    Parameters

    • OptionalforceDisposeEffect: boolean

      specifies if effects should be forcefully disposed

    • OptionalforceDisposeTextures: boolean

      specifies if textures should be forcefully disposed

    • OptionalnotBoundToMesh: boolean

      specifies if the material that is being disposed is known to be not bound to any mesh

    Returns void

  • Force shader compilation

    Parameters

    • mesh: AbstractMesh

      defines the mesh associated with this material

    • OptionalonCompiled: (material: Material) => void

      defines a function to execute once the material is compiled

    • Optionaloptions: Partial<IMaterialCompilationOptions>

      defines the options to configure the compilation

    • OptionalonError: (reason: string) => void

      defines a function to execute if the material fails compiling

    Returns void

  • Locks updates for the material.

    Note: while a material is frozen, the scene can still rebind it at least once per camera render (and again whenever another material was bound in between). What can be skipped while the frozen material stays cached are per-mesh updates performed during a rebind.

    This includes per-mesh morph target influences. If the same frozen material is shared across several meshes that each have different per-mesh morph influences, only the mesh that triggers the rebind updates those values. Other meshes rendered afterward with the same cached frozen material may reuse stale influences and render with the wrong values.

    For that scenario either keep the material unfrozen, clone the material per mesh and freeze each clone, or unfreeze() before changing influences and freeze() again afterwards.

    Returns void

  • Specifies if the material is ready to be used

    Parameters

    • Optionalmesh: AbstractMesh

      defines the mesh to check

    • OptionaluseInstances: boolean

      specifies if instances should be used

    Returns boolean

    a boolean indicating if the material is ready to be used

  • Get if the submesh is ready to be used and all its information available. Child classes can use it to update shaders

    Parameters

    • mesh: AbstractMesh

      defines the mesh to check

    • subMesh: SubMesh

      defines which submesh to check

    • useInstances: boolean = false

      specifies that instances should be used

    Returns boolean

    a boolean indicating that the submesh is ready or not

  • Loads the current Node Material from a url pointing to a file save by the Node Material Editor

    Parameters

    • url: string

      defines the url to load from

    • rootUrl: string = ""

      defines the root URL for nested url in the node material

    Returns Promise<NodeMaterial>

    a promise that will fulfil when the material is fully loaded

    Please use NodeMaterial.ParseFromFileAsync instead

  • Clear the current graph and load a new one from a serialization object

    Parameters

    • source: any

      defines the JSON representation of the material

    • rootUrl: string = ""

      defines the root URL to use to load textures and relative dependencies

    • merge: boolean = false

      defines whether or not the source must be merged or replace the current content

    Returns void

    Please use the parseSerializedObject method instead

  • Marks a define in the material to indicate that it needs to be re-computed

    Parameters

    • flag: number

      defines a flag used to determine which parts of the material have to be marked as dirty

    Returns void

  • Marks the material to indicate that it needs to be re-calculated

    Parameters

    • forceMaterialDirty: boolean = false

      Forces the material to be marked as dirty for all components (same as this.markAsDirty(Material.AllDirtyFlag)). You should use this flag if the material is frozen and you want to force a recompilation.

    Returns void

  • Specifies if material alpha testing should be turned on for the mesh

    Parameters

    Returns boolean

    a boolean specifying if alpha testing should be turned on for the mesh

  • Clear the current graph and load a new one from a serialization object

    Parameters

    • source: any

      defines the JSON representation of the material

    • rootUrl: string = ""

      defines the root URL to use to load textures and relative dependencies

    • merge: boolean = false

      defines whether or not the source must be merged or replace the current content

    • OptionalurlRewriter: (url: string) => string

      defines a function used to rewrite urls

    Returns void

  • Sets the value of the alpha mode for a specific target index.

    Parameters

    • value: number

      The alpha mode value to set.

    • targetIndex: number = 0

      The index of the target to set the alpha mode for. Defaults to 0.

    Returns void

  • Returns a string representation of the current material

    Parameters

    • OptionalfullDetails: boolean

      defines a boolean indicating which levels of logging is desired

    Returns string

    a string with material information

  • Parses the alpha mode from the material data to parse

    Parameters

    • parsedMaterial: any

      defines the material data to parse

    • material: Material

      defines the material to update

    Returns void