threejs-worldgen
    Preparing search index...

    Interface ParticleOptions

    Every setting of a ParticleSystem. Plain JSON.

    interface ParticleOptions {
        capacity: number;
        curves: { color: string[]; opacity: number[]; size: number[] };
        emitter: {
            position: [number, number, number];
            shape: EmitterShape;
            size: [number, number, number];
            spread: number;
            temperature: [number, number];
            velocity: [number, number, number];
        };
        forces: {
            ambientTemperature: number;
            buoyancy: number;
            cooling: number;
            drag: number;
            gravity: number;
            gridLift: number;
            turbulence: number;
            turbulenceScale: number;
            turbulenceSpeed: number;
            wind: [number, number, number];
            windShear: number;
        };
        life: [number, number];
        maxPerFrame: number;
        rate: number;
        render: {
            absorption: number;
            albedo: [string, string];
            anisotropy: number;
            aspect: number;
            blackbody: boolean;
            blending: "additive" | "alpha" | "premultiplied";
            capHeight: number;
            detail: number;
            detailDistance: number;
            glow: string;
            glowStrength: number;
            intensity: number;
            lightSteps: number;
            opacity: number;
            refraction: number;
            shading: ParticleShading;
            shadowSteps: number;
            silverLining: number;
            size: number;
            sizeRandom: [number, number];
            softness: number;
            sort: boolean;
            stretch: number;
        };
        seed: string
        | number;
    }
    Index
    capacity: number

    Pool size: the most particles alive at once. Changing it rebuilds the GPU buffers.

    curves: { color: string[]; opacity: number[]; size: number[] }

    Shape over life (0 → 1), each an evenly spaced list of 1 to 8 keys.

    Type Declaration

    • color: string[]

      Colour (#rrggbb); multiplied by the blackbody colour when render.blackbody.

    • opacity: number[]

      Opacity multiplier.

    • size: number[]

      Size multiplier.

    emitter: {
        position: [number, number, number];
        shape: EmitterShape;
        size: [number, number, number];
        spread: number;
        temperature: [number, number];
        velocity: [number, number, number];
    }

    Spawn shape and initial state.

    Type Declaration

    • position: [number, number, number]

      Centre, local space, metres.

    • shape: EmitterShape

      point, box (half extents size), disc (radius size[0], on XZ), sphere (radius size[0]) or sources (see threejs-particles!ParticleSystem.setSources).

    • size: [number, number, number]

      Box half extents / disc and sphere radius in [0]; for sources, the jitter half extents around each source.

    • spread: number

      Random extra speed in a random direction, m/s.

    • temperature: [number, number]

      Initial temperature range, kelvin (drives buoyancy, cooling and blackbody colour).

    • velocity: [number, number, number]

      Initial velocity, m/s.

    forces: {
        ambientTemperature: number;
        buoyancy: number;
        cooling: number;
        drag: number;
        gravity: number;
        gridLift: number;
        turbulence: number;
        turbulenceScale: number;
        turbulenceSpeed: number;
        wind: [number, number, number];
        windShear: number;
    }

    What moves particles.

    Type Declaration

    • ambientTemperature: number

      Ambient air temperature, kelvin.

    • buoyancy: number

      Buoyancy: up-acceleration = 9.81 × buoyancy × (T − ambient) / ambient (Boussinesq).

    • cooling: number

      Exponential cooling towards ambient, 1/s.

    • drag: number

      Drag towards the air velocity, 1/s.

    • gravity: number

      Gravity, m/s² (down).

    • gridLift: number

      With a grid: up-acceleration from the grid's channel 0 (heat h), gridLift × h / (1 + h) m/s².

    • turbulence: number

      Curl-noise turbulence, m/s².

    • turbulenceScale: number

      Eddy size, metres.

    • turbulenceSpeed: number

      How fast the eddies change, 1/s.

    • wind: [number, number, number]

      Air velocity, m/s; drag pulls particles towards it.

    • windShear: number

      Wind grows by this share per 100 m above emitter.position.y (wind shear).

    life: [number, number]

    Life range, seconds.

    maxPerFrame: number

    Most particles spawned in one update (caps catch-up after a long frame).

    rate: number

    Particles per second. With emitter.shape: 'sources' this is per unit of source weight, so a bigger fire front spawns more. Throttled so the pool never runs out (capacity / mean life).

    render: {
        absorption: number;
        albedo: [string, string];
        anisotropy: number;
        aspect: number;
        blackbody: boolean;
        blending: "additive" | "alpha" | "premultiplied";
        capHeight: number;
        detail: number;
        detailDistance: number;
        glow: string;
        glowStrength: number;
        intensity: number;
        lightSteps: number;
        opacity: number;
        refraction: number;
        shading: ParticleShading;
        shadowSteps: number;
        silverLining: number;
        size: number;
        sizeRandom: [number, number];
        softness: number;
        sort: boolean;
        stretch: number;
    }

    How particles are drawn.

    Type Declaration

    • absorption: number

      Smoke: light absorbed per unit of density.

    • albedo: [string, string]

      Smoke albedo for clean (white) smoke and dirty (dark) smoke; particles mix by their source tint.

    • anisotropy: number

      Smoke: Henyey-Greenstein anisotropy (0 isotropic … 0.9 strongly forward).

    • aspect: number

      Height / width of each quad.

    • blackbody: boolean

      Colour from temperature (blackbody) instead of only the colour curve.

    • blending: "additive" | "alpha" | "premultiplied"

      additive (sparks), alpha (smoke) or premultiplied (flames: emit light and partly hide what is behind).

    • capHeight: number

      Smoke: height above the emitter (metres) where the plume caps into bright, dense, sharply billowing pyrocumulus-like cloud. 0 = off.

    • detail: number

      Per-pixel noise detail 0…1 (0 = flat sprites, cheapest).

    • detailDistance: number

      Beyond this camera distance (metres) the per-pixel detail and self-shadow taps fade out.

    • glow: string

      Smoke: warm light from below (#rrggbb), scaled by how hot the particle still is.

    • glowStrength: number

      Smoke: glow strength.

    • intensity: number

      Brightness multiplier (HDR; > 1 blooms).

    • lightSteps: number

      Smoke with a grid: per-particle density steps towards the sun through the grid (0…8). Rebuilds the compute pass.

    • opacity: number

      Opacity multiplier.

    • refraction: number

      Haze: screen-space refraction strength (fraction of the screen).

    • shading: ParticleShading

      Built-in shading: unlit sprites, noise-shaped flame tongues, lit volumetric smoke, thin spark streaks, refracting haze.

    • shadowSteps: number

      Smoke: per-pixel density taps towards the sun (0…4). Rebuilds the material.

    • silverLining: number

      Smoke: extra forward-scattered light on thin edges when back-lit (silver lining).

    • size: number

      Base size (width), metres.

    • sizeRandom: [number, number]

      Random size multiplier range.

    • softness: number

      Soft depth fade against opaque geometry, metres (0 = hard).

    • sort: boolean

      Back-to-front GPU sort (alpha blending).

    • stretch: number

      Stretch along velocity: extra length = speed × stretch (seconds). 0 = camera-facing quads.

    seed: string | number

    Seed for every per-particle random number (spawn position, velocity, size, life).