There’s been a few questions recently about nodes that look like this in an ASS file:
MayaPlusMinusAverage3D { name plusMinusAverage2 operation "sum" input3D 2 1 POINT 0 0 0 0 0 0 input3D[0] file1 input3D[1] bulge1 }
That’s the ASS representation of this (in Maya):
On line 6, you have the default values (two POINTs) for input3D. If there was nothing plugged into the input3D, you’d get the points (0,0,0) and (0,0,0).
Here’s an example that shows how to set up the node links for a MayaPlusMinusAverage3D node.
from arnold import * ass_file = "mayaplusminusaverage.ass" AiBegin() AiMsgSetConsoleFlags(AI_LOG_ALL) # Load the mtoa shaders, which include MayaPlusMinusAverage3D AiLoadPlugins('C:/solidangle/mtoadeploy/2015/shaders') AiASSLoad(ass_file, AI_NODE_ALL) # Create a MayaPlusMinusAverage3D node n = AiNode( "MayaPlusMinusAverage3D" ) # Set the name parameter AiNodeSetStr( n, "name", "plusMinusAverage2" ) # Set the operation parameter AiNodeSetStr( n, "operation", "sum" ) # input3D is of type POINT[] (an array of POINTs) # Allocate an array; by default the array is initialized to 0s a = AiArrayAllocate( 2, 1, AI_TYPE_POINT ) AiNodeSetArray(n, "input3D", a ) # Link input3D to the file and bulge nodes, which are assumed to already exist f = AiNodeLookUpByName( "file1" ) b = AiNodeLookUpByName( "bulge1" ) AiNodeLink(f, "input3D[0]", n); AiNodeLink(b, "input3D[1]", n); AiASSWrite(ass_file, AI_NODE_ALL, False) AiEnd()
Here’s another example. This time, one input3D is set to (0.3, 0.2, 0.4), and the other input3D is linked to a Bulge node.
MayaPlusMinusAverage3D { name plusMinusAverage3 operation "sum" input3D 2 1 POINT 0.3 0.2 0.4 0 0 0 input3D[0] file1 }
And here’s the Python snippet that creates the node and sets up the link:
n = AiNode( "MayaPlusMinusAverage3D" ) b = AiNodeLookUpByName( "bulge1" ) AiNodeSetStr( n, "name", "plusMinusAverage3" ) AiNodeSetStr( n, "operation", "sum" ) a = AiArrayAllocate( 2, 1, AI_TYPE_POINT ) AiArraySetPnt(a, 0, AtPoint( 0.3, 0.2, 0.4 ) ) AiNodeSetArray(n, "input3D", a ) AiNodeLink(b, "input3D[1]", n);
A couple of notes:
- You can get the type of parameters like input3D with kick:
kick -l ..\shaders -info MayaPlusMinusAverage3 D node: MayaPlusMinusAverage3D type: shader output: RGB parameters: 3 filename: ..\shaders/mtoa_shaders.dll version: 4.2.3.1 Type Name Default ------------ -------------------------------- -------------------------------- ENUM operation sum POINT[] input3D (empty) STRING name
- For the full list of parameter types such as AI_TYPE_POINT, see the “AtParamEntry API” in the Arnold API Reference (or python/arnold/ai_params.py in the Arnold install).