There have been a lot of advances in 3D gaming since the first 3D maze games were created. It seems that one of the major things lacking in 3D games is processing power. As graphics cards get more and more powerful, they start taking over more and more of the 3D calculations needed to recreate a 3D world on the screen.
When 3D games were first created, most of them were done in machine code (assembly) and optimized the maximum horsepower from the CPU. In those days, dedicated graphics cards did not exist and so all of the 3D calculations had to be done in software on the CPU. Many tricks were invented to lessen the calculations needed. Games that needed floating point calculations were done in fixed point math (using integers which are faster than floating point on CPUs). The 3D world had only one level, so you could not have other people or enemies "under" or "over" you (even if things can be higher or lower than you from your viewpoint). As CPUs got even more powerful, multiple levels were possible, and tricks were done to optimize the calculations. One is the useage of binary search trees where at any one location you pre-calculate what polygons need displaying, so you need not permutate through all polygons in the 3D world to find out which needs to be calculated and displayed at your current camera location. Of course there are many tricks involved in speeding these processes up. The following are a list of ideas (some observed from recent games, and many that have been in the back of my mind for some time).
One of the most difficult tasks the GPU does is to put as many objects as possible in a 3D screen as possible. Because there is a limited amount of GPU power, you cannot have a very large landscape with all objects in them unless you take shortcuts. Many of the recent games have Level of Detail (LOD) where all the vertices defining a 3D object vary depending on how far or close it is to your viewpoint (camera). So a round object might have 1000 vertices when you are standing in front of it, but it may only have 20 vertices when you are viewing it from a long distance away (in the 3D world). Most objects are stored in an internal database and usually there are multiple versions of the object (one for close, another for medium distance, and another one for far away). So for example, in a spaceship entity, it stores three collections of vertices of itself (one for far away, one for medium range, and one for far away, each of lesser vertex or polygon count).
An idea to advance this that is not implemented (at least that I know of) is to have an algorithm that prunes one object dynamically as it gets farther away. This will save on memory footprint (good for consoles and mobile devices). You can use an algorithm that is very sophisticated, or use one that reads hints inside the object for things to ignore or prune during 3D processing. For example, you have a "dynamic" object, where "hints" are included in this ONE object telling where and what vertices will dissappear as you get farther and farther away. The 3D processing algorithm will simply ignore vertices or triangles that were marked for invisibility at certain range.
Important objects are those that should be displayed no matter how far away they are. Things like the "enemy NPC" or other buildings. Things of unimportnat nature (like grass, or small rocks, or things like that) can be brought in as you get closer. A major problem with current games is that things pop in as they are closer. For example, you can be walking forward, and at a certain point, a tree that was not there all the sudden appears (at a certain distance away). If you walk back a little, it dissappears again. This is usually called a "pop in", and it is determined by the draw distance of the 3D-engine. Recent games like Sony's Socom: Confrontation lessen this effect by having the object "blend in" so it is not noticeable, but if you are paying attention, it is there.
One idea that I have not seen implemented is to take into consideration importance of view area. In most 3D games the center of the screen is the most important area. And it is mostly denoted by a crosshair. If things are going to get popped-in, or blended-in, it should NOT be done near the center area of the screen. In most wide screen displays, it is a good idea that pop-ins or blend-ins should happen in the corner areas of the screen (near the left and right side of the screen). It shouldn't happen at all, but in those special cases where the engine is maxed out, it should only happen near the edges of the screen where it is not important, and may not get noticed as often. Of course it should get blended in if this is possible.
I think most games should be free-ended. Where you can go wherever you please, and have little restrictions and "invisible walls" stopping you from going from one place to another. In this case areas in all games should be streamed in, and not have a load screen. Games of these nature follow Oblivion and Fallout 3 (although they are still lacking in that they need loading if you enter rooms). MGS4 is definately not the way to go, with constant loading. If not for some large areas, the loading may have killed the game. The areas where you are on the motorcycle going from area to area was really hurt by the loading, and made those sections unspectacular. Streaming in the graphics are done using level of detail as explained previously. And I think some games are started to have different texture level of detail as well, where the farther an object is, a different texture is loaded in. Earlier 3D games tried to use a fog in the distance, but that is not realistic unless you are making a fog game.
Another idea that comes to mind is to put the 3D capability into the designer of the levels. If the GPU can only process certain amount of polygons or vertices, simply make the 3D levels have lots of walls that limit your vision, so you don't need to draw so far out into the distance. Many earlier games use double doors, where you need to enter one door and close it, then enter another door to open it. During the transition, another level is loaded in, but is done smoothly so you don't get loading screens. The main idea is to get free-roaming territory with no loading screens or notices with as much detail as possible.
Besides the fog and draw distance, another idea is to use the trick of a "top down" viewpoint. In these games your 3D view is limited to a top down or slight angle downward view. Because you never need to see into the horizon, you never need to draw anything beyond the boundary of the ground near your main character. A trick to use that I don't think anyone has implemented is to have a dynamic camera that is not in your control in certain situations where the draw distance will kill the GPU. Most games have what you call a third-person viewpoint and a first person viewpoint. In third person viewpoint, the camera is behind the person you are controlling, but it is possible to move the camera to a slight top down view when the graphics gets intensive.
One last trick is to use low resolution. As you know the higher the resolution, the more the memory and gpu power required. You can lessen the processing needed by making the background objects at a distance use a lower resolution texture (and polygon count), and use blurring to make them not so clear (depth of view). As things get closer they become clearer, and the polygons get more detail, and the textures get more detail. However unless most of the action is close, having blurry background takes away from a "magnificent" free-roaming world.
I think games should utilize the GPU (graphics card) to the max, and they should use assembly or fixed point or other tricks to get the maximum power out of the GPU. In these cases, there should never be reasons for objects to be blended in or poped in that get noticed. Draw distances should be infinite for your viewpoint, and using tricks mentioned above this should be possible when all parties get together during the game design stage.
