Skip to content

Documentation / scene / HairMaterial

Class: HairMaterial

Defined in: libs/scene/src/material/hair.ts:53

Hair-card material using a Kajiya-Kay style double-lobe anisotropic lighting model.

Lighting terms:

  • Wrap diffuse to soften the terminator across thin cards.
  • Primary specular lobe (usually near-white, sharp, shifted toward the root).
  • Secondary specular lobe (tinted by hair color, broader, shifted toward the tip), with an optional shift texture that jitters both lobes per strand to break up the "angel ring" into natural streaks.
  • Optional view-dependent transmission for backlit tips.
  • Optional baked occlusion map (root darkening).

Alpha handling comes from the MeshMaterial base: use alphaCutoff plus alphaDither for TAA-converged soft edges on the opaque core, and blendMode='blend' for the outer flyaway layer.

Extends

Extended by

Implements

  • Clonable<HairMaterial>

Constructors

Constructor

new HairMaterial(): HairMaterial

Defined in: libs/scene/src/material/hair.ts:123

Creates an instance of HairMaterial with defaults tuned for dark stylized hair.

Returns

HairMaterial

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).constructor

Properties

normalTexture

normalTexture: Texture2D<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalTexture


normalTextureSampler

normalTextureSampler: TextureSampler<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalTextureSampler


normalTexCoordIndex

normalTexCoordIndex: number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalTexCoordIndex


normalTexCoordMatrix

normalTexCoordMatrix: Matrix4x4

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalTexCoordMatrix


hasNormalTexture

hasNormalTexture: () => boolean

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).hasNormalTexture


getNormalTextureUniform

getNormalTextureUniform: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getNormalTextureUniform


getNormalTexCoord

getNormalTexCoord: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getNormalTexCoord


sampleNormalTexture

sampleNormalTexture: (scope, texCoord?) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

texCoord?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).sampleNormalTexture


albedoTexture

albedoTexture: Texture2D<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).albedoTexture


albedoTextureSampler

albedoTextureSampler: TextureSampler<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).albedoTextureSampler


albedoTexCoordIndex

albedoTexCoordIndex: number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).albedoTexCoordIndex


albedoTexCoordMatrix

albedoTexCoordMatrix: Matrix4x4

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).albedoTexCoordMatrix


hasAlbedoTexture

hasAlbedoTexture: () => boolean

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).hasAlbedoTexture


getAlbedoTextureUniform

getAlbedoTextureUniform: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getAlbedoTextureUniform


getAlbedoTexCoord

getAlbedoTexCoord: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getAlbedoTexCoord


sampleAlbedoTexture

sampleAlbedoTexture: (scope, texCoord?) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

texCoord?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).sampleAlbedoTexture


specularShiftTexture

specularShiftTexture: Texture2D<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).specularShiftTexture


specularShiftTextureSampler

specularShiftTextureSampler: TextureSampler<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).specularShiftTextureSampler


specularShiftTexCoordIndex

specularShiftTexCoordIndex: number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).specularShiftTexCoordIndex


specularShiftTexCoordMatrix

specularShiftTexCoordMatrix: Matrix4x4

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).specularShiftTexCoordMatrix


hasSpecularShiftTexture

hasSpecularShiftTexture: () => boolean

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).hasSpecularShiftTexture


getSpecularShiftTextureUniform

getSpecularShiftTextureUniform: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getSpecularShiftTextureUniform


getSpecularShiftTexCoord

getSpecularShiftTexCoord: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getSpecularShiftTexCoord


sampleSpecularShiftTexture

sampleSpecularShiftTexture: (scope, texCoord?) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

texCoord?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).sampleSpecularShiftTexture


occlusionTexture

occlusionTexture: Texture2D<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).occlusionTexture


occlusionTextureSampler

occlusionTextureSampler: TextureSampler<unknown>

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).occlusionTextureSampler


occlusionTexCoordIndex

occlusionTexCoordIndex: number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).occlusionTexCoordIndex


occlusionTexCoordMatrix

occlusionTexCoordMatrix: Matrix4x4

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).occlusionTexCoordMatrix


hasOcclusionTexture

hasOcclusionTexture: () => boolean

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).hasOcclusionTexture


getOcclusionTextureUniform

getOcclusionTextureUniform: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getOcclusionTextureUniform


getOcclusionTexCoord

getOcclusionTexCoord: (scope) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getOcclusionTexCoord


sampleOcclusionTexture

sampleOcclusionTexture: (scope, texCoord?) => PBShaderExp

Parameters

scope

PBInsideFunctionScope

texCoord?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).sampleOcclusionTexture


albedoColor

albedoColor: Vector4

Defined in: libs/scene/src/material/mixins/albedocolor.ts:16

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).albedoColor


normalScale

normalScale: number

Defined in: libs/scene/src/material/mixins/lit.ts:23

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalScale


normalFlipY

normalFlipY: boolean

Defined in: libs/scene/src/material/mixins/lit.ts:24

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalFlipY


normalMapMode

normalMapMode: "tangent-space" | "object-space"

Defined in: libs/scene/src/material/mixins/lit.ts:25

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).normalMapMode


doubleSidedLighting

doubleSidedLighting: boolean

Defined in: libs/scene/src/material/mixins/lit.ts:26

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).doubleSidedLighting


vertexColor

vertexColor: boolean

Defined in: libs/scene/src/material/mixins/vertexcolor.ts:10

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).vertexColor

Accessors

disposed

Get Signature

get disposed(): boolean

