A very artist-friendly and powerful feature of RenderMan is the ability to light-link light filters to specific objects. In certain scenarios this can become quite useful to make detailed tweaks. In Arnold this is unfortunately not possible to my knowledge, but luckily there are ways to do something similar…

…through the use of userdata (primvars)! Specifically what I wanted to replicate was RenderMan’s MultFilter. The idea is pretty simple, but combined with the ability to light-link it to specific objects it can be extremely useful for adjusting small details of a given scene.

It also was a great starting point to get my hands dirty with C++. I’m still mostly lost for anything that is more complex than multiplying a few values together, but also happy that I got something out that at least seems to work reasonably well :)

The controls are relatively straight forward. To make use of the userdata inputs, make sure you tag your objects with an Arnold-compliant float userdata and a value between 0 and 1 to drive the amount.


For Katana specifically I’m also providing a setup that is meant to serve as an example of using it with the built-in light-linking features. The way I’ve been approach it is the following:
1) Resolve the light linking information (which lights are linked to which geo)
2) Tag light-linked filters with the hierarchy location of the lightfilter as the userdata name and set the default depending on the initialState:

3) Tag linked objects with the userdata name of the lightfilter location


This is a more artist-friendly and direct way of setting up using known workflows. It’s probably recreatable to a degree in other DCC’s as well. A Katana example file that includes this setup can be found HERE

Also here’s a bit more guided walkthrough available on Vimeo:

… and you can grab it from HERE (source + precompiled for Linux, MacOS and Windows)


If this post has helped you in any way you can express your gratefulness by using the Donate Button below to buy me a coffee! :)