CS 446: Real-Time Rendering
Assignment #4

Synopsis: Pick a component to add to your game engine from one of the categories below.

Due: This assignment is due Tue Mar 21.  By Tue Mar 14 (Tuesday after Spring Break) you should mail me and Ryan a description of what project you plan to do and how it will fit into your game. This is important! On Thursday, Mar 23, the group will demonstrate all of the individual effects incorporated together into the group's rendering engine.

Grading: You will get an individual grade for completing the project (and 40% of your total grade comes from these individual project grades). You will be graded on completeness, difficulty of task, and polish, in that order of importance. Repeat: you will be graded on the difficulty as well as the success rate of your projects.  Not every project has to be a killer, but I expect every student to take on at least one substantially difficult project, and no more than one comparatively easy project.  Part of the reason you need to mail me a description of what you plan to do is to so that I can give feedback, if necessary, on how difficult I judge a project to be. 

Note that I explicitly do not want four individual assignments that don't work together.  Your project must be fully integrated with the group's game engine. To enforce this, part of the "Group Project" grade (worth 35% of your total grade) comes from the "integration" deadline two days after the individual assignments are due. If your individual project doesn't work with the rest of the group's work, it may be considered late (burning late days and accumulating late penalties) until it does. At the integration deadline the group will turn in one (and only one!) codebase.

Details: The next three assignments in the class will follow the same pattern.  Each student must pick one project from the following categories, with the constraint that no student can pick more than one project from any category (but note that some projects fit multiple categories), and with the additional constraints noted below. If you have an idea for a project that doesn't fit into the below list, bring it up with me (soon!).

  1. Lighting effects: add some interesting lighting effects to your system:
  2. Texture effects: add texture-related effects to your system:
  3. Shaders: use Cg to implement interesting surface shaders in your engine
  4. Performance: Speed up your engine using acceleration techniques or just careful tuning.
  5. Other stuff: a catch-all final category for some of the many other things that go into a good game.

There are a few additional constraints.  Across the remaining four assignments:

  1. Every group must implement a shadow algorithm
  2. Every group must implement at least two acceleration or tuning projects from the "Performance" category.
  3. Every group must employ multitexturing at some point
  4. Two group members may not do the same project (though some projects allow for sufficient variation that they would not really be the same project. Just use common sense and check with me if you are not sure.)

 Resources: Similar list as before, with a couple new bullets.  Feel free to amplify this list by sharing your own comments and pointers on the class forum.

Also, don't forget about the optional texts for the course like the Cg Tutorial and the Game Programming Gems series!

Policy on code reuse: Same policy: 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.

Turning in the assignment: On the individual due date, you will arrange to demo your working effect or project to the TA. For the integration deadline two days later, the group should turn in a single working program that demonstrates the various features added by individuals. 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, and any code or features added that aren't specifically part of an individual assignment (I expect that during every project, there will be some effort on the general game engine that is not reflected in an individual assignment.  You will get credit for these efforts as a group, and yes, general work on the game outside of the individual assignments will benefit the group's grade as a whole). 

Each student in the group should include a separate document, e.g. README.luebke.txt, that describes in detail what you did, how you did it, what code you used from elsewhere, and how to demo your contribution in the game engine.  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.