Authors
Christoph Genzwürker (MPC R&D)
Yanli Zhao (MPC R&D)
Abstract
Dumbo is one of the most iconic characters in movie history. So when MPC Film was trusted with creating the elephants as CG characters in Tim Burton’s remake, including Dumbo himself, we wanted to make sure they look as realistic as possible. Since the skin of the elephants is a highly remarkable feature, we paid high attention to it and made sure, that the behaviour and look can’t be distinguished from a real elephant. Shunning traditional displacement maps for high-resolution geometry accentuated the challenges of efficiency. In this talk we introduce a new workflow across Rigging, TechAnim and Lighting to generate wrinkles automatically. With Dumbo being worked on in multiple MPC sites around the world, we improved our pipeline to balance the storage and computation costs of geometry generation, ensuring that the heavy caches were only generated in the locations where they were consumed.
Context
On Dumbo, the CG elephant stars of the show needed to look stunning and real, both far from and close to the camera. It was essential for the director to achieve photo-realistic and high-quality wrinkles on the elephant skin in the final rendered images, especially during animation where patterns of the wrinkles are changing.
The creation of high-quality wrinkled skin, e.g. for elephants, often consumes a substantial amount of time and memory for both simulation and rendering. In VFX production, this affects artists from Animation and Lighting alike, who require not only a fluid and interactive manipulation in DCCs such as Maya, Katana etc, but also an ability to load their scenes quickly. Furthermore, detailed geometry has an impact on the infrastructure, including the network and servers responsible for data transfer.
To overcome these challenges, we developed a number of tools in Rigging, TechAnim and Lighting to avoid unnecessary simulation and rendering of the wrinkles via using a combination of low- and high-resolution geometry. With these tools, the artists were able to work smoothly with wrinkle-free geometry and to visualize the wrinkles quickly when required. The design of our workflow cut down needless time and memory cost and ensured the effective delivery of our final high-quality images.
Modeling and Rigging
Our Modeling department began by working traditionally, providing downstream departments with a typical-resolution 3D mesh of the elephant skin. New to this production, however, they also provided a higher-resolution version of the mesh, created by subdividing the original mesh twice (effectively producing 16x as many faces). The “low” resolution mesh was ingested by Animation, who generated per-shot caches (either caches of the skeleton joints or of the deforming mesh). This animated mesh could then used as a driving geometry for a custom deformer developed by the Rigging department, which generated appropriate wrinkling on the high-resolution skin. Instead of exporting both meshes, we took the vertex positions of the high resolution mesh and stored these as metadata on the low-resolution mesh.
Pipeline
Due to the complexity of the high-resolution geometry, we had to adjust our pipeline to ensure that the TechAnim and Lighting departments could work smoothly and also to guarantee that the many gigabytes of caches would not be synced between the MPC Film sites needlessly. To achieve this, we made the decision to apply the simulation of wrinkles on the high-resolution geometry just before Lighting renders the shot. TechAnim picks up the lower-resolution cache from the Animation team and adds some of their enhancements (as they would do traditionally). Once their enhanced low-resolution geometry is approved, the wrinkle simulation can be launched automatically if high quality wrinkles are required for the shot. The decision to opt in or out of wrinkle simulation was made by a supervisor on a shot-by-shot level.
A complication of our workflow is that the TechAnim team for Dumbo was based in London while the Lighting team was based in Montréal. Instead of copying the very heavy geometry caches across sites, and incurring delays in our production schedule, we decided to only trigger a simulation in the site where Lighting is based. To help the TechAnim team to verify the result of their work, a quick render was created in Montréal and only the daily was synced back to London. There the TechAnim team was able to check the look and behavior of the high-resolution skin.
Rendering
The MPC Film rendering pipeline has a legacy of being based on Katana and RenderMan. Our typical approach for rendering characters would have seen artists loading the high-resolution geometry and caches directly in Katana, but that was simply impractical for the complexity generated on this project.
Instead, artists exclusively imported the lower-resolution geometry into Katana, keeping their scenes lightweight and quick to interact with, and ensuring that all the features based on the low-resolution geometry, e.g. the fur and hairs were being resolved correctly. But we also imported the point attributes of the simulution we have created before (see section 3)
and wrote it to a custom Katana attribute. To render the wrinkled geometry, we processed the lower-resolution geometry cache using a custom Katana Op as can be seen in diagram below.
The Katana Op executed a series of operations, which created the high-resolution wrinkly skin for the elephants in the end. First we subdivided the low-res mesh to get a high resolution mesh. After this step we copied the custom attribute, which held the point position, to the actual point position of the now subdivided mesh.
In the following we re-calculated the normals of the resulting mesh and transferred the UVs from the low-resolution mesh to it as well. Finally, all values were interpolated based on the corresponding motion blur sample. It’s important to note that these custom Ops would only process at render-time. This guaranteed that the time and memory heavy computation would not be executed when artists were working interactively in the Katana scene. Some performance statistics can be seen below in the table.
Data statistics to achieve an elephant without and with wrinkles
Low Res | High Res | |
Caching: Cache file size | 22MB | 133MB |
Caching: Time | 40sec | 75sec |
Rendering: Peak memory cost | 3124MB | 5782MB |
*Rendering: Time to first pixel | 12sec | 71sec |
*Rendering: Total time | 130secs | 200sec |
Results and Future Work
With the new workflows described above, we met the director’s brief and successfully reproduced the detailed and nuanced wrinkles of Dumbo and the other elephants. Due to the seamless pipeline integration the artists were not affected during their shot work were able to continue working with their standard tools with no drop in latency or performance.
Though the high-resolution cache generation can be turned off when it’s not necessary, this action has to be done manually. We are looking for the possibility of enabling/disabling wrinkles or even controlling the subdivision level per frame level via some LOD strategy based on camera and final render resolution.
Acknowledgements
Fabià Serra Arrizabalaga for his implementation of the pipeline backbone and Curtis Andrus for the first prototype. A special thanks goes to Benjamin Jones, who developed the overall concept and implemented the skin deformer. And Jun Lin Harries, Lewis Pickston and Chris McKenna for their work and ideas on how to improve the pipeline.