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:
You’ll get an error like this if your project path has characters like é or ü or Ô in it.
// Error: [driver_exr] defaultArnoldDriver@driver_exr.RGBA: can't create file ".exr": OpenEXR exception: Permission denied. //
// Error: [driver_jpeg] defaultArnoldDriver@driver_jpeg.RGBA: can't create file ".jpg": Unable to open file ".jpg”
// Error: [driver_png] defaultArnoldDriver@driver_png.RGBA: can't create file ".png": Could not open file ".png"
Arnold can’t create the output file, because the special characters mess up the resolution of the output path, which ends up as an empty string.
So with no path provided, the ouput driver tries to write “.jpg” in the current working directory, which is probably something like C:\Program Files\Autodesk\Maya2018.
Use plain text characters for your project folders.
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).
It’s not rocket science, but here’s a little application of the scientific method to technical support.
The Autodesk licensing system loads AdlmIntRes.xml
I used dtruss on macOS and Process Monitor on Windows to see what files are accessed by the licensing system. (On Linux, I would use strace)
On Windows, the file %LOCALAPPDATA%\Autodesk\Logs\AdlmIntRes.xml is loaded.
On macOS: $TMPVAR/AdlmIntRes.xml:
56944/0x16208b8: stat64("/var/folders/vb/1d7zhsx97q7_ddz43nccbyj00000gn/T//AdlmIntRes.xml\0", 0x7FFF55D22F00, 0x0) = 0 0
56944/0x16208b8: stat64("/var/folders/vb/1d7zhsx97q7_ddz43nccbyj00000gn/T//AdlmIntRes.xml\0", 0x7FFF55D22F30, 0x0) = 0 0
56944/0x16208b8: open_nocancel("/var/folders/vb/1d7zhsx97q7_ddz43nccbyj00000gn/T//AdlmIntRes.xml\0", 0x0, 0x1B6) = 37 0
On Linux: /var/tmp/AdlmIntRes.xml
Autodesk licensing will fail if there’s a problem with AdlmIntRes.xml
- Delete AdlmIntRes.xml
No problem. The file is recreated
- Delete the contents of AdlmIntRes.xml and save the file.
License authorization fails with the error [clm] error initialzing CLM (9)
If you see something like this:
[Arnold]: MAXtoA_Shaders.dll was compiled against non-compatible Arnold 126.96.36.199
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.
If you see this error in the script editor
# Error: Register failed for arnoldAOVChildSelector #
that means your preferred render layer setup is Legacy Render Layers (so MtoA fails to register something that’s used for the new Render Setup).
If you’re not using Render Setup, then you can safely ignore this error.
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.