120 lines
6.3 KiB
Markdown
120 lines
6.3 KiB
Markdown
---
|
|
title: Michael Abrash's Graphics Programming Black Book, Special Edition
|
|
author: Michael Abrash
|
|
date: '1997-07-01'
|
|
isbn: '1576101746'
|
|
publisher: The Coriolis Group
|
|
category: 'Web and Software Development: Game Development,Web and Software Development:
|
|
Graphics and Multimedia Development'
|
|
chapter: '64'
|
|
pages: 1177-1181
|
|
---
|
|
|
|
## Chapter 64\
|
|
Quake's Visible-Surface Determination {#Heading1}
|
|
|
|
### The Challenge of Separating All Things Seen from All Things Unseen {#Heading2}
|
|
|
|
Years ago, I was working at Video Seven, a now-vanished video adapter
|
|
manufacturer, helping to develop a VGA clone. The fellow who was
|
|
designing Video Seven's VGA chip, Tom Wilson, had worked around the
|
|
clock for months to make his VGA run as fast as possible, and was
|
|
confident he had pretty much maxed out its performance. As Tom was
|
|
putting the finishing touches on his chip design, however, news came
|
|
fourth-hand that a competitor, Paradise, had juiced up the performance
|
|
of the clone they were developing by putting in a FIFO.
|
|
|
|
That was all he knew; there was no information about what sort of FIFO,
|
|
or how much it helped, or anything else. Nonetheless, Tom, normally an
|
|
affable, laid-back sort, took on the wide-awake, haunted look of a man
|
|
with too much caffeine in him and no answers to show for it, as he tried
|
|
to figure out, from hopelessly thin information, what Paradise had done.
|
|
Finally, he concluded that Paradise must have put a write FIFO between
|
|
the system bus and the VGA, so that when the CPU wrote to video memory,
|
|
the write immediately went into the FIFO, allowing the CPU to keep on
|
|
processing instead of stalling each time it wrote to display memory.
|
|
|
|
Tom couldn't spare the gates or the time to do a full FIFO, but he could
|
|
implement a one-deep FIFO, allowing the CPU to get one write ahead of
|
|
the VGA. He wasn't sure how well it would work, but it was all he could
|
|
do, so he put it in and taped out the chip.
|
|
|
|
The one-deep FIFO turned out to work astonishingly well; for a time,
|
|
Video Seven's VGAs were the fastest around, a testament to Tom's
|
|
ingenuity and creativity under pressure. However, the truly remarkable
|
|
part of this story is that Paradise's FIFO design turned out to bear not
|
|
the slightest resemblance to Tom's, and *didn't work as well.* Paradise
|
|
had stuck a *read* FIFO between display memory and the video output
|
|
stage of the VGA, allowing the video output to read ahead, so that when
|
|
the CPU wanted to access display memory, pixels could come from the FIFO
|
|
while the CPU was serviced immediately. That did indeed help
|
|
performance—but not as much as Tom's write FIFO.
|
|
|
|
> 
|
|
> What we have here is as neat a parable about the nature of creative
|
|
> design as one could hope to find. The scrap of news about Paradise's
|
|
> chip contained almost no actual information, but it forced Tom to push
|
|
> past the limits he had unconsciously set in coming up with his original
|
|
> design. And, in the end, I think that the single most important element
|
|
> of great design, whether it be hardware, software, or any creative
|
|
> endeavor, is precisely what the Paradise news triggered in Tom: the
|
|
> ability to detect the limits you have built into the way you think about
|
|
> your design, and then transcend those limits.
|
|
|
|
The problem, of course, is how to go about transcending limits you don't
|
|
even know you've imposed. There's no formula for success, but two
|
|
principles can stand you in good stead: simplify and keep on trying new
|
|
things.
|
|
|
|
Generally, if you find your code getting more complex, you're
|
|
fine-tuning a frozen design, and it's likely you can get more of a
|
|
speed-up, with less code, by rethinking the design. A really good design
|
|
should bring with it a moment of immense satisfaction in which
|
|
everything falls into place, and you're amazed at how little code is
|
|
needed and how all the boundary cases just work properly.
|
|
|
|
As for how to rethink the design, do it by pursuing whatever ideas occur
|
|
to you, no matter how off-the-wall they seem. Many of the truly
|
|
brilliant design ideas I've heard of over the years sounded like
|
|
nonsense at first, because they didn't fit my preconceived view of the
|
|
world. Often, such ideas are in fact off-the-wall, but just as the news
|
|
about Paradise's chip sparked Tom's imagination, aggressively pursuing
|
|
seemingly outlandish ideas can open up new design possibilities for you.
|
|
|
|
Case in point: The evolution of Quake's 3-D graphics engine.
|
|
|
|
### VSD: The Toughest 3-D Challenge of All {#Heading3}
|
|
|
|
I've spent most of my waking hours for the last several months working
|
|
on Quake, id Software's successor to DOOM, and I suspect I have a few
|
|
more months to go. The very best things don't happen easily, nor
|
|
quickly—but when they happen, all the sweat becomes worthwhile.
|
|
|
|
In terms of graphics, Quake is to DOOM as DOOM was to its predecessor,
|
|
Wolfenstein 3-D. Quake adds true, arbitrary 3-D (you can look up and
|
|
down, lean, and even fall on your side), detailed lighting and shadows,
|
|
and 3-D monsters and players in place of DOOM's sprites. Someday I hope
|
|
to talk about how all that works, but for the here and now I want to
|
|
talk about what is, in my opinion, the toughest 3-D problem of all:
|
|
visible surface determination (drawing the proper surface at each
|
|
pixel), and its close relative, culling (discarding non-visible polygons
|
|
as quickly as possible, a way of accelerating visible surface
|
|
determination). In the interests of brevity, I'll use the abbreviation
|
|
VSD to mean both visible surface determination and culling from now on.
|
|
|
|
Why do I think VSD is the toughest 3-D challenge? Although rasterization
|
|
issues such as texture mapping are fascinating and important, they are
|
|
tasks of relatively finite scope, and are being moved into hardware as
|
|
3-D accelerators appear; also, they only scale with increases in screen
|
|
resolution, which are relatively modest.
|
|
|
|
In contrast, VSD is an open-ended problem, and there are dozens of
|
|
approaches currently in use. Even more significantly, the performance of
|
|
VSD, done in an unsophisticated fashion, scales directly with scene
|
|
complexity, which tends to increase as a square or cube function, so
|
|
this very rapidly becomes the limiting factor in rendering realistic
|
|
worlds. I expect VSD to be the increasingly dominant issue in realtime
|
|
PC 3-D over the next few years, as 3-D worlds become increasingly
|
|
detailed. Already, a good-sized Quake level contains on the order of
|
|
10,000 polygons, about three times as many polygons as a comparable DOOM
|
|
level.
|