Skip to content

MaterialEffect

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:184

Base class for per-sprite shader effects.

Each MaterialEffect subclass defines:

  • effectName — unique name for the effect
  • effectSchema — per-sprite data schema with default values
  • buildNode() — TSL node builder for the effect shader

Each MaterialEffect instance:

  • Has typed property accessors for each schema field
  • Uses the snapshot pattern for pre-enrollment staging
  • Dual-writes to ECS traits and packed GPU buffers
class DissolveEffect extends MaterialEffect {
static readonly effectName = 'dissolve'
static readonly effectSchema = { progress: 0 } as const
declare progress: number
static buildNode({ inputColor, attrs }: EffectNodeContext) {
return mix(inputColor, vec4(0, 0, 0, 0), attrs.progress)
}
}
const DissolveEffect = createMaterialEffect({
name: 'dissolve',
schema: { progress: 0 },
node({ inputColor, attrs }) {
return mix(inputColor, vec4(0, 0, 0, 0), attrs.progress)
},
})

new MaterialEffect(): MaterialEffect

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:326

MaterialEffect

readonly id: number

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:295

Unique instance ID (like Three.js object ids).


readonly name: string

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:298

Effect name (from static).


static _nextId: number = 0

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:292

Auto-incrementing unique ID for debugging.


static channelNode: ((channelName, context) => Node ) | null = null

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:196

Channel node builder — produces TSL nodes for declared channels.


readonly static effectName: string

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:190

Unique effect name. Must be overridden by subclass.


readonly static effectSchema: EffectSchema

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:192

Per-sprite data schema with default values. Must be overridden by subclass.


readonly static provides: readonly keyof ChannelNodeMap[] = []

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:194

Per-fragment channels this effect provides (e.g., [‘normal’]).

static buildNode(_context): Node <"vec4">

Defined in: packages/three-flatland/src/materials/MaterialEffect.ts:215

TSL node builder. Must be overridden by subclass (class-based path). The factory path sets this via static assignment.

EffectNodeContext

Node <"vec4">