Defined in: libs/base/dist/index.d.ts:6107

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).disposed


vertexNormal

Get Signature

get vertexNormal(): boolean

Defined in: libs/scene/src/material/hair.ts:188

true if vertex normal attribute presents

Returns

boolean

Set Signature

set vertexNormal(val): void

Defined in: libs/scene/src/material/hair.ts:191

Parameters
val

boolean

Returns

void


vertexTangent

Get Signature

get vertexTangent(): boolean

Defined in: libs/scene/src/material/hair.ts:195

true if vertex tangent attribute presents

Returns

boolean

Set Signature

set vertexTangent(val): void

Defined in: libs/scene/src/material/hair.ts:198

Parameters
val

boolean

Returns

void


strandDirection

Get Signature

get strandDirection(): HairStrandDirection

Defined in: libs/scene/src/material/hair.ts:202

Which TBN axis runs along the strands

Returns

HairStrandDirection

Set Signature

set strandDirection(val): void

Defined in: libs/scene/src/material/hair.ts:205

Parameters
val

HairStrandDirection

Returns

void


specular1Color

Get Signature

get specular1Color(): Immutable<Vector3>

Defined in: libs/scene/src/material/hair.ts:209

Primary specular lobe color

Returns

Immutable<Vector3>

Set Signature

set specular1Color(val): void

Defined in: libs/scene/src/material/hair.ts:212

Parameters
val

Immutable<Vector3>

Returns

void


specular1Power

Get Signature

get specular1Power(): number

Defined in: libs/scene/src/material/hair.ts:219

Primary specular lobe exponent

Returns

number

Set Signature

set specular1Power(val): void

Defined in: libs/scene/src/material/hair.ts:222

Parameters
val

number

Returns

void


specular1Shift

Get Signature

get specular1Shift(): number

Defined in: libs/scene/src/material/hair.ts:229

Primary specular lobe shift along the normal

Returns

number

Set Signature

set specular1Shift(val): void

Defined in: libs/scene/src/material/hair.ts:232

Parameters
val

number

Returns

void


specular2Color

Get Signature

get specular2Color(): Immutable<Vector3>

Defined in: libs/scene/src/material/hair.ts:239

Secondary specular lobe color (multiplied by albedo)

Returns

Immutable<Vector3>

Set Signature

set specular2Color(val): void

Defined in: libs/scene/src/material/hair.ts:242

Parameters
val

Immutable<Vector3>

Returns

void


specular2Power

Get Signature

get specular2Power(): number

Defined in: libs/scene/src/material/hair.ts:249

Secondary specular lobe exponent

Returns

number

Set Signature

set specular2Power(val): void

Defined in: libs/scene/src/material/hair.ts:252

Parameters
val

number

Returns

void


specular2Shift

Get Signature

get specular2Shift(): number

Defined in: libs/scene/src/material/hair.ts:259

Secondary specular lobe shift along the normal

Returns

number

Set Signature

set specular2Shift(val): void

Defined in: libs/scene/src/material/hair.ts:262

Parameters
val

number

Returns

void


shiftMapScale

Get Signature

get shiftMapScale(): number

Defined in: libs/scene/src/material/hair.ts:269

Scale applied to the shift texture

Returns

number

Set Signature

set shiftMapScale(val): void

Defined in: libs/scene/src/material/hair.ts:272

Parameters
val

number

Returns

void


diffuseWrap

Get Signature

get diffuseWrap(): number

Defined in: libs/scene/src/material/hair.ts:279

Wrap diffuse amount in [0, 1]

Returns

number

Set Signature

set diffuseWrap(val): void

Defined in: libs/scene/src/material/hair.ts:282

Parameters
val

number

Returns

void


transmissionColor

Get Signature

get transmissionColor(): Immutable<Vector3>

Defined in: libs/scene/src/material/hair.ts:290

Transmission tint color

Returns

Immutable<Vector3>

Set Signature

set transmissionColor(val): void

Defined in: libs/scene/src/material/hair.ts:293

Parameters
val

Immutable<Vector3>

Returns

void


transmissionIntensity

Get Signature

get transmissionIntensity(): number

Defined in: libs/scene/src/material/hair.ts:300

Transmission intensity, 0 disables the transmission term

Returns

number

Set Signature

set transmissionIntensity(val): void

Defined in: libs/scene/src/material/hair.ts:303

Parameters
val

number

Returns

void


transmissionPower

Get Signature

get transmissionPower(): number

Defined in: libs/scene/src/material/hair.ts:312

Transmission view-alignment exponent

Returns

number

Set Signature

set transmissionPower(val): void

Defined in: libs/scene/src/material/hair.ts:315

Parameters
val

number

Returns

void


scatterColor

Get Signature

get scatterColor(): Immutable<Vector3>

Defined in: libs/scene/src/material/hair.ts:330

Tint of multiply-scattered light.

Remarks

Multiple scattering is strongly wavelength dependent - it is why blonde hair glows and black hair does not - and the tint is applied on top of the hair's own colour, which the term is already modulated by. Warm by default, since the light that survives several bounces through keratin has lost its blue.

Returns

Immutable<Vector3>

Set Signature

set scatterColor(val): void

Defined in: libs/scene/src/material/hair.ts:333

Parameters
val

Immutable<Vector3>

Returns

void


scatterIntensity

Get Signature

get scatterIntensity(): number

Defined in: libs/scene/src/material/hair.ts:364

Multiple scattering intensity. Zero disables the term, which is the default.

Remarks

