Skip to content

Documentation / scene / HairStrandData

Class: HairStrandData ​

Defined in: libs/scene/src/material/hairstrand_data.ts:73

GPU-resident strand geometry for HairStrandMaterial.

Remarks ​

Strands live in storage buffers rather than vertex buffers, because the ribbon geometry is generated in the vertex shader from the control points rather than stored. That is what makes a full-density hair set affordable: the CPU-side ribbon for a 69k-strand cap costs 266 MB of vertex data, while the control points it was built from are around 20 MB.

Two buffers:

  • Headers, one per strand: first point index, point count, packed root UV, and a seed for per-strand variation.
  • Points, one per control point: position and width.

Both are read-only to the render pass. A simulation pass may write the point buffer in place, which is why positions and widths are interleaved: a solver touches position and leaves width alone, and keeping them in one buffer avoids a second binding.

Extends ​

  • Disposable

Constructors ​

Constructor ​

new HairStrandData(source): HairStrandData

Defined in: libs/scene/src/material/hairstrand_data.ts:89

Uploads strand geometry to the GPU.

Parameters ​

source ​

HairStrandSource

Strand control points and topology.

Returns ​

HairStrandData

Overrides ​

Disposable.constructor

Accessors ​

disposed ​

Get Signature ​

get disposed(): boolean

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

Returns ​

boolean

Inherited from ​

Disposable.disposed


strandCount ​

Get Signature ​

get strandCount(): number

Defined in: libs/scene/src/material/hairstrand_data.ts:181

Number of strands.

Returns ​

number


pointCount ​

Get Signature ​

get pointCount(): number

Defined in: libs/scene/src/material/hairstrand_data.ts:185

Total control point count across all strands.

Returns ​

number


maxPointsPerStrand ​

Get Signature ​

get maxPointsPerStrand(): number

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

Largest control point count of any single strand.

Returns ​

number


headerBuffer ​

Get Signature ​

get headerBuffer(): GPUDataBuffer<unknown>

Defined in: libs/scene/src/material/hairstrand_data.ts:193

Per-strand header buffer.

Returns ​

GPUDataBuffer<unknown>


pointBuffer ​

Get Signature ​

get pointBuffer(): GPUDataBuffer<unknown>

Defined in: libs/scene/src/material/hairstrand_data.ts:197

Per-control-point buffer holding position and width.

Returns ​

GPUDataBuffer<unknown>


byteLength ​

Get Signature ​

get byteLength(): number

Defined in: libs/scene/src/material/hairstrand_data.ts:201

Bytes of GPU memory held by the two buffers.

Returns ​

number

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 ​

Disposable.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 ​

Disposable.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 ​

Disposable.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 ​

Disposable.dispatchEvent


dispose() ​

dispose(): void

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

Returns ​

void

Inherited from ​

Disposable.dispose


onDispose() ​

protected onDispose(): void

Defined in: libs/scene/src/material/hairstrand_data.ts:204

Returns ​

void

Overrides ​

Disposable.onDispose

Released under the MIT License.