Best Way To Create Arnold Material Builder HDAs?

   3795   1   0
User Avatar
Member
39 posts
Joined: Feb. 2017
Offline
I want to create a generic utility HtoA material network and bundle it as an HDA to keep it in sync across a pipeline and I'm having some trouble with the structure and relationship of the nodes involved. There's not a lot of discussion about this that I've been able to find online so I started with the SolidAngle docs here:

https://docs.arnoldrenderer.com/display/A5AFHUG/Digital+Assets [docs.arnoldrenderer.com]

What I would like to have is a digital asset that can be added inside a matnet (or /mat), with parameters promoted for things like base color and diffuse texture, with the regular openGL tags on those parameters for viewport convenience.

I can make an Arnold Material Builder, put the standard shader + whatever else I need in there, promote parameters, tags, etc and it all works great. But when I attempt to create a digital asset from that Material Builder I get [htoa.material] Invalid shader path /mat/my_builder_hdaerrors.

A different approach does work: creating the shader inside a subnet, which is inside of an Arnold Material Builder node, then turning that middle subnet into an HDA. By assigning the parent Material Builder to the geometry I don't get any errors:



That's not impossible to work with but it's messier than a simple 'make HDA --> assign to geo' method I would prefer to use and the promoted parameters wind up down a level from where they're most easily accessed (on the Material Builder node). Is there a way to make an Arnold HDA at the /mat level like this? Somehow tag an HDA so Arnold still recognizes it as a valid Material Builder network?

Thanks for any advice!

Attachments:
pcoip_client_gLOuhgK9oD.png (21.0 KB)

User Avatar
Member
39 posts
Joined: Feb. 2017
Offline
Edit: removed some of this post as the questions were a result of user error.

After more experimentation I have more questions about the interaction between Arnold materials & subnets/HDAs.

Here are some examples:

1.) A simple subnet with a SS shader inside it, piped to a bsdf shader output, inside an Arnold Material Builder, seems to work:


2.) Passing a SS shader directly through the subnet does not work, but making a second shader_2 output does work:



My best guess is that there is something going on with in/out parm name conflicts -- does anyone have any insight on this? I've still found almost nothing from Google or forum searches on the subject.
Edited by jedmitchell - Dec. 30, 2021 14:19:29

Attachments:
pcoip_client_IqstTafKXO.png (122.3 KB)
pcoip_client_fsRczBWpxr.png (112.3 KB)
pcoip_client_RUwMQ5qRIS.png (136.9 KB)

  • Quick Links