Using an operator to override parameters in an ass file


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.
set_parameter_radius
I can chain two set_parameter operators together, to set the mode and then scale the radius:
set_parameter_mode_radius

[mtoa] Arnold batch rendering flags


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 ^
D:\Projects\maya\Support\scenes\example.ma

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.

[MAXtoA] Rendering XGen in 3ds Max


 

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:

windows_sys_env_var

Restart 3ds Max after you do this.

Then add the MtoA procedurals folder to the Plugin Search Path:

maxtoa_plugin_search_path

 

[MtoA] cross-platform volume file names


The Arnold volume node uses the texture search path, so you don’t have to use an absolute path in the volume filename.

volume_texture_searchpath

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

volume_env_var

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:

volume_env_var_in_filename

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).

compiled against non-compatible Arnold


If you see something like this:

[Arnold]: MAXtoA_Shaders.dll was compiled against non-compatible Arnold 5.0.2.1

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.

 

[MtoA] Jittering color with user data


To jitter color with user data, you need to connect an aiUserDataInt to the data input parameter, like this:

mtoa_jitter_userdata

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.

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.

[OSX] Getting Arnold logs for batch renders


You can get individual log files for each frame:

  1. In the Arnold Render Settings, go to the Diagnostics tab.
  2. In the Verbosity Level list, click Warnings + Info.
  3. Click the File check box.
  4. Click the folder icon and choose a folder for the Arnold log files.

mtoa_render_settings_log

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
mayaRenderlog

kicking a cputime heat map


cputime-heatmap.png

New in Arnold 5.0.2! You can press T to get a cputime heat map. From the Arnold release notes:

  • Added cputime heatmap view to kick: When using kick you can now toggle between viewing kicks default output and a cputime heatmap with the T key. The mapping of the heat map can be scaled with the [ and ] keys.

To get the cputime heat map, you have to run kick interactive (eg with the -ipr flag):

kick -ipr example.ass

How to check what mip levels are used


You can use the Arnold log to check what mip levels are used. In the Image file statistics, there’ll be a MIP-COUNT for every texture

00:00:02 124MB | Image file statistics:
00:00:02 124MB |       opens tiles MB read --redundant-- I/O time res             File
00:00:02 124MB |     1   1   538   12.6                  2.2s     8192x8192x3.f16 debug.tx MIP-COUNT[0,13,314,147,40,15,4,1,1,1,1,0,0,1]
00:00:02 124MB |

For example, with my debug texture, I see

MIP-COUNT[0,13,314,147,40,15,4,1,1,1,1,0,0,1]

in the Arnold log for this render:

 

[mtoa] The case of the layeredTexture and Arnold 5 closures


In this case, the question was “why doesn’t layeredTexture work in Arnold 5?”

layeredTexture

This is a common question/problem with Arnold 5: shaders plugged into color slots.

In Arnold 5, shaders like Standard Surface (and Lambert too) don’t return colors. So in general, you can’t plug them into color parameters. And Blinns are translated into Standard Shaders by MtoA, so you can’t plug a Blinn into a color either.

Instead of a layeredTexture, you can use a layeredShader. It knows how to handle shaders that don’t return colors. Or you could use the Arnold aiMix shader.

layeredShader

So, if these shaders don’t return colors, what do they return?

Closures. They return closures.

closure is not a color, it’s a bundle of data that tells Arnold how the surface (or volume) scatters light. Arnold takes care of all the ray tracing and light sampling, and then uses the closure to figure out the surface color.

 

From Master Zap:

“The addition of “closures” is a complete godsend. This relegates the work of rendering to the renderer, as it should be. No longer are material shaders little dumb raytracers that count lights and shoot reflection rays. A material shader returns mix of BxDF closures, and the renderer itself takes care of doing “the right thing” with them”.

From the Arnold 5 release notes:

Closures: a new closure parameter type has been added, which shaders can output instead of final colors. There are BSDF, BSSRDF, emission, matte, transparency and volume closures. See the API documentation and examples for more details on how to use these. Linking a color to a closure parameter will automatically create an emission closure with that color. A closure parameter however can’t be linked or converted to a color, as the integrator only computes lighting after shader evaluation.