CSE 40166 / 60166 - Computer Graphics

|    Home  |   Syllabus  |   Assignments  |   Schedule  |   Resources   |

Final Project

This assignment is due by December 9, 2012 by 11:59pm.
Please note that December 9 is a SUNDAY.


Part I - Required Components

For this final assignment, you and a partner will implement...whatever you want! The final project for the course is an open-ended, student specified project that demonstrates skilled usage of the graphics techniques we've discussed over the course of the semester in lecture and homeworks. Most students choose to create a short interactive game, although some students write visualization tools or projects more directly related to other work (such as research). Although the constraints of the project are relatively open-ended, the project itself must contain an intelligent and meaningful application of a number of skills, described in more detail below, including animation, lighting, texturing, and shader programming.

It is recommended that you implement the configurable components of your application (objects in the scene, gameplay parameters, etc.) from file, so that you can greatly extend the usability of your program by simply providing multiple configuration files. (For a shooter, this might include a texture for a skybox, models for the enemies, health, etc.) It also allows you to more quickly experiment with different material and lighting properties - don't worry about constantly recompiling; just change a text file and re-run.

This is the final project! Feel free to use all the tools you've developed so far in the semester, including (but not limited to): minimaps, HUDs, menus, picking, billboarding, particle systems, stenciling, cloth, collision detection, and Bézier curves - which, as you know, can work very well for smooth, guided animation. (Objects moving along a Bézier curve make for hard targets to hit!)

Unfortunately, in contrast to the previous two points, there's limited time for the final project; make a plan, divide work up among your team members early and meet often, and most importantly, start simple! Get the basics working and expand from there. This is particularly true with gameplay - even simple mechanisms can be particularly bug-prone and occupy a lot of your time. Sadly this is not a game design course: your priority is incorporating the different graphical skills you've learned over the course of the semester, and making something fun and sophisticated is a secondary objective.

All projects must contain a number of required components, to demonstrate that students have learned and can apply in a practical context the main techniques that we have discussed in the course. If you have questions about whether any aspect of your project satisfies the conditions listed here, please contact Kyle or myself. The required components cover five major aspects that are prevalent in realtime graphics applications: user interaction, animation, texturing, lighting, and shader programming; plus sound additionally.


Part I.A. - User Interaction

The final project must contain some non-trivial component of user interactivity. This should be a non-issue for most projects. The user must be able to influence the state of the application via keyboard and/or mouse interaction, and must be able to influence the camera position (directly or indirectly, should the camera be attached to a virtual object). Interactivity must be more sophisticated than a single button press - as a realtime application, the resulting feedback from user interaction with your program is the primary means of communication between your virtual world and the user. Your program's ability to respond to interaction must be sophisticated enough to showcase and communicate everything that your application has to offer.

Additionally, your program must allow the user to view the scene from at least two different cameras. These could be both displayed simultaneously (via viewports), or the user can have the option of switching between them.


Part I.B. - Animation

Your project must include some component of structured animation. This means that you must use some form of hierarchical modeling, similar to the requirements of the Vehicle assignment. If you have the resources to implement pose-based animation (or skeletal animation), this will satisfy the animation requirement - but it must be more sophisticated than the back-and-forth-oscillating Waddles animation used in the previous homework assignment (i.e., must move between poses based on events in the virtual world, with speeds varying accordingly).


Part I.C. - Texturing

The final project must use at least two different texture applications in some meaningful way. This means that filtering must be enabled if it makes sense, including the use of mipmaps if the object is expected to be far from the camera. Textures can be transparent; texture coordinates can be manually specified or part of an OBJ; particle systems can (and should!) be used to satisfy one of the texture requirements. A skybox (or any environment color besides black, for that matter) can give your scene a totally different feel as well. A skybox would count as a single texture application (even though it is made up of 6 individual textures).

NOTE: in addition to textures, you should also make strong use of OpenGL materials -- you can combine a material with a high specularity and a marble texture to get a more authentic feel, for instance. In situations where a texture doesn't fit, use non-textured materials - sometimes they may look best! There are several texture repositories to browse linked on the Resource page.


Part I.D. - Lighting

Your application must include a meaningful application of lighting. It must include at least two lights, and one of them must be animated or dynamic in some way. (Light position can be tied to objects in the scene; brightness can be tied to user events such as objects colliding; color could be tied to the player's performance or health - maybe a flashing red light slowly becomes brighter as the user's health diminishes.) Remember that lights exist not only to communicate shape and depth but also contribute substantially to the feel of the scene! Experiment with light positions, colors, and intensities to get a particular look and feel. Generally, you can get good results with slightly off-white lights of complementary colors - check out COLOURlovers for some nifty color palettes, as well as tools to help you choose sets of complementary colors.


Part I.E. - Shader Programming

Your final project must contain custom shader programs to enhance the visual quality of your presentation and increase your ability to communicate information to the user. Your program must contain at least two shader programs (that is, two pairs of vertex shader + fragment shader), and these shader programs must be meaningfully different from the code examples posted on the webpage. In other words, no copy+paste of the available shader code, and your shader code must produce meaningfully different results. Your shaders can provide a large variety of interesting behaviours; by having player-characters flash a certain color when low on health, or altering the color of the rendered frame after consuming a powerup, by slightly randomizing vertex positions to create a glitchy object appearance, or through more traditional shading models, such as reading specularity color from a texture (specular mapping).


