Goal
The game needs effects: a torch burning, smoke from a chimney, sparks off a blade, dust when something breaks, rain, a spell, an explosion. The engine has no particle system at all today, so none of that can be authored.
The goal is a GPU particle system: emitters are components a designer places and tunes in the editor (spawn rate, lifetime, velocity, size and colour over life, gravity and drag, texture or flipbook), and simulation and drawing happen on the GPU with no CPU readback, so thousands of particles cost the CPU nothing per frame. Particles are lit by the scene, receive shadows, fade softly where they meet geometry, collide with the depth buffer and with Jolt bodies when asked, sort correctly with the scene's transparency, and render in stereo on visionOS with vertex amplification so both eyes share one simulation. Smoke lives here as emitted sprites; fog is atmospheric and has its own issue ("Fog: distance, height and volumetric"). The render-extension plugin path (CoolCloth, CoolWater) shows how a GPU-simulated effect plugs in, and the plugin-systems plan already lists particles as the first user of graph caching and indirect arguments, so the first decision is plugin or core.
Status
| Step |
Plan |
Status |
| Requirements |
Effect list for the game (fire, smoke, sparks, dust, rain), budgets per platform, authoring model (component with curves and gradients, or asset files) |
Not started |
| Simulation |
Emitter and particle buffers on the GPU, spawn and update kernels, indirect draw arguments, sorting for transparency, collision against the depth buffer and Jolt bodies |
Not started |
| Rendering |
Billboards and stretched sprites, flipbooks, soft particles, lighting from the scene, shadows received; stereo with vertex amplification |
Not started |
| Composed effects |
Several emitters and a light flash saved as one effect and triggered as one; explosions (flash, fireball flipbook, smoke, sparks, debris) are the first; the impulse and damage side lives in the destruction issue |
Not started |
| Engine seams |
Graph caching, a frame-start stage and indirect-argument resources in the render graph (plan C3), if the system lives as a plugin |
Waiting for decision |
| Editor |
Emitter component in the Inspector with live preview |
Not started |
| Sample |
Fire and smoke on one of the demos |
Not started |
Next steps
- Decide plugin or core (the plan's stage 5 assumed a plugin over graph-caching seams).
- Requirements note, then the spawn/update kernels with a debug sprite.
Goal
The game needs effects: a torch burning, smoke from a chimney, sparks off a blade, dust when something breaks, rain, a spell, an explosion. The engine has no particle system at all today, so none of that can be authored.
The goal is a GPU particle system: emitters are components a designer places and tunes in the editor (spawn rate, lifetime, velocity, size and colour over life, gravity and drag, texture or flipbook), and simulation and drawing happen on the GPU with no CPU readback, so thousands of particles cost the CPU nothing per frame. Particles are lit by the scene, receive shadows, fade softly where they meet geometry, collide with the depth buffer and with Jolt bodies when asked, sort correctly with the scene's transparency, and render in stereo on visionOS with vertex amplification so both eyes share one simulation. Smoke lives here as emitted sprites; fog is atmospheric and has its own issue ("Fog: distance, height and volumetric"). The render-extension plugin path (CoolCloth, CoolWater) shows how a GPU-simulated effect plugs in, and the plugin-systems plan already lists particles as the first user of graph caching and indirect arguments, so the first decision is plugin or core.
Status
Next steps