SCS CSG Rendering Algorithm
Using OpenGL graphics hardware for solid modeling.


Algorithm The basic principle of the SCS algorithm.

The two subtracted cylinders are subtracted in a sequence that caters for both orderings of A and B along the viewing direction. Since a z-buffer can only store one surface per pixel, it is not possible to represent holes behind the current surface.

Windows NT Screenshot Application of SCS to a simple CSG model.

This is a screen-shot from Windows NT, showing the rendering algorithm in action.

Convex Decomposition Convex Decomposition of concave primitives.

SCS operates on convex objects, therefore concave objects need to be broken down into convex components.

CSG Model Complex CSG Model based on Convex objects.
SGI Problem 1 Z-Buffer copy reliability for SGI machines.

Copying a z-buffer on some SGI machines is reliable for only a portion of the viewing volume. With some care, the object can be positioned in this range of z.

SGI Problem 2 Visualising Z-Buffer copy accuracy for SGI's.

A simple program can be used to demonstrate the SGI z-buffer copy problem. On the left half of the viewport we draw a ractangle spanning the entire z-buffer range - zFar at top, zNear at bottom. We copy the z-buffer to the right half of the viewport, and redraw the polygon with ztest GL_EQUAL.

SGI ONYX2 Speed Measuring the Z-buffer copy rate of an SGI ONYX2.

Z-buffer CSG rendering performance is sensitive to the time it takes to copy a z-buffer. This particular ONYX2 can shift between 15 and 20 million z-buffer pixels per second.

SGI ONYX2 Accuracy Visualising Z-Buffer copy accuracy of an SGI ONYX2.

For some reason, Onyx2 and Octane platforms loose z-buffer precision as a result of z-buffer copying. Platforms with this kind of limitation are limited to rendering a single CSG product using the SCS rendering algorithm.

Convex Intersection An algorithm for fast CSG Intersection of convex objects

Published at WSCG 2002.

SCS Validation SCS Validation using POV-ray
SCS Helical Volumes
Convex Polyhedra Intersection Test
Visualising the z-buffer Visualising the Z-Buffer

Illustrating the conventional use of z-buffer hardware for hidden surface removal.

  1. Frame buffer is initialised.
  2. First object is rasterised.
  3. Update RGB and z-buffer.
  4. Rasterise second object.
  5. Update RGB and z-buffer
    using z-less test.

N. T. Stewart
RMIT Mech Eng Computer Science & IT CRC for IMST