Raytracing an image can be performed in parallel by calculating the colour of different pixels on different machines. However, this still requires each machine to have access to the entire scene to be rendered. Is there a way of also subdividing the scene so that different machines have access to different parts of it but can still calculate their assigned pixels correctly?

I cannot imagine a way in which this could be possible in general. Are there any particular circumstances in which this can be achieved?


2 Answers 2


Yes, such a thing is possible. There are a few different ways of doing it, but the basic idea is to split up the scene into chunks and assign these chunks to different machines. Each machine then traces rays locally within their assigned chunk.

The tricky bit is of course when rays leave a chunk, in which case machines need to synchronize and exchange rays that cross the local chunk boundaries. A recent paper from this year's EGSR, Distributed Out-of-Core Stochastic Progressive Photon Mapping, describes how to do this efficiently for Progressive Photon Mapping, although other light transport methods might be feasible.

Although such distributed ray tracing is possible, it is certainly not the most efficient form of parallelization, and non-uniform lighting directly translates into non-uniform distribution of the workload. It is really only beneficial when the size of the scene far exceeds the memory of a single machine.


In the general case, no. Reflection, refraction, and shadows can all generate secondary rays that could go anywhere, requiring the entire scene to be available.

In the special case of rendering with no secondary rays, you can quickly generate a vista buffer (essentially a mapping of your acceleration hierarchy to the screen) to figure out which objects are potentially visible from each pixel and distribute portions of the scene accordingly.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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