CS 446: Real-Time Rendering
Project #1

Synopsis: Build the basic underpinnings of a 3D scene-graph engine.  Your program should be able to import 3D models with hierarchical transformations, place them into a scene graph, and render the scene.  Your scene graph should support multiple traversals (for example, to render the scene from multiple interactively controlled cameras), along with basic view-frustum culling and basic LOD.  Finally, your group should decide on and propose the game you will build.

Due: This assignment has multiple components, each quite challenging in its own right.  To help you organize your effort, we will check your progress midway through:

    Feb 12, 2004    Checkpoint: Load and fly around multiple models (40%)
    Feb 19, 2004    Final assignment: Everything else (60%)

Details: This is where you start: in this assignment your group will build a basic scene-graph renderer that will become the base of your game engine.  Your renderer should support:

Resources: There are many places you can go to look for advice, tutorials, details, and source code for games, from loading file formats to AI and physics.  This can be frustrating, however, as many of the resources on the Web are the results of enthusiastic amateurs rather than paid professionals.  Some good places to start are:

Also, don't forget about the optional texts for the course like the game programming gems series!

Lab: We are sharing Olsson 002a this semester.  Most of you will need to get a key from Ginny Hilton at the CS front desk.  There are 13 machines and 24 students in this class, plus many students in Operating Sytems using the lab...so be courteous and don't assume you will always get a computer exactly when you were planning to work.  The machines in 002 have decent processors and decent (NVIDIA GeForce3) graphics cards; I will be installing a few GeForce FX-class cards (programmable graphics) later.  If you would rather work on a personal machine, that's fine too -- in fact it will take the pressure off the lab machines.  Let me know any issues you encounter -- this is a new use of this lab and there will undoubtedly be software, hardware, and availability issues to work out.

Policy on code reuse: In general you are welcome to use code that you find elsewhere.  For example, you are welcome to use the lib3ds library mentioned above, and you are strongly encouraged to use the in-house software tools that Ben has posted.  However, you will not get credit for what you didn't write.  Therefore, it is critically important that you describe in detail what code you wrote yourself and what code you imported or adapted from elsewhere.  Furthermore, if you find a particularly helpful library, tutorial, loader, etc., you should post it on the forum.  Obviously if you reuse a significant amount of code, that raises the bar for the assignment: you will be expected to do something beyond the basics mentioned above.  If you have any questions about code reuse or attribution, please ask me.

Platform: I would prefer that your code compile and run under Microsoft Visual Studio 7 (.NET).  Please don't use VS.NET 2003.  If your group wants to develop under Linux or Macintosh, go ahead.  Any Linux projects should compile and run on the lab machines; this may require intervention by root (to install libraries, etc) so don't put off testing your code down there.  If you go Mac, you will need to work with me to make sure our one Mac can run your code.  You are welcome to use GL extensions supported by NVIDIA cards; if you want to use other extensions or other hardware, talk to me first (we also have an ATI Radeon 9700 in the lab, so that is a possibility...but you'd have to own your own card for development).  If you want to use a particular input device (joystick or whatever), talk to me first...you may have to lend it to me so I can grade your assignment.

Turning in the assignment: Checkpoint: Demo to the instructor or TA that you can load and fly around multiple models.  Final assignment: Put all your code and models in a folder, along with a detailed README.txt file that describes what your group did, who in the group did what, what code you wrote and what code you used from elsewhere, and how to run your assignment.  Zip up the folder and e-mail the .zip file (or a link) to me and the TA.  Be sure to include workspace and project files, along with any libraries/include files/etc, so that we can compile your code.  We will read (and grade you on) your source code, so follow good programming practices.

Advice: If this sounds like a lot for a two-week assignment, that's because it is a lot.  An awful lot. This will be the hardest assignment in terms of the sheer amount of code you need to write.  It is particularly important to start early because you will be building on this code for the remainder of the course; a careful and thoughtful design now will simplify everything down the road, whereas a rush job will introduce bugs and design flaws that will continue to bite you throughout the semester.  Now is the time to follow good careful software engineering practices: think carefully about your design BEFORE you start, test your classes and functions early and often, and use CVS to back up your work for disaster recovery and revision control.