CS 651-4/551-3: Real-Time Rendering
Final Project

Synopsis: Build a 3D game engine, with accompanying game "demo", that incorporates some state-of-the-art techniques.

Due: Note that there are no late days allowed on the final project.  The only option for a late project is for the entire group to take an Incomplete in the class...not a good option at all.

    Thu Nov 21 - Checkpoint: project proposals due (10%)
    Thu Dec 5 - Checkpoint: progress report w/ (running) code (30%)
    Fri Dec 13 - Final project due (60%)

Details: Pool your creativity and your code and design a game engine!  Your engine should support all the things we've covered in the assignments: scene graph rendering, basic LOD and visibility culling, and Cg-based particle systems.  Furthermore, your engine should include one or two interesting effects or algorithms beyond what members of your group have worked on individually.  For example, you might choose to include shadow volumes, terrain LOD, NPR effects, occlusion culling, a "furry" shader, simple physics, etc. 

You'll also do a "demo" that will showcase the things your game engine does.  For example, if your engine does cells and portals, you will build or import a simple world ("level") that illustrates the culling.  If your game is a first-person shooter, you might include some shooting effects, etc. 

You are welcome to use the NV30 emulator!  There are soooo many cool effects that you can achieve so easily in NV30.  If you do use the emulator, you'll want a button that toggles the fancy shading, so we can fly around the demo interactively before hitting the "make it slow and pretty" button.

You will be graded 50% on technical merit -- e.g., the algorithms and tricks that you implement -- and 50% on content.  By "content" I mean the visuals and models in your game.  My goal is for you to make something that you are proud of, something that looks good enough that you will want to show it to people.  This means you will need to spend significant time writing model loaders, finding or building good models and textures, and so on, so your grade is intended to reflect that effort.

Speaking of grades, all members of each team will receive the same grade on the final project.  You will fill out peer evaluations at the end of the project in which you provide feedback on your team members.  These evaluations will be a significant factor in the "group participation" grade, which makes up 10% of your total grade for the course.

For the first checkpoint, your group will send me an e-mail detailing the overall shape of your game, the technical contributions that your engine will incorporate, and who will code what.  In response I will provide feedback on your ideas, whether you're being too ambitious or not ambitious enough, and perhaps some (hopefully) useful advice.

For the second checkpoint, you should be 60% finished with the system, with a basic system running that the user can interact with.  It does not suffice to feel like you are 60% done with the code...I want to see something running.

For the final project, you will turn in the code, content, and compiled executable for your game demo.

Policy on code reuse: The usual.  You may use your own code or code from outside sources as long as you attribute exactly what you used and where you found it, and share any particularly valuable finds with the rest of the class.  Obviously if you reuse a significant amount of code that raises the bar for the assignment, and you will be expected to do additional work to get the same grade that you would get if you did all the coding yourself.  As always, if you have any questions about code reuse or attribution, please ask me.

Platform: As always, I expect that your code will compile and run on the machines in 002a, either in Windows or Linux.

Turning in the assignment: Put all your code and content on a CD, along with a detailed README.txt file that describes what you did, what code you wrote and what code you used from elsewhere, and how to run your assignment.  Be sure to include workspace and project files so that I can compile your code.  I will read (and grade you on) your source code, so follow good programming practices.  Your project should be completely self contained!  This means that ALL libraries and header files you use beyond OpenGL itself (SDL, GLUT, CG, DEVIL, various NVIDIA helper libraries) should be included on the CD, and the Makefile/project settings set up to use those libraries when compiling.  My goal is to be able to put your CD in a random computer and compile your code without hunting down a bunch of libraries and header files.  Of course, you should include the executable as well.