Here is a short demo of my accelerated GPU Particle System for Unity. This Particle System, when finished, should be an easy-to-use tool to handle millions of particles in real-time. Rendering and Physics are completely processed on GPU through compute shader kernels.
SCREEN SPACE RENDERING
I also made some research to be able to get fluid-like rendering. I found many techniques on the web but here is the document from Nvidia that brought me light on this subject. Based on it, I made all the rendering steps (point sprite, depth to normal, blurring, bilateral filter…). Caustics render pass isn’t done yet and I didn’t implement good physics kernels yet. Particles aren’t interacting each other but only interacting with buffered colliders from the scene.
- Emitter rate and radius
- Forces and angular forces
- Size over time
- Particle Age
- Enable/Disable gravity (values from the Unity physic engine)
- Noise on velocities
- Change color over time
- Bounce and impact parameters
- Soft particles rendering
- GPU Collision Detection based on Unity colliders (bufferize scene colliders to interact with particles)
- Screen Space Rendering for Fluids (experimental)
- Complex Mesh and Terrain Collision on GPU side
- Attract and Repel Force Areas
- All kind of Blend mode for rendering
MARCHING CUBE APPROACH
Lots of metaballs can be heavy for a CPU process. I absolutely wanted to implement a compute shader approach of it … to see what are the possibilities in Unity to get a real-time fluid effect.
The result is not bad, still heavy with a high definition lattice but it can be managed in a small area with a good FPS (120-150 here).
Isosurface and Marching Cube algorithms are not an easy subject but I found interesting articles and I ported some C++ sources (DirectX10) from Nvidia to Unity (DirectX11). Here are some links: