'); document.write(''); } // done hiding --> |
Paul Nettle spends most of his time researching 3D solutions to unsolved problems like visibility determination and better lighting models. His official position is "Senior Software Engineer, Team Leader" at Terminal Reality Inc. He is the author of the KAGE 3D engine and is currently working on "FLY!", a general aviation flight simulator. He also hosts a website geared toward 3D development and research, called Grafix3D. | Screenshot from KAGE |
I got interested for pretty much the same reason anybody else gets interested... 3D stuff looks cool. I had to 'break' into the game industry twice, so I have two stories...
When I first started off I was using an Atari 800XL. I had this program that would generate 3D wire-frames of an object (I didn't know 3D at the time.) So I modified that program to generate a series of images (a.k.a. animation) and save off the images. I then created an animation (using differences from each frame - I really thought I was being ingenious here... :) and when all was said and done, I had seen my first full-screen 3D animation on the Atari. I took this to a local game company (the newspaper advert read something like... "Earn the world-wide recognition you deserve!") and they hired me.
After that company went belly-up, I decided to go work for a "real" company. So I worked for companies like Fort Motor, Chrysler, etc. But all the time I kept a personal interest in 3D. I kept programming 3D on the side. Eventually, I started working on Latex (now called "Spandex") which gained very little recognition within the industry. Enough of the right people happened to know who I was for me to get a job in the industry. But I wouldn't be where I am if it hadn't been for that engine.
There is one very valuable resource. It's the most valuable resource you could possibly have access to, and you've got access to it right now. It's the #coders channel on (Editor's Note: euro-effnet #coders) IRC (use a server like irc.stealth.net or irc.webbernet.net). That channel is full of very talented people that KNOW this stuff. I still hang out there often enough to be a regular (using the nick "Middy") and I still learn stuff from the people in there. If you're young, don't worry about it. Most of the people on that channel are under 20.
While working at the aforementioned company (F.A.C.S), I was lead programmer for Apache Strike (C64) and helped out on the IBM version. I also wrote the music code for Robocop (IBM), did the graphics engine for Heavy Barrel (C64) and did some design work on California Games II. Since I've started at TRI, I wrote the KAGE engine (including all supporting tools, like the radiosity processor, the 3D modeler, etc.) I did a little work (very little) on Monster Truck Madness II and am currently working on FLY! our general aviation flight simulator (the competition doesn't stand a chance! :)
I also ran my own company for a while called "Hot Wax Software" which produced a 2D morphing program called CMorph ("The Complete Morph") which started off as shareware and went commercial in 3 countries.
Very little, if any. As a matter of fact, I spent all of my study time programming. As a result, my GPA was below average. I was CERTAIN that I would end up with a career in computer programming, it just felt right. I was lucky, I got a job programming games almost right out of high school.
Write a 3D engine (assuming you know how to program.) There's no replacement for experience. If you don't know 3D, then get started and learn what you need to know along the way. When you're done, re-write it. Invariably, by the time you finish your first engine technology around you will have advanced. So re-write your engine using what you learned to improve on the basic design, and include the advances. I would also recommend not using 3D hardware at first. Write your own software renderer, you'll learn a lot about proper polygon rendering (accuracy, etc.), perspective correction, etc. Then again, this is an old skool opinion.
Screenshot from KAGE |
How long did it take you to develop KAGE, and how did you get started? |
Prior to starting at TRI, I had spent a few years researching visibility and had come up with a technique (currently called the RVS) that I was pretty confident would work well for real-time scenarios. When I started at TRI, I explained it to Mark Randel (the president of TRI) and he agreed that it should work, so I started development on it. I wrapped some 3D code around the visibility scheme and found that it worked twice as well as we had expected. We were getting frame rates that were almost twice as fast as the original Quake engine, and we were doing full 32-bit graphics (as opposed to Quake's 8-bit graphics) using a fully C++ software renderer (I hadn't optimized it in assembly yet.) At that point, I evaluated the direction I wanted to go with KAGE (TRI was exceptional in that they gave me total freedom on this) and designed it from the ground up. A week later, the existing code was added to the new design (KAGE) and the engine was under way.
KAGE took a little over 1.5 years to write. With other contracted projects going on (and no contract for KAGE) it was a solo project. This includes the development of the preparation utility, the radiosity processor, the 3D modeler (click to see an exclusive screenshot of the editor!), the font editor, etc. I spent a bit of time trying to improve on the RVS with different modifications but the final RVS ended up being the original.
Ultima Underworld. I'm a fan of dragons, wizardry and fantasy worlds. That game fit my tastes perfectly and was well implemented. The graphics were good enough to submerge you into the environment better than anything else at the time, and the dynamic music would actually cause my heart rate to increase during the battles (though, nowadays I might just get a chuckle at the FM music. :)
The Ultima series (1 through 6) are in close second.
And to be fair, I've probably spent just about as much time playing the guys here at TRI in the "Edge of Oblivion" (multi-player level from the "Scourge of Armagon" add-on pack.) Quake is a cool game, but unless it's "Edge of Oblivion," I'd rather be coding. :)
What technology in the game industry do you see arriving in the near or distant future (and what do you hope to see)? | Screenshot from KAGE |
Avoiding all the details, I'll sum it up with "More reality." I like to look way out on the horizon. How does real-time NURBS with true curved-surface rendering sound? How about some real-time radiosity? At least, these are the things I've been spending my idle brain-cycles on.
Open-Source is a good thing. Where would Linux be if Linus hadn't released the source to his kernel? I know there is some debate about it, but people need to remember one important fact. It's optional; nobody is forcing anybody to go Open-Source.
Microsoft's DirectX is currently the top. It's quite a rare occurrence for somebody to take the lead once Microsoft has their claws ("can I say that on T.V?" :) into something. Personally, I would prefer to see OpenGL get the title.
Ladies and gentlemen, we have a tie!
Windows 98 with Visual Studio 6.0.
Linux (S.u.S.E.) with gcc/egcs/pgcc
My job is to develop technology for games. So I'm not really qualified to comment about level design, music, art, etc. Sounds like a political cop-out, eh? Not quite, keep reading. :)
The technology in today's games could use a TON of improvement. When I started KAGE (I'm not trying for a free plug, really) my main goal was to reduce the limitations on the level designers, since they're the ones responsible for making the game fun. The technology is the foundation for a game (after all, a game is a program) but it's the level designers that make the game into a game (i.e. something fun to play.) The art, graphics and sound are TOOLS for the level designers.
Too many (not all, mind you) 3D engine developers seem to think that the 3D engine is that all-important thing (egos go wild here.) It's just a tool, people, for the people that actually MAKE the game.
I already stated it, but this is the perfect opportunity to say it again. This is the most important thing I had to say: write a 3D engine. Stick with it until you finish (this is the hard part.) Then write it again. There are lots of people that can help you when you get stuck (like me, for example: midnight@grafix3d.tzo.com) or one of the gang in #coders. Just make sure that you're really stuck before you bother somebody, and never, EVER pilfer source code. Learn by doing, not by reading other peoples' sources.
And of course, don't do drugs, wear a condom and briefs, not boxers.