Introduction to Real-Time Rendering

CS 488 F2014
When / Where: Tu+Th 11am-12:15pm / Rm 320 Stevenson Hall
Announcements / Questions: Piazza

Instructor, Dr. Angus Forbes
office: 2032 ERF, Tu+Th 1:30pm-3pm (or by appointment)

Teaching Assistant, Kyle Almryde
office: 2032 ERF, Tu+Th 3:30pm-5pm (or by appointment)


This course provides students with an introduction to the theory and practice of modern real-time graphics programming. Emphasis will be placed both on OpenGL programming (especially including GLSL shader programming) and foundational concepts related to a variety of computer graphics topics, including: 3D transformations, curves and surfaces, space partitioning, lighting, interpolation, and texturing, among others. We will read widely from both seminal work in the field of visualization as well as from recent papers published in top-tier conferences and journals (IEEE TVCG, IEEE CG&A, ACM TOG, and others). In addition to the completion of shorter assignments throughout the semester, students will be responsible for a final project that involves the creation, demonstration, and documentation of a novel real-time graphics technique. This course is co-convened: Upper-level undergraduates and graduate students are encouraged to enroll. Graduate students will be expected to complete more substantial projects and will be given more in-depth reading assignments.

Students should have: a working knowledge of C++ (or willingless to learn it); an understanding of basic data structures and algorithms; and basic proficiency in calculus and linear algebra. Please talk to me during the first week of the semester if you are concerned about having the necessary knowledge to succeed in this class.

Required Texts:
Real-Time Rendering, 3rd Edition, Alenine-Moller, Haines, and Hoffman [web]
OpenGL SuperBible, 6th Edition ("the blue book"), Sellers, Wright, and Haemel [web][code]

Recommended Text:
The OpenGL Programming Guide, 8th Edition ("the red book"), Shreiner, Sellers, Kessenich, and Licea-Kane [web][code]

Computer Requirements:
You will need access to a computer (ideally a laptop) that supports OpenGL 3.2 or higher. Please bring a laptop to Thursday's lab sessions.

Week 1+2
Topics: The rendering pipeline; how to install OpenGL, GLM, and Aluminum; introduction to GLSL programming; A refresher of martix and vector operations; 2D and 3D transformations; projection from 3D to 2D.
Reading: RTR Chp 1, 2, and 3.
Homework: Assignment 1 (due Th 8/28 at 11am)
Slides: [week1_th.pdf] [week2_tu.pdf] [week2_th.pdf]

Week 3
Topics: More GLSL programming; per-vertex and per-fragment lighting models.
Reading: RTR Chp 4 and 5.
Homework: Assignment 2 (due Wed 9/17 at 9pm)

Week 4
Topics: Designing a 6 DOF camera; simple mouse and keyboard interactions.

Week 5
Topics: Enviromental mapping; loading assets.

Week 6+7
Topics: 2D and 3D texturing; projective texturing; procedural texturing; noise functions; video textures.
Reading: RTR Chp 6.

Week 8+9
Topics: Environmental mapping; shadow mapping; image-based effects.
Reading: RTR Chp 10.
Homework: Assignment 3 (programming part due Mon 10/27 at 9pm)

Exemplary programming examples:

Landscape, by Gianluca
Cel Shader, by Francesco
Rubik's Cube, by Gianluca
Spotlight, by Massimo

Week 10
Topics: Image processing; non-photorealistic rendering.
Reading: RTR Chp 11.

Week 11
Topics: Volume rendering; Using Blender to sculpt 3D models.

Project 1: Reports due 11/11, Presentations 11/4 and 11/6

3D user interfaces, Itika, Tony, and Kshitij
Non-photorealistic rendering, Massimo and Giorgio
Bidirectional reflectance distribution functions, Gianluca, Francesco, Mattheis, and Muxuan
Particle systems, Luca and Andrea
Particle systems, take 2, Michael
Morphing, Sindhu and Rohan
Shadows, Ettore, Jed, and Lorenzo
Order independent transparency, Walter and Brian
Fluid simluation, Jenny, Dhruv, and Giancarlos

Week 12
Topic: OpenGL on mobile and web platforms; acceleration algorithms; spatial partitioning.
Reading: RTR Chp 14.
Homework: Assignment 4 (presentations due Th 12/4; write-ups due Fr 12/12)

Week 13+14
Topic: Idea generation and prototyping for final project.

Project 2: Final Projects

Non-photorealistic rendering with an ant algorithm, Massimo De Marchi and Gianluca Venturini
     [report] [video] [code] [demo]

An interactive method to control a computer animation, Andrea Piscitello and Ettore Trainiti
     [report] [video] [code] [demo]

Interactive 2D and 3D vector curves, Francesco Paduano and Lorenzo Di Tucci
     [report] [video] [code] [demo1] [demo2]

GPU-enabled sketch filters for image-based NPR rendering, Luca Buratti, Giorgio Conte, and Walter Dworak
     [report] [video] [code] [demos]

Metaball tutorial using fixed-functionality pipeline, Sindhu Kommareddy, Jed Siripun, and Jenny Sum
     [report] [video] [code]

A proximity-based augmented reality drawing tool, Anthony Perritano and Brian Herman
     [report] [video] [code]

Smoothed particle hydrodynamics demo, Matthias Untergassmair and Michael Berg
     [report] [video] [code]

Fluid simulation using the shallow water equation, Dhruv Kore and Itika Gupta
     [report] [video] [code] [demo]

Cloth simulation with discrete mass-spring and particle system, Giancarlo Gonzalez and Muxuan Wang
     [report] [video] [code]

Collision detection for deformable objects, Kshitij Gautam and Rohan Nasina
     [report] [video] [code]


Comprehensive Final Exam
Monday, December 8th from 10:30am-12:30pm

The final project will involve the creation and evaluation of a novel computer graphics technique on a topic of your choice (to be vetted by the instructor). Working in teams of two is encouraged, but it must be clear who is responsible for which aspects fo the projects; each student will be graded individually. Gradauate students are expected to produce and document a project that could conceivably be accepted as a poster (or paper) to an academic conference.

Grading will be based on your contribution to discussions and critique sessions, the thoughtful and timely completion of assignments, and especially the creation of computer graphics projects. There may also be intermittent quizzes to test your knowledge of the assigned reading materials. There will also be a comprehesive final examination. The last week of classes will be used to present final projects. The breakdown of your grades is based on four main components: short projects = 15%; quizzes & short assignments = 5%; final exam = 25%; final project = 50%. Passing the final exam is a requirement for passing the class. Some late assignments may be accepted for partial credit, up until the last day of class (12/4); missed quizzes/exams can not be made-up.

Attendance is required. Any student missing more than four classes for any reason will not pass the course. You can use these four absences as you like, for sick days, holidays, or special events observed by organized religions (for students who show affiliation with that particular religion), or those pre-approved by the UIC Dean of Students (or Dean's designee).

No social media in class; no eating in class (gum or coffee is okay); no texting or phone calls in class.

Additional Resources
Aluminum git repo on
OGLdev: Modern OpenGL Tutorials
Real-Time Rendering Resources
OpenGL 3.2 / GLSL 1.5 Reference Card
OpenGL 4.1 / GLSL 4.1 Reference Card