Curved Surfaces Using Bézier Patches
June 11, 1999
Page 1 of 10
Until recently,
3D games have had a fairly strict limitation on the number of triangles
that could be displayed per second. This limited the amount of visual realism
that could be attained. With the advent of faster CPUs and powerful consumer
level 3D video cards, more complex and realistic geometry can now be created.
One of the more dramatic ways of increasing visual realism is by implementing
curved surfaces. One way to create curved surfaces is by using Bézier
patches, a procedural geometry technique. Figure 1,
a screenshot taken from id Software's Quake III: Arena, shows what
sort of effect on architecture using these curves can have. Other upcoming
games, such as Shiny Entertainment's Messiah, also incorporate curved
surfaces to give them a more realistic and organic look. There's pretty
good motivation to learn how they do it.
Procedural
Geometry
Traditionally,
geometry used for computer games has been stored as static polygons in
some structure such as a mesh or BSP tree. Every polygon is defined during
design and used later during display. One way to take advantage of the
increased 3D horsepower available in new computers would be simply to
use smaller triangles and more of them when defining our static geometry.
There are several drawbacks to this approach:
- Large
storage requirements. As more detail is desired, the numbers of triangles
required will take up more memory and disk space and take longer to
traverse.
- Lack
of scalability. The amount of geometry defined would be created for
the best case machine. To display the geometry with a reasonable frame
rate on a less than optimal machine would require storing multiple models
with decreasing detail or implementing a real-time polygon reduction
algorithm. There is still the problem that future, more capable machines
will be stuck with the static geometry designed for older systems.
- Inability
to naturally describe shapes like curves. The only way to represent
curved surfaces with triangles is by using a large number of triangles
to approximate the surface.
 |
Figure
1: Quake 3 Arena uses Bézier patches to beautifully render
this demonic tongue. |
In my mind,
scalability is going to be one of the largest issues facing game developers
in the future. There is going to be a large installed base of Pentium-class
machines with Voodoo cards that you do not want to leave out, but at the
same time you would like your game to run great on someone's shiny new
Pentium III with a SLI Voodoo2 setup. Currently, most games are designed
for a minimum system in mind with faster systems just attaining astronomically
high frame rates that monitors can not support. It would be nice for the
increased horsepower to go towards better visual quality, not just a higher
frame rate.
An alternative
to the traditional static polygon list that addresses many of the problems
listed above is to use procedural techniques to generate the polygons.
Procedural geometry involves taking some parameters and following a set
procedure to generate an arbitrary number of vertices or polygons. Procedural
geometry addresses the deficiencies of static geometry listed above:
- It's
compact. Just a few parameters can generate any number of intermediate
values.
- It's
scalable. The number of vertices or polygons generated can be adjusted
to allow the game to target a specific frame rate. The faster the machine,
the more triangles that can be generated.
- It can
directly describe curves.
It is important
to keep in mind that while ultimately triangles are used with both procedural
and static forms, the procedural form generates them at runtime to a desired
degree of fineness, whereas with static geometry, they are defined at
design time to a predetermined degree of detail.
Page 1 of 10