Pixar has long been hailed as one of the top innovators in 3D animation since the early 90s. Given that, the studio has quite a few tricks up its sleeve to optimize their projects and animations. Today I'm going to share a couple of them with you and show how you can take advantage of some of the same technologies used by Pixar in their 3D animation pipeline.
First up, proxies. If you're a Blender user, you probably don't know too much about proxies unless you've switched from another software package. Proxies are a lot like level-of-detail objects in game engines; they are rough approximations (hence the term "proxies") of geometry intended to be used by animators, layout artists, and others to accurately preview a scene in the viewport. This kind of approximation can be essential in heavy scenes with millions of polygons.
Without proxies, this scene plays in the viewport at 45 fps. With proxies, it plays at 70 fps.
While studios use propriety tools to create and manage proxy objects, such as the kind of system Pixar uses inside their Presto animation system, these tools have generally been unavailable to Blender users. In the past, Blender users have used wireframe or bounding box views for heavy geometry. However, earlier this year, Dorian Borremans released his progress on an automatic proxy system for Blender called "Proxify."
Proxify works by replacing the mesh data of objects and replacing them with decimated or custom-made proxies. The implementation is incredibly easy to use and can greatly improve viewport performance, especially for animators. You can download the latest development version of Proxify here.
2. USD (Universal Scene Description)
Universal Scene Description or USD is a framework for handling scene data developed and open-sourced by Pixar. It is increasingly becoming the standard for 3D file exchange every year and has a number of great benefits for 3D pipelines.
The primary strength of USD files is their ability to manage layered scenes and reference large numbers of files that make up a 3D scene. This allows collaboration from various artists on a single scene without the need to be continually passing different files around. Instead, an artist can work on a layer of a scene and combine their work with the main file later. This type of collaboration can speed up production immensely and allow shading artists, modelers, and animations to all work without waiting on each other.
Blender Developer Sybren began implementing USD support for Blender last year, and as of version 2.82, a basic USD exporter is now included with Blender. This enables the ability to export an entire scene for use in other pipeline tools such as Houdini or Maya. Full exporting or importing of USD files isn't complete, and development is still in progress, the usage of USD files is inevitable in larger pipelines as a way to quicken and simplify production.
For more information on USD files, read Pixar's Introduction to USD here.
3. Dynamic Instancing
Instancing is another way to speed up both production and render times on a project. Pixar has long used instances to enable them to render massive scenes not normally possible. Blender has supported instancing of Meshes for a long time. However, there can be more to instancing than mere multiples of the same mesh. Pixar has mastered the art of dynamic instancing, using the variance in materials, light intensities, and complex duplicates, they avoid the look of repetition instancing typically brings to a scene. In Blender, we can use some of the same tricks.
Rendered using instances and file linking, this scene rendered using a peak of about 4.5GB of RAM, the same scene with all local objects used nearly double the RAM at 8.5GB.
Since version 2.8, there is support for instancing of entire collections in Blender. This means that you can easily instance complex objects with many parts, including simulations and animations. Furthermore, using dynamic file linking from other blend files makes it easy to work with one asset in multiple scenes.
So how can we create more variation in instances? The key is in material variation. In the object info node, the random output can be used to create nearly infinite variations of a material. Connecting the random output to the ColorRamp node, you can use mix shaders to randomly assign different node trees to different instances of the same object. This can be useful for anything from making randomized colors to randomizing the entire material of the object.
4. Lighting optimization
Since industries and studios began to use raytracing on a large scale, optimizing lighting and shading has become an increasingly important aspect of the animation process. This is so important that Pixar dedicates an entire team towards fixing light render speed issues called the "lightspeed" team.
You may think that unless you're a programmer, there's not much you can do to speed up Cycles apart from optimizing your render settings. However, there's plenty of tricks apart from render settings that can speed up your render times.
First of all, optimizing complex node groups can have significant performance advantages, especially when dealing with complex procedural textures. Using limited numbers of texture generators and limiting redundant nodes can quicken how fast Cycles calculates the group and can save on memory during rendering. It's also worth considering baking down procedural materials to image textures when possible for background elements or materials that are unlikely to need changes.
Secondly, optimizing the lights in your scene can be very important. Using light portals over windows or small openings can allow Cycles to calculate light rays more accurately. While portals can be slower to render, they significantly reduce noise, allowing you to use fewer samples, which in the end is usually faster.
Furthermore, optimizing the number of light courses can help reduce render time and noise. Try toggling each light on and off in your scene and look for any lights which don't constructively contribute to the render. But don't get too zealous on optimizing your lights, or it might decrease the final look of your renders.
Denoising is a well-known trick for reducing render times when on a tight deadline. However, it's not always used as a "cheat" but is an essential part of production rendering at studios such as Pixar. While not a magic bullet by any means, low levels of noise reduction can save immense amounts of render times throughout a long animation render.
In production rendering, denoising is used to bridge the most "expensive" of noise in renders. This noise is the kind that would require significant render times to overcome due to the exponential nature of path-tracing sampling. In theory, every squaring of a sample reduces noise by the same amount. Increasing an 8 sample render to 82 or 64 samples clears up a render a pretty good amount, but to have another equivalent level of noise reduction on top of that, you would need to have 642 or 4096 samples. Obviously, at some point, noise reduction by sampling is just too long of a process. This is where denoising comes in and can add an extra layer of noise reduction without creating exponential render times.
Denoising on this render saved 40+ minutes with nearly the same visual fidelity.
Since version 2.81, Blender has supported the Nvidia Optix AI denoiser. This denoiser uses AI to reduce noise in renders dynamically. You can find the denoiser in the Layer properties Tab in Cycles. Using a low radios and low strength values works best to avoid artifacts and excessive smoothing of textures. used sparingly, denoising can be an incredible tool to bring your renders to where they need to be.
6. Using a Render farm
Of course, Pixar wouldn't be able to create any of its renders without a vast network of render farm machines. In the past, only studios could afford to use render farms because of the immense cost. However, services like BlenderGrid have changed that. Freelancers and small studios can now leverage studio-grade render farms with no barrier of entry.
Studios rely on render farms as an essential part of their pipeline to allow artists the maximum amount of time to create while also reaching deadlines on time.