This is a hobby project with the goal of exploring GPU-based particle system implementations. Particle emission and simulation both run fully in compute shaders and all state related to particle systems is resident only on the GPU. Buffers and indirect dispatching is used to communicate between passes. Indirect draw is used to create draw calls for rendering on the GPU.
Basic particle system using a spherical emitter with randomized direction. Gravity, drag and wind velocity are applied in each simulation step. Particles can collide with the ground plane.
Smoke simulation with volumetric shadows using half-angle slice rendering and curl noise. Particles are sorted on the GPU using radix sort.
Disintegration effect inspired by God of War. Emits particles from depth prepass. Fragments are discarded based on a noise texture and an animated discard threshold within depth prepass, and for each particle that went from visible to not visible during the frame, a particle is emitted.
Uses two particle systems where one acts as the parent and one as the child. The movement is simulated in the parent system using divergence-free noise to generate a velocity field conforming to the surface of a sphere. The child system gets its dispatch size based on the number of the particles in the parent system and its own emission rate. Trails are formed by lots of small particles emitted by the child particle system.
Clone the project:
git clone --recursive https://github.com/sasamiyatu/GigaVFX.git
cd GigaVFX
Build with CMake:
cmake -S . -B build
cmake --build build
Run the test scene
build\Debug\gigavfx.exe data\test.glb