Projects

Including my personal research projects and academic projects.

NARUMI

Narumi is an physically based renderer for research and self-education purpose. Because of its self-education purpose, Utopia is mostly written from scratch. It is written in C++, and (so far) only runs on CPU. Utopia is my personal rendering playground.

 
Harsh Light

HarshLight is an implementation of the voxel cone tracing based global illumination, a popular GI solution used in several major game engines these days. It successfully reaches interactive framerate rendering a medium to large scale scene with no precomputation and dynamic lights. The approach is able to capture both indirect diffuse and glossy illumination.

HarshLight is built from scratch, using C++ and OpenGL. A basic deferred pipeline is built for more efficient cone tracing.  Several other effects, including soft shadows, are combined with GI to the composite the final visual.

 
MANGO FLUID

Mango Fluid is a real-time fluid simulation application using smooth particle hydrodynamic method. It includes a GPGPU version of SPH simulation, a GPGPU version of Marching Cube algorithm to visualize the fluid, and a simple water shader (transparent, reflective) to render the fluid. Since the nature of SPH and Marching Cube is parallel, implementing them on GPU introduces significant performance improvement.

The project is done in Unity and Direct Compute. In order to parallelize the algorithms I also touched various parallel computing topics such as parallel reduction and sorting.

PLE Crowd Simulation

Crowd Simulation has always been an interesting topic in the field of CG and AI. This project re-implements an novel crowd simulation approach which is based on the Principle of Least Effort (PLE). The approach is able to generate smooth, collision-free, and natural-looking trajectories for thousands of moving agents in real time.

 

The project is first implemented in C++, with some parallel optimization by OpenMP. Later I have also made a simple plugin for Unity.

 
 
Volumetric TerraiN

Explore the more realistic approach to generate and render volumetric terrain instead of traditional heightmap-based terrain in virtual environment. GPU-based implementation of Marching Cube with triplanar texturing. Real-time terrain manipulation based on CSG operation.

 

This project is inspired by the first chapter of GPU Gem 3. However, I have implemented the algorithm by Unity and DirectCompute. I have also managed to add procedural noise to create nice visual variation.

 

 
Procedural Pavement

A number of computer graphics practices and experiments under the subject pavement. These include procedural mesh generation, curves, relief mapping, and procedural noise.

 

This project ends up providing a custom tool of Unity which allows the user creating pavement mesh on terrain by combination of lines, arcs and bezier curves. The generated pavement mesh is textured by relief mapping, a more advanced displacement mapping approach compared to parallax mapping. Finally, procedural noise is applied for more realistic effect (dirt / moss, etc).