My brother Doug went to Full Sail film school and has recently gotten me into the hobby of making shorts in our fun time (www.simplemindedstudios.com). Currently, we are making a short using my children as the actors. We don’t have access to very many interesting places to film so we decided to create most of the sets in the computer. He likes to experiment mixing 3d graphics in live action movies. We are really at the beginner stage of learning how to make it look good. If it weren’t my own children starring in the movie, I might even think they look laughably bad. Not only is it challenging to make it look good artistically, it is challenging on the technical side as well.
The reason it is challenging on the technical side is that it takes a LOT of computer horse power to render usable video footage for any sizable project. Due to the work-flow, you sometimes have to render a scene several times to get it right. Just last night, we finally got to take a look at a render and we noticed a flickering problem in our render. When you render a single frame, you don’t notice because each individual frame looks “correct”. It isn’t until you string all the frames together to make a video that you can notice the subtle changes in the intensities of the light. Also, when you are animating characters, you can’t really know what they look like until you do the render because the preview capability isn’t smooth.
Let me try and explain the magnitude of the problem that I am trying to solve. For every second of a movie, there are 24 frames. So, for a 15 minute movie, we will need to do a final render on 21,600 frames. Let’s assume that it takes us 5 attempts at rendering to get a scene right. that brings the number of frames we need to render to 108,000 frames. Now, on my brother’s dual core iMac, it takes about 10 minutes to render a single frame. If we were to render this entire movie on his computer, it would take 1,080,000 minutes to render. That is 750 days 24/7, non-stop, rendering. This is where the interesting challenge comes in.
The solution is to get a LOT of CPUs attacking the problem. You can solve it by buying bigger beefier machines. I purchased a new iMac i7 with true quad core processing that shows the OS that it has 8 CPUs. The new machine enables us to render a frame 4 times faster. I also built a PC with similar specs so we can have two machines rendering frames 24/7. So just buying a much faster machine brought the time required for our movie down to three months. This is good, but not good enough. That’s where a render farm comes in.
A render farm is simply a lot of computers working together on a single movie sequence or even a single image. There is typically a controlling computer that manages all the renders. It tells each computer which scene and frame to render and then assembles all those images back together into a movie scene. When a computer gets done with one frame, it asks that computer which frame it should render next. So, you submit your animation to one computer, and that computer distributes the workload to everyone else. When it is done, you go back to that same computer and see your results. This is how Pixar gets things done but they have thousands of computers.
I’ve done a lot of looking for a render farm solution that I can use with Blender (the free 3d package we use). There are quite a few solutions I looked at: Farmer Joe, Dr. Queue, Res Power, renderfarm.fi, BURP, vSwarm. None of these were appealing to me for various reasons. Some only supported computers on a common network, others didn’t support creating your own farm if you have lots of machines. The community ones, you are at the mercy of getting render time, so it could be hours before the computers even begin working on your render. I need a sort of hybrid where you can use your own computers, your friends computers, and even rent servers if you are approaching a deadline. I have several good machines not really doing anything useful right now. I also have several machines that don’t have much usage during the day. All of my machines could work on rendering scenes at night. These machines run Windows, Mac, and Linux, so I need it to be cross-platform. I also have friends that would be willing to render frames for me too. The conclusion I reached is that I need/want to build my own render farm.
Since I need the client to run on the big 3 OS, I decided it was a perfect opportunity to enhance my skills with Ruby. Not only can I build the server in Ruby on Rails, I can build a native looking client using Ruby with wxRuby.
I want to give back to the OS community that I’ve taken so much from. I am going to use this project to contribute to the Ruby community by hopefully being able to work on wxRuby by either coding bug fixes or perhaps writing tutorials. I also want to give back to the Blender community by making my render farming code open source so anyone can run their own server.
I secured the domain blenderfarmers.com for this project.