AOVs (Arbitrary Output Variables) provide a way to render any arbitrary shading network component into different images. For example, an artist might find it convenient to separate direct and indirect lighting contributions and later recombine them during compositing. Arnold provides built-in AOVs for outputting depth, position, and motion vectors.
There are some limitations:
- Using closures as AOVs is not currently supported.
- A maximum of 16 different light AOVs is supported, although a given AOV can contain a bundle of any number of lights.
The AOVs tab of the Arnold Renderer settings shows the available and active AOVs of drivers from the scene. By default, the display driver is shown which controls the output in the Picture Viewer and the IPR. You can add a new driver to the scene with the New driver... button.
You can enable AOVs by adding them to the Active AOVs list (drag & drop or double-click on an AOV). The AOV is added to each selected driver. AOVs which are only added to some of the selected drivers but not all of them are displayed with a pale color.
C4DtoA supports Cryptomatte AOV shaders. A tutorial that shows how to set them up can be found here.
Arnold provides the following 'built-in' system AOVs. These AOVs are always available, no matter what shader(s) you are using.
- A: Alpha.
- AA_inv_density: Visualizes the sample density with Adaptive Sampling. Use it with a Heatmap filter.
- ID: Random number value derived from the name of the shape. You can also add specific ID numbers via the user options string field for an object. ie 'id 1'.
- N: Smooth normal at the shading point (in world space).
- P: Position of the shading point (in world space).
- Pref: Reference position of the shading point.
- RGBA: Beauty AOV, containing the full rendered image.
- Z: Depth of the shading points as seen from the camera.
- albedo: Reflectivity, the surface or volume color without lighting or shadowing.
- background: Emission from the background and skydome lights visible to the camera.
- coat: Coat reflection.
- coat_albedo: Coat color without lighting or shadowing.
- coat_direct: Coat direct lighting.
- coat_indirect: Coat indirect lighting.
- cputime: This layer contains the CPU time (measured in “ticks”) to evaluate the samples in the pixel.
- diffuse: Diffuse reflection.
- diffuse_albedo: Diffuse color without lighting or shadowing.
- diffuse_direct: Diffuse direct lighting.
- diffuse_indirect: Diffuse indirect light.
- direct: Direct lighting from all surfaces and volumes.
- emission: Lights and emissive objects directly visible from the camera.
- indirect: Indirect light from all surfaces and volumes.
- motionvector: 2D vector representing the motion in screen space of the shading point during the given time interval. If output to an RGB format, the vector is contained in the R and G channels.
You must set an instantaneous shutter for the camera. The reason being is that we don't want motion blur in the render, but we still want the motion velocity information in our motion vector AOV. This can be found under Motion Blur-> Instantaneous Shutter.
- opacity: RGB AOV with full three-channel opacity (as opposed to single channel alpha).
- raycount: Total number of rays traced for samples in the pixel.
- shadow_matte: Shadows in the scene, computed as the ratio of occluded direct lighting over unoccluded direct lighting.
- sheen: Sheen weight.
- sheen_albedo: Sheen color without lighting or shadowing.
- sheen_direct: Sheen direct lighting.
- sheen_indirect: Sheen indirect lighting.
- specular: Specular reflection.
- specular_albedo: Specular color without lighting or shadowing.
- specular_direct: Diffuse direct lighting.
- specular_indirect: Diffuse indirect lighting.
- sss: Subsurface scattering and diffuse transmission.
- sss_albedo: SSS and diffuse transmission color without lighting or shadowing.
- sss_direct: SSS and diffuse transmission direct lighting.
- sss_indirect: SSS and diffuse transmission indirect lighting.
- transmission: Specular transmission (refraction).
- transmission_albedo: Specular transmission color without lighting or shadowing.
- transmission_direct: Specular transmission direct lighting.
- transmission_indirect: Specular transmission of indirect lighting.
- volume: Volume scattering.
- volume_z: The Z depth for the first volume contribution is output in a flat AOV.
- volume_albedo: Volume color without lighting or shadowing.
- volume direct: Volume scatter direct lighting.
- volume indirect: Volume scattering indirect lighting.
- volume opacity: RGB AOV with the full three-channel opacity for volumes only.
The other AOV groups correspond to the shader nodes being used (assuming those shader nodes support AOV). For example, Shadow Matte provides:
- shadow: Direct light shadow.
- shadow diff: A difference AOV which can be used to eliminate the shadow from the direct component.
- shadow mask: This AOV can be used in comp to localize and tweak the shadow.
Other shaders used in your scene will support various other AOVs. Multiple shaders can contribute to the same AOV (for example a Standard Surface and a Lambert shader both write to the diffuse_direct AOV).
Composing the Beauty AOV
The RGBA beauty AOV can be split into smaller AOVs where each contains part of the lighting. In compositing, these AOVs can then be individually modified and added together to get the full beauty AOV.
More AOVs give more control in compositing, but also extra work to handle, and they take up more memory and disk space, especially combined with light groups.
Some example sets of additive AOVs for the full beauty AOV are:
- direct, indirect, emission, background.
- diffuse, specular, coat, transmission, sss, volume, emission, background.
- diffuse_direct, diffuse_indirect, specular_direct, specular_indirect, coat, transmission, sss, volume, emission, background.
Simply adding together such AOVs is all that is needed for the beauty AOV. The albedo AOVs are not needed to reconstruct the beauty AOV but may be used for example to get just the lighting without the surface texture, by dividing diffuse by diffuse_albedo, or for denoising just the lighting while keeping the texture detail intact.
A tutorial about compositing AOVs can be found here.
You can define custom AOVs in the scene via the Add Custom AOV button if you want to render a custom effect that is not available from the existing AOV list. This custom AOV can be used with any compositing software such as Nuke.You can write the output of a shader in a custom AOV via an aov_write shader.
First, you have to define the name and type of the custom AOV. There are different methods to pass data to a custom AOV:
- You can define custom Light Path Expressions to write lighting components into separate AOVs (a tutorial with a scene file can be found here).
- You can write the output of a shader in a shader network via the aov_write shaders. See this page for more info about this workflow.
You can add the Arnold Custom AOV tag to an object. This is useful for example to create holdout mattes on a per-object basis. You have to define the name and type of the AOV along with an override material which provides the data for the AOV, for example, a Flat or Utility shader used for masking purposes.
Arnold Custom AOV tag
- You can add the Arnold Object Mask tag to an object. This is a special custom AOV which writes out a mask of the objects that belong to the same group. See this tutorial on how to use the Arnold Object Mask tag.
The newly created custom AOV will be automatically activated.
Custom AOVs are displayed with the (custom) postfix in the lists, so to find them you have to type custom in the name filter.
Enable the Denoise (optix) flag on the Render tab to use the fast, GPU-powered Nvidia OptiX AI denoiser. See the System tab for the GPU device selection options. When enabled a new AOV with the _denoise postfix is available in the AOV list.
The OptiX denoiser is not available on OSX, only Windows and Linux.
The OptiX denoised AOVs currently work only with single-channel Arnold drivers (Merge AOVs off).
The contribution of multiple light sources can be written out to separate AOVs when they belong to the same light group. A light group can have multiple lights, but one light can belong to only one group. The group is defined by the AOV light group parameter of the light.
The available light groups are listed on the right in the dialog, you can select which light groups are rendered by the selected AOVs. The group called default contains those lights which do not belong to any group (the Light Groups List is empty).
Each selected light group represents a new AOV with the name of the light group as a postfix (e.g. diffuse_direct_group01, specular_direct_group02, sss_default). The group called default contains those lights which do not belong to any group (the AOV light group parameter is empty).The group is defined by the AOV light group parameter of the light.
The AOV checkbox controls if the selected (non-light group) AOV is rendered or not. For example, you can render only the light group AOVs when disabled.
When the All light groups checkbox is enabled then each of the light groups will be rendered. Otherwise only the selected ones.
To edit the light groups click on the Light Manager... button at the bottom of the dialog.
<L.'groupname'> syntax, any built-in or custom LPE can be split into multiple AOVs to output a subset of lights with a specific AOV group assigned in the
light.aov parameter. For this, a postfix must be added to the LPE AOV name in
Light Group Example
In this example, a sphere is lit by three lights, a blue, a red and a green light. The blue and red lights have different AOV light groups defined while the green light does not belong to any group.
default" is the beauty AOV that is lit by lights, not in any AOV light group. "
RGBA_default" + "
RGBA_red" + "
RGBA_blue" give the total RGBA beauty pass.
A maximum of 16 different light AOVs are supported, although a given AOV can contain a bundle of any number of lights.
A scene file that demonstrates light group AOVs (with denoising) can be downloaded here.
The list of the active AOVs can be saved as a preset and used later in other drivers in other scenes.
Click on the AOV presets... button under the Active AOVs list which offers you to load, save or delete the presets.
AOV presets are stored in the arnold user.lib4d preset library under the Cinema 4D preferences folder, they are object presets and can be loaded from the Object Manager or the Content Browser.
The example below shows a plane with a checker texture connected to the 'Opacity' attribute of a standard_surface shader. Currently, we do not support opacity composition in AOVs of RGB types.
Indirect Diffuse AOV