Houdini 21.0 Solaris and Karma

AOVs

Workflows for render vars.

On this page

AOVs (“Arbitrary Output Variables”), also known as render vars or extra image planes, record additional per-pixel data in rendered image formats that support “deep” (multi-channel) images, such as OpenEXR.

In slightly less technical terms, AOVs let you separate a rendered image into different passes. You can, for example, extract information like depth, diffuse lighting, emission, or translucency. Later you import the various passes into a compositing application and apply effects and color modifications. Then you combine the processed image planes/AOVs into a final image.

Standard AOVs

There are several possibilities to create AOVs and the most convenient way uses the Karma Render Settings LOP. You can find all available AOVs on the Image Output ▸ AOVs (Render Vars) tab. The AOVs are grouped in sections like Diffuse or Volume, where you can turn on those AOVs you want to export.

If you have to keep things separated, you can use the Karma Standard Render Vars LOP. This node provides the exact same categories as the render settings node. However, the standard render vars node has several specific per-AOV parameters.

  • You can apply different filters using the Solaris filter syntax. The parameter’s associated dropdown menu contains a list with predefined filters.

  • The Output Colorspace lets you directly apply a color space to the AOV. Choose one of the available spaces from the parameter’s associated dropdown menu, for example ACEScg.

  • The Precision dropdown menu defines the AOV’s color depth. You can choose from 16 Bit and 32 Bit.

The Split per LPE Tag checkbox is common to all AOV-related LOP nodes. This option requires that your light sources have LPE tag assigned. With tags it’s possible to extract the contribution of a particular light source to the chosen AOV. For example, with red, white and blue LPE tags, the beauty AOV (C) will be automatically split into C_red, C_white and C_blue.

Extra Render Vars

The Karma Render Settings LOP has an Extra Render Vars section where you can define rules for custom AOVs. When you increase the Render Vars parameters, you’ll get a parameter set for each custom AOV. You can also use the Additional Render Vars LOP instead.

Tip

If you're not familiar with the creation of custom AOVs, open the Name parameter’s dropdown menu. There you’ll find a long list of predefined rules and AOVs. The entries should cover the most important AOVs. If you still need a custom-tailored solution, they can serve as a starting point.

The Source Type dropdown menu specifies, which type of AOV you want to create.

  • Raw is the default choice and requires that the renderer can interpret the Source Name string, for example ray:hitPz for camera-space depth.

  • Primvar lets you define attributes (primvars) that will be output to an AOV. A typical example is st for writing an object’s texture coordinates.

  • LPE is used to output interactions of rays with surfaces. Examples are beauty, diffusereflection and glossytransmission. Please consider reading the LPE guide for more information on the creation of Light Path Expressions.

  • Intrinsic rules can, for example, contain statistical information like CPU time or ray counts.

Scene Graph Tree

All active AOVs are listed in the Scene Graph Tree. To see them, expand the /Render/Products/Vars branch. Here you can change the default path:

  • Karma Render Settings LOP ▸ Image Out Put ▸ AOVs (Render Vars) ▸ Existing Render Vars

  • Karma Standard Render Vars ▸ Parent Primitive Path

  • Additional Render Vars ▸ Parent Primitive Path

Viewing AOVs

You can evaluate active AOVs directly in the viewport when you start an interactive preview render.

  • In the upper left corner of the viewport, open the first dropdown menu. The default entry is Persp. From the menu, choose one of the Karma delegates.

  • On the icon bar that is attached to the viewport’s right side, click the Render Outputs button to see all active AOVs. When you choose one from list, the render will be updated and you can see the channel.

If you render to MPlay, you can use the dropdown to choose from all available AOVs. The menu’s default entry is C.

Material-based AOVs

You can not only create AOVs from surface properties, primvars or other source types, but also from materials. The first step is to define the AOV and create the shader network shown below.

Click the image to zoom.

Everything happens inside the Material Library LOP. On the stage level, double-click the library to dive inside. There, execute the Karma Material Builder tool from the Tab menu. This tool sets up a Subnetwork VOP and when you double-click it, you’ll see a basic shader network.

Now, add an MtlX Image VOP. On the Filename parameter, click the Open floating file chooser… button to load a texture. The goal is to export this texture as a custom material-based AOV.

Lay down a Karma AOV VOP. If you want to write out several AOVs, you need one Karma AOV VOP per texture. When you look at the new node’s parameters, you can see that Create Render Var is turned on. This option creates an AOV with name entered under AOV Name. The default entry is $OS and uses the node’s name. Here, the name will be karma. Connect the output of the:

  • MtlX Image VOP with the input of the Karma AOV VOP

  • Karma AOV with the next input of the Material_Outputs_and_AOVs node (the name of the input changes to the name of the connected Karma AOV)

Now you can also replace the Karma AOV’s input with a different node, for example a MtlX Unified Noise 3D VOP or any other valid node. Karma will update the AOV automatically. When you look at the Scene Graph Tree, you can see the karma AOV.

Denoising and tone mapping

The Karma Render Settings LOP provides a parameter for denoising AOVs. Go to Image Output ▸ AOVs (Render Vars) ▸ Filters tab. From the Denoiser dropdown menu, choose a denoiser, for example NVIDIA OptiX Denoiser.

The AOVs parameter expects a space-separated list of the render vars you want to denoise. If you're not sure about the correct AOV names, you can also choose entries from the AOVs parameter’s associated dropdown menu. There you’ll find a complete list with all active render vars.

Also on the Filters tab, there’s a Tone Map dropdown menu. Here you can choose a tone mapping curve that will be applied to the render vars you've added to the AOVs parameter. The mode of operation is the same with the denoiser.

Ordered Render Vars

Under some circumstances it can be necessary to change the order of AOVs in the final image/output. For this purpose, you can use a Render Product Edit LOP and add it downstream of the Karma Render Settings LOP. On the product node’s Standard tab, you can find an Ordered Render Vars parameter. The parameter’s associated dropdown menu contains a list with all available AOVs. Add them in the order you want them to be saved to the image.

If you want to have a specific AOV on top and the remaining order doesn’t matter, you can also use wildcards. For example:

/Render/Products/Vars/combinedglossyreflection /Render/Products/Vars/**

The order will also be maintained when you render to MPlay. There, however, you’ll always see the beauty pass by default to show you the final image. Please also note that the Scene Graph Tree doesn’t reflect the order of your AOVs.

Writing AOVs

You can specify an output path for the image and its AOVs on the Karma Render Settings LOP. The Output Picture parameter assembles a filename from various variables, but you can also define a custom path. To choose a location on disk, click the Open floating file chooser button.

To finally write out the AOVs you also need the USD Render ROP. There, adjust the Valid Frame Range and click the Render to Disk or Render to Disk in Background button. The active AOVs will be saved in a multi-channel EXR file.

If you Render to MPlay, you can open the MPlay panel’s File menu and choose Save Frame As… or Save Sequence As…. A dialogue will guide through the process of saving you EXRs.

Cryptomatte

Karma supports Cryptomatte AOVs and you create Cryptomatte IDs using the following data sources:

  • Primitives

  • Materials bound to prims

  • Constant or uniform string/integer primvars

When you generate unique IDs for each instance, you don’t need material stylesheets. All you need to do is assign unique values of a string primvar to each instance.

Tip

See the Cryptomatte guide for detailed information.

Solaris and Karma

Solaris and USD

Karma

  • Karma

    Houdini’s Physically Based USD Renderer.

  • Karma XPU

    Houdini’s fast and modern XPU render engine.

  • Color management

    Learn more about OCIO, color spaces, gamma and tone mapping.

  • Render statistics

    How to view various statistics about the render process of an on-going render or rendered image.

Karma User Guide

Look Development

  • MaterialX

    Houdini has VOP node equivalents of the MaterialX shader nodes. You can build a shader network using these nodes, or import an existing MaterialX-based shader, and use them with Karma (Houdini’s USD renderer).

  • UDIM paths

    You can encode different tiles of a texture space into different texture files, each with its own resolution. You can then specify a texture filename such as kaiju.exr, and Houdini will replace the token with the specific tile address at load time.

  • Shader translation

    Describes the Solaris shading framework, including shader node translation to USD primitives.

  • Shotbuilder tools

    Multi-Shot Pipeline in a Box.

Procedurals

Supporting documents