Frame Dist. Rendering
7 messages in this thread
This message is regarding a technique for distributing the task of rendering a
single frame to multiple machines.
The two main problems to solve are alignment of the individual
portions of the image and the compositing of those images.
The first problem can be solved by rendering a region of a camera
view. It must be a camera view because if one tries to select a
window in a non-camera viewport, the second corner begins to scroll
the display. The region must be roughly one nth of the viewport,
where n is the number of machines to which te job will be
distributed. Which area of the viewport the region window covers is
not important, the rule of thumb is to cover a proportional amount of
geometry in the scene. As a simple example, for four machines, one
might select the four qaudrants of the screen, or four equal sized
horizontal bands, or whatever, the regions must, however, overlap
each other a least a little bit. (Or perfectly tile the screen which
is not realistic to expect.) Covering the edges of the viewport
seems to be the har part of the task, but not that hard. These
region renderings become the sub-tasks to distribute to other
machines, once these sub-tasks are completed it is time to composite
them.
The compositing task is extremely simple. Go into video post, add
four (or however many sub-tasks were created) events, change them to
bitmap images which are the completed rendered regions, and
(important!!!) use RGB black for alpha information. Make sure your
background is set to none (black). The finished composition is
identical to a full rendering of the viewport, provided that the
regions selected completely cover the screen!
The reason for my message is to point out two behaviors of 3D-Studio
R. 3 that could be enhanced to facilitate this single-frame
distributed rendering technique. The ability to dispatch these
rendering sub-tasks over the network is impeded by the fact that if
you render region to a network queue, the ENTIRE VIEWPORT is
rendered, NOT just the region. I suspect the cmd file that gets
written only can issue which viewport to render and not window
coordinates. As such, these sub-tasks may NOT currently be
dispatched over the network and must be started individually on each
machine to be used. This either requires a hardware lock, or the
temporary installation of a hardware lock, to be removed after the
rendering has been started.
The other interesting behavior is that on region renderings, the
portion of the resulting image file that is outside of the region has
alpha that is pure white, not black as might be expected. (Non
rendered areas you'd typically want to be see-through since nothing
was rendered, just like a background.)
Aside from these two items (especially the first) this distributed
rendering technique works great, and can substantially reduce the
amount of time to produce a still rendering of an extremely large
model.
Please let me know if there is a work-around to passing render region
jobs over a network (a command-line switch would suffice, but I
couldn't find one), or even an IPAS if one were available. Thank you,
Jim Hogarty 72110,1576
Gary's gone on vacation for the entire month of November – he deserves
it <g>. Your points are extemely interesting and I'd suggest
uploading the technique into the libraries. Either that e-mailing
Gary and not expecting a reponse until early December. I'm certainly
going to memorize this technique, it sounds like a great timesaver,
especially on large images.
I haven't tried your rendering regions but I would expect the
savings to be very small. The bulk of the data (memory) is used for
the objects, texture maps, shadow maps. Without slicing up the model
itself the only savings I see would be with image buffer itself. Not
much compared to the extra work envolved.
I have tried rendering to region. The advantage of this technique allows
for faster test images on certain areas of concern. Now if you divided one
image into
say 4-regions. It would definantly render faster over 4-machines. On a
extremely
large high resolution "poster size" image, Jim's technique would be a time
saver.
HATS of to ya! Jim. …All we need is an IPAS routine to make it easier.
…Wheres Grey Pryos?
I hadn't thought of poster size. The image buffer would be very large
you still need the capacity on each machine to handle the entire model.
BTW, you are talking (typing?) to an IPAS developer and no the process
is not possible in the R2 IPAS release. Someone with more time then wits could
fire up the whole subdivision process as a standalone program. Read the whole
scene in divide into quadrants then write only those entities required back out
to seperate files.
Keith.
Keith:
Hi! Since my name was mentioned (in vain!) in this thread, I thought I'd
jump in!
Maybe in R3 you'll have control of the "render region" box. If so, you
could just write a simple routine that splits the rendering into even
portions and renders each region on a separate machine.
Your idea of writing out only those entities required would be difficult if
the user had shadows or reflections turned on – I don't know if there would
be an easy way of testing to see if they would appear in another region
without actually rendering them!
Let me know how you do with the routine – if you need a good method of
distribution, you can always call us! <g,d,& r!>
Greg Pyros
Doug,
PMJI. It seems to me that to split up rendering of a high-res image, it
wouldn't be all that difficult to manually split the scene to render to region.
The split only has to be approximate, say 4 regions starting from opposite
corners, with a slight overlap. Assign the render to whatever machines are
available. Then composite in Video Post using Align to place them from their
corners. Supposedly, any overlap will be identical pixels, resulting in a
complete image. Still, as has been mentioned, each machine has to have
sufficient memory to render the portion of the scene, with maps, etc.
Kevin Krell – Computer Support Associates