- Collision module (Planes and World): a particle crossing a plane or a collider (a raycast along its step, offset by its radius) stops at the contact, its velocity's normal part reverses by bounce, the whole scaled by 1 - dampen, and it moves on for the rest of the step; lifetimeLoss takes a share of its start lifetime; minKillSpeed/maxKillSpeed test the incoming speed, and a particle a collision kills stays one more frame with no lifetime, as Unity's does. OnParticleCollision goes to the system's GameObject, then the collider's; GetCollisionEvents gives the contacts.
- The
particle_collisionscenario (a particle bouncing on a plane with bounce, dampen and lifetime loss; one on a BoxCollider in World mode until minKillSpeed kills it, with messages; the three modules' defaults) matches Unity exactly; 50 scenarios pass. - Noise module: particles move (and turn) by smooth 3D gradient noise at their positions (strength per axis, frequency, scroll speed, octaves, damping). Unity's noise field itself isn't reproduced.
- Trails module: each particle keeps the points it passed (every minVertexDistance, each living lifetime x the particle's lifetime); the renderer draws them with its trail material as camera-facing segments, width and color over the trail (and colorOverLifetime, inheriting the particle's color). Unity scenes and the editor's JSON form carry all three modules.
- A
particles_fxsample: a spark fountain with noise, trails and bounces on the floor. - Not yet: ribbon trails, trail texture modes, lights, sub-emitters, triggers, external forces, 2D collision, collision quality and voxel caching (every particle raycasts).
- Next: TextMeshPro SDF effects (outline, underlay, softness).
Phase 5 · Slice 29 ·