Recommended Approach for Loading/Inspecting Reference Geometry?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi there,
Hoping to tap into the brain trust here for an opinion/ recommendation.
I'm new to Arnold, and trying to decide what the best strategy might be for loading and inspecting reference geometry (either external, or internal but non-visible to any rays) within a procedural. The specific use case here is generating fur on a deforming skin, based on a reference rest skin (matching topology). The reference would be a polymesh (subdiv) and I would need to access faces, primUVs, and maybe some user-defined attributes.
So I was thinking my options would be:
- Internally Accessible Shape Node
Assuming that full introspection of any shape node within the current universe is available to one or more of the procedural's entry points (preferably ProceduralInit()), then this would be the simplest approach I think. I see a way to get node iterators in AtUniverse so this looks promising, but not sure if faces/vertices/user-attribs are still accessible at this point (about to test this). - External Alembic Cache, Using Arnold
If fetching from an external file, and given that the studio uses Alembic for the caching format, I wonder if the simplest way forward with this approach would be to instantiate an "Arnold Alembic" node from within the procedural, trigger the read (for each time slice), then inspect that node's loaded geo arrays -- don't know if that's at all possible or just crazy talk? - External Alembic Cache, Using External APIs
If triggering an Alembic read from within the Arnold API is not possible, then I could look into using either the Houdini API (HtoA is already tightly coupled with a specific Houdini version anyway), or the Alembic API directly (by far my least favourite alternative, lol).
In all cases there is the added issue of finding the limit surface at any given prim UV, but that's a separate issue.
I'd be grateful for any insights, in particular if the first two options are even possible in the context of an Arnold procedural (and save me some time exploring if they're not), or any other approaches people might have tried already.
Thanks in advance!