Radiance, POV-Ray and parallel global illumination?

Hello all,
  
  I am a programmer working with the POV-Ray raytracer. As you may know, for global illumination, POV-Ray uses a version of the irradiance caching algorithm from Mr. Ward's paper "A Ray Tracing Solution for Diffuse Interreflection" (Ward, Rubenstein, and Clear). Presumably Radiance uses a similar, but more advanced version of the same algorithm for its global illumination simulation.

  I'm trying to get parallel rendering working, but there is a problem. If the image is divided into tiles, and rendered with POV-Ray and global illumination, each finished tile has a different basic brightness level. And when the final image is reassembled from the tiles, the effect is like a checkerboard or patchwork. In short, it ruins the final image. Apparently each render slave *needs* to have the entire scene octree available to it, somehow. There has been an effort to share the octree data with the other slaves as soon as it is generated, however this is only partially successful and does not always suppress the artifacts I mentioned. (Here is a link to the pvmegapov page http://www.wozzeck.net/images/pmp/ )

  I'm wondering if Radiance handles this problem in a fundamentally different way, which I could learn from. Some basic parallel Radiance info I read did not mention this problem at all, so hopefully you guys already have a solution. Any suggestions would be most appreciated!

Thanks,
George Pantazopoulos

George Pantazopoulos wrote:

I'm trying to get parallel rendering working, but there is a problem. If
the image is divided into tiles, and rendered with POV-Ray and global
illumination, each finished tile has a different basic brightness level.
And when the final image is reassembled from the tiles, the effect is like
a checkerboard or patchwork. In short, it ruins the final image. Apparently
each render slave *needs* to have the entire scene octree available to it,
somehow. There has been an effort to share the octree data with the other
slaves as soon as it is generated, however this is only partially
successful and does not always suppress the artifacts I mentioned. (Here is
a link to the pvmegapov page http://www.wozzeck.net/images/pmp/ )

Hi George,

just to eliminate any potential confusions about the terminology:
What POV calls "scene octree" is normally called "ambient data" in
Radiance-speak. But we're still talking about the same thing.

Your analsysis is correct: You need to share this data between the
different processes in relatively short intervals, or they will
get out of sync, producing the observed tile patterns. Radiance does
the sharing through a file (we're currently discussing alternatives
in the radiance-dev list). Each process synchronizes with this file
when its stdio output buffer is full, on my box that means after it
has created approximately 100 new values.

I'm wondering if Radiance handles this problem in a fundamentally
different way, which I could learn from.

As far as I understand what POV does, the main difference seems to
be in the syncing frequency. I see that you have difficulties
increasing that. To improve the quality of the ambient data, it is
common practise with Radiance to "seed" the ambient file with a very
small rendering that is then discarded. Maybe it would help too in
your case, if you let your slaves render and discard one patch each
at first (evenly distributed across the picture), and then to start
the "real" rendering with the ambient data collected that way
already available. In most cases, earlier patches will show bigger
discrepancies than later ones.

Btw., if you really still have tiles in your PvMegaPOV example
picture, the woodgrain pattern hides them very effectively... :wink:

-schorsch

···

--
Georg Mischler -- simulations developer -- schorsch at schorsch com
+schorsch.com+ -- lighting design tools -- http://www.schorsch.com/