GPUs Help Pixar in Their Production Pipeline
March 19, 2013, GPU Technology Conference, San Jose, CA— Laurence Emms from Pixar Animation Studios discusses how Pixar employs General Purpose GPU software in its production pipeline. The creation of digital video content requires significant amounts of processing.
Pixar has been using GPUs for real-time preview of assets for a long time. They have used GPUs to speed up lighting, set dressing, and character grooming pipelines in films including Cars, Brave, and Monsters University. Most of their efforts have been expended on matching GPU and CPU results, then be growing general purpose nature of GPUs allows more stages in the asset pipeline to be accelerated.
One application of GPUs is to operate Lpics, an interactive relighting engine. RenderMan shaders generate image space caches which are loaded into the GPU. Although single precision floating-point accuracy was available in 2005, they are still doing a lot of rendering in the CPUs, due to the higher precision mathematics available.
The challenges that the floating-point textures are critical for fine details. As a result, they start by rendering to the default framebuffer clamps values from 0.0 to 1.0. Then they request floating point textures with GL_RGBA32F and GL_FLOAT: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _image_width, _image_height, 0, GL_RGBA, GL_FLOAT, NULL).
The features of the OpenGL pipeline can be used to generate accurate real-time previews of film quality assets, such as vegetation, hair and fur proxies in Maya and Pixar’s in-house animation tool Presto. This pipeline supports tessellation, screen space effects, and displacement, and enables previews of assets until late in the pipeline.
For example, geometry shaders take an OpenGL primitive past and from a vertex tessellation shader, generate new geometries to be used for hair, particles, etc. Suppose an artist wants to see a grass representation. You can upload the CPU procedural result into the GPU, read with OpenGL vertex buffer objects (VBO) and geometry shaders.
Tessellation shaders take a GL_Patch primitive from a vertex shader, then the hardware tessellation unit subdivides the patch based on the tessellation control shader, followed by the tessellation evaluation shader. One example of this is hairstyling. Grooming technical directors want to see hair styles as they work, so they upload hairs to the VBO, and apply the tessellation shaders to match the curves.
To support their work, they’ve developed hybrid CPU GPU libraries that are available as open source. These libraries are available at:
https://github.com/PixarAnimationStudios/OpenSubdiv.
And finally, he demonstrated how they are combining Cuda with OpenGL in a simple mass-spring simulation on the GPU. This demonstration is available at:
https://github.com/lemms/SiggraphAsiaDemo20.
Cuda is good for data parallel algorithms, and the installation program or skies are available from the NVIDIA site. Threads and locks are defined differently in Cuda than in C++. Multiple threads are grouped into blocks of fixed size, and blocks are assigned to one streaming multiprocessor each. Blocks can share resources.
They planned to convert more general purpose data-parallel tools to run on the GPU for functions like simulation, the formers, procedurals, etc. In addition, they’re looking at ways to implement dynamic parallelism, to take advantage of those instances where the level parallelism changes over time.


