18
$\begingroup$

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?

$\endgroup$
  • 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$ – cegaton Aug 8 '17 at 4:21
  • 4
    $\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 Ammon Aug 8 '17 at 18:54
16
$\begingroup$

If you are rendering a single image

(Alternative solution)

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.

enter image description here

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.

enter image description here


For animations, Tooniis' solution works fine.

$\endgroup$
  • $\begingroup$ This in my mind is a better solution. But if the problem is in fact a memory bottleneck then neither might help. $\endgroup$ – joojaa Aug 8 '17 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$ – Tooniis Aug 8 '17 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$ – Grant Davis Aug 9 '17 at 5:21
13
$\begingroup$

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.

$\endgroup$
  • 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$ – Jonas Schäfer Aug 8 '17 at 8:40
  • $\begingroup$ Just curious, how to "simply" split the scene? $\endgroup$ – Jan Matys Dec 2 '18 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$ – Tooniis Dec 6 '18 at 13:13
13
$\begingroup$

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).

https://www.flamenco.io/

This way you can hook up both of your machines and split the render load between them.

$\endgroup$
7
$\begingroup$

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.

$\endgroup$
  • 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$ – jules Sep 13 '18 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$ – Scott Hather Sep 15 '18 at 19:36
1
$\begingroup$

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.