Skip to content

[Feature] Particle system: fire, smoke, sparks #1237

Description

@miogds

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions