I suspect the reason John initially questioned your interest in Arnold operators is that most of the use cases you’re describing are typically things people would prefer to do in Gaffer directly. Performing render overrides on generated geometry is exactly where Gaffer excels compared to some other workflows.
Dense foliage, for example, can be quite easily handled in Gaffer with no need for external procedurals. If your foliage has exceptionally heavy hierarchy/geo, you can always use an Encapsulate node to hide it away from downstream processing. It might be easiest to think of that workflow as making an on-the-fly procedural, all within the Gaffer graph.
Now, your example of making shader assignments within an XGen procedural is indeed a case where Arnold operators might make sense in Gaffer. I’m curious to hear John’s thoughts on that use case.
We haven’t hit that sort of issue at Image Engine because instead of using hair procedurals, we extract curves from external hair software (XGen, Yeti, Houdini, etc), store them on disk in an Alembic-like file, and load the baked curve geo into Gaffer, where we have nodes for further deforming it or simply binding it to an animating skin mesh. We’ve prototyped a similar workflow for crowds (though without the extra baking step) to avoid needing external crowd procedurals as well.
Typically, at Image Engine at least, we would never generate .ass files unless we’re debugging the backend or making a test case for SolidAngle. We instead use Gaffer to communicate with Arnold directly, and the translation of a Gaffer scene into an Arnold universe happens live, entirely in c++, in the same process that generates the pixels.
But if you’re committed to generating .ass files and kicking them, rather than rendering live with a ‘gaffer execute’ command, you may be able to ‘hack’ operators in using a chain of TaskNodes:
ArnoldRender (set to output a SceneDescription)
|
PythonCommand (reads the .ass file, appends to it, writes it back to disk)
|
SystemCommand (kick the modified .ass file)
Cheers,
Andrew