top of page


Water Shader & Buoyancy System

Water Buoyancy Demo

For this project, I challenged myself to do build a water shader that used vertex offset in such a way that I could use that offset to simulate things that relied on the surface of the water, like buoyancy.  As such, all vertex calculations are done on the CPU and cross-applied to the buoyancy system, while the shading on the surface of the water is handled separately in a GPU shader.  

Procedural Generation

For Greatest City, I built a procedurally generated world system.  It operates at runtime and compile-time and is able to generate new terrain or load old save files.  

I was also responsible for creating shaders for the environment and the character, including features such as distance blending, randomly generated splatmaps, vegetation shaders with sub-surface scattering for the foliage, and simulated ambient occlusion.  


This skybox was one of my capstone projects during my studies at Michigan State University.  It features procedurally generated clouds and stars, moving parts, and a day/night cycle with a sunset/sunrise.

SnakeHook:  Maya Extrude Tool

This tool was meant to be a way to bring the functionality of Zbrush' 'SnakeHooks' brush to Maya to create a more intuitive method for extruding long pipes and branches off of surfaces.  The user selects a face, switches to the tool, and then clicks and drag to indicate where they would like the extrusion.  It works with any selection size and has a clean undo stack, allowing users to undo any amount of the extrusion at will.

Some handy features include:

-A UI window to go along with the tool and give access to its values.

-Resolution customization.  Users can choose to have more or fewer edge loops as they extrude.

-Automatic tapering to form things like branches or tentacles with a sharp point.

Avatar Creation System

During my time at the Games for Entertainment and Learning lab, I worked on the game Tahir's Playbook, and my primary project was setting up an Avatar Creation system to be used for all of the characters in the game.  The game was for mobile, so a lot of work had to be spent on shaders used, keeping the number of meshes low, and optimizing it at runtime.

bottom of page