[comp.graphics] Ray tracing vs. Scanline algorithms

rnewton@mipos3.intel.com (Richard Newton) (10/14/88)

    Recently, the algorithms discussed in this group have dealt with ray
tracing. In college, my senior project was to add some features (transparency,
polygon-splitting, back-face removal, etc.) to a graphics program using a 
scan-line algorithm.

    Does anybody actually use scan-line algorithms (or anything else, other
than ray-tracing) to do actual graphics work? The big advantages of ray 
tracing is the ease of coding, but it is computationally expensive. The
most important part of a ray tracer is the intersection algorithm; is 
there now an algorithm that makes ray-tracing as fast as other algorithms?
I've been considering rewriting the scanline program in C (it is in PASCAL;
ugh!), but since all discussion on the net seems to be about ray-tracing, 
I'm wondering if I should bother.

I've never done any benchmarking of different algorithms; any info out there?

-- 
Richard Newton II	...!{decwrl|hplabs!oliveb|amd}!intelca!mipos3!rnewton
Intel Corp., 2625 Walsh Ave, Mail Stop SC4-37, Santa Clara, CA 95052-8122

markv@uoregon.uoregon.edu (Mark VandeWettering) (10/16/88)

In article <3023@mipos3.intel.com> rnewton@mipos3.UUCP (Richard Newton II ~) writes:
>    Recently, the algorithms discussed in this group have dealt with ray
>tracing. In college, my senior project was to add some features (transparency,
>polygon-splitting, back-face removal, etc.) to a graphics program using a 
>scan-line algorithm.

	The problem with most traditional scanline techniques is their
	lack of good global illumination model:  they don't handle
	reflections and refractions in a convincing manner.  I have yet
	to here of a good scanline algorithm for the insertion of
	shadows which is "immune" to numerical instabilities and
	inaccuracies.  

	Raytracers are moderately simple to code.  There is no question
	that faster rendering methods exist, but "you get what you pay
	for".  

>    Does anybody actually use scan-line algorithms (or anything else, other
>than ray-tracing) to do actual graphics work? The big advantages of ray 
>tracing is the ease of coding, but it is computationally expensive. The
>most important part of a ray tracer is the intersection algorithm; is 
>there now an algorithm that makes ray-tracing as fast as other algorithms?
>I've been considering rewriting the scanline program in C (it is in PASCAL;
>ugh!), but since all discussion on the net seems to be about ray-tracing, 
>I'm wondering if I should bother.
	
	Most hierarchy algorithms allow a "fast" O(logn) search for
	intersecting objects.  In practice, this isn't too bad.  For
	instance, in my raytracer, about 40% of the time is spent
	locating the next object, and mine could probably optimized by
	some loop unrolling.  Octree methods are typically much less (I
	think James Arvo quoted < 20%).

	My advice to anyone who is coding these things up "for fun" is
	to put some effort into writing a good raytracer.  Mine was alot
	of fun, mainly because raytracing is simple enough to get
	right.

	Or alternatively try something to do radiosity.  The 88 Siggraph
	has a paper from the group at Cornell on turning their radiosity
	into a fast linear algorithm.  It make MUCH more sense than the
	original formulation of the radiosity algorithm.

	I think radiosity will be my next project.... All I need is
	time... *sigh*

mark vandewettering

jevans@cpsc.ucalgary.ca (David Jevans) (10/19/88)

At the University of Calgary we have used an abuffer scanline renderer
for several years.  Before that we used a pretty much bog standard
zbuffer algorithm.  Scanline algorithms are used because they are
usually faster than things like ray tracing.  The reason people use
raytracing is not for its ease of coding.  In fact, to write a fast
ray tracer requires a lot of thought, research, and often some
difficult coding.

Ray tracing is used primarily to get shadows, reflections and refractions.
Of course these can be faked pretty well for scanline algorithms though
the use of light/shadow buffers and environment maps, although it is my
opinion that ray tracing is more elegant and can be made faster than
a scanline method which uses all these tricks.

Recently I have been working on new spatial subdivision methods to
speed up ray tracing and I have several test images which do not take
much longer to ray trace than to render with our abuffer renderer.  These
images consist of large(?) numbers of polygons ( > 20000) and are rendered
with shadows and multiple light sources while the abuffer renderer has
no shadows at all.

You will get varying arguments from everyone.  I think scanline methods
are probably still faster for generating images with textures and that
use environment maps, although you will need to ray trace to get nice
refractions.  Of course my big argument for ray tracing is that it
lends itself to parallelization so easily.  Try arguing with a dedicated
scanline freak as to the usefullness of this though...

"we're dancing down church aisles, dancing on holy books..."

David Jevans, U of Calgary Computer Science, Calgary AB  T2N 1N4  Canada
uucp: ...{ubc-cs,utai,alberta}!calgary!jevans

David Jevans, U of Calgary Computer Science, Calgary AB  T2N 1N4  Canada
uucp: ...{ubc-cs,utai,alberta}!calgary!jevans