Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] MANTA : Questions about how the rendering stack works


Chronological Thread 
  • From: Shreekanth Pavar <shreekanth.pavar@ucl.ac.uk>
  • To: MANTA <manta@sci.utah.edu>
  • Subject: [MANTA] MANTA : Questions about how the rendering stack works
  • Date: Tue, 20 Mar 2007 23:06:47 +0000

Hi all

I've been using the published papers and the code (and the documentation
generated via doxygen) to understand how Manta parallelises the ray tracing.
However, I'm a bit stuck and was wondering if you can help clarify some 
points.

>From what I have read so far, the rendering in Manta is performed by 2
components ? a pipeline (front-end) and a rendering stack (back-end).

The pipeline implements parallel pipelining and drives the rendering stack 
which
samples pixels and also traces and shades rays.

In (default) double-buffering mode, all running threads work asynchronously, 
in
parallel, to render a frame. They are then synchronised (at a 'barrier' point)
and the image is displayed by one of the threads (proc=0) while the others
render the next frame.

The rendering stack is composed of a Image Traverser which chops the image up
into fragments and passes these to a Pixel Sampler which in turns parcels 
these
into Ray Packets for ray tracing.

Warning : Direct references to lines of code follow !

TiledImageTraverser (default) splits a 512x512 image (the default resolution)
into 256 (16x16) tiles each containing 1024 (32v32) pixels. These tiles are
then converted into fragments. SingleSampler (default) puts these fragments
into RayPackets which are then passed to RayTracer (the default renderer) 
which
traces 32 rays through each packet.

Could you confirm if the above summary is correct ?

Firstly, I'm unclear how a fragment is created from a tile.

Line 164 in TiledImageTraverser::renderImage is a comment:
// Create a Fragment that is consecutive in X pixels".

After which a 'shape' variable (default=LineShape) is used to determine how to
create the fragment. I think this means the tiles are subdivided into 'rows' 
of
constant Y which are passed to the Pixel Sampler as fragments.

Secondly, I'm also unclear how a ray packet is created from a fragment.

By default, SingleSampler receives '32-pixel' sized fragments from
TiledImageTraverser but the RayPacket::MaxSize is also 32 so each fragment
creates a single ray packet.

Lastly, I'm aware that dynamic load balancing is carried out using (default)
WQLoadBalancer, but I'm unclear how it works.

Line 138 in TiledImageTraverser::renderImage calls the load balancer to 
obtain a
range of tiles:

while(context.loadBalancer->getNextAssignment(context, s, e)){

I noticed that the number of 'assignments' returned varies each time so I 
think
this is the load balancing in action.

I think some of my confusion results from being unfamiliar with how Manta
defines tiles, fragments and ray packets.

Regards

-- 
Shree Pavar
Centre for Computational Science, UCL
http://www.chem.ucl.ac.uk/ccs/








Archive powered by MHonArc 2.6.16.

Top of page