If you want to control object visibility with operator, or the Arnold Python API, or by editing an ASS file, you need to understand Arnold’s visibility parameter.
In the UI, the object visibility options look like a bunch of separate parameters:
but in Arnold, all those options are stored in one visibility parameter.
For example, if an object is visible to the camera (primary visibility), and to transmission (both diffuse and specular), then that’s visibility 13.
Why 13? Because 13 = 1 + 4 + 8
- camera rays = 1
- diffuse transmission rays = 4
- specular transmission rays = 8
The Arnold visibility parameter tells Arnold the rays to which the object is visible.
- visibility 0 means the object isn’t visible to any rays
- visibility 255 means the object is visible to all rays
- visibility 253 means the object isn’t visible to shadow rays (so the object does not cast shadows).
Here’s the decimal values for all the different ray types.
To figure out the visibility, just add up the values for the rays you want.
|Ray type||Decimal Value|
|Camera (Primary Visibility)||1|
|Shadow (Casts Shadows)||2|
There’s two denoisers. Here’s when to use them:
- Use the OptiX Denoiser for fast (GPU-powered), slightly-lower quality denoising of IPR
- Use the Arnold Denoiser (aka noice) for high-quality denoising of final frames and animation sequences
For more info, check the docs
You can use kick to render with debug shading. Here’s the flags to use:
- -is to ignore the shaders assigned to the shapes
When you ignore shaders, a default utility shader is used to render the scene.
- -sm sets the shade mode ( ndoteye lambert flat ambocc plastic metal)
- -cm sets the color mode (color ng ns n bary uv u v dpdu dpdv p prims uniformid wire polywire obj edgelength floatgrid reflectline bad_uvs nlights id bumpdiff pixelerror)
Here’s some examples that show how to kick with different types of debug shading (I’ve used the Arnold Render View debug shading modes for these examples)
|Basic: disable all shaders in the scene, switching to a gray ‘ndoteye’ shader; a very fast shading mode.
kick -is -sm notdoteye
|Lighting: renders the scene with a white lambert shader
kick -is -sm lambert
|Occlusion: use ambient occlusion shading
kick -is -sm ambocc
|Wireframe: displays geometry as a wireframe
kick -is -cm polywire
kick -is -sm ndoteye -cm polywire
|Normal: visualizes the normal vector (between 0 and 1, in tangent space)
kick -is -sm flat -cm n
|UV: displays the coordinates of the primary UV set (red=U, green=V)
kick -is -sm flat -cm uv
|Primitive ID: displays random colors based on the per-primitive (triangle, curve) index
kick -is -sm flat -cm prims
|Barycentric: displays intra-primitive parametric coordinates (barycentric for triangles, parametric length, and width for curve segments)
kick -is -sm flat -cm bary
|Object: displays random colors based on the per-object ID
kick -is -sm flat -cm obj
Arnold 5.1 adds operators, which among other things, allow you to override parameters in ass files loaded by procedural nodes.
Here’s a quick example using the brand new MtoA 3.0
I exported some particles from Softimage, loaded them into Maya with an aiStandin (aka an Arnold procedural), and then used a set_parameter operator to scale the radius by 0.5
Note that I connect my operator by setting the Target Operator in the Render Settings.
I can chain two set_parameter operators together, to set the mode and then scale the radius:
MtoA defines a lot of batch render flags for Arnold. For example, here’s how to set the Arnold log verbosity and enable file logging:
render -s 2 -e 2 ^
-r arnold ^
-ai:lve 2 ^
-ai:ltf true ^
-ai:lfn C:/Users/blairs/Downloads/render.log ^
First, to use the Arnold batch render flags, you need to use the Maya -r flag to specify that the renderer is arnold (otherwise, you’ll get an “Invalid flag” error).
Then you can use the Arnold batch render flags:
- ai:lve sets the log verbosity level
- ai:ltf enables file logging (Log To File)
- ai:lfn is the log file name. I used forward slashes; I could also have used backslashes and put quotation marks around the log file name.
You can export an ASS file from Maya (with the XGen primitives) and then use an Arnold Procedural to load the ASS file into 3ds Max.
You need to add these two folders to the system environment variable Path:
- C:\Program Files\Autodesk\Maya2018\plug-ins\xgen\bin
- C:\Program Files\Autodesk\Maya2018\bin
For example, you can copy this:
C:\Program Files\Autodesk\Maya2018\plug-ins\xgen\bin;C:\Program Files\Autodesk\Maya2018\bin;
and paste it at the beginning of the current Path:
Restart 3ds Max after you do this.
Then add the MtoA procedurals folder to the Plugin Search Path:
The Arnold volume node uses the texture search path, so you don’t have to use an absolute path in the volume filename.
So if you need to set up a Maya scene so that the OpenVDB volumes work on any platform, you could put an environment variable in the Texture Search Path
Just note that support for volume filenames is still a little … rough. You can’t enter an absolute path in the aiVolume Filename box, then enter a texture search path, and expect MtoA to automatically export a relative path. That still needs to be implemented.
For now, here’s what to do:
- When you first create the volume, load the vdb file and leave the full absolute path in the aiVolume Filename box.
- Select the grids and set the other volume parameters.
- Then set the texture search path and strip off the path from the volume file name (leaving just the file name).
- Now the environment variable will control where Arnold looks for the vdb file.
The Arnold volume node also support environment variables, so you could do this:
But again, once you put the environment variable into the Filename, the path won’t be resolved inside Maya (but it will work when you render).
If you see something like this:
[Arnold]: MAXtoA_Shaders.dll was compiled against non-compatible Arnold 188.8.131.52
it usually means you have an older Arnold trying to load something compiled with a newer Arnold. There’s two common reasons for this happening:
- The system PATH includes the location of the older Arnold, so the older Arnold is loaded instead of the Arnold version included with the plugin.
- The plugin install is messed up, and has the wrong Arnold version in it.
To jitter color with user data, you need to connect an aiUserDataInt to the data input parameter, like this:
The user data is an mtoa_constant attribute on the shape. For example, if add an extra attribute named mtoa_constant_jitterID to some shapes, then you can use aiUserDataInt to read the jitterID.
jitterID is set on the shape
Jitter by user data (with a little jitter per face too)
aiUserDataInt reads the jitterID
If you want to use the shapes as standins, and be able to set the jitterID in the scene, then export the shapes without the mtoa_constant_jitterID attribute. In the scene, you’ll be able to add mtoa_constant_jitterID to the aiStandin node. The aiUserDataInt node in the ASS file will use that jitterID.
You can get individual log files for each frame:
- In the Arnold Render Settings, go to the Diagnostics tab.
- In the Verbosity Level list, click Warnings + Info.
- Click the File check box.
- Click the folder icon and choose a folder for the Arnold log files.
Or you can check the MayaRender log, which will be one log file, with the log messages for every frame.
On OSX, open the Console and look for ~/Library/Logs/Maya/mayaRender.log