If a clean install of MtoA doesn’t work (and the computer does support SSE4.1), then “The specified module could not be found.” usually means there’s a missing dependency. Dependency Walker is a decent, if aging, tool for checking out dependencies, but for leaving no stone unturned, I prefer Process Monitor.
The MtoA plugin (mtoa.mll) depends on a handful of files only. Here’s the log of loaded DLLs for a working MtoA:
Here’s a quick walkthrough (no audio) of how to get a Process Monitor 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.
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:
-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)
Debug shading
kick flags
Basic: disable all shaders in the scene, switching to a gray ‘ndoteye’ shader; a very fast shading mode.
kick -is
or
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
or
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
So, that means there is an incompatible version version of the OptiX library on the system, and it’s being loaded instead of the OptiX that ships with MtoA.
I probably could have just checked the PATH setting, but I used Process Monitor to absolutely sure, and I found this:
The problem is that another renderer added itself to the PATH. That’s a bad thing
The solution? Remove that folder from PATH. Create a batch file or wrapper script to set the required environment when you start Maya to use the other software. Rather like the mtoa module file sets PATH when you start Maya.
NOTE In previous versions of MtoA, this would prevent MtoA from even loading.
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.
This error means that you are trying to render multiple AOVs into a single file, and the file format (PNG in this example) does not support that.
JPEG, PNG, and TIFF cannot have multiple AOVs in a single file. The AOVs have to be rendered in separate files.
If you get this error, check the Common tab. If you don’t see the <RenderPass> token, then you’re going to get the “more than one output statement was associated with single layer driver” error.
For JPEG, PNG, and TIFF, you need the <RenderPass> token:
Normally, MtoA will automatically add the <RenderPass> token for you. But sometimes Merge AOVs gets enabled for EXRs, and then the Image format is changed to another format, like PNG.
So just switch back to EXR and disable Merge AOVs. Then switch back to the other image format.
Warning: [mtoa] [translator polymesh] ShadingGroup exampleSG has no surfaceShader input
it’s because a shadingEngine node either has nothing connected to the surfaceShader port, or (more likely) it has an unknown node plugged into surfaceShader.
For example, if you load a scene that was set up with a different renderer, and that renderer is not loaded, then you’ll get some “ShadingGroup has no surfaceShader input” warnings.
Or: how to fix the node “xgen_procedural” is not installed problem.
For example, suppose you want to render XGen hair in CINEMA 4D on macOS.
From MtoA, export your XGen hair to an ass file.
Set DYLD_LIBRARY_PATH before you start your application (for example, open a Terminal, set DYLD_LIBRARY_PATH there, and start CINEMA 4D the command line)
One of the strange thing about supporting Arnold at Autodesk is that you have to be a guru-level licensing expert on Autodesk licensing (not RLM, but Autodesk licensing).
In this case, Maya 2019 would silently fail at startup. Sometimes you’d see the splash screen, but then that would just disappear.
There was nothing in the Adlm.log
No MayaAdlm log was created
The MayaCLM log had only this:
ERROR: checkoutLicense: Failed to authorize license
The clm log did have this:
JsProductLicenseFact.loadSelectedProductInfoKey - Unable to get selected product key due to unknown problem.
TIP All these log files are in the Temp folder.
On Windows, look in %LOCALAPPDATA%\Autodesk\Logs
On OSX, look in $TMPDIR
On Linux, look in /var/tmp
Process Monitor confirmed that the ProductInformation.pit file was missing:
ProductInformation.pit is an all-important file used by the licensing infrastructure. Every Autodesk product must be registered in that pit file.
If ProductInformation.pit is missing, or corrupted, then everything stops working.
For Arnold itself, you can ignore that message. Unless you have an Arnold license.
Couldn't register Arnold renderer in Maya PIT file (error while parsing
.pit file). Please contact support@solidangle.com.
For Maya, that message is a symptom of a problem with your Maya install: the Maya installation is not creating all the required files on your system.
If you finish the install (you can install without MtoA if you want), and then try to start Maya and nothing happens, then the ProductInformation.pit file is missing or corrupt.
If there is any problem with that file, Maya (and any other Autodesk software) will not start. Arnold will still render, but it won’t be able to use any Arnold license.
If that file does exist on your system, delete it. Then remove all Autodesk software, and install Maya again (without MtoA)
You can use the wireframe shader to drive the opacity of a standard_surface.
The wireframe shader itself doesn’t support opacity, and neither do the flat, utility, and ambient_occlusion shaders. They are all color shaders (RGB). In Arnold, only shaders that return closures can support opacity.
In the more general case, where the opacity isn’t coming from the same shader, you can use the emission for the color:
Arnold 6.0.2 includes a new string_replace that lets you do find and replace on string parameters.
For example, I got an ass procedural file from a user, but I didn’t get the textures. Normally I would just enable ignore textures, but this time I used string_replace to replace all textures with my trusty-old-Softimage noicon pic.
string_replace operator in MtoA (Maya)
Selection selects all Arnold image nodes. So this string replace operation applies to all string parameters of the image node (which includes name, uvset, color_space as well as filename).
Match is a regular expression that matches anything that looks like C:/project/sourceimages/example.tx or X:/temp/test/example.tx
[A-Z] matches any drive letter from A to Z
.* matches any string of characters
Note that match is a regular expression, so you cannot use glob wildcards like this: C:\sourceimages\*.tx (because * is not any string of characters, it is zero or more occurrences of the previous character)
\.tx matches a period followed by “tx”. The period has to be escaped with a backslash because ‘.’ matches any single character
Note that this match expression won’t handle something like example.txtra.tx
Replace is the string that replaces anything matched by the Match expression.
Controllable auto-instancing on ASS procedurals: You can now disable the default automatic instantiation of procedurals pointing at the same ASS file with the auto_instancing parameter on each procedural or by the procedural_auto_instancing option. This workaround is sometimes useful when overriding procedural parameters with operators.
It means that if you load the same ass file many times, Arnold will load the ass file just one time, and then automatically create instances of that. For example, if I load an ass file three times, I will get two instances.
In previous versions, this was known as the procedural cache, and it was a global option. Now it’s called auto_instancing and you can set it on each procedural node (aka aiStandin in Maya).
In general, you want auto instancing, because instancing is more efficient than loading the same ass file over and over. But if you’re using operators to apply different looks to the same procedural, you need to turn off auto instancing. Otherwise all the procedurals will have the same look (because they all be instances of the same one procedural).
For example, with auto instancing on, I get this, even though I’ve assigned different looks to each procedural (standin):
Everything has the same look with auto instancing on
I can also tell from the Arnold log that I’m getting instances. Note that 2 are reused
| ---------------------------------------------------------
| ass file cache
| unique (loaded from disk) 1 (33.33%)
| reused (found in cache) 2 (66.67%)
| total referenced .ass files 3 (100.00%)
| ---------------------------------------------------------
If I turn off auto instancing (in the procedural parameters)
then I get three different looks
In the Arnold log, that looks like this (0 reused means 0 instances)
| ---------------------------------------------------------
| ass file cache
| unique (loaded from disk) 1 (100.00%)
| reused (found in cache) 0 (0.00%)
| total referenced .ass files 1 (100.00%)
| ---------------------------------------------------------
This is actually pretty cool…you can use an operator to update file paths before an ASS file or ABC file is loaded, then use another operator to touch the geometry loaded by that procedural.
For example, suppose at render time you want to replace trex_proxy.abc with trex.abc. You can easily do that with a string replace operator:
*.(@node==’alembic’) selects all Alembic procedural nodes
Match matches any file name that ends with “_proxy.abc”
Replace replaces “_proxy.abc” with “.abc”
And that all happens before the abc file is loaded.
We can see this in the Arnold log (Debug verbosity). First the string replace operator is applied; then after the abc file is loaded, a set parameter operator is applied to the nodes loaded from the abc file.