Here’s a simple kick trick to get a list of AOVs and LPEs.
The -laovs flag lists all the AOVs in the loaded scene, but if you give kick no input, you’ll get a list of all built-in AOVs defined by Arnold.
For example, on Windows, run kick -laovs -i Nul
On Linux or macOS, run kick -laovs -i /dev/null
kick -laovs -i Nul
Type: Name: LPE:
VECTOR2 motionvector (~)
RGBA RGBA C.*
VECTOR N (~)
FLOAT Z (~)
RGB direct C[DSV]L
RGB indirect C[DSV][DSVOB].*
VECTOR Pref (~)
RGB albedo C[DSV]A
RGB emission C[LO]
RGB diffuse_direct C<RD>L
RGB background CB
RGB denoise_albedo ((C<TD>A)|(CVA)|(C<RD>A))
RGB sss_albedo C<TD>A
RGB specular_albedo C<RS[^'coat''sheen']>A
RGB diffuse C<RD>.*
FLOAT cputime (~)
RGB diffuse_indirect C<RD>[DSVOB].*
RGB sss_indirect C<TD>[DSVOB].*
RGB diffuse_albedo C<RD>A
FLOAT volume_Z (~)
RGB specular C<RS[^'coat''sheen']>.*
RGB coat_direct C<RS'coat'>L
RGB specular_direct C<RS[^'coat''sheen']>L
RGB specular_indirect C<RS[^'coat''sheen']>[DSVOB].*
RGB volume_direct CVL
RGB coat C<RS'coat'>.*
RGB coat_indirect C<RS'coat'>[DSVOB].*
RGB coat_albedo C<RS'coat'>A
RGB sheen C<RS'sheen'>.*
RGB transmission C<TS>.*
RGB transmission_direct C<TS>L
RGB transmission_indirect C<TS>[DSVOB].*
VECTOR2 AA_offset (~)
RGB transmission_albedo C<TS>A
VECTOR P (~)
RGB sheen_direct C<RS'sheen'>L
RGB volume CV.*
RGB sheen_indirect C<RS'sheen'>[DSVOB].*
NODE shader (~)
RGB sheen_albedo C<RS'sheen'>A
RGB sss C<TD>.*
RGB sss_direct C<TD>L
RGB volume_indirect CV[DSVOB].*
RGB volume_albedo CVA
FLOAT A (~)
FLOAT ZBack (~)
RGB opacity (~)
RGB volume_opacity (~)
FLOAT raycount (~)
UINT ID (~)
NODE object (~)
FLOAT AA_inv_density (~)
RGBA RGBA_denoise (~)
(~) No opacity blending
Arnold 22.214.171.124 added support for per-light AOVs for volumetrics.
Here’s how to set up per-light AOVs in MtoA 126.96.36.199:
- In the light Attribute Editor, enter a name for the light group.
- 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”.
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:
A simple example of using a Color4 Passthrough to create a custom AOV. In this example, I’m using Store Color in Channel to put a per-object Alpha in the custom AOV. I could easily use overrides to do this on a per-partition level.
- 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.
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 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:
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:
And if Preserve Layer Name = True, then the single-layer EXR will have channels like this (that include the “layer name”):
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”.