This fall weve surveyed a number of topics in computer graphics to give you a broadintroduction to the field. Now, were giving you the reins. Pick your favorite topic,do a little reading and research, and make a cool demo. In the final project you willimplement some of the advanced rendering effects and modeling techniques discussedin class, which have not previously been covered in other homework assignments,and show them off in an interesting scene. We provide a list of suggestions, but youare free to choose what scene and effects you want to implement, as long as youclear it with the TAs. We will evaluate your project based on technical and artisticmerits.

2 Requirements

Teams. We highly encourage you to work on this project in teams of two or threestudents. You may work by yourself, but it will be much easier and you will be ableto accomplish much more if you work in teams of two or three. The requirementsof this project are the same whether you work alone or in a team. Furthermore,by combining your efforts you have the opportunity to implement more advancedrendering effects and show them off in your demonstration. You can also talk throughdifficult concepts together. If you cannot find a partner the TAs will help you findone. Please make sure that you partner with someone whose schedule is compatiblewith your own. The TAs will not mediate scheduling conflicts between partners.

Project Proposals. Your group must submit a project proposal by Sunday, 11/12at 5:00pm. The proposal should be a brief description of the theme and technicalfeatures you plan to implement. Possible options for features are listed below. Alsoinclude the logins of all group members. If you have a preference for a TA you wouldlike to work with, you may also list that here (but we make no guarantees aboutthe TA you will be matched with). To hand in the proposal, run cs123_handinfinalProposal from within a directory containing a file with your proposal. Onlyone group member needs to hand in your proposal.

Late project proposals will receive no credit. You cannot use a late pass.

Mentor TAs. Your group will be assigned a mentor TA shortly after proposals arehanded in. This TA will be your go-to resource when working on your final project.

Design Checks. You should email your mentor TA once youve been assigned oneto meet for a design check. Design checks should take place by Friday, 11/18. Thiswill be an opportunity for you to discuss your ideas with the TA and get usefulfeedback.

Project Plans. After meeting with your mentor TA, your group must make adetailed plan for how you will implement the technical features in your final project.This should include:

Resources that you will use while implementing each technical feature. Thismay include SIGGRAPH papers, tutorials, or anything else you find that willbe helpful when learning about the feature and how to implement it.

General description of how each feature will be implemented. You may want toinclude pseudocode for any complicated algorithms that will be involved.

High-level overview of the flow of your final program. How will all the pieces fittogether?

Division of labor and plan of action. Who will do what? Where will you start?

The purpose of the final project plan is to ensure that each part of your project isdoable, and that you have a plan for how to implement it before you start. To handin the plan, run cs123_handin finalPlan from within a directory containing a filewith your plan. Only one group member needs to hand in your plan. Plans are dueon Saturday, 11/19 at 11:59pm.

Late project plans will receive no credit. You cannot use a late pass.

Project Status Updates. By Saturday, 12/10, you should meet with your mentorTA to show your progress on the final project. You must have some preliminaryresults to show at this meeting.

Final Deadline. The final project is due by demo day, 12/18 at 11am. Latesubmissions will not be allowed, and you cannot use a late pass on the final project.Your final presentation (more on that later) is also due at this time.

Implementation. This project must be implemented in C++ usingOpenGL/GLSL and, optionally, Qt (highly recommended!). We allow and encourageyou to re-use the code you wrote for the earlier projects in this semester, includinglabs and the support code used for each lab. You are permitted to look at code frombooks and online sources, but you may not copy others code and call it your own.You may use third party libraries if you wish, however, they must be cleared withyour mentor TA first. Keep in mind that your use of a third party library does notdecrease the amount of work we expect you to do. Using a third party to make onepart of your program easier means you must put more work into other part of yourprogram. In the end, the amount of work done by you should be the same.

1

Support Code. Optional starter code for this project will be published in/course/cs123/src/final. The starter code creates an OpenGL window with mouseand keyboard input events using Qt. Once again, feel free to augment the supportcode.

Theme. Some of the recent labs provide environment maps that give the feel ofa room or outdoor space. Your project should similarly have some sort of theme.You can create a simple environment map, or you can model an environment using3D geometry. You can also experiment with combinations of both, for example, bycreating a skybox. The theme may also provide basic interaction controls to theuser. Here are some ideas for themes:

A planet modeled using fractal terrain, with a sky box.

A museum room. Include artwork as texture maps. Include lights, benches,wood floors, rugs, doors, etc. if you wish. The user should be able to navigatethe scene and change view direction with keyboard or mouse controls.

Render a number of marbles bouncing around and bumping into each other,following the laws of physics, and casting shadows on each other and the surfacethey are on. You might want to apply a texture map to the surface and includea skybox or a fog in the distance.

Technical Features. By default, you must implement at least one technical featurecovered in prior assignments/labs and at least two features not covered in priorassignments/labs. You must also have at least one custom shader. If you want toimplement something really complicated and want to focus on that one feature, yourmentor TA can waive the requirement for a second technical feature. Here are someideas for technical features you might implement (of course, some exploration andresearch will be needed here).

