gg10@prism.gatech.EDU (Galloway, Greg) (09/06/89)
Below is my original question that was posted a couple of weeks ago, and a list of the responses I got. I was disappointed that so few people seem interested in technical topics of this sort. (I guess everyone is too busy ray-tracing spheres, oh well. :-) Thanks to all who responded, especially Loren Carpenter. I won't summarize, I'll let you digest thru this yourself. Greg Galloway Georgia Tech Research Institute Georgia Inst of Technology gg10@prism.gatech.edu Long listing follows, press N to skip now. Original question: **************************************************************************** I need some help sorting out a slight conflict between two Siggraph articles. In [Carp84] Carpenter states that: "The A-buffer belongs to the class of hidden surface algorithms called `scanline'. The REYES (Renders Everything You Ever Saw) sytem, of which the A-buffer is a part, is a scanline renderer, but scanline order is not required by the A-buffer." In [Cook87] it states that: "The z buffer is important for two reasons. ..." From this and some other references to z buffers throughout the Cook article I get the impression that Reyes uses the z buffer technique and not scanline. I'd like to implement a scanline rendering algorithm because of the ability of the scanline algorithm to completely antialias a given line. I am planning on antialiasing nearly horizontal lines and some polygons which might drop out between scanlines by using Cook's stochastic sampling technique. Does anyone out there have any insight into how either the Reyes or A-buffer algorithms work? Cook, himself, told me at Siggraph that A-buffer was not a part of the Reyes system. Anybody know any different? References: [Carp84] "The A-buffer, an Antialiased Hidden Surface Method", by Loren Carpenter, Computer Graphics Project, Computer Division, Lucasfilm Ltd., Computer Graphics (Siggraph proceedings 1984). [Cook87] "The Reyes Image Rendering Architecture", Robert L. Cook, Loren Carpenter, Edwin Catmull, Pixar, Computer Graphics (Siggraph 87). **************************************************************************** Responses: **************************************************************************** The A-buffer extends the standard Z-buffer technique in the following ways: 1) It supports transparency by allowing multiple surfaces per pixel 2) It supports antialiasing by keeping a per-pixel list of all visible fragments of surfaces at each pixel, which can then be resolved into a single blended color. While this is all possible using standard scanline techniques, the A-buffer offered an efficient means of handling all this using bitmasks and boolean operations on those masks to handle sub-pixel clipping. The most successful use of the A-buffer that I have seen is when it is integrated into a scanline rendering algorithm. The REYES architecture goes much further by dividing surfaces into fragments that are so small that texture and hilight aliasing problems (which plague other types of renderers) go away. Also, further manipulation of the individual shaded fragments can give you special effects like Motion Blur, Depth of Field, Displacement Mapping, Stochastic Antialiasing, Blurry Reflections, True Translucency -- basically, all the stuff that distributed ray tracing offered. However REYES really needs parametric surfaces (as opposed to polygons) to be efficient -- which is a problem for some people (like us.) Hope this is of some help. Charlie Gibson -- Rhythm & Hues, Inc. INTERNET: celia!charlie@usc.edu Consequences, shmonsequences, celia!charlie@tis.llnl.gov as long as I'm rich.... UUCP: ...{ames,hplabs}!lll-tis!celia!charlie **************************************************************************** Some information... The use of the word "scanline" in the A-buffer article is meant to imply that the A-buffer works best when the image is constructed in a "plane sweep" manner, i.e. a scanline or column at a time. That way the zillions of little fragments can be resolved and thrown away as soon as possible, keeping memory requirements manageable. The A-buffer has very little in common with the old "scanline' algorithms like Watkins or Romney or Bouknight where an image scanline is computed by first intersecting a plane (defined by the eye and the scanline's location in the image) through the model, then treating the 2D cross section as a 1D hidden surface problem. The A-buffer works by slicing the model (in screen space) BETWEEN the scanlines, into strips exactly one scanline high, centered on the scanline. Then the strips are chopped up into squares, centered on the pixels. Each pixel contains a list of the polygon fragments covering it. There are a lot of efficiencies that can be invoked here, like full squares culling hidden full squares from the list, merging fragments from adjacent polygons into full squares, using bit masks for visibility within a pixel, etc... REYES has gone through 6 total rewrites in its history. I did the first 4, and the A-buffer was the core of #4. Cook did #5 and replaced the A-buffer with the stochastic sampling hider. We did that because the A-buffer was too hard to bend to incorporate motion blur. Also, the antialiasing was quite a bit better. Rewrite #6 was done to make REYES compatible with the RenderMan specification (and to get it to run on a network of Transputers). The stochastic sampling hider uses a per-sample z-buffer modified to render transparent objects. Hope that helps. Feel free to summarize & distribute to interested parties. Loren Carpenter ...{ucbvax,sun}!pixar!loren **************************************************************************** I wrote the visible surface algorithm classification section in the IEEE tutorial: Image Synthesis. Reyes, as described in Cook87 (Charlie Gunn implemented the Chap version) is a Z-buffer algorithm. In fact it is a very simple z-buffer algorithm almost exactally the same as presented in Catmull's thesis, except for the stochastic supersampling. According to my definition of what a scan line algorithm is, (see the book) the A-buffer algorithm is not a scan line algorithm. It is a modified and agumented z-buffer algorithm. It is very similar to an algorithm (unpublished) by Darwin Peachy called the fragment-buffer, and vaguely similar to many other algorithms. An earlier version of Reyes may have used the A-buffer. But it does not any more. Real scan line algorithms are pretty rare these days. (Ken Joy wrote the section in our book on scan line algorithms, check it for references) It is true that you can do good antialiasing in one dimension with a scan line algorithm, but the other direction is real hard to antialias. This tends to make images with directional artifacts. If you want really good antialiasing you have to 1) use an area subdivision, or scan plane algorithm with a good filter, or 2) supersample like crazy with any point sampling algorithm. Charles W. Grant **************************************************************************** I think that Rob meant "Z-buffer" as a more general concept, of which "A-buffer" is a subclass. If you carefully consider why a Z-buffer hider (as opposed to a polygon span or Weiler-Atherton clipping algorithm, for example) is important to Reyes, you will see that A-buffers share these characteristics. The Reyes software originally used the A-buffer scheme, but when "stochastic sampling" was invented, the hidden surface code was changed to incorporate that. This means that the code is no longer a true A-buffer. It has much in common with an A-buffer, but cannot (for example) use the nice precomputed hit-test bitvectors that make the A-buffer so fast. -- UUCP: {sun,ucbvax}!pixar!aaa Tony Apodaca ARPA,BITNET: aaa%pixar.uucp@sun.com Pixar, San Rafael, CA, USA ****************************************************************************
rjg@amber.WV.TEK.COM (Richard J. Greco;685-2407;61-049;;amber) (09/08/89)
Have the stochastic supersampling algorithms been published? If yes, could someone post the publications containing the papers. Richard J. Greco rjg@orca.WV.TEK.COM {hplabs|uw-beaver|decvax}!tektronix!orca!rjg "Nonsense! You're only saying that because no one ever has."