CSCI 441 - Computer Graphics

Fall 2024 - FP - The Grey Havens

This assignment is due by 12/10/2024 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. Ilúvatar wants to see you one last time.

You follow the man back into the park, and he motions for you to go inside.


Part I - The Journey Home


You enter Ilúvatar'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!

Ilúvatar 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, Bézier curves, 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, billboarding, particle systems, stenciling, cloth, collision detection, 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: 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 with Bézier Curves, (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 split screen), 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!).

There must be some object in your world that travels along a Bézier curve with arc-length parameterization. As you know, curves can work very well for smooth, guided animation (objects moving along a Bézier curve make for hard targets to hit!). All curves you implement will be C0 continuous by definition, but can it be C1 continuous as well?

Mobius Strip: Additionally, what if the end of your curve is the beginning of your curve, what happens then?


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 the optional shaders potentially), and these shader programs must be meaningfully different from the code examples provided in the labs. 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/tessellation/geometry 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
Extra Credit: 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 Tuesday December 3 5:00p-6:30p. 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. To earn the achievement, submit a picture of yourself to Canvas next to your presentation.

For another smaller extra credit opportunity, if you are unable to present or choose not to then you can still earn extra credit by attending the Computer Science Fair and unlocking the Geek achievement. To earn the achievement, submit a picture of yourself to Canvas next to your favorite presentation.


Part II - Guild Teams & Proposal


Students must submit a project proposal via Canvas by November 8, 2024, 11:59 PM, 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 must describe what shaders you plan to implement and what technique the unique Vertex/Fragment shaders will 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 A4 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 11, each Team will present their final project. 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.


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:


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.
10% 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.
15% Project contains at least two different lights and materials, used as described above.
20% Project contains a meaningful use of a Bézier curve, used as described above.
30% Project contains at least two different shaders, used as described above.
2.5% Proposal submitted on time.
2.5% Submission includes source code and README.txt.
Source code is well documented. Webpage named <heroname>.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 +250 XP
Web Attribute
Web +250 XP
School's Out
School's Out
Mobius Strip
Mobius Strip
PT Barnum
PT Barnum
Geek
Geek
???
???
???
???
???
???
???
???

Submission


GROUP SUBMISSION - When you are completed with the assignment, zip together your source code and README.txt. Name the zip file, TeamName_FP.zip. Upload this file to Canvas under FP.

INDIVIDUAL SUBMISSION - Please zip up your website, name the file HeroName_FP.zip and upload to Canvas under FP Individual Website.

This assignment is due by 12/10/2024 11:59pm.