102 lines
7.2 KiB
Markdown
102 lines
7.2 KiB
Markdown
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.
|