I have a fairly complex scene that I would like to render in cycles. However, it is taking forever (as I expected). I have two computers (a laptop and a desktop-both are Windows 10, neither has a graphics card, and from within the last 3 years.) Is it possible to somehow take advantage of both computer's power to render the scene more efficiently?
4$\begingroup$ You can use two or more computers to render. You don't specify what kind of scene though A single image or an animation? If you are rendering an animation just set different frame ranges frames on each computer and render as an image sequence. Once both computers finish you can then copy the rendered frames to one computer and encode as video. $\endgroup$– user1853Aug 8, 2017 at 4:21
6$\begingroup$ You should be warned: rendering a scene across two computers is ill advised. Research has shown it leads to the purchase of a third computer. And a fourth! $\endgroup$– Cort AmmonAug 8, 2017 at 18:54
If you are rendering a single image
Since you are using Cycles, you can render the same scene on the two computers using half the number of Render samples on each one, then compositing them (in GIMP or in Blender), superimposing one onto the other with 50% opacity.
The two computers must use two different values (like, 0 and 1) for "Seed", otherwise you'll only get the same exact image, with half the shading quality, twice.
Grant Davis in a comment suggests that each instance of blender should output an OpenEXR image, which allows for a finer memory representation of color, so that less information is lost on the way to the final image.
Once the two computers have created their renders and saved as .exr, open a new blender instance and set the render size to the same it was in your scene. Then create your compositing nodes: two image inputs and a mix node.
Here, each image was rendered with full global illumination at 128 samples. You can see the top one when I mute (M) the Mix node. The mixed version has a quality comparable to a 256 samples render.
For animations, Tooniis' solution works fine.
$\begingroup$ This in my mind is a better solution. But if the problem is in fact a memory bottleneck then neither might help. $\endgroup$– joojaaAug 8, 2017 at 18:31
$\begingroup$ this will not give the same result as rendering with 100 samples with the same seed. The only difference would be the noise pattern, but the render quality should be nearly identical, so it is not a problem at all. $\endgroup$– TooniisAug 8, 2017 at 20:23
4$\begingroup$ If you use OpenEXR as the file format, EXR keeps additional information about the image that averaging the EXRs together creates an image that is closer to what blender would have produced. This post explains how they used this method: blenderartists.org/forum/archive/index.php/t-358277.html rendergeek.com/understanding-openexr-formats $\endgroup$ Aug 9, 2017 at 5:21
If you are rendering an animation:
Render some frames on the laptop and some on the desktop, then combine the result files. Make sure you are rendering individual images not video. Render more frames on the faster machine and leave less for the slower one.
If you are rendering a single image:
Split your scene into 2 (or more) render layers, then render one/some layers on the laptop and the remaining one(s) on the desktop. After rendering you can combine the result rendered layers into 1 image using Blender itself or some image editing tool (like GIMP). Again, render the more complicated render layer(s) on the faster machine and leave the less complicated one(s) for the slower machine.
4$\begingroup$ Instead of using layers I’d simply split the scene vertically/horizontally (like it’s done for threading). I imagine that using render layers may be less efficient or have side effects in cycles where basically everything affects everything. $\endgroup$ Aug 8, 2017 at 8:40
$\begingroup$ Just curious, how to "simply" split the scene? $\endgroup$ Dec 2, 2018 at 4:06
$\begingroup$ @JanMatys just split the objects into different render layers, render them on different computers then compose them into one final image. $\endgroup$– TooniisDec 6, 2018 at 13:13
If you are willing to invest time into setting it up, Blender DOES have a network rendering solution for multiple machine rendering (render farms/servers).
This way you can hook up both of your machines and split the render load between them.
A variation on the solutions mention here is one I've just started using: Note this is for animations only, not stills.
Go to the render tab, under output and UN-check "Overwrite" and check "Placeholders". The default is the opposite to this. Choose an output location that ALL computers can access. Then simply click the animation button. Repeat on all computers you have.
The first computer will render frame 1. the second will see there is a placeholder for frame 1 and start rendering frame 2 (making a placeholder too), the third will start to render frame 3. And so on..
This way all computers will co-operate with each other, rendering whatever frame needs rendering next.
1$\begingroup$ This was the approach suggested in the official "Introduction to Blender" videos (see Blender YouTube channel). You may have meant to say "uncheck Overwrite", not "override"? $\endgroup$– julesSep 13, 2018 at 21:55
$\begingroup$ Thanks jules, I've corrected the word. Not seen that video, I think I heard about this method on Reddit. $\endgroup$ Sep 15, 2018 at 19:36
$\begingroup$ Is that safe for animations that include things like smoke effects? $\endgroup$ Apr 4, 2021 at 12:13
$\begingroup$ Also, is there a way to specify that on the command line, so I can start the renderers from a script without having to check the input file? $\endgroup$ Apr 4, 2021 at 12:15
$\begingroup$ @SimonRichter You'd have to check/uncheck the checkboxes mentioned first, save the .blend file and then have something like this in your command line: "-o /some/network/location/my-anim#### -a" (the -a for animation, the #### will populate with the frame). Not sure about smoke effects, sorry. $\endgroup$ Apr 5, 2021 at 13:19
For an animation you make each machine render a different range of frames, as rendering an animation to a sequence of images is normally recommended it is similar to a normal render. Once finished you can add the image sequence to the vse and render to a movie file.
For a still image you can split the image up using the render border settings, like shown here so that each machine renders different parts of the final image, these can then be combined. With the crop to border disabled, and saved to an image format that supports alpha, such as png, you can open the images in gimp using open as layers and get each piece in place so you can then save the combined image. Having multiple images from the above script, you can use
convert which is part of imagemagick to combine the images with
convert chunk_* -layers flatten final.png
Crowdrender do a network render-farm addon. Pay attention to the setup instructions and it works a treat.