Absorption alone makes the inside of a groom black, because that is what absorption does: past a few fibres essentially nothing of the direct beam survives. Real hair is not black there, and the difference is light that reached the point after bouncing off neighbouring fibres rather than travelling straight through.

This adds an approximation of it in two parts, following the decomposition dual scattering makes: a global term, the light that came through the hair in front and arrives spread over a wide angle, and a local term, the light that did not come through but re-emerges after scattering nearby. The first fades with depth into the groom, the second does not, and it is the second that stops the interior going black.

The forward transmittance both terms are built from is the shadow value, so this is at its most meaningful under a shadow mode that grades it - a deep opacity map. Under a binary filter the global term simply follows the shadow and the local term fills its complement.

Off by default: it adds light the material did not previously emit, so it changes the look of any groom it is enabled on rather than refining it.

Returns

number

Set Signature

set scatterIntensity(val): void

Defined in: libs/scene/src/material/hair.ts:367

Parameters
val

number

Returns

void


scatterLocal

Get Signature

get scatterLocal(): number

Defined in: libs/scene/src/material/hair.ts:384

Balance between the two scattering terms, in [0, 1].

Remarks

Zero keeps only the global term, so the scattering follows the light and vanishes deep in the groom. One keeps only the local term, which is brightest exactly where the direct light is blocked. The default splits them evenly; denser and lighter hair wants more local.

Returns

number

Set Signature

set scatterLocal(val): void

Defined in: libs/scene/src/material/hair.ts:387

Parameters
val

number

Returns

void


scatterWrap

Get Signature

get scatterWrap(): number

Defined in: libs/scene/src/material/hair.ts:404

Angular width of the forward-scattered lobe.

Remarks

Scattering spreads light as it crosses fibres, so the global term is not a cosine lobe but a much broader one; this is how far past the terminator it reaches. Larger than HairMaterial.diffuseWrap on purpose - that one softens a terminator, this one models a beam that has genuinely lost its direction.

Returns

number

Set Signature

set scatterWrap(val): void

Defined in: libs/scene/src/material/hair.ts:407

Parameters
val

number

Returns

void


shadingModel

Get Signature

get shadingModel(): HairShadingModel

Defined in: libs/scene/src/material/hair.ts:429

Which scattering model shades the hair. Defaults to kajiya-kay.

Remarks

Switching to marschner changes the look of any hair it is enabled on rather than refining it, so it is opted into. See HairShadingModel for what the two models are; the marschner* properties are inert under kajiya-kay and the specular lobe properties are inert under marschner.

Two existing properties overlap with it and should be left alone when it is on: HairMaterial.transmissionIntensity, whose whole job is faking the backlit glow that Marschner's TT path produces for real, and - on HairStrandMaterial - strandRoundness, whose bent normal no longer reaches the highlight, because Marschner already integrates across the fibre.

Returns

HairShadingModel

Set Signature

set shadingModel(val): void

Defined in: libs/scene/src/material/hair.ts:432

Parameters
val

HairShadingModel

Returns

void


marschnerShift

Get Signature

get marschnerShift(): number

Defined in: libs/scene/src/material/hair.ts:448

Longitudinal shift of the Marschner lobes, in sine units.

Remarks

Hair is not a smooth cylinder: overlapping cuticle scales tilt its surface by a few degrees toward the tip. That tilt is the only reason the three lobes sit at different angles instead of on top of one another, so this is what makes them read as separate highlights at all. The three shifts are derived from it in the ratio the measurements give, R getting -2x and TRT 4x, so one dial moves the whole set consistently.

Defaults to 0.035, roughly the measured 2 degrees.

Returns

number

Set Signature

set marschnerShift(val): void

Defined in: libs/scene/src/material/hair.ts:451

Parameters
val

number

Returns

void


marschnerRoughness

Get Signature

get marschnerRoughness(): number

Defined in: libs/scene/src/material/hair.ts:465

Longitudinal roughness of the Marschner lobes, in (0, 1].

Remarks

The angular width of the highlight bands. Per-lobe widths are derived from it - TT half, TRT double - which is the ordering real fibres show: light that only passes through stays tight, light that has bounced inside spreads.

Returns

number

Set Signature

set marschnerRoughness(val): void

Defined in: libs/scene/src/material/hair.ts:468

Parameters
val

number

Returns

void


marschnerIOR

Get Signature

get marschnerIOR(): number

Defined in: libs/scene/src/material/hair.ts:484

Refractive index of the fibre. Defaults to the measured 1.55 for keratin.

Remarks

Sets how much light reflects at the surface rather than entering, and how sharply it bends once inside - so it moves the balance between the white R highlight and the two coloured paths. Rarely worth changing from the measured value, but exposed because it is a real physical quantity.

Returns

number

Set Signature

set marschnerIOR(val): void

Defined in: libs/scene/src/material/hair.ts:487

Parameters
val

number

Returns

void


marschnerAbsorption

Get Signature

get marschnerAbsorption(): number

Defined in: libs/scene/src/material/hair.ts:503

Multiplier on how far light travels through the fibre before leaving.

Remarks

The transmitted paths are tinted by absorbing the hair's own colour over the distance they cross, so raising this deepens the colour of TT and TRT without touching the white surface reflection. It is the dial for "how strongly pigmented", separate from which colour the pigment is.

Returns

number

Set Signature

set marschnerAbsorption(val): void

Defined in: libs/scene/src/material/hair.ts:506

Parameters
val

number

Returns

void


marschnerLobes

Get Signature

get marschnerLobes(): Immutable<Vector3>

