Work Experience
For a more detailed overview, please take a look at my Resume.
Walt Disney Animation Studios – General TD (January 2021-Present)
I’m currently working at Walt Disney Animation Studios as a General Technical Director. As a TD, I develop tools for CG artists, manage pipeline data, and debug issues that artists encounter during production. On Moana 2 I also got the opportunity to work as an additional technical animation artist, where I animated hair and cloth for a variety of beloved characters including Moana, Maui and plenty of new friends they meet along the way.
Below are the films I’ve worked on so far!
Riot Games – Senior Technical Artist (January 2016-December 2020)
League of Legends (March 2018-December 2020)
I worked as a tools/pipeline technical artist on League of Legends, an online multiplayer battle game. I was on the Content Efficiency team, which develops artist-facing tools for all content creation teams on LoL. The team ensures that new content is being developed cleanly and efficiently while also maintaining the data quality of existing content. My responsibilities included designing and improving workflows for the source art creation pipeline, programming artist-facing tools, and troubleshooting production bugs in existing tools.
CG Development Team (January 2016 – February 2018)
I worked on the CG Development team at Riot to create the “Ryze: Call of Power” animated short. As a technical artist on the team, I helped build and maintain tools for the CG pipeline. In doing so, I gained end-to-end knowledge of the CG animation process, from storyboards to final comp, and everything in between.
Teachley – Game Development Intern
(May 2015-August 2015)
As an intern at Teachley, I developed iPad games using Unity/C#. I programmed all core gameplay features for Fact Flyer, and began early prototype work for Fractions Boost. Fact Flyer is an app that helps elementary school students practice multiplication and division.
Autodesk – Interactive Social Storytelling Intern
(June 2014-August 2014)
At Autodesk, I contributed to making interactive experiences that visitors to the Autodesk Gallery in San Francisco could interact with via social media. I used the Twitter API to collect and parse Tweet commands to drive animation patterns of light on an LED cube.
I was also featured in a video about Autodesk Interns!
Personal Projects
Painterly Animation Tool
I programmed an animation tool in C# which uses image analogy techniques to generate painterly 2D animation. The goal of this project was to shorten the time it takes to create frames of animation that are created in a painterly style. The tool takes as input images that are painted in a simple, flat-color style. It uses an image analogy algorithm to generate output images mimicking the painterly style of a guide image painted in the desired style. The images can then be touched up manually to produce the final desired effect.
For more information on how this tool works, please check out my more detailed writeup.
For more information on the research paper that inspired this project, please check out Image Analogies by Aaron Hertzmann, et al.
The Dancing Tree
Collaboration with Jessica Shen. Created in Maya and After Effects.
To create this animation, we captured motion-capture data of several dance segments and used MEL scripting to generate a dynamic abstract tree. My main role in this project was writing MEL scripts to generate the tree from the mocap data. I wrote a script which constructed polygonal strips through space for each of the motion capture markers. For each motion capture marker, the script followed its motion frame by frame and created polygons with vertices at the position of the motion capture markers in the frames, which generated the polygonal strips. I also wrote a script to key visibility for the polygons in the strips to give the effect of a growing tree.
Raytracer
I implemented a basic raytracer in C++. How it works is that rays are fired into a scene from a point on the light source. If the ray intersects with an object in the scene, a color value for the pixel at the location of the intersection will be calculated. Ambient, diffuse, reflection, and refraction components are used in this color calculation. The reflection and refraction components are obtained by recursively casting rays from the intersection point. If the ray fired from the light source does not hit an object, the ambient scene color is returned.