In the good old days where to render a pixel on the screen one did not have to use a graphics card but rather only a CPU. 3D graphics rendering was born on the screen using Software Rendering, a term associated with rendering pixels on the screen using only the CPU for its processing power. Popular 3D engines like Duke Nukem 3D, DOOM, Quake, Half Like, etc used this technique of rendering. It is every graphics programmer dream to build one and to understand the complexities behind building such a system. A good place to start would be http://www.devmaster.net/articles/s...ering/part1.php
To know more about software rendering check out wikipedia:
http://en.wikipedia.org/wiki/Software_rendering
Some technology behind some popular games:
Dukem Nukem 3D
Duke Nukem 3D's graphic engine was an evolutionary step forward from the Doom engine. While the levels were still defined as 2D maps, the capabilities of Ken Silverman's Build engine allowed more complex levels than Doom and Dark Forces. Most notably, the game supports diagonal slopes in the floors, which was not possible with the entirely "top-down" level design of other contemporary shooters. It also supports mouse aiming (though aiming up and down distorts the graphics due to a lack of perspective correction), which would become the norm for many future FPS's. Since Duke Nukem 3D was still not a fully 3D engine, it was considered to be a 2.5D game. Although the era of true 3D games had begun with Descent in 1995, it would not be until Quake was released later in 1996 that a true 3D engine would be used for an FPS.
DOOM
Doom's primary distinguishing feature at the time of its release was its realistic 3D graphics, then unparalleled by other real-time-rendered games running on consumer-level hardware. The advance from id Software's previous game Wolfenstein 3D was enabled by several new features in the Doom engine:
1. Height differences (all rooms in Wolfenstein 3D have the same height);
2. Non-perpendicular walls (all walls in Wolfenstein 3D run along a rectangular grid);
Swaying of the weapon (in Wolfenstein 3D the arms stay fixed in front in the screen no matter what the character does), this gives the impression of fluidity while walking or running;
3. Full texture mapping of all surfaces (in Wolfenstein 3D, floors and ceilings are not texture mapped);
4. Varying light levels (all areas in Wolfenstein 3D are fully lit at the same brightness). While contributing to the game's visual authenticity by allowing effects such as highlights and shadows, this perhaps most importantly added to the game's atmosphere and even gameplay; the use of darkness as a means of frightening or confusing the player was an unseen element in games.
In contrast to the static levels of Wolfenstein 3D, those in Doom are highly interactive: platforms can lower and rise, floors can rise sequentially to form staircases, and bridges can rise and descend. The life-like feeling of the environment was enhanced further by the stereo sound system, which made it possible to roughly tell the direction and distance of a sound's origin. The player is kept on guard by the grunts and growls of monsters, and receives occasional clues to finding secret areas in the form of sounds of hidden doors opening remotely. Monsters can also become aware of the player's presence by hearing distant gunshots.
Carmack had to make use of several tricks for these features to run smoothly on home computers of 1993. Most significantly, Doom levels are not truly three-dimensional; they are internally represented on a plane, with height differences added separately (a similar trick is still used by many games to create huge outdoor environments). This leads to several limitations: it is, for example, not possible for a Doom level to have one room over another. This two-dimensional representation does, however, have the benefit that rendering can be done very quickly, using a binary space partitioning method. Another benefit was the clarity of the automap because it could be displayed with 2D vectors without the risk of overlapping.
Another important feature of the Doom engine is a modular approach that allows the game content to be replaced by loading custom WAD files. Wolfenstein 3D was not designed to be expandable, but fans had nevertheless figured out how to create their own levels for it, and Doom was designed to take the phenomenon further. The ability to create custom scenarios contributed significantly to the game's popularity (see the section on WADs below).
Wolfenstein 3D
To render the walls in pseudo-3D, the game used ray casting, a special case of ray tracing. This technique sent out one ray for each column of pixels, checked if it intersected a wall, and drew textures on the screen accordingly, creating a one dimensional depth buffer against which to clip the scaled sprites that represented enemies, powerups, and props.
Before Wolfenstein 3D, the technology had already been used by id Software in 1991 to create Hovertank 3D and Catacomb 3D for Softdisk, albeit using only EGA 16-color graphics (which the game was designed to use, early in development). Other games using the Wolfenstein 3D game engine or developments of it were also produced, including, Blake Stone, Corridor 7, Operation Body Count, Super Noah's Ark 3D, Rise of the Triad, Shadowcaster, and Hellraiser.
According to id Software programmer John Carmack, the game's engine was inspired by a technology demo of Looking Glass Studios'/Origin's first-person CRPG, Ultima Underworld: The Stygian Abyss from 1991. Carmack claimed he could make a faster renderer. In this he was successful. The Wolfenstein engine lacks many features present in the Underworld engine, such as height changes, sloped floors and lighting, but it runs well on relatively weak hardware.
"Holo-walls" are walls created by mapmakers using a glitch in the PC version's engine. They are walls that the player can walk through, and are used in some total conversions to simulate windows that players can climb through, and hedges that players can walk through. One way of creating holo-walls is to place a dead guard in a wall.
Descent
The original Descent runs under DOS and is (with some tweaking) playable on 386-based PCs at 33 MHz. With the release of the Pentium, the performance requirements were no longer an issue. Descent was ported to Apple's Power Macintosh in 1996 and both versions support multiplayer network play over a variety of protocols. A console port of Descent was created for the Sony PlayStation.
Rendering
Descent was released in 1995, one year after id Software's Doom. As was typical with those releases, Descent uses a software renderer due to the fact that affordable 3D graphics accelerator cards (referred to as add-on videocards) were not mainstream as yet. While Doom uses sprites to render enemies, Descent features fully-3D-polygonal enemies. Quake followed in the footsteps of Descent by displaying its enemies in 3D. Unlike Doom and its successor Quake, Descent does not use BSP trees to speed up rendering, but a system of connected cubes forming bigger rooms and tunnels connecting them. This geometry allowed for very efficient visibility culling, and one of the first true three dimensional rendering environments of its time. On lower-end systems, detail levels could be reduced to cut out some of the smaller polygons on robots and render solid color blocks on distant textures instead of mapping the entire texture.
The original Descent uses indexed 8-bit color in DOS's display mode 13h, using 320 × 200 resolution. Unlike its sequel, it uses only one 256-color set during gameplay, rather than a unique set for each level set; these colors tinge red during damage and purple during fusion charging. The Macintosh and later PC versions allow higher resolutions, such as 640 × 480. The default engine uses a software renderer in which the perspective transformation for texture mapping is only performed once every 32 pixels, causing textures to appear to pop or shift when viewed from certain angles. The software renderer also uses nearest-neighbor texture filtering, as opposed to bilinear filtering or trilinear filtering used by modern video cards. Nearest-neighbor texture filtering causes aliasing artifacts, such as blocky or swimming textures.
The engine for Descent is a portal rendering engine, operating on the premise of interconnected cube-shaped sectors. Sides of cubes can be attached to other cubes, or display up to two texture maps. Cubes can be deformed so long as they remain convex. To create effects like doors and see-through grating, walls could be placed at the connected sides of two cubes. Descent introduced an elaborate static lighting scheme as well as simple dynamic lighting, where the environment could be lit with flares - another advancement compared to Doom.
Audio
The game uses 8-bit, 11 kHz sound effects, including some vocals. On slower computers, the sound settings could be reduced to allow only one door sound, only one laser sound, only a few enemy sounds, and other simplifications. (It also would make only one sound play per frame, which would potentially slow down things more than it could help them.) The PC version's soundtrack is a MIDI score, but the Macintosh and Playstation versions use a Redbook audio soundtrack.
Quake
Main article: Quake engine
Quake popularized several major advances in the 3D game genre: it uses 3-dimensional models for players and monsters instead of 2-dimensional sprites; and the world in which play takes place is created as a true 3-dimensional space, rather than a 2-dimensional map with height information which is then rendered to 3D. Previous 3D games such as Duke Nukem 3D, Doom and Wolfenstein 3D (sometimes called 2.5D games) used a restricted-view mathematical trick when rendering their 3-dimensional view. This allowed a true 3D view, but only when looking straight-ahead (you can tell the difference by tilting up and down in those games, which is really just a distortion trick of the straight-ahead view rather than a true rotated rendering.)
Quake also incorporated the use of lightmaps and 3D light sources, as opposed to the sector-based static lighting used in games of the past. id Software's innovation has been used for many 3D games released since, particularly first-person shooters, though id Software switched to a Unified lighting and shadowing model for Doom 3.
Quake by default used the keyboard to turn left and right and move forward and backward, using the mouse, like Doom, to do the same movements. This produced awkward movements, and required settings like "auto-level" that would move the viewpoint back to straight forward as you moved and "auto vertical aim" that would automatically shoot things above and below you. Probably because of this the level design in Quake was more suited to the 2.5D environment of Doom. Only in a few spots in the game was the monster that was shooting you above or below you. Quake did have the option of using the mouse to look/aim/orient ("mouselook") and the keyboard to move forward, backward and sideways, but it was not the default until Quake III was released. However, nearly all skilled players in single-player and deathmatch alike utilized the mouselook option, which granted a greater degree of control, allowing for a variable turn rate. In fact, it was common for the more advanced players to openly mock beginners for not using the mouselook option, and the mouse and keyboard combination has since become a de facto standard in many PC shooters.
Quake was also one of the first games to support 3d hardware acceleration. While initially released with only software rendering, John Carmack created a version of the Quake executable that took advantage of Rendition's Vérité 1000 graphics chip (see VQuake below). OpenGL support was soon added in the form of the GLQuake executable for Windows 95 and higher. Many believe that this kick-started the independent 3D graphics card revolution, "GLQuake" being the first application to truly demonstrate the capabilities of the 3dfx "Voodoo" chipset at the time. The only two other cards capable of rendering GLQuake were a professional (very expensive) Integraph 3D OpenGL card, and, later, the PowerVR cards.
Unreal
Unreal is known for boosting the expectations of 3D graphics considerably. Compared to its peers in the genre, such as Quake II, Unreal brought to life not only highly-detailed indoor environments, but also easily the most impressive outdoor landscapes ever seen.[1] This graphical splendor brought with it the side effect of requiring powerful hardware to run the game fast enough to enjoy. The minimum requirements stated that a Pentium 166 MHz with a mere 16 MB RAM and no 3D accelerator would be capable of running the game. This was not realistic, however, and many gamers were very disappointed when they tried to play the game with such a system.[2]
The Unreal engine brought a host of graphical improvements, including colored lighting. Although Unreal is not the first major release with colored lighting (see Quake II), it is the first to have a software renderer as feature rich as the hardware renderers of the time, including colored lighting and even a limited form of texture filtering referred to by programmer Tim Sweeney as an ordered "texture coordinate space" dither.[3] Early pre-release versions of Unreal were based entirely around software rendering. SIMD technology is integral to allowing the software audio and 3D graphics engines to perform as well as they do. Unreal uses several SIMD technologies, including AMD's 3DNow! along with Intel's MMX and SSE (known as "KNI" within Unreal).
Unreal was one of the first games to utilize detail texturing. This type of multiple texturing enhances the surfaces of objects with a second texture that shows material detail. When the player stands within a small distance from most surfaces, the detail texture will fade in and make the surface appear much more complex (high-resolution) instead of becoming increasingly blurry.[4] Notable surfaces with these special detail textures included computer monitors and pitted metal surfaces aboard the prison ship, and golden metal doors and stone surfaces within Nali temples. This extra texture layer was not applied to character models. The resulting simulation of material detail on game objects was intended to aid the player's suspension of disbelief. For many years after Unreal's release (and Unreal Tournament's release), detail texturing only worked well with the Glide renderer. It was, in fact, disabled in the Direct3D renderer by default (but could be re-enabled in the Unreal.ini file) due to performance and quality issues caused by the driver and present even on hardware many times more powerful than the original 3Dfx Voodoo Graphics.
Because of Unreal's long development time, the course of development occurred during the emergence and rapid progression of hardware 3D accelerators. So, along with the advanced software 3D renderer, Unreal was built to take advantage of the 3Dfx Glide API, which emerged as the dominant interface towards the end of the game's development. When Unreal was finally released, Microsoft's Direct3D API was growing almost exponentially in popularity and Epic was fairly quick to develop a renderer for their game engine. However, the Direct3D renderer, released initially to support the new Matrox G200, was less capable and slower than the Glide support, especially in the beginning when it was unstable, slow, and had many graphics quality issues.[5] The Glide renderer's superiority can be seen in a review of the 3dfx Voodoo 5, where it outperformed every other card in Unreal Tournament (same engine as Unreal), due to its native Glide support. Even video cards which consistently defeated the Voodoo 5 5500 in other games could not win against Glide's greater efficiency.[6] Unreal also had limited official OpenGL support, but its compatibility was very limited, due to poor OpenGL client drivers from most hardware vendors at the time and Epic's resulting disinterest in furthering development. OpenGL could perform better in some rare situations, but Glide and Direct3D were usually the APIs of choice.
Later in 2004 and onward, OpenGL drivers developed by independent programmers and offered for free online began to supersede the official drivers for speed and quality. Perhaps the best of these releases was Chris Donhal's enhanced OpenGL renderer for Unreal Tournament, available for Unreal at OldUnreal.Com, which enabled native support for anti-aliasing, advanced multi-texturing including single-pass detail texturing, and hardware T&L, amongst a selection of other advanced and experimental features.