Configure particle behaviors and emitter shapes
masterParticle systems in quarks.r3f use classes from three.quarks to define how particles behave over time and where they are emitted.
Behaviors
Use behaviors like SizeOverLife, ColorOverLife, and SpeedOverLife to animate particles. These often take PiecewiseBezier or Gradient objects.
import {
SizeOverLife,
ColorOverLife,
SpeedOverLife,
Gradient,
PiecewiseBezier,
Bezier,
Vector4,
} from 'three.quarks'
const behaviors = useMemo(() => [
// Size fades out
new SizeOverLife(new PiecewiseBezier([[new Bezier(1, 0.8, 0.4, 0), 0]])),
// Color gradient
new ColorOverLife(new Gradient([
[new Vector4(1, 0.8, 0.2, 1), 0],
[new Vector4(1, 0.3, 0.1, 1), 0.5],
[new Vector4(0.5, 0.1, 0.1, 0), 1],
])),
// Speed decay
new SpeedOverLife(new PiecewiseBezier([[new Bezier(1, 0.5, 0.2, 0), 0]])),
], [])
<ParticleSystem behaviors={behaviors} ... />Emitter Shapes
Import shapes from three.quarks to define the emission volume:
ConeEmitter: Good for fire or fountains. Requiresangle,radius, andarc.SphereEmitter: Good for explosions or magic effects. Requiresradiusandthickness.PointEmitter: Emits from a single point.
import { ConeEmitter, SphereEmitter, PointEmitter } from 'three.quarks'
const cone = new ConeEmitter({ angle: 0.3, radius: 0.2, arc: Math.PI * 2 })
const sphere = new SphereEmitter({ radius: 0.5, thickness: 0.2 })
const point = new PointEmitter()import {
SizeOverLife,
ColorOverLife,
SpeedOverLife,
Gradient,
PiecewiseBezier,
Bezier,
Vector4,
} from 'three.quarks'
const behaviors = useMemo(() => [
new SizeOverLife(new PiecewiseBezier([[new Bezier(1, 0.8, 0.4, 0), 0]])),
new ColorOverLife(new Gradient([
[new Vector4(1, 0.8, 0.2, 1), 0],
[new Vector4(1, 0.3, 0.1, 1), 0.5],
[new Vector4(0.5, 0.1, 0.1, 0), 1],
])),
new SpeedOverLife(new PiecewiseBezier([[new Bezier(1, 0.5, 0.2, 0), 0]])),
], [])
<ParticleSystem behaviors={behaviors} ... />