This article is also available in: Français
Year after year, animated short films from animation schools make their rounds at festivals and are featured on 3DVF. Behind the visual and artistic qualities of these films often lies advanced technical work, the result of students using the film production as an opportunity to implement custom tools, pipelines, scripts, etc.
Adrien Lhabitant and Tom Perony from ESMA Toulouse are facing this very issue. The school relies on RenderMan when it comes to rendering, and the two students wanted to benefit from Pixar’s rendering engine’s denoising system, which allows artists to spend less time on rendering (above, a before/after denoising comparison).
While we wait to see their projects, these two students give us some technical details on Dopoise, the tool they have developed to utilize RenderMan’s AI denoiser on Tractor… and soon on Deadline too! Even better, these tools will be made available, so you will eventually be able to use them as well.
They were kind enough to send us a presentation of their work.
Introduction
Hello! We are Adrien Lhabitant and Tom Perony, two students from ESMA Toulouse working on our graduation shorts, respectively “El Dodorado” with a Solaris USD pipeline and “Rush More” with a Maya pipeline.
We have created many tools for our production needs, and we will now delve into Dopoise, our tool designed to harness Renderman 25’s AI Denoiser.
Why we developped DOPOISE
During the creation of our student films, we faced multiple technical and structural challenges. With our limited computer resources shared among various productions, we needed to find solutions to reduce rendering time and optimize the use of each machine without sacrificing quality.
Intrigued by the recent release of Renderman 25’s AI denoiser, we gave it a try and immediately observed impressive results in our various tests: fur, scattering, extreme motion blur, low sampling.
As a result, we considered integrating it into our production pipeline. However, the graphical interface had some limitations, and having the denoised images as separate EXRs was, in our case, a hurdle for production use. Moreover, quality comes at a cost, so we had to consider deploying it with the Tractor dispatcher on our renderfarm.
Development
Initially, we explored the tool’s functionality via the command line rather than the interface, which we found to be suboptimal. We identified the first challenge of providing the correct type of each AOV to the denoise algorithm. We also needed to merge the denoised EXRs from each AOV, which we accomplished using Renderman’s “exrmerge” tool.
Now that we had a functional workflow, the goal was to create a tool capable of handling a large number of frames, layers, custom AOVs, light groups, and transferring everything to Tractor.
We automated this long and tedious process by using a Python script that manages the entire process for all the frames of each layer in a given shot.
The process unfolds as follows:
First, the user selects the folder containing the images, then they can choose the type for the AOVs they want to denoise (diffuse, specular, etc.). Meanwhile, the script performs an identification in the shot folder to detect the AOVs using Renderman’s “exrinfo” tool. It then detects the light groups if there are any, so no user intervention is necessary, making it a quite flexible tool.
When the AOV part is done, the user can chose to either denoise locally or on the renderfarm using Tractor, for wich he may adjust the job parameters.
And eventually the user can chose to denoise using crossframe mode or not.
The script takes over from here, it sorts the exrs in different folders based on their type : beauty, utilities and cryptomates. It then proceeds to generate either TCL (tractor) or Batch (local) code containing all the denoising and merging instructions.
Technical limitations
In fact, the main problem comes from the denoiser itself; it tends to generate a “PyRunSimpleString failed” error potentially related to saturated RAM. (reminder: crossframe denoising requires more RAM) This is particularly annoying during local denoising, as the process must be restarted from the beginning. Meanwhile, on Tractor, we recommend setting “1 frame per server” and taking advantage of the “max active tasks” setting we have placed in the user interface to limit the impact of your work on the renderfarm. This way, if a frame fails, you can restart it without losing progress on previous frames.
Despite reducing the denoiser failure issue by isolating it on Tractor, we still needed to ensure that all images were available the next day. Therefore, we developed a script called TJM (Tractor Job Manager), which ensures that each failed denoising task is restarted. TJM uses the Tractor API in Python 2.7.
However, we encountered a new issue during compositing; upon examining our technical passes after unpremultiplying, we noticed that the denoiser left extremely low values in the alpha channel (around 10e-7), resulting in visual artifacts.
We use an expression to to get rid of these values, and haven’t noticed any further problem.
In the alpha section of the expression node : a * (1-step(a, 0.01)) you can adjust the 0.01 threshold to your liking.
About Deadline:
We’d like to integrate a submission to deadline to really enable anyone to use Dopoise.
We plan to work on it but since we use tractor in our school we will try make a deadline farm in our spare time to work on it. We will post a new version of the tool when this will be done!
More information
- This page dedicated to Dopoise will give you additional information, and includes a video demonstration.
- Adrien Lhabitant & Tom Perony on LinkedIn, their srespective websites. Don’t hesitate to check out their profiles and websites: they’ll be open for work in a few months, after completing their thesis short films!
- Rush More, El Dodorado on Instagram.