Assignment of image shaders


We’re looking into stylized look and NPR rendering, which requires usage of image / sample shaders. While shader definition using UsdShade is easy, assignment is much more problematic.

Given that shader affects whole image rather than a specific object, we’re authoring binding on RenderVar for relevant AOV. This works fine, when dealing with final lighting scene, however it’s harder to setup for asset lookdev. The problem here is that assets are composed into final scene at lower level rather than root level. As such, in order to discover introduced RenderVars we’d potentially need to traverse whole scene, which is not ideal. Another approach is to use RenderSettings prim or dedicated attribute on some global location, but it seems to suffer from same issues when composed.

Is this something that you’ve considered or is there something we’re missing? Do you have any recommendations concerning image shaders assignment?


Hi @jjeziorski , this is something we haven’t tackled yet, though know we will need to at some point. To the local/global/discoverability issues, which are, generally speaking, endemic to the UsdRender design and were called out in the proposal… I wonder if a shared “global” layer would work, if the same setup is useful in all contexts (at least as a starting point), i.e. each show/site would define the RenderVars/RenderSettings for image shaders at a known path under /Render, and every asset and sequence would subLayer that (small) layer into its root layerStack?

Hi @spiff,
Thank you for your response and I’m glad I haven’t overlooked some already existing solution.
Suggested “global” layer approach sounds plausible, but seems disruptive to way we deal with scene composition at the moment. Maybe we can adapt this in the future, for now we’ll look into scripted approach to address that.
Thanks again for feedback!