Mjollnir (obvious Norse reference) is a distributed raytracer. By 'distributed' I don't mean in the graphics sense, but instead in the distributed systems sense. The idea is to split the renderable scene into chunks which can then be passed off to various worker threads running elsewhere.

Mjollnir is not a very advanced raytracer (it doesn't always handle refraction properly, for example) but it does have fully-working distribution going for it. Raw network communication is done with BSD sockets, and serialization etc. is handled by boost::serialization. It uses my own custom Vector and Quaternion classes, as well as an R-tree for spatial partitioning. 1

With sufficient computers available for distribution, it produces some very nice images extremely quickly. It can, for example, render a scene with lots of reflective objects at a high anti-aliasing level:

Reflective spheres and planes

The full-sized 2730x1536 rendering takes approximately thirty seconds to render when distributed across three machines (i5-2400s at 3.1GHz), with four threads each.


  1. There is a bug in this version of the R-tree such that scenes with more than a few dozen thousand objects will start to lose objects. It has been fixed elsewhere, but backporting the patch is a bit of a pain. If anyone wants me to, I shall fix it. Until then, if you're looking for an R-tree implementation, use the R-tree source from Aesalon instead.