This is actually pretty cool…you can use an operator to update file paths before an ASS file or ABC file is loaded, then use another operator to touch the geometry loaded by that procedural.
For example, suppose at render time you want to replace trex_proxy.abc with trex.abc. You can easily do that with a string replace operator:
- *.(@node==’alembic’) selects all Alembic procedural nodes
- Match matches any file name that ends with “_proxy.abc”
- Replace replaces “_proxy.abc” with “.abc”
And that all happens before the abc file is loaded.
We can see this in the Arnold log (Debug verbosity). First the string replace operator is applied; then after the abc file is loaded, a set parameter operator is applied to the nodes loaded from the abc file.
| initializing 16 nodes … | [operators] init op: 'aiStringReplace1' | [operators] cook op: 'aiStringReplace1' | node: '/aiStandIn/aiStandInShape' | [proc] /aiStandIn/aiStandInShape: loaded 1 nodes (1 objects, 0 shaders) | [operators] init op: 'TRex:tRexShape_aiSetParameter1' | [operators] cook op: 'TRex:tRexShape_aiSetParameter1' | node: '/TRex:tRex/TRex:tRexShape'