Wednesday, 6 April 2011

Fisheyes in the Clouds

I'm rendering a piece for a competition at this year's Jena Domefest. The piece comprises various visual data representations of a work by Liszt. This needs to rendered at 2k fisheye - that is 2048x2048. It should be rendered at 3.2k - but I'm entering as a student.

I've constructed the piece using two different audio -> IPO curve scripts in Blender 2.49 - One called 'Audio Analysis', the other 'Sound tracker'. I then opened the Blender 2.49 files in Blender 2.56 and re-saved - I could then import the IPO curves, now 'f-curves', into the current file. The f-curves are set up to manipulate camera position, lamp power - but with Blender's new 'everything is animatable' attitude, I could have set key frames for anything...The main object in the scene is a volumetric rendering of a spectograph I generated with Arss.

I'm using Yafaray as the render engine as it has a native fisheye camera. The Yafaray exporter for Blender 2.56 is coming along nicely. When it works, due in-part to Blender's new plugin APIs, you wouldn't know that Yafaray wasn't a native part of Blender. All material panels change to show Yafaray options rather than Blender.

While I was working I rendered at 25% - I did test renders from time-to-time at full resolution - to make sure I still had time to do the final render. I rigged together an 8 core and two 4 core machines, all running Blender from, and rendering to, an NFS share - works pretty well. When it came time to render out at 2k somehow my average render time was something like 4 minutes per frame...Ouch! I would need 21 days to render, and a quick glance at my Gantt chart showed only 5...

I started thinking about who I could borrow machines from...we have a Dell Blade chassis in Plymouth, with two 8 core blades, and a couple of 8 core Mac Pros - but that's the other side of the country. So I started thinking about the Cloud...The Blade Chassis had given me enough exposure to virtual machines, so I setup an Amazon AWS account, and 10 minutes later I had a Ubuntu box up and running. I transfered my project files and a copy of Blender and Yafaray to the machine - I needed to install Pythonlibs and also transfer my config files from ~/.blender/2.56 - and off we go....rendering in the cloud. Except we didn't. The EC2 machines are really slow - either network latency, but more a case of actually stopping every 20 secs for 20-30 secs. The end result was a render time of 17 minutes, or rather 17 minutes until Blender/Yafaray were killed. Just for comparison, I looked around for another free Cloud trial. I found a company called ElasticHosts. They have an amazingly simple interface, and you end up with a much faster machine, that feels like a proper machine. Also no private/public keys - just straight ssh. I got my setup onto the box, and off we went...and this time it was quite spritely. The image above was rendered entirely on the Elastic box. Elastic reckon this is equivalent to a 2GHz single core Opteron - which seems about right. I got a render time of 231 secs, which is about 5 times slower than the 8 core Xeon based machine I have.

While working out how to kick off Blender from the command line with Yafaray, I found that render-times are radically different between Blender GUI and command line - maybe by a factor of 10 on some frames. So my problem was solved - my render times dropped to well under a minute....


  • Ubuntu 10.10
  • #tasksel -> install XFCE Live CD
  • Transfer Blender + Yafaray
  • [Transfer .deb for Yafaray]
  • Transfer .blend files and textures
  • Transfer ~/.blender/2.56/config to same place on server
  • Install Pythonlibs for 3.1
  • Add Universe and Multiverse repos
  • Install Blender 2.49 from repos