Complex, procedurally modeled city or other environment (more than just abunch of cubes or other simple geometric shapes)

Lindenmayer Systems

GPU raytracing

HDR, perhaps with Bloom

Non-photorealistic rendering

Here are some examples of technical features that you have already seen in theassignments; again, this is a non-exhaustive list:

Glass, metal shaders

Texture mapping

Environment mapping, with ability to enable/disable environment map

Particle generation

Procedural geometric shapes like cone, cube, sphere, cylinder, etc.

Real-time. Your demo must run in real-time, i.e. at a minimum of 30 frames persecond on the machine you plan to present on. The machine in the presentationroom performs comparably to the Sunlab machines with NVIDIA GTX 970 GPUs.Alternatively, you may present on your laptop.

Presentation. Presentations will take place on Sunday, 12/18 at 11am in CIT368. Your team will give a brief 3 minute presentation explaining what you did andshowing your implementation to the class. You can bring your own computer andplug it into the projector, or you can use the CS machine that is attached to theprojector in the room we are using.

2

Non-Graphics Features. Although we will appreciate and enjoy any additionalfeatures you choose to add to your project, we are not requiring that you do so. Werequest that you spend any extra time that you have implementing more advancedgraphical features, rather than sound effects, music, game logic, etc.

Virtual Reality Projects. As of 2016, were allowing (some) VR projects! Thedepartment will allow a few select teams to use its HTC Vive headsets for theduration of this project. Deciding to do a VR project is a serious commitmentand will significantly increase the amount of time and effort needed to produce a

satisfactory final project. If your team would like to do a VR project, state so onyour project proposal. The project specifications are the same, but more interactivityis encouraged in order to take advantage of virtual reality. All development will stillbe in C++, OpenGL/GLSL, and Qt. Your team will have to work with the C++device API for the HTC Vive headset in order to integrate your project into virtualreality. If you end up on a VR project, you will be assigned a mentor TA who isfamiliar with virtual reality.

3 Grading

Your grade for this project will be determined by several factors.

Proposal. Did you hand in a proposal on time?

Plan. Did you hand in a detailed plan on time?

Technical excellence. How well did you accomplish what you set out to do? Isyour implementation stable (i.e. bug free and no memory leaks)? Does your projectrepresent a significant, yet reasonable extension on the topics covered in the labs andassignments? We also expect that you will do something non-trivial. Your mentorTA will be able to guide you here.

Artistic quality/creativity/theme. Does your demo look and feel cohesive? Youdont have to create a full-fledged environment, but we also wont be impressed witha single shape in the center of the screen. For example, if youre going to make anawesome shader, compliment it with a compelling environment map, like we do in thelabs. We also encourage things like nice 3D models, nice textures (consider takingdigital photographs and converting them to textures), thoughtful choice of colorsand materials, careful positioning of camera and lights, significant user interaction,etc.

Presentation. Does it look like your presentation was thrown together at thelast minute? Is your presentation sensible and well-organized? Were you able toeffectively explain your implementation in the 3 minute period?

A note about partners. By default, all members of a group will get the samegrade. If you have any problems with a teammate, you must tell us about them as

soon as the problem occurs; we will not make retroactive adjustments to grades dueto partner issues we didnt know about until the last minute.

4 Handing In

To hand in your project proposal, run cs123_handin finalProposal in the direc-tory containing your proposal file.

To hand in your project plan, run cs123_handin finalPlan in the directory con-taining your plan file.

To hand in your code, run cs123_handin final in the directory containing yourcode. If you use Qt, you should turn in a .pro file which we can use to build yourproject. Otherwise, you should turn in a Makefile. Make sure your build scripts donot contain absolute paths or we will not be able to compile your code.

Before you hand in your code, please create a README.txt file which describes howto use the program, details the design decisions you made, and identifies any bugs orknown issues. Make sure you thoroughly test and debug your program and ensurethat it does not have any memory leaks.

5 Deadlines Summary

Saturday, 11/12 at 5pm: Project proposals due.

Friday, 11/18: Meet with mentor TA for design check.

Saturday, 11/19 at 11:59pm: Project plans due.

Saturday, 12/10: Meet with mentor TA for project status updates.

Sunday, 12/18 at 11am: Final project handins due.

6 The Oh God Nothing Is Working FAQ

When programming in OpenGL, sometimes youll get a black screen. There are anumber of causes for this, including but not limited to:

To debug, try configuring your camera so you can view a single triangle inthe center of the world

Data being sent incorrectly to the GPU

You might see a black screen if your arguments in glVertexAttribPointer,glBufferData, or glDrawArrays dont match the size or organization ofyour VBO. Its also worth triple checking your uniforms. Try simplifyingby rendering a single triangle.

Lights misconfigured, or incorrect normal vectors

To debug, try setting glClearColor to any color but black. Alternatively,try having your fragment shader output a solid, bright color. Its possibleyour objects are appearing, but being shaded in all black due to issues withlighting.

General tip: if youre having troubles with complex shapes, just try drawingone triangle and see if you can get that to render, and build from there. Asalways, you can come to hours if youre really struggling and youve alreadytried all of these things.