Part I.F. - Sound

Your final project must contain at least two separate sounds using OpenAL. You must use at least two separate sounds and at least one of them must be triggered to some activity. The other sound(s) may be ambient or tied to the environment. There's a lot of fun stuff that can be done with audio!

An important distinction from the midterm relates to the placement of the listener and the sources. To fully implement 3D sound, the listener should be placed with and move with the camera. The sources should then be placed around the scene (tied to an enemy location or object in the scene). This spatial relationship between the listener and the source creates 3D sound. When the listener and source are in the same space, then we are really only getting a 2D sound (though sometimes this is what we want - the character speaking or using a weapon). If any enemy fires at the hero, then the sound of the enemy firing should hint at where the enemy is located.


Part II - Proposal

Students must submit a project proposal via e-mail by November 20th, containing a list of team members and a brief description of the intended project. The description only needs to be a couple of paragraphs long, and should describe the project at a high level and anticipated technical challenges, if any. It is primarily intended for myself and Kyle to provide feedback and recommendation, and establish requirements for the final submission.


Part III - Presentation

Lastly, you and your partner will make a 10 minute presentation during the final exam time slot (Monday, December 10, 10:30am-12:30am). Presentation order will be announced at the beginning of the session. There will be a machine set up to run your project, and you will be able to describe and demonstrate your project (and maybe even call an audience member up to test it out!).

Because your presentations will be delivered on a different machine than you are testing on, PLEASE ensure that your shader programs conform to the lab machine environment; generally speaking, it is strict and unfriendly enough that any shader programs that work in that environment will work elsewhere. Additionally, please make sure that the amount that your objects move per-frame (your 'update constant') can be either globally scaled up or down, or is tied to actual elapsed time. It is likely that the demonstration machine will be faster or slower than your testing machines, and being able to change a single value to speed up or slow down your work accordingly will make adaptation much easier. Your submission will be graded on the lab machines, but you'll want your presentation to look as polished as possible.

As an alternative, if you know your submission runs on your own machine and like the performance, you may use your own machine for the presentation. We can simply hook it up to the projector. Otherwise, the presentation machine will be available.


Part IV - Website

Update the webpage that you submitted with HW7 to include an entry for this final project assignment. As usual, include a screenshot (or two) and a brief description of the program, intended to showcase what your program does to people who are not familiar with the assignment. Both you and your partner must update your webpages. You may both use the same screenshots and writeups if you wish.


Documentation

With this and all future assignments, we expect you to appropriately document your code. This includes writing comments in your source code - remember that your comments should explain what a piece of code is supposed to do and why; don't just re-write the code says in plain English. Comments serve the dual purpose of explaining your code to someone unfamiliar with it and assisting in debugging. If you know what a piece of code is supposed to be doing, you can figure out where it's going awry more easily.

Proper documentation also means including a README.txt file with your submission. In your submission folder, always include a file called README.txt that lists:
  • Your Name / netID
  • Homework Number / Project Title
  • A brief, high level description of what the program is / does
  • A usage section, explaining how to run the program, which keys perform which actions, etc.
  • Instructions on compiling your code
  • Notes about bugs, implementation details, etc. if necessary
  • NEW: A rough distribution of responsibilities / contributions of each student
Since you and a partner will be submitting the assignment together, please mention in your README.txt (1) who your partner is and (2) which of your dropboxes contains the final submission. You are both expected to create a finalProject folder in your dropboxes and include a README.txt file, although the files may be the same.


Grading Rubric

As an open-ended project, the final projects will be graded differently per-project depending on the constraints of the particular project, the number of people working on the assignment, and the degree to which each student implemented the aspects of the project that were specifically attributed to them in the README.txt files. That said, the grading will be ROUGHLY according to the following rubric:

PercentageRequirement Description
12.5%User interactivity is well-implemented and meaningful; allows the user to explore the various aspects of the program.
12.5%Project contains models which are animated with some form of hierarchical animation.
15%Project contains at least two different texture applications, used as described above.
15%Project contains at least two different lights, used as described above.
25%Project contains at least two different shaders, used as described above.
15%Project contains at least two different sounds, used as described above.
2.5%Proposal submitted on time.
2.5%Submission includes source code, Makefile, and README.txt.
Source code is well documented. Webpage named <afsid>.html submitted and updated with screenshot from latest assignment. Submission compiles and executes in the lab machine environment.


Submission

Please update your Makefile so that it produces an executable with the name finalProject. When you are completed with the assignment, submit the source code, Makefile, and READEME.txt to the following directory:

/afs/nd.edu/coursefa.12/cse/cse40166.01/dropbox/<afsid>/finalProject/

Similarly, title your webpage <afsid>.html (e.g. jpaone.html) and submit it to:

/afs/nd.edu/coursefa.12/cse/cse40166.01/dropbox/<afsid>/www/

Place any screenshots or other images used on the webpage in:

/afs/nd.edu/coursefa.12/cse/cse40166.01/dropbox/<afsid>/www/images/

This assignment is due by December 9, 2012 by 11:59pm.
Please note that December 9 is a SUNDAY.