For the final project, you can work individually, or in teams of up to 3 people. The idea behind the final project is for you to a) explore an area of computer graphics that we have not yet covered in the previous assignments, b) to dive deeper into some of the areas we have covered, or c) to combine several previously covered topics into a larger project.
Your first order of business is to find teammates. I encourage you to work in teams so that you can tackle a larger problem together. The scope of your final project should be commensurate with the increased person-hours available for this assignment.
Once you have agreed on a team, you will need to write a short proposal here in canvas that explains what you would like to work on. This doesn't have to be long, but should articulate the topics you want to explore, and a rough set of tasks that this will involve. Try to create milestones, and explain what the division of labor will be among the team.
NOTE: When developing your project, please make sure you design it in such a way that you will have something to show for your work even if you do not attain your end goal. Do not fall victim to choosing a difficult project where it either works or doesn't, and there is no intermediate results to show along the way.
During the final exam period, you will present your project to the entire class. You can structure this however you think will be most effective for your project, but a reasonable approach would be to have a Keynote/Powerpoint presentation plus a live demo of your project.
Your final project will be graded on a number of criteria, including the quality of your presentation including properly introducing and motivating the problem, as well as the scope, difficulty and originality of your selected project. Most importantly, you need to convince me during your presentation that you have implemented your chosen task correctly. Think about ways which you can test and validate your implementation along the way, and share those validations during your presentation. The presentation and/or final report will need to make clear what was implemented by which team member.
To get you started, here are some ideas for final projects (note, not all of these alone would have sufficient scope for a final project for a group):
- Implement linear blend skinning with keyframe animation in WebGL/HTML5/Canvas. You could present the user with a graph editor to create keyframes for each DOF of the skeleton (which would be interpolated using splines), and allow previewing the animation by clicking e.g. a "play" button. For a group project additional features would need to be present such as allowing the user to specify the DOFs in the WebGL view directly by providing manipulators as in Maya.
- Create a simple interactive game using Open/WebGL/DirectX.
- Create a realtime rendering demo a la the demo scene.
- Implement more sophisticated features in your ray tracer: e.g. 4D Julia set fractals, depth-of-field, area lights.
- Investigate image-based lighting using environment maps. Capture your own environment maps.
- Generate an entire planet at arbitrary scales using procedural modeling techniques. Investigate various procedural modeling techniques for terrain, water, vegetation.
- Extend your previous assignments with NURBS curves and surfaces. Implement boundary edges and semi-sharp crease support in your Catmull-Clark subdivision surface code. Implement other subdivision surface schemes and compare.