View Single Post
Old 03-25-2004, 07:28 AM   #41 (permalink)
interman
interman's Avatar
 
Administrator

Join Date: Jan 2002
Posts: 4,058
Hellbux: 86,041


Default

i found a reasonably interesting discussion regarding the engines used in doom 3, unreal 2, hl2 etc. Here's the best post:

Quote:
From a technological point of view Doom3's graphics engine is a revolutionary step forward in real time rendering. No other real-time engine does complete surface and light interaction rendering (with maybe the exception of epic's in production renderer).

Some people seem to get confused as to what "complete surface and light interaction" means, common questions are "Does it support dynamic lighting?" and "Will it do real-time shadows?" the answer to these questions are of course "yes" but supporting these features does not make the Doom engine what it is, Quake II had dynamic lighting and real time shadows. (boot up the first level and fire the default weapon parallel to a surface and watch the dynamic light emitting from the projectile move across the plane).

What makes Doom special is the way it handles all lights and surfaces. All games (well most) prior to now use pre-computed static lightmaps blended with the base texture to light their world, these maps are produced at design time along with the BSP tree from the game editor. Once loaded into the game engine they look very pretty but they are static, thus a light positioned near a wall when building your level originally, could not be turned off at a later time (in the game engine) as the calculations have already been done.

"What happens to characters\weapons and other moveable objects?" It depends on what needs to be done, some are light mapped others use dynamic lighting like Quake I\II did. Muzzle flashes\torches\projectile’s and any other effect using light have to use a different approach to lighting itself and the environment around it. Dynamic lighting (basically a procedural lightmap) is generated as-and-when it is needed and blended with the surfaces it affects.

The key point here is that the lights used to light the world DO NOT light the objects in it, sometimes it's the other way around but that’s nothing new.

In doom ALL surfaces and ALL lights are treated equally, the same lights that illuminate the walls ceilings and floors light your face, grenade and imp jumping out of the shadows, because this is done at runtime you can add\remove lights while playing the game and it will effect the environment and all the objects in it correctly.

On top of all this doom doesn't just calculate standard diffuse lighting for its surfaces (like Quake) it is a lot more complex.

There is a diffuse, specular and normal map used for each surface of the world (at least), combine this with each light's (in range) intensity, cube maps for re-normalisation of vectors (maybe I don't know how Doom does this) and any special shader effects (Water\Smoke etc) and this is the work that has to be done per-fragment just for the lighting calculations, add another pass for Z-Writes (no frame buffer) and another pass for stencil writes (shadows) and you've got yourself a lot of stuff going on (lighting calculations could take from 1-5+ passes depending on the card).

IMHO Doom's shadowing methods are better than current incarnations. Stencil shadow volumes allow complex shadows across all surfaces and self shadowing, unlike current real-time methods which.....don't.

The key to understanding why Doom's tech is revolutionary is to understand how it handles lights, surfaces and shadows. In short it does it correctly, there are no hacks or dirty work around’s, Doom's worlds will be consistent and in the end it will show. People will notice the difference, and going back to games based on Quake III tech and even Unreal 2 tech will seem "weird".
__________________
interman is offline   Reply With Quote