To create variations of that scene we keep patches for each camera perspective and sometimes two versions (one for a daylight, one for a night time scene of the same camera perspective). In the screenshot above you see two patches for camera 01. The patches get applied by a Makefile like this:
We will focus on the daylight scene and look at the patch creating a slightly modified .ass file to render:
For Arnold it’s very important to keep the AA_samples down, therefore we use a value of 3 instead of 16. We will talk about AA_seed a bit later. The next couple of parameters belong all to the options node. First we specify which camera to use (the .ass file can contain more than one camera), then we make sure to explicitly specify all options parameter which start with the prefix GI_. We will talk about the individual values being used later. Let’s delay the discussion of intensity and samples as well, and talk about the lines regarding emission first. In the resulting patched .ass file we can see that they are part of a standard shader node, e.g.:
So, basically, we turn off all light emitters, except the sun and sky.
Let’s talk about AOVs now. AOV stands for Arbitrary Output Variables and is explained for example in Pixar’s RenderMan application notes. But how do we create frame buffers for Arnold? Let’s look into the .ass file again:
Basically seven framebuffers get created and they all use a common gaussian filter, but write to individual OpenExr image files. So, let’s look at two of them, which visualize the direct and indirect diffuse AOVs:
On the left you see light coming from the sun (very strong) hitting parts of the floor and leaving a white spot of light. The remaining light comes from the sky, which is blueish and the direct diffuse buffer only shows light which enters the room through the glass doors or windows and hit the floor or walls directly, no bounce light gets stored in this buffer. The indirect diffuse buffer gathers all the bounce light (after the first hit). To be more precise: Both buffers deal only with the diffuse part of the bounced light, which basically emits in a hemi-sphere around the surface normal of the hit geometry.
The options parameter GI_diffuse_depth tells Arnold how many bounces are allowed before the renderer stops following this ray path. In this case a value of two is enough to make the light bounce off the floor (first bounce) and off the next object the reflected rays hit (second bounce). The parameter GI_diffuse_samples helps to reduce noise in the indirect diffuse buffer, see noise workflow and other options parameters.
What’s missing in our discussion are the two patched values for intensity and samples. Let’s show them in the context of the nodes they belong to:
The skydome_light node can be used to either light the scene with a single colored surrounding sphere, or texture that sphere e.g. by a HDR image (for image based lighting), or we can use the physical_sky node instead of an image to create a sun and sky simulation based on some parameters. In our case we tweaked the intensity value, which made the sun bright enough to paint the spot on the floor white, but not too bright, so we can see the outside ground material being greyish. The choosen samples value removes noise in the direct diffuse buffer.
Rendering directly with the choosen patches in a 500x500 resolution would still render pretty fast (in about 1 minute 10 seconds), but results in a very noisy image (see above on the left side).
To end up with the far less noisy image on the right we used a trick to render first in a higher resolution (2000x2000), and second we merged 4 images of that resolution which used four different seed (AA_seed) values:
After that we scaled the resulting image down to a 500x500 resolution.