Defined in: libs/scene/src/material/hair.ts:521

Per-path intensities as (R, TT, TRT), all 1 by default.

Remarks

Art override on top of the physics, and the fastest way to see what each path contributes: zero two of them and the third is on its own. R is the white surface highlight, TT the backlit glow, TRT the coloured secondary.

Returns

Immutable<Vector3>

Set Signature

set marschnerLobes(val): void

Defined in: libs/scene/src/material/hair.ts:524

Parameters
val

Immutable<Vector3>

Returns

void


occlusionStrength

Get Signature

get occlusionStrength(): number

Defined in: libs/scene/src/material/hair.ts:531

Occlusion map strength in [0, 1]

Returns

number

Set Signature

set occlusionStrength(val): void

Defined in: libs/scene/src/material/hair.ts:534

Parameters
val

number

Returns

void


changeTag

Get Signature

get changeTag(): number

Defined in: libs/scene/src/material/material.ts:173

Incremented when the material’s GPU-relevant state changes and render bundles may need to be rebuilt.

Returns

number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).changeTag


instanceId

Get Signature

get instanceId(): number

Defined in: libs/scene/src/material/material.ts:179

Runtime-unique numeric identifier for the material instance.

Returns

number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).instanceId


numPasses

Get Signature

get numPasses(): number

Defined in: libs/scene/src/material/material.ts:189

Number of rendering passes this material uses.

Increasing this will expand the per-pass hash cache; make sure to implement createHash(pass), _createProgram(pb, ctx, pass), and updateRenderStates(pass, ...) accordingly for each pass.

Returns

number

Set Signature

set numPasses(val): void

Defined in: libs/scene/src/material/material.ts:192

Parameters
val

number

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).numPasses


coreMaterial

Get Signature

get coreMaterial(): this

Defined in: libs/scene/src/material/material.ts:283

Returns the core material that owns GPU state.

Instances may delegate to a shared core to reuse compiled programs and caches.

Returns

this

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).coreMaterial


drawContext

Get Signature

get drawContext(): DrawContext

Defined in: libs/scene/src/material/meshmaterial.ts:514

Draw context captured during program creation, available inside shader hooks.

Returns

DrawContext

The last DrawContext used to build or apply this material.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).drawContext


pass

Get Signature

get pass(): number

Defined in: libs/scene/src/material/meshmaterial.ts:523

Current material pass index during program building. Typically used inside shader hooks to select per-pass logic.

Returns

number

The active pass index while building the program, or -1 when idle.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).pass


alphaCutoff

Get Signature

get alphaCutoff(): number

Defined in: libs/scene/src/material/meshmaterial.ts:532

Alpha test cutoff in [0, 1].

  • 0 disables alpha testing.
  • > 0 discards fragments with alpha < cutoff. Changing this marks uniforms dirty (no shader rebuild).
Returns

number

Set Signature

set alphaCutoff(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:535

Parameters
val

number

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).alphaCutoff


alphaDither

Get Signature

