3D Coding TAT - Final Words
0: The Crystal Fool
Here are some predictions about the kind of abilitites which the next generation of 3d engine might have and some of the common sense rules which unfortunately some new games still ignore.
 1. Curved polygons.
    No  more  breeze block people or  creatures. Instead of simply boosting the
    polygon count like most engines do these days perhaps Spline or Voxel based
    rendering  methods  can be used. This  could  allow smooth, organic looking
    items  to  be modelled with a modest  number of control points using only a
    fraction  of today's vertex counts. I think Blade Runner and Estactica were
    some  of  the  first  games to  tackle  the  block-head problem. This curve
    interpolation  would allow very large models  to remain smooth looking when
    viewed from very close range.
 2. Dynamic game worlds.
    Flexibility  in  the  game  engine  allowing  trees,  walls, even buildings
    themselves  to  be demolished or created.  The very static, traditional BSP
    type mapping and other similar methods really need to be greatly overhauled
    with  far more REAL-TIME processing and structural-manipulation done by the
    CPU  during play rather than before hand. This would require some new, fast
    techniques to be developed, so plenty of room for talented binary inventors
    here.
 3. Jelly scenary.
    Items  such as trees or other flimsy  objects behave and respond to impacts
    or environmental forces, such as wind, tides or other non-player creatures.
    Things  such  as  weather, natural or  artifical  events should be possible
    using 'local knowledge' of the player's current surroundings.
 4. Better details.
    The  level  of  detailing will hopefully  increase  in line with level size
    rather  than  simply  producing  vast, empty  rooms  for  the player to run
    through.
 5. More interaction.
    Yeah,  more  of this within the levels  instead of the ancient "let's put a
    switch every 3 miles" method of game design. We have all played in high-tec
    environments  but  all seem to be  reduced  to pressing buttons, collecting
    keys  or  jumping across vast canyons. If  an object is drawn on the screen
    then why can't I interact with it, pick it up and use it?
 6. Greater freedom.
    Most  games  tend to take you by the  hand and guide you through the level.
    The  game designers have forced us into a narrow and linear way of playing.
    Which is good from a programming point of view as it means there are only a
    few  possible routes and sequences in which things can be done. But from an
    adverture  point it usually sux. There  should always be an alternative way
    of completing a task, using a different object or by taking another route.
Hopefully you can see that there is still a vast amount of new techniques which can be introduced to the novelty eager players out there. Don't get bogged down by counting polygons or creating a photo-realistic renderer as most players won't notice these things only other programmers will. The player is usually far more impressed by new stuff, new toys to have fun with and new ways to interact with the level.
There is such a rich and already well known resource for future 3d game ideas. It's the REAL-WORLD! So take a good look around, see what looks like fun or better still, dangerous and try to present it to the player in an easy to understand manner. It is very easy to just look at other games for ideas but most of the time you will be cloning a clone, so look at science, biology and old sci-fi films. I have seen some state-of-the-art demo effects in 30-50 year old sci-fi film titles! Things like motion blurring, text blends and plasma-like bobs can be found in the opening title for the classic "The Day Of The Triffids".
There is only one rule for games programming:
"If it is still fun for the programmer to play after months of development, then it is usually fun for the player too".
I have witnessed plenty of games done by 9-to-5 programmers who just wanted to meet the deadlines and get paid. Their sole interest in the game was to finish it and get it out of their sight. Sadly most companies tend to favour these individuals as they are often like the managers themselves, but their 'video games' talent is often lacking the enthusiasm which turns an average game into a really playable game.
I think writing video games is more a question of 'what if' rather than one of 'daily schedules'. The whole process is the total opposite to that which the 'serious, professional' programmers work by. Their products have a very clear design spec and the plan doesn't really change a great deal, also each new product is often just an upgraded and embellished version of the previous one. Video games have NO clear goal in mind, the basic outline, story and map designs can be drawn up at the beginning but usually major and I mean major changes occur forcing pages of code to be tweaked or totally scrapped in the name of playability. Each game should atleast attempt to break new ground, to present something novel which the player has seen before. There can sometimes be alot of 'play it by ear' design and programming which help to shape a game beyond the predictable clone status. This gives many managers ulcers as they are unable to control the 'talent' of their employees, but why should the programmers be the only ones to sweat blood and tears?
1: So Long, Fairwell..
One of the most interesting things about programming 3d it that there is still so much yet to be done before the all time ultimate, mega-optimum method is found. Many of the well established algorithms and techniques are useful in themselves and can often be applied to other things but there are still many holes yet to be plugged. Like the Sutherland-Cohen line clipping using outcodes, under certain situations it can not reject or accept certain slopes which must be clipped and retested, so there is room for improvement here. Even things like the Bresenham line drawing algorithm which on the face of it may appear to be the ultimate scan converting method can in fact be improved using a "run-length slice" method something which is almost indentical to an optimization that I had worked out 4 years before I knew what it was called (except mine doesn't require a division, heh heh). I think even the God-like Mr. Bresenham had figured this out as well.
Sometimes "You have boldy followed where someone else has gone before...."
So okay, you might not be a pioneer in the field but perhaps your fresh, new approach might yield a few more tricks here and there. Sometimes after looking at a piece of code for too long you can start to get 'snow blind' and miss a trick here or here, so take a break or better still ask a fellow coder to take a pew or two they might suggest an obvious trick that you overlooked. If you think you have found the ultimate algorithm then take a long look at some of your old 'optimized' code. This will usually make you say "Yuck! What the hell was I doing back then? If I knew then what I know now...." Yep, the moral of the story is..
Today's optimization is tomorrow's slug...
This is too true, just look at the various CLK-timings of 8086 CPUs compared to many of today's "faster" CPUs and note how some instructions have actually got slower ! And on this happy note I will say .....
                                                "That's All Folks!"
                                                                the end.