CS 315 Homework 8 - Final Project
Due Wed Dec 17 at 4:00pm
Overview
The last assignment of the semester will give you a chance to utilize the skills and concepts we've discussed throughout the semester, and to explore in more depth some of the topics we've only lightly touched on. For this assignment, you will be completing a project of your own choosing! Be creative!
This project should either:
- Apply topics from class is a new way (not previously covered by homeworks)
- Apply topics from class that have not been previously covered by homeworks
- Further explore a topic in computer graphics that has not been directly covered in class
Your project should be about the same "scope" as previous assignments (such as the Dancing Robot, Shaded Scene, or Raytracer).
In addition to your completed impementation, you will also need to include a two-page write-up detailing your project and discussing any new concepts or techniques you utilized.
Note that for this project you are welcome to work either individually or in pairs; since they have two people, pairs will be expected to create (slightly) more complex projects!
Objectives
- Apply concepts from the course in a new context
- Practice implementing a computer graphics based project from scratch
- Synthesize multiple topics from the course and/or explore a single topic in more detail
Project Ideas
Below are number of ideas for appropriate projects. You are welcome to choose one of these, or come up with your own idea. Note that in either case, you must have your project approved by the professor (see the bottom of the section).
-
Interactive Virtual World
You can take the scene you rendered for Homework 5/6 (or at least the "rendering engine") and extend it to include further interactivity. For example, you might extend the program into a game of some kind, allowing the user to walk around (move the camera) or otherwise control an avatar to explore your scene. The user should be able to interact with the scene, such as by directly selecting objects (using picking, see e.g., section 7.14 in the Angel text) or by interactive via collisions.
-
Advanced Ray Tracing
Extend your Ray Tracing engine so it supports further effects. You might add refractions in order to have transparent objects. You could add further primitive surfaces and the ability to define Constructive Solid Geometry. You could add distributed ray tracing effects, such as soft shadows, depth of field, or anti-aliasing. Note that your ray tracer will need to include multiple of these effects--two or three is a good number (depending on their complexity)
You could also modify your Ray Tracer so it supports using a Binary Space Partition to make it run much faster. If you do this, you should also find another enhancement to add to your Ray Tracer to make sure the assignment stays in scope
You should also extend the scene files (in a sensible way) so that they describe scenes that will show off your effects.
-
Graphics Card Ray Tracing
Enable your Ray Tracing to run faster by converting your code to run in GLSL. This will allow you to process rays on the GPU, letting you parallelize the process. To do this you will likely need to abandon your object-oriented approach to some extent. Also note that because ray tracing relies on the whole scene, in effect your scene will need to be stored as a
uniform
that the fragment shader can access. There may be other ways to pass in such information--for example, by buffering scene data in a texture! Further explanations may be found online. -
Graphics Demonstration "Applets"
As I've shown in class, there are currently a number of "demonstrations" of theoretical concepts (such as curves, rasterization, clipping, binary space partitions, etc) available online. However, most of these programs are written using Java. As Java is increasingly rejected by browsers for security reasons, it would be great if some of these systems were available in an HTML5 format! For this project, develop an applet (or two) that can be used to demonstrate these concepts to future students.
For example, you might make an applet demonstrating the creation and manipulation of curves. It could allow the user to create new Bezier Curves, B-Splines, and NURBS (and possibly others, such as Hermite Cuves) by clicking on particular spots to add control points. The user should be able to drag created points around (deleting points would also be helpful). Your program should support curves of any dimension--with any number of control points. For B-Splines, the user should also be able to control the knot vector in order to create non-uniform rational B-Splines. The user should be able to "scrub" through de Casteljau's algorithm to see how the curve is constructored. Being able to graph the basis functions would also be a welcome addition. For extra challenge: also support defining surfaces!
Depending on the complexity of the demo, such a project may involve either 1 or 2 applets. Check in with me about your choice! You can look at the applets linked in the lectures for examples of interfaces, as well as the numerous other applets available online. Coming up with a polished applet would be highly useful for future classes--we could even make it available online so that people outside the class may use it :)
-
Bi-Directional Reflectance Distribution Functions
Create a rendering program (either an update to your OpenGL scene or to your Ray Tracer) that supports BRDFs. This will allow you to create highly realistic looking materials. You can find example BRDF functions from the MERL Database or elsewhere online.
-
Porting GLES
Re-implement a previous OpenGL homework (such as your Scene Renderer) in a separate development environment--for example, porting to Android, iOS or full-stack OpenGL. This will involve learning about and practice using the user interface elements of your target environment. As such, you should make sure to include some level of interactivity with your OpenGL program--such as buttons, drags, zooms, etc.
-
Exploring Additional Topics
There are lots of other topics and techniques common to graphical rendering. Things like fog, hair, cloth, particle systems, photon mapping, etc. You might skim through the SIGGRAPH papers for ideas of topics (though those will be highly advanced techniques).
This is only a list of ideas I've come up with; other topics may also be acceptable--be sure and check with me!
Once you have chosen a project, you will need to get your choice approved by the professor before you begin. You should do this over email (in addition to any face-to-face check-in) so that there is a written record of what we discussed. You should do this by Monday, Dec 01 (end of the day), so that you have enough time to complete the project.
Extensions
It is possible to earn extra credit on this project (up to 25% of the project's worth) for an implementation with additional components and complexity. That is, you can mix-in an extra credit project into this homework. Check with me in advance to make sure the scoping is balanced out (and we're clear on what is part of the assignment and what is extra).
Submitting
BEFORE YOU SUBMIT: make sure your code is fully functional, but also documented and readable. Grading will be based almost entirely on functionality---I won't be able to find errors in your code, so if I can't run it, then you didn't complete it! But I will look over your code to explore your implementation, so please make sure that it is readable :)
In addition to your implemented project, you must also include a two-page write-up of your project. This write-up (similar to a README file) should do two things:
- Give a brief overview of your project. Explain what you did, how your program works, etc. Give me some context for your work.
-
Include a overview and explanation of the concepts you used in your program, particularly any new concepts. For example, if you made an Interactive Virtual World, you should include an explanation of the forms of interactivity and the controls you implemented. If you wrote a Particle System, you should include an explanation of what that is!
- This paper should basically summarize the concept, almost like a section of a textbook or an encyclopedia (that you wrote yourself, not cribbed from Wikipedia). Imagine that you are giving this project to a brand new graphics student as a demonstration of a concept--your write-up should explain the idea well enough for them to understand what your program is and how it works
- Write as if you were teaching the concept to someone else! Give as detailed an explanation as you can. This write-up should demonstrate your understanding and mastery of the topics you utilized in your application.
Upload your project AND the write-up to the Hwk8 submission folder on vhedwig.
The project is due at 4pm on Wed, Dec 17. This is the start of our final exam period--during that period, you will be showing off your project to your classmates!
Grading
As this is an open-ended project, grading will be based on a rubric:
- A: An "A" project is a fully functional system. The system is usable (has an effective interface) and runs without bugs or errors. The system clearly demonstrates the concept being explored. The system is appropriately scoped (not too small, nor too big). The system is clearly described in the write-up, and other administrative tasks (e.g., checkins) have been performed on time.
- B: A "B" project is a mostly functional system. It may have some minor bugs or errors, or a difficult to use interface. The system is still within the required scope for the assignment. The write-up of the system may be difficult to understand, and administrative tasks may have been performed late.
- C: A "C" project is only partially functional. It may have significant bugs or errors. The system may be fall below the required scope of the assignment. The write-up of the system may be missing or incomplete.
- A system that is non-functional (either due to missing implementation or errors), or is drastically below the required scope of the assignment will receive a D or lower.