get alphaDither(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:547

Whether alpha clipping uses frame-varying dither coverage.

  • Effective only when alpha cutoff is enabled.
  • Intended for masked materials (blendMode='none') to emulate soft transparency with TAA.
Returns

boolean

Set Signature

set alphaDither(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:550

Parameters
val

boolean

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).alphaDither


TAADisabled

Get Signature

get TAADisabled(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:561

Whether TAA is disabled for this material.

  • When true, motion vectors encode a large sentinel to skip TAA accumulation.
  • Managed via an internal feature toggle.
Returns

boolean

Set Signature

set TAADisabled(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:564

Parameters
val

boolean

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).TAADisabled


transparentMotionVector

Get Signature

get transparentMotionVector(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:581

Whether a blended material contributes motion vectors.

Remarks

Off by default, and only meaningful with blendMode !== 'none': blended geometry is normally absent from the prepass, so it writes no velocity and a temporal filter reprojects it with whatever is behind it. Turning this on adds it to a motion-vector-only pass over the transparent queue.

Right for geometry that is dense enough to own its pixels - hair, foliage cards - where one velocity per pixel is a fair summary. Wrong for genuinely see-through surfaces such as glass, where the background's own velocity is the one that should survive, which is why this is opt-in.

Returns

boolean

Set Signature

set transparentMotionVector(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:584

Parameters
val

boolean

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).transparentMotionVector


TAAStrength

Get Signature

get TAAStrength(): number

Defined in: libs/scene/src/material/meshmaterial.ts:592

TAA strength in [0, 1].

  • Higher values generally imply stronger accumulation.
  • The value is mapped when writing motion-vector outputs during depth pass.
Returns

number

Set Signature

set TAAStrength(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:595

Parameters
val

number

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).TAAStrength


alphaToCoverage

Get Signature

get alphaToCoverage(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:607

Alpha-to-coverage toggle.

  • Useful to approximate transparency for MSAA targets.
  • Managed as a shader feature; toggling rebuilds variants.
Returns

boolean

Set Signature

set alphaToCoverage(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:610

Parameters
val

boolean

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).alphaToCoverage


blendMode

Get Signature

get blendMode(): BlendMode

Defined in: libs/scene/src/material/meshmaterial.ts:618

Blending mode of this material.

  • 'none' for opaque, 'blend' for standard alpha, 'additive' for emissive FX.
  • Changing the mode toggles an internal feature and rebuilds variants.
Returns

BlendMode

Set Signature

set blendMode(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:621

Parameters
val

BlendMode

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).blendMode


transparentShadowCaster

Get Signature

get transparentShadowCaster(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:632

Whether transparent visible materials cast shadow through a masked shadow-only path.

  • Visible rendering stays blended.
  • Shadow-map rendering is treated like a cutout material using shadowAlphaCutoff.
Returns

boolean

Set Signature

set transparentShadowCaster(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:635

Parameters
val

boolean

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).transparentShadowCaster


shadowAlphaCutoff

Get Signature

get shadowAlphaCutoff(): number

Defined in: libs/scene/src/material/meshmaterial.ts:644

Alpha cutoff used by the shadow-only masked caster path.

Returns

number

Set Signature

set shadowAlphaCutoff(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:647

Parameters
val

number

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).shadowAlphaCutoff


cullMode

Get Signature

get cullMode(): FaceMode

Defined in: libs/scene/src/material/meshmaterial.ts:658

Face culling mode: 'none' | 'front' | 'back'.

  • Does not force shader rebuild; affects rasterizer state.
Returns

FaceMode

Set Signature

set cullMode(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:661

Parameters
val

FaceMode

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).cullMode


opacity

Get Signature

get opacity(): number

Defined in: libs/scene/src/material/meshmaterial.ts:671

Material opacity in [0, 1].

  • Used in transparent passes. Changing marks uniforms dirty only.
Returns

number

Set Signature

set opacity(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:674

Parameters
val

number

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).opacity


objectColor

Get Signature

get objectColor(): Immutable<Vector4>

Defined in: libs/scene/src/material/meshmaterial.ts:685

Per-object color used for GPU picking/object-ID pass.

  • Changing marks uniforms dirty only.
Returns

Immutable<Vector4>

Set Signature

set objectColor(val): void

Defined in: libs/scene/src/material/meshmaterial.ts:688

Parameters
val

Immutable<Vector4>

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).objectColor

Methods

on()

on<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:630

IEventTarget.on

Type Parameters

K

K extends "dispose"

Parameters

type

K

listener

EventListener<{ dispose: []; }, K>

context?

unknown

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).on


once()

once<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:634

IEventTarget.once

Type Parameters

K

K extends "dispose"

Parameters

type

K

listener

EventListener<{ dispose: []; }, K>

context?

unknown

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).once


off()

off<K>(type, listener?, context?): void

Defined in: libs/base/dist/index.d.ts:638

IEventTarget.off

Type Parameters

K

K extends "dispose"

Parameters

type

K

listener?

EventListener<{ dispose: []; }>

context?

unknown

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).off


dispatchEvent()

dispatchEvent<K>(type, ...args): void

Defined in: libs/base/dist/index.d.ts:642

IEventTarget.dispatchEvent

Type Parameters

K

K extends "dispose"

Parameters

type

K

args

...object[K]

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).dispatchEvent


dispose()

dispose(): void

Defined in: libs/base/dist/index.d.ts:6108

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).dispose


clone()

clone(): HairMaterial

Defined in: libs/scene/src/material/hair.ts:157

Create a shallow clone of this material. Subclasses should override to copy custom fields.

Returns

HairMaterial

Implementation of

Clonable.clone

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).clone


copyFrom()

copyFrom(other): void

Defined in: libs/scene/src/material/hair.ts:162

Copy common MeshMaterial properties from another material. Call super.copyFrom(other) first when overriding in subclasses.

Parameters

other

this

Source material.

Returns

void

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).copyFrom


vertexShader()

vertexShader(scope): void

Defined in: libs/scene/src/material/hair.ts:541

Vertex shader hook. Prepares common inputs (skin/morph/instancing), varyings, and pass-dependent outputs. Override to implement per-vertex logic; use ShaderHelper as needed.

Parameters

scope

PBFunctionScope

Vertex shader function scope.

Returns

void

void

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).vertexShader


fragmentShader()

fragmentShader(scope): void

Defined in: libs/scene/src/material/hair.ts:545

Fragment shader hook. Declares pass-dependent uniforms (e.g., opacity, objectColor, alphaCutoff). Override to implement per-fragment logic, and call outputFragmentColor to finalize writes.

Parameters

scope

PBFunctionScope

Fragment shader function scope.

Returns

void

void

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).fragmentShader


applyUniformValues()

applyUniformValues(bindGroup, ctx, pass): void

Defined in: libs/scene/src/material/hair.ts:630

Submit material uniforms/resources to the material bind group (set 2). Handles alpha cutoff, opacity (non-instanced transparent), OIT, object color, and TAA strength.

Parameters

bindGroup

BindGroup

The material bind group to write into.

ctx

DrawContext

Current draw context.

pass

number

Current material pass index.

Returns

void

void

Overrides

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).applyUniformValues


vertexShaderImpl()

protected vertexShaderImpl(scope): void

Defined in: libs/scene/src/material/hair.ts:711

Parameters

scope

PBFunctionScope

Returns

void


hairLight()

hairLight(scope, worldPos, normal, strandT, viewVec, albedo, shiftVal, ao, aoDirect, geometricNormal?): PBShaderExp

Defined in: libs/scene/src/material/hair.ts:1098

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

normal

PBShaderExp

strandT

PBShaderExp

viewVec

PBShaderExp

albedo

PBShaderExp

shiftVal

PBShaderExp

ao

PBShaderExp

Ambient occlusion, applied to environment irradiance and the scatter term - the light no shadow query answers for.

aoDirect

PBShaderExp

Occlusion applied to per-light shading, whose direct blockage the shadow map already accounts for. See HairMaterial.calculateHairDirectOcclusion.

