I can’t for the life of me figure out why I get no filtered RenderMan file when submitting to a Deadline worker.
When I submit a batch render via Maya’s RenderMan menu everything works correctly. In LocalQueue, I see two commands being executed in sequence:
prman -Progress -t:0 -cwd /path/to/rib file/
denoise /path/to/variance exr file/
When complete, I get the variance.exr and the filtered.exr produced by the denoise command.
Using Deadline, it seems that denoise command is never run. I only get the variance file. Tried this on both my local worker as well as on a remote. Checking the logs, there is no occurrence of the denoise command at all and no errors to suggest it was attempted and failed.
Does anyone know why that’s the case?
Using Maya 2020.3 and RenderMan 23.5 on macOS 10.15.7
After completely reinstalling Deadline to the latest version, it didn’t fix the problem. Still no denoise. I’d appreciate any guidance anyone might have.
For anyone struggling with this same question (on macOS), I hope I can save you a few hours.
Since Deadline doesn’t seem to respect the “Denoise” checkbox in Maya’s RenderMan render settings, you can run the denoise filter manually on each image from the command line using the
First, ensure you have the
RMANTREE environment variable set somewhere like .bash_profile:
This ensures the
denoise command can find
default.filter.json or it will error out.
Also, ensure RenderManProServer-[version number]/bin folder is in your
PATH. For me, in .bash_profile, it looks like this:
This prepends the bin folder’s path to your exiting
PATH variable so that the
denoise command is available in the command line. (See Denoise in the RenderMan docs.)
Now it’s as simple as running the
denoise command and passing it the path to the file you wish to denoise:
If all went well, you should have a
filtered.exr file in the same directory as the variance file.
There’s probably a way to run this automatically with a script in Deadline, but I haven’t gotten that far yet.
Hey @Mike4! I’m in the same boat over here. Did you ever get to the bottom of this?
@Mike4 Following your suggestion I was able to send the denoising operations to the farm as command line jobs. It’s not as elegant as I am hoping for in its final form, but at least for now it does allow us to distribute the denoising across multiple machines. I am looking into setting this up as a post-render script action like you were saying, which would be a little tidier, but I hope this is included in a future update.
How did you get the cmd line code to distribute to different machines? I’m able to use a python submission to have it iterate through and denoise the frames, but only on one machine. And I’ve played with command line submissions too, and it works, but again its only doing it on one machine.
alternatively, I could share the code I wrote to do the post task script on rendering, if youd like.
Hey @Tom_Bremer ! Sure, I’d love to see how you did it in pyhon. I’d also be interested to learn more about the errors/logs you’re seeing on your other machines. We got ours to run on multiple machines using command line jobs.
The jobs we submitted look something like the attached image. The blurred out part in the arguments is a path to the renders using the < STARTFRAME > variable to iterate through the sequence. Is this about what you had?
Thanks! I will have to try it, but right away I have a question about the startframe variable. Does it literally say and then your path? Or is it your path and then ? I guess part of my problem is I dont know how to use those tags.
As for my post task script. You can try the attached script. Some caveats. I’m not really a programmer so the code is probably kinda messy. Secondly, at my studio we use AWS UBL machines as overflow from our on prem farm. So if you look at the code, I have an if statement that checks to see if that machine is using linux (our AWS spot fleet) or windows (our local machines), and then calls the denoise command using the path for whatever OS its using. So in the script, if you just add your spot fleet mount point path in there, it should work.
To use it, just go to “modify job settings” and in the script settings, point to this py file in the Post Task Script section.
deadlineDenoise_postTaskScript.py (2.1 KB)
I tried it out and figured out how to use the startframe tag and adding padding to the number. it definitely works. I tried doing a task size of 3 but it doesnt iterate through the frames in the task, so im trying to figure that out, but your method of having only one frame per task should work in the interim. Thanks for your help, its appreciated!
Also, if anyones interested, heres another standalone script I just finished that will ask for the location of your frames, the frame range, etc, and then submit to deadline using commandline. The script is just a python script that takes your info and puts it in the order it needs to create the commandline command.
The denoise arguments are in baked in the code (since we use the same args for everything), but it seems to work ok. Currently its 1 frame per task since using the command submission is kind of a hack. It’s written in python 3 so make sure you have some version of that installed.
deadline_denoiseJob_Submit.py (1.1 KB)