Engine: Unity 3D
Language: C#, HLSL (Compute shaders and fragment shader)
My final year dissertation was focused on producing various effects using real-time fluid simulation, based on the Jos Stam Real-time Fluid Solver. The project was initially focused on producing explosions using particle suspension.
The particle suspension technique injected fuel particles into the fluid which would then burn causing temperature increases in the fluid, leading to disruption which in turn moved the particles. I implemented a custom particle solution on the GPU that in turn interacted with a GPU fluid simulation. The particles are then voxelised into a 3D volume and ray-marched.
It wasn’t quite how I wanted it to turn out, but this was fairly experimental and does produce interesting effects. This video shows 600 000 particles interacting with a 128x128x128 fluid simulation:
The fluid simulation I had made, was split up into modules that interfaced with compute shaders that would manipulate the simulations various grids. Due to this design, I realised I could quickly create a variety of different effects quite quickly. I decided to refocus the project on more general fluid simulation effects, implementing dynamic interactions and methods of instancing the simulation for use in a real-time game.
Early Prototype Videos
Fluid simulated smoke colliding with a sphere:
The following shows the use of a spherical container to trap a fluid simulated smoke effect:
In this video I utilise fluid wrapping and instancing to produce a Dark Souls style smoke door: