Setting up passes for your render can be a pain especially if you want per light bundle exports. Houdini does not support this by default (as far as I know) and making a tool that does this has always been something I wanted to do. Recently I achieved that result using SOHO (Script Output of Houdini Object) and a custom version of the Mantra node.
Today I just want to explain it, later I will upload a completed version of it to our git.
I started with the wanting to achieve a few things when creating a version of the Mantra node.
- Automatic Per Light Exports
- Per Light Exports that respect bundle groupings.
- Allow for the AOVs to be dumped into another file.
- Allow it to work with a Vanilla Mantra node.
Luckily 1 and 3 were already almost complete as Houdini Supports per like exports and dumping AOVs to another file. The problems really like with 2 and 4. Exporting a pass per light is possible, exporting a pass per light bundle is not. This has surprised me as I love light bundles because it allows me to group a bunch of lights under "KEY" or "FILL" and expecially in a large scene with 10+ lights I do not want a pass for each light per component as that could mean 20-50 different layers and that is a little much to manage.
Create Custom Render Parameters and use SOHO to export predefined passes during IFD Generation.
First I needed to define some passes. I did this inside of a yaml file. In there I defined a number of attributes per pass including whether it supported light exports.
Next I created the Custom SOHO Parameters. There is not a lot of documentation on this but its as simple as create a file that defines from render properties. I have to do this because when the IFD generation occurs on render parms are attainable (easily) .
Finally, I had to create a IFD hook that ran after the default plane generation, during this hook I also set it up so it exports out AOVs (seperated into DATA and LIGHTING) to a different file. I just prefer that workflow. Addtionaly I take this moment to group the lights by their light bundles. If the light does not have a bundle just my a layer with its own name. This ensure that bundle groups will be respected but they can be mixed with non-bundled lights.