Computer Graphics

The primary work that I do focuses on computer graphics– Working directly with the algorithms and the code. While most of my experience is with OpenGL, I also have experience with Vulkan. Here are some of my more promient projects.

Shaders

I had the awesome opportunity to take Oregon State University’s shaders course (And TA for it, too)! Along with learning how to write fragment, vertex, and geometry shaders, I learned how to implement noise and reflection to create some dynamic shaders.

Diamond Shader

Uses reflection, refraction, and ray tracing to achieve a diamond look.

Soap Bubble

Imitates a soap bubble using vertex displacement, reflection/refraction, and animated noise.

Chromadepth Twister

A shader that manipulates vertices into a twisting pattern, with the option of implementing position-based color assignment.

Reflection/Refraction

Reflection and refraction on a displaced plane. Different combinations of reflection and refraction yield unique results.

Random Noise

Random noise generator on a sphere with per-fragment lighting.

I had the amazing opportunity to be part of a group that created a game engine in Rust– from scratch! We called it ChatImproVR, a VR-focused game engine with the goal of creating the ultimate chat and social platform for players to enjoy, with a modular design that would allow any number of games to be integrated within each other. With this game engine that we created, we developed a few mini games that could be played at the Oregon State Engineering Expo 2023. It was a hit! The entire day we had kids, adults, and students alike gathering around our little VR headset area and playing all of our games. I was responsible for creating the assets and designing the computer graphics plugins for the engine. I also was the head designer of the Demo Room game, a game that we showed at the expo which allowed you to navigate a house with different rooms and objects in 3D. If you’re interested in what ChatImproVR is, and the team behind it, I put together this promo video. Take a look!

For my Honors Undergraduate thesis, I designed a program and user interface that allows a user to take in an image, and create a painterly rendering from it. I set parameters that allow for specific painting styles (Pointillistic, impressionistic, watercolor, etc.) or the user can adjust the parameters on their own. In the video above you can see me testing out the program on a picture of my dog, Vader.

This was a really great project for me because I developed it over the course of my entire undergrad. From year one, which I used to brainstorm, all the way to the last few months of my college career. In that time I learned so much about computer graphics (and coding in general), and it was a really valuable experience to be able to work on such a long-term project. I was able to learn a variety of different algorithms that work with computer graphics, as well as the writing standards for the computer graphics industry. If you want to read the paper I wrote, or just see some additional pictures of the program in motion, be sure to check it out below!

Also, here’s a brief video that I made explaining what kinds of processes are involved in this project:

Particle System

With this project, I implemented collision and physics in a particle system to have a bunch of rainbow confetti bouncing off of three wireframe spheres. This was a really interesting project, and helped me better understand how colliding bodies can be rendered efficiently, especially when hundreds of thousands of objects are involved.

Working with Vulkan

Fun fact: Oregon State University is one of the only universities to have a designated Vulkan class! In this class I learned all about the differences between OpenGL and Vulkan, and how to navigate this complicated but impressively efficient computer graphics APIs. My projects themselves are pretty basic, because each one focused on a different aspect unique to Vulkan… index buffers, instancing, and vertex data creation. Here’s a few of the projects I worked on  (Enter full screen if you want to read the little blurbs I put in each video):

Index Buffers

Instancing

Vertex Data Creation

WIP- Procedural Content Generation For Flight Simulation

During my time as an intern at Acubed, I had the amazing opportunity to research procedural content generation within the context of flight simulations. Specifically, my work focused on using Unreal Engine to automatically generate foliage in a scene.

While procedural content generation in and of itself is not a new concept, its application in flight simulators was something that has not really been done before. Through this internship I was able to learn so much about the inner workings of Unreal Engine, how to write Unreal plugins in C++, and how to use AI modules and computer vision in order to improve and automate processes which would otherwise be fairly tedious and boring to implement by hand.

WIP - Foliage Generation (Masters Project)

I recently started working toward my Masters degree, and I am currently in the process of developing a foliage generation plugin in Unreal Engine. Similar to how foliage can be generated with procedural content generation (and perhaps in tandem), I want to develop a tool that would allow a user to easily generate a realistic and data-driven forest area based on the desired climate.