XNA Creators Club Online
Page 1 of 1 (4 items)
Sort Posts: Previous Next

Seeking a Self-Study Roadmap For XNA

Last post 3/15/2008 6:43 PM by Michael Spencer. 3 replies.
  • 3/8/2008 10:21 PM

    Seeking a Self-Study Roadmap For XNA

    I'm currently a Computer Science grad student (so in theory at least I "know how to learn") and I've been working on teaching myself XNA and game development, such that ideally by the time I've finished my MS degree (2011-ish) I'll have a collection of impressive XNA games and tech demos to my name, maybe even worthy of being published to XNA Community Games.  I imagine many other techies on this forum are in the same position I'm in -- we aren't afraid of hard work and want to get some game development experience.

    Could I beg an experienced XNA developer or two to post a general list of skills, topics, and bits of experience needed to take someone with a well rounded computer science education and turn them into a game developer?  I'm not looking to be spoon fed with a list of specific books to read or web sites to visit;  I'm more interested in a general outline to follow.

    I am not a successful game developer, XNA or otherwise, so if I tried to write such a list it would likely be wrong.  To illustrate the kind of answer I'm looking for, I'll post what I think the correct answer looks like:

    • Learn 3D scene rendering basics:  triangle strips, meshes, sky boxes, texturing, lighting, viewing frustrums.
    • Learn more advanced 3D scene rendering stuff.  (???)
    • Learn basic pixel and vertex shader operations.  (What does this look like?  Do you just pick shader programs out of a book like recipies from a cookbook?)
    • Learn advanced shader operations, such that you can write custom HLSL code to solve novel problems -- or even have a program modify and transform HLSL code on the fly.  (automated program transformation FTW!)
    • Learn game AI basics, and be familiar with many different types of searching, sorting, directed graph pathfinding, and task scheduling algorithms, so in any situation you have at least two appropriate tools in your toolbox.
    • Learn advanced game AI.  (What does this look like?  I've been trying to study open source chess engines, and learn how they handle planning a long calculation and making moves in the short term while still working on calculating a long-term strategy.)
    • Learn game design basics.  What makes games fun and addicting?  What are reward schedules?  How do you encourage a player to try, fail, enjoy learning from their failure, and try again?  (Even if many of us techies are not destined to become professional game designers, our jobs will involve taking direction from a game designer and making their ideas come to life.  I've found in any profession you are a more valuable employee when you understand your boss's needs and goals and can work to help accomplish them, so it seems understanding a game designer's job would help someone support a game designer's goals better.)
    • Learn basic scene interactions.  Player and NPC movement, collision meshes, resolving collisions, implementing weapon hits for zero-time-on-target weapons, missile-firing weapons, area of effect weapons, melee weapons, etc.  How to disallow things from falling through a scene or other collision mesh.
    • Learn advanced scene interactions.  Simulating laws of physics, resolving collisions in a realistic-looking way, etc.
    • Learn basic game sound.  Playing, mixing, fading sounds, triggering sounds on game events, interrupting sounds on other game events, etc.
    • Learn advanced game sound.  (???)
    • other things I forgot or never learned.

    My list is likely wrong, and even when completed the whole thing will represent years of work.  I imagine most people who look at the completed list will find themselves lacking in some way.  Even so, it'd be great to have a rough roadmap to follow, where each section lists:  a rough description of a type of knowledge or an achievement;  a short description that allows someone to identify if they already know this or not;  and optionally a quick list of resources, books or web sites or whatever is appropriate.

    Even once this list is complete, people like myself who try to use this list to guide self-study efforts will be aiming for a moving target.  These skills may describe what's in demand for the game industry now, but in the two or three years it'll take me to learn these subjects we may find the industry has moved on and now requires skills that aren't currently in wide demand.

    So what should we newbies be focusing on?  I'll update this Original Post with the skills and resources posted in replies below.

    XNA Game Development Resources:

    • . . . awaiting replies to topic . . . .
  • 3/9/2008 12:58 AM In reply to

    Re: Seeking a Self-Study Roadmap For XNA

    Having at least a passing understand of everything on your (example) list is clearly a good starting point.  However, as you say, a "complete" list of material would require years of study to really learn well.

    I would suggest you narrow your scope a bit and identify areas of game development that interest you, and concentrate on those areas.  For instance, are you more interested in game design/gameplay, or game technology?  There's quite a difference in skill sets required for various game development jobs.  Someone writing gameplay code will need to intimately familiar with AI algorithms and event-driven programming, while a graphics developer needs to know 3D programming APIs (Direct3D/OpenGL), shader languages (HLSL/GLSL), graphics card architecture, linear algebra, and the list goes on.  Similarly, a 3D physics programmer needs to have a very strong background in vector mathematics and dynamics, as well as computer numerical processing and high-performance floating-point code.  A core engine programmer will need to be familiar with computer architecture (Intel vs. Xenon vs. Cell) and software engineering theory.  Hopefully I've made it clear that it's important to decide which aspects of game development interest you, and learn as much as you can about those areas.  It's important to have a clear, general understanding of the "big picture," but it's almost impossible to have intimate knowledge of every aspect of game development.

    Once you identify specific areas that interest you, then it'll be easier to provide reference material beyond the basic tutorials.
    Microsoft DirectX/XNA MVP
  • 3/9/2008 8:00 AM In reply to

    Re: Seeking a Self-Study Roadmap For XNA

    Agreed, the one thing i hear time and time again from hiring studios is that they don't want someone who can do a little bit of everything, they want someone who's absolutely world class in one specific area.
    Mercury Particle Engine - add visual effects to your windows and Xbox360 games with ease!
    http://mpe.codeplex.com/
  • 3/15/2008 6:43 PM In reply to

    Re: Seeking a Self-Study Roadmap For XNA

    Sorry it took so long to reply -- those answers are even better than what I hoped for!

    I didn't want to make this topic about me personally, but right now my plan is:

    • finish my Masters, which should give me solid well-rounded Computer Scientist type problem solving abilities.
    • settle on an area of specialization and work toward becoming "world class" in that area, submitting conference papers and being rejected a lot at least.  Maybe a "world class wannabe" is sufficient.  :-)
    • if I'm lucky enough to find that my area of specialization can be directly applied to video games, and that I'm not destined for some other field, prepare to sell myself to an employer by writing simple game demos that take advantage of my special abilities.

    Correct me if I'm wrong, but:  even though we don't yet know what kind of specialization I'll settle on, if my plan is to come up with some simple framework of a game upon which to hang my impressive technical innovation, I'll need basic skills in areas I don't plan to be an expert in.  If my skill is in game AI and is best experienced in the form of a first person shooter, I'll need a little bit of skill in a whole lot of areas to construct my basic unremarkable FPS game.  Then I can try to add world-class AI to it.

    I believe to be a good programmer, in any situation, you need good understanding of your execution environment (controller input, graphics output, processing power, services provided by OS, etc.);  good understanding of the language you are writing code in (language grammar, implemention details of various language features, firm understanding of types and type conversion, etc.);  and a solid Computer Science background (for data structures, common algorithms like sorts and searches, estimating execution time, etc.)  Despite my education and experience I find myself lacking in all three of those areas.  Microsoft tries to make the first one easy with XNA;  C# is new-ish to me;  and I barely even have basic familiarity with common methods, structures, and algorithms used for 3D scene rendering.  Sure I can do fast sorts and make hash tables and know the difference between several undirected graph search algorithms, but there's so much more I'm missing.

    So how about I restate my question?  Of the above, which skills are needed for any independent XNA game programmer to be able to write any arbitrary basic type of game, even if it's an empty featureless husk?  What are the lowest-common-denominator skills required that are likely to be useful for nearly every type of game?  And then from there -- if you'll excuse me asking for extra hand-holding -- what books or resources or self-study methods work well for learning those things?

Page 1 of 1 (4 items) Previous Next