CS 398: Introduction to Graphics Programming
Course Project: Implement an extra topic of your choice
Extras
Here is the list of extras you can choose from. Each one of them focuses on a particular theme we covered in this course, but lectures should have covered basic ideas regarding what to do for all of them.
- Implicit modeling: Implement implicit modeling techniques to define complex geometry by combining multiple implicit surfaces.
- Subdivision curves: Implement an algorithm that subdivides a curve to define a smooth curve in the limit (not parametric curves).
- Advanced shading/geometry: Implement different materials such as glossy and specular surfaces and different shapes.
- Indirect diffuse bounces: Implement the path tracing algorithm to simulate indirect diffuse bounces.
- Rigid body dynamics: Implement rigid body dynamics simulation.
- Fluid dynamics: Implement a numerical solver for the 2D Navier-Stokes Equations.
- Gradient-based image processing: Implement an algorithm that can paste a different image onto another image and blend them naturally.
- Content-aware resizing: Implement the seam curving algorithm to scale an image without distorting its content.
- GPU derivative-free optimization: Implement a GPU code that finds a set of parameters of a Gaussian mixture that best fits a given arbitrary 1D function. Demonstrate that it works correctly by fitting to another Gaussian mixture exactly.
- GPU hash table: Implement an algorithm that builds a spatial hashing table given a set of 2D points on a GPU using GLSL. Demonstrate that it works correctly by comparing it with an existing CPU implementation.
The specifications are intentionally left high-level, and their difficulties are likely not equal. While we are happy to discuss with you, it is up to you to figure out what exactly you need to do for the extra you chose, based on what you have learned in this course. We expect you can utilize GLSL and WebGL for most of the tasks, but you are free to use JavaScript unless specified. You are, however, not allowed to use any other external libraries than TWGL.
Extended README
You will need to have more detailed README
for the project than those for the assignments.
After picking which extra task you would like to complete, write the following sections in your README
:
- Statement of the nature of the project. Briefly mention what techniques will be necessary to implement your project.
- Tasks sheet containing FIVE different points upon which the achievement of the stated goals are to be judged. You think about those tasks based on the extra topic you chose and write them down here.
- Implementation section that describes some software considerations, where appropriate, about
- Algorithms, data structures, and complexities,
- Platform and system dependence or independence, global constants and configurability,
- Input/output syntax, pre- and post-processing,
- Data and code sources, the re-use and adaptation of existing code, any acknowledgment of external sources.
- Caveats, bugs, cautions, assumptions.
- List of your completed tasks.
Grading and Subjective Mark
While part of your grade will be based upon your success at reaching your goals, another part of your grade will be based upon your comprehension and good sense at setting goals that are neither too hard to be achieved nor too easy to be significant. Originality will count as well. We call it a "subjective mark".
Your project will have both an objective mark (based on the tasks you stated in your README) and a subjective mark. The weights for objective and subjective marks are to be determined based on discussion among the TAs and the instructor, but you can expect that the subjective mark to be added as a bonus to the objective mark.
The subjective mark for your project will be based upon a subjective assessment by us, the instructor and TA(s), of how your project ranked against the others submitted this term, as well as projects like yours in similar courses. The subjective mark will be assigned somewhat like the judging in Olympic figure skating (minus the bribes). Your list of objectives provides the scores for the "required elements", and our assessment provides the scores for the "individual merit". The individual merit judgment will be arrived at by considering the four components of "artistic and/or innovative content", "technical depth", "software design", and "quality of documentation". This judgment will, necessarily, be subjective, given the wide diversity of projects. We look at things like:
- Technicality: Algorithms, mathematics, physical or optical simulation, data structures
- Performance: Performance optimization of the code beyond those in the assignments
- Documentation: Quality, thoroughness, and depth of documentation
- Difficulty: This category is used to reward exceptionally difficult projects
These criteria are just examples, and they may change to suit the content mix of each term's projects. Nobody's project is expected to hit all these criteria. The TA and instructor will be as fair as possible, but standards will be high, and a "perfect subjective mark" will not be given lightly. We are looking for polish, depth, professionalism. We are trying to find the remarkable, and locate evidence of care, thought, effort, and skill that puts the project above one that just managed to get its technical objectives. For example, say two students picked up "Advanced shading", and one student implemented the simple Blinn-Phong model and the other implemented a far more complex microfacet model with proper multiple bounces (which is likely beyond what the lectures covered, so the student self-studied it by looking up other resources), we think it is fair that the second student will get more than the first student.
Submission
The submission process for this assignment is basically the same as the one for Assignment: Warm-up.
See Assignment: Warm-up for instructions about how to prepare your submission.
However, one important difference is that we ask you to additionally submit at least one screenshot.png
.
The screenshot should be of your best image of your project and it is for us to check what we see is what you intended.
You may submit additional screenshots depending on the nature of your project.
Failure to submit a screenshot may result in a penalty based on the grading policy.