Image courtesy of Antonio Arroyo and Oliver Villar
Ok, so the title posits something that might seem really obvious if you know even just a little about distributed rendering. Thats why this article is going to not just explain what it is but show you why its really really important to you as an artist that you understand how to use it and the importance of a render farm to your project.
An Explanation - Distributed Rendering
Distributed rendering is where you render either a single frame or multiple frames using several computers instead of just one. We're going to go into more detail about why this is faster but for now we'll spell out the basics.
There are two main methods for distributing rendering. The first and slightly easier method frame splitting. This is where an animation is rendered by distributing its frames over several computers. Each computer renders some percentage of all the frames in the animation. We've made a simple example to follow along to where an animation of nine frames is to be rendered on three computers.
With frame splitting, a "master" node usually coordinates the render, sometimes this node (a technical name for a computer) will render some of the frames, some times it acts as a manager and controls the render, but does not render any frames itself. In our example, all the computers render.
The "slave" or "render" nodes are given some of the animation to render, in this example; three frames each.
If all three computers are the same in terms of processing power, then they will all complete the render in a third of the time just one of the would take. This is why distributed rendering is so important to artists, you can scale down your render time by adding more computers.
The second method for distributing rendering is "bucket rendering" or "tile splitting". This method takes a single frame and splits it into parts to be rendered on multiple computers.
The tile splitting technique is what Crowdrender uses. As you can see from the diagram above, tile splitting works differently from frame splitting. Tile splitting breaks each frame up into parts and each computer renders one of these parts of the frame.
Tile splitting is more flexible than frame splitting for the obvious reason that tile splitting works for single frame renders. Frame splitting cannot make a single frame render faster! Tile splitting is therefore very useful for fast previewing of frames to ensure there are no errors and that the overall impression of the image is what the artist wants.
Tile splitting is not without its own problems, however. Where there is a lot of compositing required, frame splitting can accelerate the compositing as well as the rendering as the entire frame is available on each node. In tile splitting, compositing usually has to be done on the master node when the tiles from each slave node are received and the entire image is finally available.
Knowing just these details about each technique will help immensely in having a good final render experience!
An Example, why its so important
We conducted a benchmark test using a project from Antonio Arroyo (see the image above!). The test was simple, the baseline was a single computer rendering the scene. For this baseline test, we used a macbook pro with a fifth generation i5 processor operating four threads.
Then, the variant for the test. We used Crowdrender to do a tile split render (because we did just one frame) using the macbook as master and five other computers as slaves. The other slave nodes contained similar equipment, each had four threads and similar RAM (though the CPU's were from previous generations and so clock speeds and other features were less advanced than that of the laptop).
For the test we varied just the number of samples. Quite simply the more samples, the higher the quality of the render and the slower the image takes to complete.
Here are the results, plotted as samples (x-axis) vs render time in minutes:seconds.milliseconds we also repeated the results in a table format so you can see the exact numbers for your self.
The results for just 50 samples are:
with crowdrender : 1min 07 secs
without : 2 min 54 secs
The results for 100 samples are:
with crowdrender : 1 min 30 secs
without : 4 min 39 secs
The results for 200 samples are:
with crowdrender : 2 min 23 secs
without : 9 min 06 secs
the results for 500 samples are
with crowdrender : 5 min 12 secs
without : 19 min 40 secs
the results for 1000 samples are
with crowdrender : 10 min 06 secs
without : 39 min 27 secs
Distributing rendering gives you more than speed
So after reviewing the results, you can see that as samples increase, the render time for both tests increases in more or less a straight line. But, the results for distributing the render are much, much better. For 1000 samples, distributing takes only 1/4 of the time to render.
What is really great about this is that with each computer you add, you will see a further reduction in the rate at which render times increase with increasing samples. In other words, the green line gets flatter.
Another useful way of looking at this is that you can increase quality without increasing render time by using more computers. If you look carefully at the chart above, you'll see that 1000 samples (using Crowdrender and six machines) takes about the same time as one computer doing 250 samples. Distributing the render gave us four times the samples for negligible increase in render time. If we added more computers, we could increase the samples further.
For high quality renders, with lots of samples or higher resolutions, it makes a lot of sense to use distributed rendering. Render times grow too quickly with just a single machine, even for a very powerful one.
You might think, "why not just make one really fast machine"? The problem is that you hit a bottleneck very quickly in the number of CPU's you can put into one system (or GPUs). Also the cost increases very sharply when you reach the upper limits of the products available. Lets take a look.
Charts courtesy of www.cpubenchmark.net
The chart above shows CPU rating using passmark vs cost in USD. The blue arrows are a hypothetical example considering a system that scores 10,000 in passmark. Lets assume we want to increase our computing power by a factor of three; which corresponds to the earlier example of reducing render times by three times using distributed rendering. Only this time we want to build a single machine that can achieve this reduction.
The CPU with a score of 10,000 in passmark costs USD300. If we now look at the chart on the right (which is dual CPU configurations) then we can see that the only data point we have is at roughly USD5600! This means that to increase our computer power in a single system by three times, we have to spend 17.6 times the cost of our original CPU that scored 10,000!
We could get similar performance if we distributed the task we wanted to run over three systems, each with a USD300 processor. The cost of the CPUs would only be $900. This is 5.2 times less than a single system with dual CPUs.
This is just the cost of the CPUs though. One uber powerful system only needs one power supply, motherboard, case, OS, RAM and so on. Having three systems means duplicating these costs which reduces the cost advantage. This is where it gets a little complicated, would those three systems be less than the one uber powerful one? The answer is it depends! There are a lot of ways to configure all these systems, its possible in some cases that the three systems could cost more than the single one.
So it seems that for computing power that's equivalent to a 30,000 passmark score, you may be better off distributing in some cases, once you need more than this, distributing becomes the ONLY option.
Suppose you wanted or needed a system that had combined performance that could create a score of one million. Now the only way to get there is distributing. There is not likely to be any single machine setup that could achieve arbitrarily higher performance. But if you have the software that can harness any number of computers, you have the ability to scale your computer power as far as your budget allows.
The point being made here is that one single system is finite in its computer power. This means you're limited. But, if you can connect your computer together with others, you can overcome this limitation, this is the power of distributing.
How you can do this with Crowdrender
Our software works to allow you to easily distribute rendering in blender, it also is free and takes only three to four minutes to setup on each computer. Once running, you can easily render any blend file (remember to pack your external dependencies first!) on multiple computers.
But we're not stopping here. With versions 014 and 015, we've introduced the ability to use AWS computers thanks to a partnership with Blender Grid. This means you can add more computers to those you already have and reduce your render times.
We want to go even further than this. We're currently raising funds via donation through our website to fund the creation of the beta of Crowdrender. We want to give you the ability access computers from other people, peer to peer, as well as the cloud and your own computers.
Think file sharing, but you share processor time rather than music or video files.
With our beta, you'll be able to scale your computing power up or down at will, without ever having to leave home or office to buy hardware. Just team up with others, use the cloud and invite friends over to your house for a render party :). You'll be able to harness the power of loads of computers with ease.
We hope that you liked this article and it helped you learn something about rendering.
If our work sounds like something you'd be interested in supporting, then here's some ways in which we'd love your help :)
Make a donation to our beta campaign, help us raise funds to build all the features we and you want. Here's a link to our crowdfunding page;
Share this article with others! We really appreciate and need others to help spread the word; and finally
Download and use our software, you can get the current version here for zero money -> downloads page