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
MeshMaterial<this> &object&TextureProp<"normal"> &object&object&object&object&TextureProp<"albedo"> &object&object&object&IMixinPBRBRDF&IMixinVertexColor&TextureProp<"specularShift"> &object&object&object&TextureProp<"occlusion"> &object&object&object
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
Set Signature
set strandDirection(
val):void
Defined in: libs/scene/src/material/hair.ts:205
Parameters
val
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
Set Signature
set shadingModel(
val):void
Defined in: libs/scene/src/material/hair.ts:432
Parameters
val
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
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
Set Signature
set blendMode(
val):void
Defined in: libs/scene/src/material/meshmaterial.ts:621
Parameters
val
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
Current draw context.
pass
number
Current material pass index.
Returns
void
void
Overrides
applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).applyUniformValues
vertexShaderImpl()
protectedvertexShaderImpl(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()
protectedgetNumPassesForRender(_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
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
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.numInstancesif available. - Else issues a non-instanced draw.
Parameters
pass
number
Pass number.
primitive
Primitive to draw.
ctx
Draw context.
numInstances
number
Explicit instance count (0 = auto).
Returns
void
Inherited from
applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).drawPrimitive
onDispose()
protectedonDispose():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
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()
staticdefineFeature():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()
staticdefineInstanceUniform(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
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
defineInstanceUniformwith getter/setter that read/write the packed buffer and notifyRenderBundleWrapper. - 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()
protectedgetEffectiveBlendMode(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?
Returns
Inherited from
applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).getEffectiveBlendMode
getActiveAlphaCutoff()
protectedgetActiveAlphaCutoff(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?
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?
_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()
protectedusesAlphaCutoff(ctx,pass):boolean
Defined in: libs/scene/src/material/meshmaterial.ts:758
Whether this pass needs an alpha-cutoff uniform bound.
Parameters
ctx
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?
Returns
boolean
Inherited from
applyMaterialMixins( MeshMaterial, mixinLight, mixinPBRBRDF, mixinVertexColor, mixinTextureProps('specularShift'), mixinTextureProps('occlusion') ).needFragmentColorInput
updateRenderStates()
protectedupdateRenderStates(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
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?
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()
protectedisMaterialTextureEnabled(_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?
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