I am a CS master student @ berkeley doing architecture research. Recently, my advisor showed some interest in game development and I have been itching for a new hobby so I decided to look into game development. I need some help with deciding where to begin so I will describe to you my skill set as detailed as possible.
I have been programming with c++ for over 9 years but it has been mostly for command line unix systems. I am quite adept at the syntax of c++ and I do not think the language will be my bottleneck. However, I am a bit concerned with developing because I have always been so attached to unix based systems that I have never used VS or any type of IDE (vim and makefile/configure has always been what I've used).
In terms of graphics I have moderate knowledge of the concepts. I have done a few projects including a basic phong shader with u-v mapped textures, a full ray tracer from scratch (with reflection, refraction, various shaped primitives etc), and some applications with bezier surfaces and curves. I am moderately familiar with pre nvidia 7xxx series gpu architectures since I designed and implemented a simple fixed point gpu with unified shaders on a fpga board using verilog. I am also familiar with maya which I have used to produce two \< 5 min long movie with a group of 5 or so students.
So given my given my relevant skills, I am wondering if my life will be easier to start from scratch and build my own 3d engine or to use one available online. If the latter, could you please recommend an engine I should look into? Probably a 3d fps engine would be sufficient i think.
Thanks for the help
Also, i found I found http://www.directxtutorial.com/Tutorial9/tutorials.aspx to be very helpful. Are there any others like this?
You're going to get all kinds of opinions here and probably won't be better off than doing your own research. My advice would be to look into the Ogre Engine. You won't need to use an IDE. Sure, you could build your own engine, but take a look at the amount of code, debugging etc that has been done already. Ogre is very object oriented and leaves room for a lot of changes. There is a nice set of tutorials to get started. One problem I see is that you haven't had much experience in game design and I personally think that gaining that experience is better done with 2d games. You need to write a lot, get a lot of experience, and 3d just slows the whole thing down. I personally think you should write at least 30 games in 2d before going 3d. That might sound like a lot, but once you are set up, you should be able to write them pretty fast. Start with clones and than make your own changes so they are unique games. People tend to start with huge games that never get completed. It's much better to start small and do a lot of different types. You could also just specialize in one genre if that's what you like, but still, it's better to start small and work in 2d. It's really just an abstraction, like working with a blue print. A main focus, I think, is grid type games that use Astar path finding and AI. This isn't the way I did it, it's the way I wish I would have done it. If you watch, you can see the grid type system used in a lot of 3d games like RTS and Role playing. Once you've done that, transfer some of those games into 3d.
I would say: start 2d. Everything you learn in 2d world applies to 3d games too. (and to pimp my 2d tutorial, http://iki.fi/sol/gp/ =)
Generally, I agree with fireside. Maybe not 30 2D games, but obviously, many pure coders undervalue the complexity and the "experience curve" in knowing how to design a good game.
Do not build a game engine unless you want to become an engine/toolset/framework builder. There are lots of threads here that a search for "game engine build" or some such would fill hours of time. The gist of the con argument is that a) there's an inherent amount of time writing and debugging that's high that n00bs don't realize and a majority of the experience gained in the process is non-transferable to designing a game.
As fireside says, there are lots of mature engines out there that do a lot of the grunt work for you, are relatively well-written, and have a community to lean on. Now, it may be that you'll want to change some parts, for example a different rendering technique, or a procedural aspect not available in the engine, but at least you get to skip things like writing and debugging input handling.
I would recommend OGRE, Horde3D or C4 for you. Be assured that there's still lots of coding left, of varying amounts, to do even after you pick one of these. Note that OGRE and Horde3D are render engines, leaving lots of network, sound, AI, physics and such to code up. C4 gives you even more, but there's still all the game logic to code.
Thanks a lot folks. I will keep these in mind as I continue my research in beginning this project
My two cents. There is no fixed answer to "pre-made" vs "build your own". You have to weigh the factors and make a decision. These include
(A) Can pre-made do everything I want (B) How long will it take me to build your own (C) Can I easily modify pre-made if I need to (D) Will I learn a lot building my own…. I'm sure there are more. These are just a few things to consider. In the end you are in the best position to make this decision.
I wouldn't worry too much about UNIX vs Windows. IMO Windows especially Vista can be kind of buggy. However Visual Studio is top notch and pretty much crushes every development environment I have every used on UNIX (note: it's been a few years since I have programmed extensively on UNIX systems). VS is way easier than vim and makefiles. It just is. IMO you simply have to change your mindset on that. At one point I had to myself. Don't get into the anti Microsoft trap. I know sometimes you even get this from teachers. I work in the bay area and I know that attitude well. Yes, Windows has some issues but the development environment isn't one of them.
http://www.directxtutorial.com/Tutorial9/tutorials.aspx[/url] to be very helpful. Are there any others like this?
One more thing if you want to use DirectX I would seriously recommend just buying one of Frank Luna's 3D Game programming books. It's totally worth the few bucks you will spend.
You have to start off making b grade games first, if you ever make an a grade game try to sell it!