CSCI 441 - Computer Graphics

Fall 2019 - Final Project - The Grand (Re)Opening!



Canvas | CS @ Mines | Mines | Piazza
|   Home |  Syllabus |  Assignments |  Leaderboard |  Schedule |  Resources   |
Blue Teapot2015: Asgard Green Teapot2016: Mount Olympus Red Teapot2017: Aaru Park Grey Teapot2018: Findias Speedway White Teapot2019: Hanan Pacha
E-chaski Yachachiq runa chay tariy Machu Picchu
This assignment is due by Monday, December 9, 2019 by 11:59pm.

At long last construction is done, the Interns have returned to school, and the day has arrived that the park will open. The gates are unlocked and the ticket takers are ready. You step outside and look for your family. They aren't there.

Frantically, you look around. They didn't wait two months for you in the parking lot? You've given up hope. The Man with the clipboard finds you and convinces you to come back into the park. Ra wants to see you one last time.

You follow the man back into the park and he motions for you to go in to the Temple.


Part I - Enter the Temple


You enter Sapa Inka's chambers and see your family joyfully waiting for you. You are overjoyed, your work has not been in vain. They will have the great trip you originally planned!

Sapa Inka passes you an envelope.
For your troubles.
Unsure what to expect, you open the envelope:
For this final assignment, your Team 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 an external 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, 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!), Bézier Patches, and everything else!

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 (though there is one next semester!): 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 the professor. The required components cover five major aspects that are prevalent in realtime graphics applications: (1) user interaction, (2) animation, (3) texturing, (4) lighting, (5) shader programming.


Section 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 and stenciling), or the user can have the option of switching between them.


Section B - Animation

Your project must include some component of structured animation. This means that you must use some form of hierarchical modeling (if you are using the provided Object models, then this will suffice for modeling). 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 class (i.e., must move between poses based on events in the virtual world, with speeds varying accordingly -- the Camel fully galloping would be great!).


Section 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.


Section 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.


Section 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). One of your shader programs must contain a non-trivially different vertex shader and one of your shader programs must contain a non-trivially different fragment shader. We have covered many different applications of vertex and fragment shaders - pick and choose your favorites. You're encouraged to use some multipass rendering techniques but the shader programs chosen is up to you.


Section X - Easter Eggs

For added fun, add in some sort of hidden easter egg that can be found in your program. Perhaps it's some secret combination of movements, or being in a certain location and performing some action, or whatever you want. Don't make it easy to find (e.g. a bright red X on the ground you need to move on top of) but perhaps make it easier than some of the previous achievements have been to find. For good measure, add to your README.txt how to find your easter egg if you add one so I can verify it exists. I'll try to find it without reading the walkthrough.


Section Z - Computer Science Fair
The Greatest Show On Earth!

For extra credit, and to earn the coveted P.T. Barnum achievement for additional XP, you have the opportunity to show off your amazing work to your fellow students at the Computer Science Fair on Wednesday December 4 6:30p-8p. If able to, it'd be great to show a working demo off of your laptop. If unable to, then creating a poster with screenshots and some text describing the techniques would be great. You will need to inform the instructor you plan to participate so space can be allocated. Specifics will follow.
You look back to Sapa Inka and Sapa Inka begins to take off the mask. As the mask is moved away, you get a clear look at who Sapa Inka has been this whole time.

To learn who Sapa Inka is, type your Hero's name into the box provided in UpperCamelCase and click "Unmask Sapa Ink!"



Part II - Guilds & Proposal


Students must submit a project proposal via Canvas by November 11th, 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. Describe what shaders you plan to implement, how you'll use lighting, etc. It should be clear where each requirement will be in your program. It is primarily intended for the professor to provide feedback and recommendation, and establish requirements for the final submission.


Part III - Website


Update the webpage that you submitted with A7 to include an entry for this 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. This will be a separate individual submission.


Part IV - Presentation


During the final exam slot on December 10, each Team will present their Hanan Pacha. They will have five minutes to showcase their work and demonstrate all the features available. There will then be two minutes for other students to ask questions about your implementation. During this time, the other Teams will be critiquing your presentation (by filling out a scoresheet) and at the end everyone will vote for their favorite Team that will continue development on Hanan Pacha Europe.

As with Roller Coaster Tycoon, each team can use their own laptop to present from. Be sure to have the necessary connectors to hook up to the projector in the room. If needed, please let the instructor know if you'll need to use his laptop/podium to present from.


Documentation & Submission


With this and all future assignments, you are expected 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 what 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 / email
  • Guild Name / Guild Members
  • Assignment 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 description of the file format that your program reads as input
  • NEW: A rough distribution of responsibilities / contributions of each student
  • How long did this assignment take you?
  • How much did the lab help you for this assignment? 1-10 (1 - did not help at all, 10 - this was exactly the same as the lab)
  • How fun was this assignment? 1-10 (1 - discontinue this assignment, 10 - I wish I had more time to make it even better)


Grading Rubric


Your submission will be graded according to the following rubric.

Percentage Requirement Description
10% User interactivity is well-implemented and meaningful; allows the user to explore the various aspects of the program.
15% Project contains models which are animated with some form of hierarchical animation.
10% Project contains at least two different texture applications, used as described above.
10% Project contains at least two different lights and materials, used as described above.
50% Project contains at least two different shaders, 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.


Experience Gained & Available Achievements


Assignment Attribute
Assignments +150 XP
Web Attribute
Web +150 XP
School's Out
School's Out
P.T. Barnum
P.T. Barnum


Submission


GROUP SUBMISSION - Please update your Makefile so it produces an executable with the name fp. When you are completed with the assignment, zip together your source code, Makefile, README.txt, and www/ folder. Name the zip file, TeamName_FP.zip. Upload this file to Canvas under FP.

INDIVIDUAL SUBMISSION - Please zip up your website and upload to Canvas under FP_Website.


This assignment is due by Monday, December 9, 2019 by 11:59pm.
Last Updated: 11/20/19 11:56


Valid HTML 4.01 Strict Valid CSS! Level Triple-A conformance, W3C WAI Web Content Accessibility Guidelines 2.0