Dust is a particle simulation, rendering, and instancing system in Unity. It serves as a foundation to apply my experience in GPU programming to Unity's modular, component-based framework. Dust's interface is modeled after the Shuriken particle system, with extended behavior and features incorporated from my previous work with interactive effects. The project is open source and continues to be a work in progress.
In the past, I did a lot of GPU-based effects in fragment shaders working on floating point textures and feedback. While this is very performant and portable, the interface can be cumbersome since each texture is limited to four components. Unity provides direct access to compute buffers and shaders, allowing me to define a particle system more freely and share that structure with different components. At its foundation is a particle simulation that features interactive controls for manipulating forces, coloring based on particle properties, and customizable emission sources. Separately, different rendering components are available to render the particles as either a point cloud, or to instance geometry onto them. The instanced geometry uses Unity’s physically-based lighting and materials to read the particle system’s buffer and apply per-instance vertex and pixel shader changes, affecting their rotation, color, and size. The instances are drawn in Unity’s main render thread, so they appear properly in the depth buffer and are affected by the post processing stack.