A collection of some projects I've worked on
A mobile puzzle game in which the character platforms within a 2D cross section of a 3D world. Players have the ability to swipe and
rotate the cross section in arbitrary angles around the character in real-time, which in turn alters the 2D platforming segment. I
was the project lead of the team of 8 working on it, which included programmers, artists, UI/UX designers, and a composer.
I focused on the graphics work, which involved a deferred pipeline with 8 shader passes in C++ and OpenGL. The pipeline features
3D mesh rendering, 2D cut logic and culling, billboarding, point and ambient lighting, fog shading, animation,
normal mapping,
pixelate/ripple effects, and far more. My code was extremely efficient to allow the game to run in real-time despite the intensive
re-computation of the physics world every rotation frame.
The game won the “Most Innovative” award during the end-of-semester showcase, and I was the sole recipient of an A+ in a class of 96 students due to technical contributions.
Windows Build, Mac Build (coming soon), iOS Testflight Link
Integrated Vulkan ray tracing into an existing rasterization framework to enhance visual quality. Implemented acceleration structures, double buffering, texture/material/environment mapping, area illumination, and anti-aliasing. Completed as a means to foray into the world of low-level graphics APIs, which I found to be very rewarding.
A 2D puzzle-platformer game created by a team of 8 for desktop computers. I focused mainly on the graphics work by creating a custom deferred shading pipeline using LibGDX's OpenGL integration. The pipeline included lighting, normal mapping, parallax, smooth camera movement, and additional shader passes for special effects. Other than graphics work, I worked on level design, code architecture, playtesting, game concepts, and much more.
A real time CPU-based path tracer using Embree combined with a rasterizer using OpenGL. Computes illumination from area and environment lights using microfacet materials and Monte Carlo techniques. Uses a deferred pipeline to achieve shadow mapping, SSAO, and a bloom filter with a sun-sky model. A forward pipeline is used to support skeletal animation. The application uses assimp to parse .obj and .glb files, and renders them at interactive rates.
Source Code (currently only available to members of the Cornell community)
A simulation capable of running 200,000 particles at over 60fps. Features include 3D collision optimized via spatial subdivision, dynamic particle regeneration, and textures dictating color, mass, and acceleration fields. The user is able to “draw” on the simulation, creating a current in the acceleration field, and is able to move the camera freely. Inspired by Refik Anadol: Unsupervised, this project is meant to deliver an aesthetically pleasing and interactive user experience. This was written using Taichi and was worked on with a group of four.
Source Code (currently only available to members of the Cornell community)
An implementation of a CPU-based ray tracer in C++ using SFML to display the image. The user is able to select from several different presets to render in any resolution. The ray tracer uses perspective cameras, ray-sphere and ray-triangle intersection, the Blinn-Phong model, shadows, and mirror reflection.
A procedurally generated landscape visualized using the Marching Cubes algorithm in Unity. Terrain generates using several octaves of simplex noise, with its output modifying the ground’s height. Compute Shader code executes the Marching Cubes algorithm on the terrain and represents it with a mesh object. Additional features include chunking of terrain, proximal generation of chunks around the usable camera, and building/destroying terrain. This was my final project for Computer Graphics that was completed with two peers.
Source Code (currently only available to members of the Cornell community)