Posts

My First (Real) Feature Film Credit

I hit a huge milestone in my career last month, one that I don't think I'll ever forget: I got my first (real) feature film credit. Why am I prefacing it with (real)? Well, technically I have an intern credit in  Spies In Disguise , Blue Sky's last film to release before it was closed. That one was definitely cool, and it was really fun to go see the film in theaters with friends while in college and have them get excited to see my name. However, I actually didn't work on that film - Blue Sky simply gives their interns a credit on whatever film comes out next after their internship. I spent that summer working on  Nimona , which as you may already know, was re-done by DNEG after Blue Sky's closure. They gave credits to all the full-time Blue Sky employees on the film, so I missed out on that. So, when  Elemental  came out in theaters on June 16th, 2023 - that was my true "real" first film credit, in the sense that I actually worked on the film! It felt ext...

Demystifying the Cross Product

Image
  I've written about the dot product before. It's simple in implementation, but maybe you weren't sure what it's practically used for. The cross product, on the other hand, has the added dimension of being complicated to compute. It would be pretty difficult for someone to determine the cross product in their head! So, before we get into what the cross product is used for, let's recall how we compute it. First, we need two vectors, let's call them a and b. When we compute the cross product between two vectors, we will end up with a resulting vector, we'll call that C. How do we get C? C = <a.y*b.z - a.z*by, a.z*b.x - a.x*b.z, a.x*b.y - a.y*bx> One way I like to remember this is - for every component in C, the other two components are used in the computation. For example, let's look at C.x. C.x = a.y * b.z - a.z * b.y Notice, this is for the 'x' component of C, and yet in the computation, only y and z components are used! Important note: ord...

Let's Implement a Gaussian Blur Algorithm in Python

Image
Implementing an algorithm sounds scary, but in reality, we're just taking a recipe and translating it into a language the computer can understand (code). I thought it would be fun to make a tutorial on implementing a simple graphics algorithm. From the title, you'll know we're going to be implementing gaussian blur, with the help of OpenCV. OpenCV is a computer vision library you can use in Python to do lots of cool things, from face recognition to image segmentation. In fact, it has a gaussian blur implementation built in to it! We won't be using that though, of course - what we will use is its ability to easily read and write images, as well as comparing our implementation of gaussian blur to its implementation. Setup Before we dive into code, we need to get 2 things done: 1) Understand the gaussian blur algorithm (recipe) 2) Install OpenCV and numpy (if you don't have them) First, let's understand gaussian blur. Since we're implementing it in code, we can...

Making the Most of It, Virtually

Image
  Pictured: Me on Pixar's campus in November 2020, aka before the pandemic          When I heard I would be flown out to San Francisco for a final round of interviews at Facebook, I immediately thought -- maybe I can finally visit Pixar while I'm there! For context, most of my college friends had been able to see the campus in previous years, so I felt a little left out. Of course, I also generally wanted to see the campus for myself, catch up with some good friends, and get some goodies from the merch store! So, after my interviews wrapped up, I took a ~40 minute Uber ride to Emeryville. When I was there, I talked to a recruiter a little bit about future openings, as at the time I was set to graduate soon. While I flew back to Texas, I felt like there wasn't much chance I'd be working at Pixar anytime soon, but I was glad I finally got a tour of the campus and hung out with my friends.     Little did I know! Just two months later, I'd be offered ...

Using Google Sheets Python API to Manage Scriptable Data in Unity

Image
In my free time, I've been developing a digital trading-card game in Unity with my twin brother. We had accumulated a large amount of card data in a Google Sheet, and when it came time to start porting them into Scriptable objects in our Unity project, I decided I would rather spend some time trying to automate this process. The goal of this was simply to allow us to use the Google Sheet as our card database, and have the Unity project automatically populate its internal Scriptables folder with the appropriate card Scriptables based on the data present in the Sheet. The first step I took was determining how to get Google Sheets and Unity to talk to each other. After some initial research, I determined that there were two possible courses of action - I could utilize Google's C# API to access Google Sheets directly with Unity, or I could write a Python script using Google Sheet's API that acted as a sort of middle-man between the two services. There were several fact...

Beauty of the Dot Product

Image
How does this boring, flat circle become a fully three-dimensional sphere? Well, there isn't a short answer to that question, but a lot of it has to do with mathematics. In particular, the magical thing that gives you the illusion of depth is the  dot product . What is the dot product, you ask? Well, first, let's get a little bit of background knowledge. You can define any point in 3D space in terms of its  X, Y, and Z coordinates . For example, let's say we have a point P, and we want it to exist in the center of the scene, or the 'origin'. We could look at its position as the  vector : 0.0, 0.0, 0.0 We can use this general X,Y,Z format to do more than define positions in space. We can also use this to represent  directions , which are extremely important in computer graphics. A  normal  in computer graphics is simply a vector that tells us which direction a surface is facing. Let's say we have an infinite plane A at our point P we estab...

Blue Sky Postmortem: What I Learned

Image
A couple of days ago, I wrapped up my first internship at a feature animation studio, and I learned a ridiculous amount. Before too much time passes, I want to try to write down as much as I can for future reference, and for anyone else interested. - Don't be afraid to ask questions. As an intern, it's not expected that you'll know everything. In fact, it's expected that you'll have questions and that's totally okay. The first couple of weeks of my internship, I struggled to find the right amount of time to spend wrestling with an issue before asking a coworker. The more experienced I got through the summer, the better and more comfortable I became with asking people for help - only after attempting several solutions myself as well as having put in a good amount of research online. At that point, it's a waste of time for both you and the studio to keep struggling. - Get to know your colleagues. There were so many amazing people at Blue Sky, and on the last d...