This
year's Game Developers Conference offered ten to twenty parallel tracks
of keynotes, lectures, workshops and roundtables, complemented by up
to six sponsored sessions, some of which covering a full day -- and
all that following two days of full-day tutorials. Such an abundance
of offerings forces attendees to cull and prioritize, and as our needs
at Loki revolve around portability, I tended to have a distinct preference
for OpenGL.
Unfortunately,
registration delays left me late for the OpenGL tutorial that started
at 10:30, but luckily the organizers of the tutorial offered complete
and detailed course notes -- weighing in at a good 150 pages. (The same
held true for several others tutorials at the show.) During the day,
John Spitzer offered sane ways to maximize performance, and Brad Grantham
closed the session with a brief description of OpenGL on Linux. The
bulk of the material (and most of the presentation) was given by Mark
Kilgard of Nvidia.
By
the time I arrived, the room was already full, with quite a few attendees
left without chairs as they listened to a description of shadow volume
techniques. This part of Kilgard's presentation was kept brief, as it
would later be used in his Friday afternoon presentation, "Advanced
Hardware and Rendering Techniques." The tutorial subsequently covered
translucency and the well-known problems of non-commutative blends,
touched on the usefulness and pitfalls of screen space stiple, and moved
on to a review of GL fog.
The OpenGL specification allows fog to use depth instead of Euclidean
distance, which can lead to problems -- especially with wide fields
of view and steep fog functions. As Kilgard pointed out, the GL specification
contains several examples where the accurate solution is merely recommended,
but alternative implementations that trade small artifacts for potentially
huge performance gains are allowed. Another example is perspective-corrected
color interpolators. In some cases, GL even specifies features that
are inspired more by practicality then modeling; GL EXP2 fog is a good
example of this. GL EXP2 fog does not implement a model of atmospheric
attenuation, but it's well-suited for effectively hiding a far clipping
plane (and as it avoids a square root, it is potentially cheaper to
implement for correct distance calculations).
Propagating
Euclidian distance through the hardware pipeline is an expensive addition.
Kilgard proposed the GL Fog Coordinate extension as a possible solution,
which puts the burden of calculating the proper fog distance on the
application, but empowers it to implement layered (e.g., altitude dependant)
fog. In general, GL extensions played a prominent role in the tutorial
as well as GL-related lectures at the conference, culminating in an
OpenGL Extension safari in the afternoon of the tutorial in which Kilgard
performed an annotated walkthrough through thirty-six out of over two
hundred published GL extensions, commenting on their possible applications
and their availability.
The remaining
time before the lunch break was dedicated to a few GLUT-based demos
(the GLUT framework is still available from the SGI
website). Kilgard used his low-poly dinosaur (which should be known
as GLUTzilla, in my opinion) to demonstrate reflections and shadowing
using stencils, and during his demonstrations he was careful to point
out artifacts and shortcomings, such asvisible tessellation caused by
projection from nearby point lightsources. He also showed a multipass
stencil-based technique for rendering magic halos around an object,
which I suspect to be of limited use. Much more striking was the demonstration
of real-time rendering of six views into a cube texture, followed by
environment mapping on a reflective sphere using the GeForce-supported
texture cube map extension. A Direct3D version of this demo was presented
in Ron Fosner's "All Aboard Hardware T&L" article in the
April issue of Game Developer.
The fill
rate and bandwidth requirements for rendering six views of the scene
can be quite expensive, but image caching techniques and sparse updates
can certainly be applied. In addition, reflective objects like mirrors
are usually used as special gadgets -- they are placed to make certain
parts of a level more memorable, or to underscore a moment of a game's
plot. Hardware support for environment mapping has entered the market,
and techniques that are comparatively expensive today might be common
one or two product cycles later.