OptionalcapacityMost particles. Fixed at construction.
OptionalcellGrid spacing Δx, metres. Particles are emitted 2 per cell per axis (8 per cell). Fixed at construction.
OptionalcflCourant number C of the stable step dt ≤ C·Δx / (maxSpeed + sound speed) (see mpmStableStep).
OptionalfrictionTerrain friction coefficient (Coulomb): 0 slips, large values stick.
OptionalgravityGravity, m/s².
OptionalheightTerrain height under the domain, world metres (e.g. (x, z) => world.height(x, z)). None: no ground.
OptionalmaterialsMaterials compiled in (keys, fixed at construction) and their parameters (live).
OptionalmaxParticle speed limit, m/s: the "max particle speed" of the stable step, enforced in G2P.
OptionalmaxMost substeps per frame; past it the simulation runs slower than real time instead of going unstable.
OptionaloriginWorld position of the domain's minimum corner, metres. Moving it shifts the domain by whole cells (the particles keep their world positions; those left outside freeze). Floating-origin safe: the GPU only sees positions relative to it.
OptionalrenderDrawing through the particle pool's unlit shading.
Optionalcolors?: string[]Colour ramp by volume change J: first key squashed, middle at rest, last stretched (1 to 8 #rrggbb).
Optionalopacity?: numberOpacity.
Optionalsize?: numberSprite width, in particle spacings (Δx / 2).
OptionalstrainScale?: numberHow much volume change spans the colour ramp: key = 0.5 + (J − 1) × strainScale.
OptionalresolutionGrid nodes along x, y, z (8…160 each). Fixed at construction.
OptionalseedSeed for the emission jitter.
OptionalsubstepsSubsteps per frame at least. More are added when the frame is longer than the stable step allows.
OptionalwallsDomain sides act as slip walls (else particles that leave the domain freeze).
Construction options of an MPMSolver: settings plus the terrain (not JSON).