geometricNormal?

PBShaderExp

Interpolated vertex normal, used for shadow normal offset bias. Defaults to normal.

Returns

PBShaderExp


getNumPassesForRender()

protected getNumPassesForRender(_ctx): number

Defined in: libs/scene/src/material/material.ts:205

Get the number of passes this material will render for the given draw context.

Default returns numPasses. Subclasses may override to skip passes based on context flags.

Parameters

_ctx

DrawContext

Draw context (device, flags, pass hash, instance data, etc.).

Returns

number

Number of passes to render for this context.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getNumPassesForRender


supportInstancing()

supportInstancing(): boolean

Defined in: libs/scene/src/material/material.ts:249

Whether this material supports hardware instancing.

Override and return false if per-instance data is not supported in the shader.

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).supportInstancing


isBatchable()

isBatchable(): boolean

Defined in: libs/scene/src/material/material.ts:253

Returns true if this is a instance of material

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).isBatchable


needSceneColor()

needSceneColor(): boolean

Defined in: libs/scene/src/material/material.ts:260

Whether this material requires the scene color texture (e.g., for refraction).

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needSceneColor


needSceneDepth()

needSceneDepth(): boolean

Defined in: libs/scene/src/material/material.ts:266

Whether this material requires the linear scene depth texture (e.g., for depth-aware effects).

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needSceneDepth


applyUniforms()

applyUniforms(bindGroup, ctx, needUpdate, pass): void

Defined in: libs/scene/src/material/material.ts:450

Conditionally update uniforms/resources into the material bind group.

Delegates to _applyUniforms() when needUpdate is true (based on _optionTag check).

Parameters

bindGroup

BindGroup

Material bind group at index 2 (may be null if program has no layout).

ctx

DrawContext

Draw context.

needUpdate

boolean

Whether uniforms need to be refreshed.

pass

number

Pass index.

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).applyUniforms


clearCache()

clearCache(): void

Defined in: libs/scene/src/material/material.ts:475

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).clearCache


passToHash()

passToHash(pass): string

Defined in: libs/scene/src/material/material.ts:503

Convert a pass index to a hash seed string.

Subclasses may override to encode per-pass role (e.g., "depth", "forward", "shadow").

Parameters

pass

number

Pass number.

Returns

string

String used when building full hash.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).passToHash


drawPrimitive()

drawPrimitive(pass, primitive, ctx, numInstances): void

Defined in: libs/scene/src/material/material.ts:531

Issue the actual draw call for a pass.

Override for custom per-pass draw behavior if necessary. The default implementation:

  • Draws instanced if numInstances > 0.
  • Else uses ctx.instanceData.numInstances if available.
  • Else issues a non-instanced draw.

Parameters

pass

number

Pass number.

primitive

Primitive

Primitive to draw.

ctx

DrawContext

Draw context.

numInstances

number

Explicit instance count (0 = auto).

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).drawPrimitive


onDispose()

protected onDispose(): void

Defined in: libs/scene/src/material/material.ts:546

Dispose the material and release GPU-side resource references.

  • Unregisters from the global registry.
  • Disposes the per-material bind groups kept in _states.

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).onDispose


apply()

apply(ctx): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:243

Capture the active draw context for both cached and freshly-built program paths.

The shader-building hooks access this.drawContext, but uniform application may also consult it on subsequent frames when the GPU program is reused from cache. Updating it here keeps material mixins in sync even when createProgram() is skipped.

Parameters

ctx

DrawContext

Current draw context.

Returns

boolean

Whether material preparation succeeded.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).apply


uniformChanged()

uniformChanged(): void

Defined in: libs/scene/src/material/meshmaterial.ts:252

Mark uniform-only changes so uniforms are re-uploaded on next apply, without rebuilding shader programs.

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).uniformChanged


defineFeature()

static defineFeature(): number

Defined in: libs/scene/src/material/meshmaterial.ts:259

Define a new feature bit/index for shader variants. Subclasses may use this to add their own switches.

Returns

number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).defineFeature


defineInstanceUniform()

static defineInstanceUniform(prop, type, name?): number

Defined in: libs/scene/src/material/meshmaterial.ts:292

Define a per-instance uniform for this class.

Returns a compact index encoding the vector index and component offset, which can be used in shader code via getInstancedUniform(...).

Parameters

prop

string

Property name exposed on instances.

type

InstanceUniformType

Uniform data type.

name?

string = ''

Returns

number

Encoded index for use in getInstancedUniform.

Throws

If the property is already defined or type is invalid.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).defineInstanceUniform


getInstancedUniform()

getInstancedUniform(scope, uniformIndex): PBShaderExp

Defined in: libs/scene/src/material/meshmaterial.ts:333

Read an encoded per-instance uniform in shader code.

Encoded index packs: vector index, component offset, and component count.

Parameters

scope

PBInsideFunctionScope

Inside-function shader scope.

uniformIndex

number

Encoded index from defineInstanceUniform.

Returns

PBShaderExp

The shader expression reading the selected components.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getInstancedUniform


getInstancedUniforms()

getInstancedUniforms(): object[]

Defined in: libs/scene/src/material/meshmaterial.ts:355

Get the list of per-instance uniforms for this material class.

Returns

object[]

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getInstancedUniforms


createInstance()

createInstance(): this

Defined in: libs/scene/src/material/meshmaterial.ts:370

Create a material instance (preferred for GPU instancing).

  • On WebGL1 (or when instancing unsupported), falls back to cloning.
  • Otherwise, returns a proxy instance that shares GPU programs and stores per-instance uniforms in a compact Float32Array.

