I would like to pause a render that I have started, with the intention of resuming it at a later time (but during the same Blender session). How can I do this?
On Mac OS it is not necessary to have started Blender from the command line. You may use the "kill" command to send a stop and continue signal...
$ ps -ax | grep Blender 3554 ?? 750:42.18 /.../.../Contents/MacOS/Blender $ kill -s SIGSTOP 3554 $ kill -s SIGCONT 3554
There is a way to 'pause' Blender (or any software for that matter), but it relies on the operating system rather than Blender itself.
Mac OS X and Linux:
- You must start Blender from the command line or terminal.
- At any time, you can completely suspend Blender by pressing Ctrl+Z from the terminal window.
The terminal should say something like:
^Z + Stopped /Applications/blender.app/Contents/MacOS/blender
- You cannot interact with it until you you type
fgin the terminal. Which will bring Blender back to the foreground.
- Have the console window open (Window > Toggle System Console)
- Use the cursor to highlight any of the text in this window will freeze the console and pause Blender. This is a super hacky way to actually pause Blender, but it works in a pinch. See https://stackoverflow.com/questions/30418886/how-and-why-does-quickedit-mode-in-command-prompt-freeze-applications for detailed explanation of why this happens.
Pausing from the Operating System:
If you are on Linux (not tested on OSX)
you can send signals with these commands:
# To pause Blender: killall -s STOP blender # To start it again: killall -s CONT blender
Some advantages to this are that it will work for any task, not just rendering, and that you do not have to start blender from a terminal.
You can use process explorer for this. See this question on StackOverflow.
Pausing from Blender:
Pausing F12 renders from Blender is not implemented yet, however it is on the Cycles Todo List.
Mixing Smaller Renders
For a still image, a possible solution is to render less samples multiple times with the seed changed each time, and mix the images according to the samples. For example:
You have a scene which you would like to render at 3000 samples.
- First night you render 1000 samples with seed 0.
- Second night you render 1000 samples with seed 1.
- Third night you render 500 samples with seed 2.
- Fourth night you render 500 samples with seed 3.
The you take an image editor and put these images as layers:
- First render: alpha 0.33
- Second render: alpha 0.5
- Third render: alpha 0.5
- Fourth render: alpha 1.0
Each layer's alpha is: current samples / (all layers samples below + current samples)
As mentioned in the comments: The resulted image may have a slight light-loss compared to the full sampled image, however will also have less noise. You get (almost, very near, way below significance) the same result as using Clamp Direct and Clamp Indirect with the number of samples of the individual renders. So this light-loss will be the same as if you were to set Clamping to 100 for example, which is usually very small. When the Clamp values are already set and lower than the samples, then no additional light-loss should occur.
We discussed this topic in the comment section of some old blog posts, it might be worth reading them:
If you're rendering an animation, render out the frames individually as PNGs first. If do so, you can stop rendering a frame and come back to render the rest later without any corruption. Once you want the animation as a video file, load the PNGs as an image strip in Blender's video editor and render the video out(it will be really fast because it's just sticking the images together).
For animations that output to a sequence of individual image files an important checkbox is the Overwrite checkbox in the Output subtab of the Render tab of the Properties window. It defaults to checked. If you uncheck that box you can interrupt a render, shut down your laptop, turn it back on, and click the render animation button and it will not overwrite the frames that have already been stored to the directory, instead starting calculations at the first missing frame.
A drawback is that if you change the scene and want to discard the rendered frames containing stale data, you have to delete them from the directory some other way (using windows explorer, or linux rm)
Another drawback is that blender's default output directory is /tmp, which some flavors of linux wipe clean every time you reboot the computer. I use /var/tmp/blender/projectname/ instead.
Here is how I learned how to do it. In the properties go to render tab, scroll down to output; in the file format,(default is ffmpegvideo) select png. After selecting png, create new folder, name it and select accept at the top right. Now render the image or animation. Now to the pause. If you open the new folder on your computer you can see each image being rendered one at a time. If for example you have an animation 240 frames and around the twenty fourth frame you want to stop or pause. Just let the twenty fourth frame finish rendering and click the escape tab on the keyboard twice. All rendering has stopped. You can now close blender, and continue render later. When you are ready to continue rendering, open the folder animation is saved in, you should be able to see the last frame that was rendered. So if the last frame rendered was twenty four, go the the timeline in blender and set start frame to twenty five, and then render. It should continue rendering from frame twenty five. Here is a tutorial that helped me. https://www.youtube.com/watch?v=GviUB3irccI
I have been working on a solution, it's a workaround that uses Windows suspend thread function in c++ to pause/unpause blender, but it also minimizes blender in the taskbar in a tray icon, because windows will throw out "Blender has stopped working" if you suspend it and the window still maxmized, it supports Windows 64bit and blender 2.79 https://gum.co/bpupp , support for other platforms coming soon