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.
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:
|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 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.