The returned instance:

  • Exposes properties defined by defineInstanceUniform with getter/setter that read/write the packed buffer and notify RenderBundleWrapper.
  • Delegates methods to the core material via prototype chain.

Returns

this

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).createInstance


supportLighting()

supportLighting(): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:700

Whether this material responds to scene lighting. Override to return false for unlit materials.

Returns

boolean

True if lighting affects this material; otherwise false.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).supportLighting


getEffectiveBlendMode()

protected getEffectiveBlendMode(pass, ctx?): BlendMode

Defined in: libs/scene/src/material/meshmaterial.ts:707

Returns the effective blend mode for the current pass. Transparent-shadow-caster materials stay blended in visible passes, but become masked in shadow passes.

Parameters

pass

number

ctx?

DrawContext

Returns

BlendMode

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getEffectiveBlendMode


getActiveAlphaCutoff()

protected getActiveAlphaCutoff(ctx?, pass?): number

Defined in: libs/scene/src/material/meshmaterial.ts:736

Returns the alpha cutoff that should be used for the current pass.

Parameters

ctx?

DrawContext

pass?

number = ...

Returns

number

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getActiveAlphaCutoff


useTransparentShadowCaster()

useTransparentShadowCaster(ctx?, _pass?): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:742

Whether the current pass should use the shadow-only masked caster path.

Parameters

ctx?

DrawContext

_pass?

number = ...

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).useTransparentShadowCaster


useTransparentShadowCasterForPass()

useTransparentShadowCasterForPass(renderPassType?): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:748

Whether the specified render pass type should reinterpret this transparent material as a masked shadow caster.

Parameters

renderPassType?

number

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).useTransparentShadowCasterForPass


usesAlphaCutoff()

protected usesAlphaCutoff(ctx, pass): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:758

Whether this pass needs an alpha-cutoff uniform bound.

Parameters

ctx

DrawContext

pass

number

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).usesAlphaCutoff


needFragmentColorInput()

needFragmentColorInput(ctx?): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:766

Whether this pass needs fragment color inputs. This stays aligned with the historical meaning of needFragmentColor, but also allows shadow-only transparent casters to fetch alpha sources.

Parameters

ctx?

DrawContext

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needFragmentColorInput


updateRenderStates()

protected updateRenderStates(pass, stateSet, ctx): void

Defined in: libs/scene/src/material/meshmaterial.ts:779

Update render states per pass and draw context. Sets blending, alpha-to-coverage, depth test/write, cull mode, color mask, and cooperates with OIT.

Parameters

pass

number

Current material pass index.

stateSet

RenderStateSet

Render state set to update.

ctx

DrawContext

Current draw context.

Returns

void

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).updateRenderStates


getQueueType()

getQueueType(): number

Defined in: libs/scene/src/material/meshmaterial.ts:893

Determine the render queue for this material. Transparent materials are queued as QUEUE_TRANSPARENT, otherwise QUEUE_OPAQUE.

Returns

number

The queue type constant.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getQueueType


isTransparentPass()

isTransparentPass(pass, ctx?): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:903

Whether the given pass is transparent. Default returns true when blendMode !== 'none'.

Parameters

pass

number

Material pass index.

ctx?

DrawContext

Returns

boolean

True if the pass is transparent; otherwise false.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).isTransparentPass


featureUsed()

featureUsed<T>(feature): T

Defined in: libs/scene/src/material/meshmaterial.ts:930

Query a feature flag’s current value.

Type Parameters

T

T = unknown

Expected value type.

Parameters

feature

number

The feature index.

Returns

T

The current value for the feature, typed as T.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).featureUsed


useFeature()

useFeature(feature, use): void

Defined in: libs/scene/src/material/meshmaterial.ts:941

Enable or disable a feature and trigger variant rebuild when changed. Calls optionChanged(true) internally on change.

Parameters

feature

number

The feature index to set.

use

unknown

The new feature value (typed by convention).

Returns

void

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).useFeature


isMaterialTextureEnabled()

protected isMaterialTextureEnabled(_name): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:972

Parameters

_name

string

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).isMaterialTextureEnabled


needFragmentColor()

needFragmentColor(ctx?): boolean

Defined in: libs/scene/src/material/meshmaterial.ts:983

Whether the fragment shader needs to compute color. Returns true for LIGHT pass, or when alpha test or alpha-to-coverage is enabled. Override if the material writes color in other passes.

Parameters

ctx?

DrawContext

Optional draw context; defaults to the last captured drawContext.

Returns

boolean

True if fragment color computation is needed; otherwise false.

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needFragmentColor


outputFragmentColor()

outputFragmentColor(scope, worldPos, color, ssrRoughness?, ssrNormal?, sssProfile?, sssParams?, sssDiffuse?, sssTransmission?, sssProfileEnabled?, skinSSS?): void

Defined in: libs/scene/src/material/meshmaterial.ts:1139

Centralized final color write and per-pass output composition.

Behavior by pass:

  • LIGHT: clipping, alpha handling, optional OIT integration, fog application, color output encoding.
  • DEPTH: encoded depth; optional motion vectors (TAA enabled/disabled handling).
  • OBJECT_COLOR: object color and distance output (linear depth or world-pos + distance).
  • SHADOWMAP: writes shadow depth via light’s shadow implementation.

Also writes SSR roughness/normal buffers when requested via material flags.

Parameters

scope

PBInsideFunctionScope

