Community
Arnold for Maya Forum
Rendering with Arnold in Maya using the MtoA plug-in.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

operators using (multiple) alembic nodes and override shaders

4 REPLIES 4
SOLVED
Reply
Message 1 of 5
pavelR.
1028 Views, 4 Replies

operators using (multiple) alembic nodes and override shaders

Just curious if operator shader overrides are supposed to work on multiple objects, namely multiple alembic nodes (using the gpu cache workflow)?

I'm having a hard time to get operators work correctly on multiple nodes, be it alembic nodes or standins.
Sometimes they work/don't-work, depending on how often I hammer the render-update button (without any further changes) and this behavior is directly related to 'parallel_node_init on/off'.

Most often the approaches I tried don't work with 'parallel_node_init off'.

Is the whole selector string parsed as global expression or just the part after the shape-name?

Just curious if something like 'myAlembic*.itemsParent_NULL.someItemPrefix*/*' is possible where 'myAlembic' is the most common name for name/prefix for the alembic-shape-nodes.
(myAlembic1Shape, myAlembic2Shape,...)

Or what would be the correct approach to override shaders on 'certain' nodes?

Doing a '*.(@node == 'polymesh')' expression seems to work but then I can't figure out how to filter by alembic gpu-cache node-name (-part) or by the 'name' and get consistent results when updating the renderer.

(*.(@node == 'polymesh')) and (*.(name == '*standRow*'))

Is the closest I can get but once again it fails if I don't set 'parallel_node_init off' explicitly and just because it worked the last 10 times I hammered the render-update button doesn't mean that this expression is valid.

*update*: doing the same expression in another scene didn't work either.

*update2*: it seems to work with standins but not on alembic nodes (gpu cache nodes)

Any tips on how to get this work using a more 'path-like' syntax? nodeName*/someparent/someChild/*)

Labels (3)
4 REPLIES 4
Message 2 of 5
Anonymous
in reply to: pavelR.

Hi Pavel,


Recently I've encountered the same issue and was actually about to post the same question. The operator assignments seem to work on multiple instances of the same standIn. However, when I try the same with multiple gpu caches, it only seems to assign the shader to one of them randomly. When I hit the render-update button the assignment switches to another one.

1860-operator-gpu-cache-issue-01.png

(two shader assignments on multiple instances of same gpu cache)

Please let me know if you find a solution. I'll keep looking for one too and keep you posted.


Message 3 of 5
Anonymous
in reply to: pavelR.

1870-operator-gpu-cache-issue-02.png

It seems the way to make it work is to always have a unique namespace in the translator options of the gpu cache.

1869-operator-gpu-cache-issue-03.png

This is regardless of the maya namespace the node might have.

Once the alembic translator has a unique namespace you should be able to do the assignments using the 'path-like' selection you suggested:

nodeName*/someparent/someChild/*

Hope this might help.

Message 4 of 5
pavelR.
in reply to: pavelR.

nice!

after some frustrating play-around I picked probably the worst workaround... let me just say that the file-size increased from 5Mb to 350Mb-ish ... imported them all, had some bad experience with regular file-referencing (lost shader connections)..back to the topic...

Setting a unique namespace does seem to work, great finding!

now path-like operator-selectors work!!!: 🙂 🙂 🙂

right*legoman*/legoman_GRP/body*.(@node == 'polymesh')

(I might skip the node-type part, as it works too, just a weird habit.. currently the render-setup does seem to attempt to add material overrides on non-shapes which then results in errors..not related to arnold, seems it's a 2018U3 feature...hence why I try to be as explicit as possible)

I wonder if the arnold-namespace attribute can also be used in some way..
An "easy" way to keep the namespace-string unique is to assign it based on selection via a script.
The attribute name is just 'aiNamespace', so it's rather easy to maintain unique names within a scene.

But again: Amazing that you could figure out a way to use gpu-cache nodes with operators, thanks! (I doubt that I would have ever found a feasible workaround...)

cheers


test rendering

1872-operatorgraph.png

Message 5 of 5
orn.gunnarsson
in reply to: pavelR.

Is the problem alleviated if you set enable_procedural_cache to false in the options?

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums