In this case, when the user tried to render after enabling the OptiX denoiser, they got this error:
ERROR | [gpu] OptiX version 0.30.91 is lower than the minimum required version 5.0.0
This was with MtoA 3.0.1, which means Arnold 220.127.116.11
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 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:
In a previous post, I looked at how things could go wrong in the file ~/pymel.log wasn’t accessible. On Windows, this was fairly easy to track down using Process Monitor:
On Mac OS X, I had to use dtruss. For example, I ran this command to trace the syscalls of the Maya Render command:
sudo dtruss -f -t open_nocancel -n Render 2> /var/tmp/mtoarender.log
When the render job failed, I checked the log file, and found this line:
11668/0x35deb: open_nocancel("/Users/stephenblair/pymel.log\0", 0x601, 0x1B6) = -1 Err#13
One important gotcha: if you repeat the render, you won’t find any mention of pymel error in the dtruss output. My guess is that at that point, the Render command ends up going through the file system cache, so dtruss doesn’t see the attempt to find pymel.log.
Here’s a quick summary of the dtruss command I showed above:
- Use sudo to run dtruss, because it needs additional privileges.
- -f tells dtruss to follow any child processes (like mayabatch) launched by Render
- -t filters the trace for open_nocancel system calls
- -n tells dtruss to trace the process named “Render”
- 2> /var/tmp/mtoarender.log redirects the dtruss output to a file