Inside-function shader scope.

worldPos

PBShaderExp

Fragment world-space position expression.

color

PBShaderExp

Lit fragment color expression; may be undefined for depth-only paths.

ssrRoughness?

PBShaderExp

Optional SSR roughness output expression.

ssrNormal?

PBShaderExp

Optional SSR normal output expression.

sssProfile?

PBShaderExp

Optional SSS profile output expression.

sssParams?

PBShaderExp

Optional SSS packed params output expression.

sssDiffuse?

PBShaderExp

Optional diffuse-only lighting color for SSS composition.

sssTransmission?

PBShaderExp

Optional thin-shell transmission lighting color for SSS composition.

sssProfileEnabled?

boolean = false

True only when this material should write SSS profile data.

skinSSS?

PBShaderExp

Returns

void

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).outputFragmentColor


calculateAlbedoColor()

calculateAlbedoColor(scope, uv?): PBShaderExp

Defined in: libs/scene/src/material/mixins/albedocolor.ts:17

Parameters

scope

PBInsideFunctionScope

uv?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateAlbedoColor


receivesWaterCaustics()

receivesWaterCaustics(): boolean

Defined in: libs/scene/src/material/mixins/lit.ts:27

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).receivesWaterCaustics


needCalculateEnvLight()

needCalculateEnvLight(): boolean

Defined in: libs/scene/src/material/mixins/lit.ts:28

Returns

boolean

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needCalculateEnvLight


getUniformNormalScale()

getUniformNormalScale(scope): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:29

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getUniformNormalScale


getEnvLightIrradiance()

getEnvLightIrradiance(scope, normal): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:30

Parameters

scope

PBInsideFunctionScope

normal

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getEnvLightIrradiance


getEnvLightRadiance()

getEnvLightRadiance(scope, reflectVec, roughness): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:31

Parameters

scope

PBInsideFunctionScope

reflectVec

PBShaderExp

roughness

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getEnvLightRadiance


calculateViewVector()

calculateViewVector(scope, worldPos): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:36

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateViewVector


calculateReflectionVector()

calculateReflectionVector(scope, normal, viewVec): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:37

Parameters

scope

PBInsideFunctionScope

normal

PBShaderExp

viewVec

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateReflectionVector


calculateTBN()

calculateTBN(scope, worldPos, worldNormal?, worldTangent?, worldBinormal?): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:42

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

worldNormal?

PBShaderExp

worldTangent?

PBShaderExp

worldBinormal?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateTBN


calculateNormal()

calculateNormal(scope, worldPos, worldNormal?, worldTangent?, worldBinormal?): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:49

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

worldNormal?

PBShaderExp

worldTangent?

PBShaderExp

worldBinormal?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateNormal


calculateNormalAndTBN()

calculateNormalAndTBN(scope, worldPos, worldNormal?, worldTangent?, worldBinormal?): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:56

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

worldNormal?

PBShaderExp

worldTangent?

PBShaderExp

worldBinormal?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateNormalAndTBN


calculateLightAttenuation()

calculateLightAttenuation(scope, type, worldPos, posRange, dirCutoff, extra?): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:63

Parameters

scope

PBInsideFunctionScope

type

PBShaderExp

worldPos

PBShaderExp

posRange

PBShaderExp

dirCutoff

PBShaderExp

extra?

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateLightAttenuation


calculateLightDirection()

calculateLightDirection(scope, type, worldPos, posRange, dirCutoff): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:71

Parameters

scope

PBInsideFunctionScope

type

PBShaderExp

worldPos

PBShaderExp

posRange

PBShaderExp

dirCutoff

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateLightDirection


calculateShadow()

calculateShadow(scope, worldPos, worldNormal, NoL): PBShaderExp

Defined in: libs/scene/src/material/mixins/lit.ts:78

Parameters

scope

PBInsideFunctionScope

worldPos

PBShaderExp

worldNormal

PBShaderExp

NoL

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).calculateShadow


forEachLight()

forEachLight(scope, callback): void

Defined in: libs/scene/src/material/mixins/lit.ts:84

Parameters

scope

PBInsideFunctionScope

callback

(this, type, posRange, dirCutoff, colorIntensity, extra, shadow) => void

Returns

void

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).forEachLight


fresnelSchlick()

fresnelSchlick(scope, cosTheta, F0, F90): PBShaderExp

Defined in: libs/scene/src/material/mixins/pbr/brdf.ts:14

Parameters

scope

PBInsideFunctionScope

cosTheta

PBShaderExp

F0

PBShaderExp

F90

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).fresnelSchlick


distributionGGX()

distributionGGX(scope, NdotH, alphaRoughness): PBShaderExp

Defined in: libs/scene/src/material/mixins/pbr/brdf.ts:20

Parameters

scope

PBInsideFunctionScope

NdotH

PBShaderExp

alphaRoughness

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).distributionGGX


visGGX()

visGGX(scope, NdotV, NdotL, alphaRoughness): PBShaderExp

Defined in: libs/scene/src/material/mixins/pbr/brdf.ts:21

Parameters

scope

PBInsideFunctionScope

NdotV

PBShaderExp

NdotL

PBShaderExp

alphaRoughness

PBShaderExp

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).visGGX


getVertexColor()

getVertexColor(scope): PBShaderExp

Defined in: libs/scene/src/material/mixins/vertexcolor.ts:11

Parameters

scope

PBInsideFunctionScope

Returns

PBShaderExp

Inherited from

applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getVertexColor

Released under the MIT License.