I am a junior at the University of Pennsylvania, pursuing a BSE in Digital Media Design. I am interested in computer graphics and hope to utilize my technical skills and creativity to help expand the possibilities for artists.
This past summer, I worked at Pixar Animation Studios as a Pixar Undergraduate Program (PUP) intern. There I experienced different stages of the studio's pipeline each week through instruction, projects, and reviews. Mentors in the relevant fields guided weekly individual projects, concluding in a group short film and a final personal project. I am returning to Pixar this coming summer as a Global Technology Technical Director intern, where I will write software to improve workflow and provide film-specific functionality for various departments.
I am currently a Teaching Assistant for The Introduction to Algorithms (CIS 320), an advanced level algorithms course, focused on graph traversals, data structures, network flows, dynamic programming, and more. This past fall, I was a Teaching Assistant for The Introduction to Computer Graphics (CIS 460). As a sophomore, I was a Teaching Assistant for The Mathematical Foundations of Computer Science (CIS 160), a course on discrete mathematics.
For my final project as a PUP intern, I used Houdini to procedurally generate patterns for butterfly wings. The patterns are produced along the topology of the butterfly and then mapped to UV space. An orthographic camera renders the UV projection to a texture, which is then used to shade the wings.
There are four categories of patterns: veins, stripes, spots, and eyes. Veins are generated either with shortest edge paths from the inner corner of the wing to the outer rim, or with a radially warped voronoi cell pattern. Stripes are generated by various distance ramps from the inner corner of the wing. Spots are varying sizes and densities of voronoi cells. The eye spots are produced with distance ramps centered towards the outer portion of the wing.
I shaded the butterflies in Flow, mixing random combinations of colors and the generated textures. The randomization depended on the model ID, so each butterfly is assigned a different combination, which is evident in the scene below with over 80 unique butterflies.
Software used: Houdini, Flow, Presto, Katana, Renderman, Adobe Photoshop
Mesh to UV Mapping
Orthographic Camera Setup
As an independent study project, a classmate and I created a short environment scene to experience working through a complete production pipeline from start to finish. We created a nighttime boardwalk scene with waves lapping underneath a peaceful pier lit by carnival lights in the background.
I am responsible for simulating and surfacing the water in Houdini using the FLIP Solver. I simulated the concession stand awnings blowing in the wind using nCloth in Maya. I modeled the benches, lamps, the base of the boardwalk, and the sand, all of which was done in Maya except the sand, which was done in Houdini. I shaded the benches, lamps, railings, sand, and the water. Other than the water, which was shaded directly in Maya, all shading was done in Substance Painter. I contributed to lighting the scene, particularly refining the general lighting, and lighting the water. I set up the camera composition and movements, and then rendered the scene with Arnold.
Software used: Autodesk Maya, Houdini, Substance Painter, Arnold, Adobe Photoshop
For a group project, two other students and I created a candyland-themed mini version of Minecraft. I am responsible for implementing efficient terrain generation based on a chunking system; generating procudural rivers using L-Systems, one linear and one delta; creating cotton candy clouds that are constructed using fractal Brownian motion; shadow mapping; and setting up the multiple render passes, one as a distance field for shadow mapping, one of the sky texture used to fade away the clouds, one of the terrain, and finally a post-process overlay for underwater movement.
Linear L-System River
Delta L-System River
Software used: C++, OpenGL, Adobe Photoshop
After spending seven weeks learning all stages of Pixar's pipeline, the nine PUP interns spent a week working together on an animated short from concept to completion. We created a shipwreck in the middle of the ocean. One of the passengers had been writing letters to deliver to his family.
I am responsible for the water simulation in the third shot of the film. I simulated and surfaced the water in Houdini using the FLIP Solver. The curl of the water particles is used as a signal to the shader to produce the white water effect. To shade the water, I customized one of the studio's existing water shaders.
Software used: Autodesk Maya, Flow, Houdini, ZBrush, Presto, Katana, Renderman, Nuke, Adobe Photoshop
For my PUPs effects week project, I made a fireworks simulation in Houdini. For the fireworks particles, I used a POP simulation, and I used the Houdini Pyro Solver to create smoke trailing behind the particles. I instanced point lights on some of the particles to allow the firework bursts to light up the smoke and the scene.
Software used: Houdini, Mantra
Over the course of two months, I implemented a Monte Carlo Pathtracer with various illumination techniques, including direct lighting, global illumination using multiple importance sampling, and photon mapping with a k-d tree. Included features are refractive materials, Fresnel reflection, microfacet materials, a thin-lens camera, constructive solid geometry, and implicit surfaces using ray marching. The pathtracer supports different types of light sources, including area lights, point lights, and spot lights.
Global Illumination and Microfacet Reflection
Implicit Tangle Cube
Implicit Heart Subtracted from Glass Sphere
Thin-lens Camera: 32mm focal length, 0.8 lens radius
Photon Mapper: 100,000 photons, 0.4 search radius
Garden Scene with UV Mapping
Over the course of two weeks as a PUP intern, I modeled and shaded a rusted lamp.
Software used: Autodesk Maya, Flow, Katana, Renderman
For my PUPs lighting week project, I lit Woody to match a shot from Shawshank Redemption.
Software used: Katana, Presto, Nuke, Renderman