[MtoA] Per-light AOVs for volumes


Arnold added support for per-light AOVs for volumetrics.

Here’s how to set up per-light AOVs in MtoA

  1. In the light Attribute Editor, enter a name for the light group.
  2. Create a custom AOV for the light group. Give the AOV a name that starts with “volume_”. For example, if the light group name is “red”, then the AOV name is “volume_red”.


[Arnold] Standard shader AOVs and shading trees

Here’s a question asked recently. Given a shading tree like the one below, why don’t AOVs like diffuse_direct include the blended color from the Blend Color node?


The answer: because it is the Standard shader that writes the AOV, not the Blend Color shader. The diffuse_direct AOV gets the diffuse layer calculated by the Standard shader, and that’s it.

The MtoA AOV browser shows you what AOVs are implemented by which shaders:

Creating object mask AOVs that include opacity

  • Create a custom RGB AOV.
  • Use aiWriteColor to write the object mask to the custom AOV. The Input color of the aiWriteColor is the mask color, and you have to enable Blend to get the opacity blended into the Input.
  • Connect the Out Color of the aiWriteColor to the Color of a Standard shader. That sends the aiWriteColor beauty to the Standard.
  • Make sure Enable AOV Composition is turned on in the Render Settings.

I don’t think this set up works if you plug a Standard into the beauty of the aiWriteColor (eg Standard > aiWriteColor > Standard). With that set of connections, I could never get the opacity right in both the Beauty and the Mask AOVs.

[MtoA] Creating color masks with a custom AOV and the Utility shader

In this video, I show how to a color mask AOV using a custom AOV and the Utility shader. Topics covered include:
– Creating a custom AOV
– Setting the default shader for a custom AOV
– Setting up the Utility shader to output a color for each shape
– Understanding the difference between the Color and Color ID color modes

AOV Composition and opacity

AOV Composition allows opacity and transparency to carry forward into AOVs. It works only for RGB AOVs, so you won’t see it in the render region (because the xsi display driver always outputs RGBA AOVs).

For example, suppose you have a textured grid with an opacity map:
In the render region, the Main AOV is fine, but the Arnold Direct Diffuse doesn’t have the opacity, even if you enable AOV Composition:
However, if you render out the image (with AOV Composition enabled and the Direct Diffuse format set to RGB), you’ll get what you expected:

Preserve Layer Name for single-layer EXRs

So, what’s this Preserve Layer Name setting do?
Preserve Layer Name is for single-layer EXRs, and it determines whether or not the AOV is written into the pre-defined R,G,B,A channels.

By that, I mean that if Preserve Layer Name = False, then a single-layer EXR will have these channels:

  • A
  • B
  • G
  • R

And if Preserve Layer Name = True, then the single-layer EXR will have channels like this (that include the “layer name”):

  • Arnold_Direct_Diffuse.A
  • Arnold_Direct_Diffuse.B
  • Arnold_Direct_Diffuse.G
  • Arnold_Direct_Diffuse.R

Channel names like “Arnold_Direct_Diffuse.R” can cause problems with some software, so by default Preserve Layer Names is set to False.

Note that Preseve Layer Names applies to single-layer EXRs only. If you’re writing out multi-layer EXRs, you’ll always get names like “Arnold_Direct_Diffuse.R”.