|
|
As you have probably heard before, I have a POV-Ray renderfarm. When I
rendered the cups scene from the "waste of time!" thread on p.b.i, I had
some tiles take 3 seconds (pure plain floor; most of the spent time was
decompressing the photon map, not POV-Ray itself), and others take 15
minutes. I don't like the wasted overhead with super-short tiles. But I
can't just increase the tile size, because then other tiles may be so
slow they may end up hanging around while lots of other computers are idle.
So... I need a way to split tiles to get somewhat evenly distributed
render time. I know it's impossible to get them all take exactly the
same time, but at least I'd like them all within the same order of
magnitude ;)
I made a script that uses a quad tree. It reads a histogram image
generated by POV-Ray, splits it in four, and sums the pixel color on
each of the four areas. Then it checks which has the highest sum, and
splits that one once more. Then again calculates sums on each area (7
areas at this level), gets highest, and splits. The stop condition could
be anything: the number of tiles, or the smallest tile size, or the
speed of the slowest tile.
And uhm... Seemed to work fine.
http://stuff.povaddict.com.ar/split.png
http://stuff.povaddict.com.ar/split2.png
Sort of.
I noticed doing this I definitely get rid of all tiles slower than a
certain value, but I don't really get evenly distributed times. In one
test, the "fastest" tile had a sum of 3210 (this is the sum of pixels in
the histogram image; in some unspecified unit) and the fastest had
61467. That's too varying. It could very well mean 2 minutes and 40
minutes respectively.
The problem seems to be when splitting a slow area that contains one
fast area and one very slow area (relatively, in pixels per second; of
course it's faster than the big tile it belongs to!).
Any ideas? I'll post some more images later.
Post a reply to this message
|
|