Some projects I’ve made :)

2022

Animation Controller & Pathfinding on Deformable Terrain

Animation controller came from my CS 560 (Advanced Animation and Modeling I) class. Real-time navmesh on deformable terrain was my research project for CS 580 (Artifical Intelligence for Games).

Written in C++ with Vulkan 1.3. All math is custom as well.

The Marching Cubes terrain can be deformed and the navmesh is updated in real-time. The red panda follows a Catmull-Rom spline and blends between animations based on velocity (as can be seen at the end). Red Panda model and animations are by Omabuarts Studio.

Path Tracer

CPU Monte Carlo Path Tracer for my CS 500 (Ray Tracing) class. Written in C++.

Implements microfacet BRDF with GGX, refractions with Snell’s law and absorption with Beer’s law as well as multiple importance sampling, depth of field with image based custom bokeh, and image based lighting.

image based lighting example of custom heart bokeh
Glass bunny with image based lighting Depth of field with custom heart bokeh

Bézier and B-Spline Curves

Bézier and B-Spline curve renderer and editor for my MAT 500 (Curves and Surfaces) class. Written in C++ with OpenGL and Dear ImGui.

Allows for rendering and editing of a Bézier curve given some control points. Three rendering algorithms are implemented: NLI (De Casteljau), Bernstein-Bézier form, Midpoint Subdivison.

sandy in cursive with b-splines
Video of Bézier curves being created in editor My name written with B-Splines using De Boor’s algorithm

2021

ivy

First attempt at a proper Vulkan renderer, nicknamed ‘ivy’. Written in C++ with Vulkan.

Implements deferred rendering with dynamic point shadows, physically-based shading, and volumetric fog. Tries to wrap Vulkan nicely for fast prototyping. Also has a simple entity component system implementation. Code available here. Post mortem available here.

ivy example image with volumetric lighting

2020

acorn

Experimental PBR renderer, nicknamed ‘acorn’. Written in C++ with OpenGL.

Implements deferred rendering, physically-based shading, image based lighting. Code available here.

acorn example image

maple

Simple compute shader path tracer, nicknamed ‘maple’. Written in C++ with OpenGL.

Implements triangle intersection in compute shader and allows you to render any triangle mesh… slowly (due to no acceleration structure). Code available here.

maple example image

2019

Various experiments with different graphics techniques

All in C++ with OpenGL

Surfel global illumination experiment Screen space ambient occlusion and bloom
surfel gi image ssao and bloom
Stylized cartoon water shader and cel shading Stylized lighting
water shader and cel shading stylized lighting

2018

Marching Cubes Terrain

A tech demo with a procedurally generated world. Chunk meshes are generated as voxels and turned into triangle meshes using the marching cubes algorithm. Chunk generation is multithreaded as well.

Also had some networking for some reason, allowing you to send chat messages.

Frustum culling LOD generation Chatting
frustum culling frustum culling frustum culling

Older

And there are quite a few older projects too. Hopefully I can find time to recreate some of them :)