Software Engineer
In my free time, I've been writing a real-time 3D renderer in C++ and Direct3D. These are some test shots of hardware-accelerated ambient occlusion using the algorithms discussed in this GPU Gems article. In a nutshell, the occlusion is approximated by shadow-mapping 512 point lights in a surrounding hemisphere. 512 passes are accumulated in a floating point buffer, each pass rendering the object under the influence of a single light.
Each frame takes just over 200 milliseconds to render on my GeForce GTX 970, so it's not exactly real time. Improvements could be made by caching the static occlusion information in non-overlapping UV textures.
Strike! A simple physics simulation I set up for my Digital Effects Animation class in Maya 2015.
For my final project of Digital Effects Animation, I choose to simulate a vortex. The simulation and rendering was designed by myself in Maya 2015. I used Maya expressions to control the particle emitter animation to add spin and movement.
My first venture into low-level computer graphics was through my sophomore year Introduction to Computer Graphics course. I wrote a raytracer in C, implementing techniques such as anti-aliasing, soft shadows, and reflections. We were required to write polygonal and spherical intersection code. The project paved the foundation for my job with CSB Digital, where graphics knowledge was key.
The Space Coaster was a project for my Introduction to Computer Graphics course. We were required to load spline data from a file, render it as a roller coaster, and derive the necessary math to glide the camera along the ride. The project utilized only C and OpenGL. The design of the coaster and its surroundings were left to us. I also implemented motion blur to increase realism.
The 3D Terrain was my first project for my Introduction to Computer Graphics course. I loaded a black and white image representing height data and generated a textured, 3D terrain. We were also required to write the necessary math code to transform the scene according to mouse movement.
The height data
The texture
Scheduwolf was a website I built with the help of fellow USC students in our free time. The project started when I was registering for Fall 2012 courses. Each course I needed had multiple options for lecture, discussion, and lab times. The multitude of possible schedule combinations quickly multiplied- nearing the thousands. Given USC's clunky web registration interface, I wanted to devise a way for students to automatically optimize their schedules given a set of desired courses. I set out writing an algorithm to search for the most optimum schedule, given parameters the typical college student was interested in such as "no class on Friday" and "classes later in the day."
Unfortunately, due to server costs, the site had to be taken down. The video to the right demonstrates the interface of the website. The user adds a few classes and navigates through potential schedules.
Sim City was a project for my Principles of Software Development class. I worked with a team of 4 other students to develop a multi-threaded city simulation. Each person in the city is represented by a single thread, which handles both logic and animation. My job was to code and animate the "market" inside of the city, including the market employee and market manager. The video to the right depicts one particular scenario with the animations and artwork I created.
The summer before my freshman year in high school, my family decided to get a dog. What better way to welcome her to the pack than by using her in one of my visual effects tests? Although this silly video is only five seconds long, it managed to get over 50,000 views on Youtube.