Digital Painting Program
Javascript · WebGL
As my computer graphics senior thesis, I created a lightweight, user-friendly digital painting program for artists. Inspired by programs like Procreate and Photoshop, users can mix oil-like paint on the canvas, adjust various brush and paint settings, and dynamically light and texture their painting with a 3D appearance — all in the browser.
Pixar Internship Projects
Maya · Houdini · Katana · Pixar proprietary tools
As a Pixar Undergraduate Program (PUP) intern, I was trained in several technical departments including effects, lighting, rigging, and shading. I completed the following projects:
A short film in collaboration with 8 other interns, where I worked on character model/rig/shade, lighting, and visual development
A Medusa model/rig/shade project
Peacock-themed firework FX over a scene in Coco
Mini Minecraft
C++ · OpenGL/GLSL
I worked in a team of three to develop a simplified version of Minecraft in C++.
I implemented the following components:
Randomized weather (rain, snow, and thunderstorm variants)
Raytraced sky shader
Day and night cycle, stars
Shadow mapping
Chunk-based terrain rendering using interleaved VBOs
Windy leaves and grass
Blinn-Phong shading, noise-based normals displacement, and UV animation for water
Mini Maya
C++ · OpenGL/GLSL
A 3D mesh editor that allows the user to transform vertices, color and triangulate faces, perform Catmull-Clark subdivision, import OBJ and JSON files, and bind the mesh to a skeleton whose joints can then be transformed. It incorporates a half-edge data structure that uses pointers to efficiently navigate the mesh.
Procedural Jellyfish Tool
Houdini · VEX · Mantra
A procedural tool and user interface that lets the user fine-tune dozens of different parameters to generate a jellyfish. The user can also scrub through a seed to quickly generate endless infinite random jellyfish variations.
Monte Carlo Path Tracer
C++ · OpenGL/GLSL
A GPU path tracer following the textbook Physically Based Rendering. It uses a global illumination lighting integrator that computes both the direct lighting and global illumination at each ray intersection sample. It also includes multiple importance sampling, environment lighting, and specular transmission and reflection BxDFs.
Physically-Based Shading Model
C++ · OpenGL/GLSL
A PBR shader that computes an approximation of the Light Transport Equation through the implementation of the following:
Microfacet BSDF (using Cook-Torrance and Lambertian BRDF components)
Diffuse and glossy (specular) irradiance maps
Specular image-based lighting
Normal and displacement mapping through the vertex shader
Stylized Game Shaders
HLSL · Unity
Procedural vertex, fragment, and post-process toon shaders involving noise algorithms for texturing. Using Unity’s URP Pipeline, I rendered depth and normal buffers to implement post-process outline detection.
FK & IK Solvers
C++
Implementations of forward kinematics, limb-based inverse kinematics, and cyclic coordinate descent (CCD) inverse kinematics using matrix calculations.
During a walk cycle, IK is used to orient the character’s feet when it walks on sloped terrain.
OpenGL Shaders
OpenGL/GLSL
Various surface and post-process shaders written in GLSL, including:
Blinn-Phong
Matcap
Color gradient
Vertex deformation
Gaussian blur
Sobel
Bloom
Worley noise-based pointillism