First, set things up so you can use the Arnold Python API. On Windows:
set PATH=C:\Users\blairs\AppData\Local\Programs\Python\Python39;%PATH%
set PYTHONPATH=C:\solidangle\arnold\Arnold-6.2.1.1-windows\python
rem Sometimes necessary
set PATH=C:\solidangle\arnold\Arnold-6.2.1.1-windows\bin;%PATH%
Then, run this Python script, which does the following:
- Sets the logging verbosity
- Loads an ASS file
- Loops over all the shader nodes.
- If a shader is a standard_surface, inspect the ID AOV parameters.
from arnold import *
AiBegin()
AiMsgSetConsoleFlags(AI_LOG_ALL)
# Required if the ASS file uses any SItoA shaders
#AiLoadPlugins('C:/softimage/workgroups/sitoa-3.4.0-2015/Addons/SItoA/Application/Plugins/bin/nt-x86-64')
AiASSLoad('C:/Users/blairs/Documents/maya/projects/default/scenes/denoiseme.0009.ass')
# Iterate over all shader nodes
iter = AiUniverseGetNodeIterator(AI_NODE_SHADER);
while not AiNodeIteratorFinished(iter):
node = AiNodeIteratorGetNext(iter)
print( "[script] AiNodeGetName: {0}".format( AiNodeGetName( node ) ) )
ne = AiNodeGetNodeEntry( node )
# print( "[script] AiNodeEntryGetName: {0}".format( AiNodeEntryGetName( ne ) ) )
# print( "[script] AiNodeEntryGetType: {0}".format( AiNodeEntryGetType( ne ) ) )
# print( "[script] AiNodeEntryGetTypeName: {0}".format( AiNodeEntryGetTypeName( ne ) ) )
if AiNodeIs( node, "standard_surface" ):
# Plain color ID AOVs are easy
aov_id1 = AiNodeGetStr( node, "aov_id1" )
print( "[script] aov_id1={0}".format( aov_id1 ) )
id1 = AiNodeGetRGB( node, "id1" )
print( "[script] id1={0} {1} {2}".format( id1.r, id1.g, id1.b) )
# ID AOVs that use a linked shader take a bit more work
aov_id2 = AiNodeGetStr( node, "aov_id2" )
print( "[script] aov_id2={0}".format( aov_id2 ) )
if AiNodeIsLinked( node, "id2" ):
id2 = AiNodeGetLink( node, "id2" )
print( "[script] id2={0}".format( AiNodeGetName( id2 ) ) )
AiNodeIteratorDestroy(iter)
AiEnd()