CS 184 Administrative Details and Information

Spring 2012

Instructor: |
Ravi Ramamoorthi 525 Soda 510-643-5186 ravir@cs.berkeley.edu Office Hours: M 2-3pm, W 3-4pm in 525 Soda |

TA: | Fu-Chung Huang 547 Soda jonash@eecs.berkeley.edu Office Hours: M 12-1pm, Tu 4-5pm Sections: Tu 5-6pm, 6-7pm in 310 Soda |

TA: | Brandon Wang 651 Soda (6th Floor Alcove) brandonwang@berkeley.edu Office Hours: M 4-5pm, Th 2-3pm Sections: Tu 10-11am, 2-3pm in 405 Soda |

Questions?: | cs184@imail.eecs.berkeley.edu |

Newsgroup: | We will be using Piazza. Please
sign up
as a student: find Spring ( CS 184. More
in-depth help on using Piazza is available here. NOT Winter) 2012 |

Graphics Research: | If you're interested in graphics research at UC Berkeley more information can be found here. |

CS 184: Foundations of Computer Graphics

This course is an introduction to the foundations of 3-dimensional
computer graphics. Topics covered include 2D and 3D transformations,
interactive 3D graphics programming with OpenGL, shading and lighting
models, geometric modeling using Bézier and B-Spline curves, computer
graphics rendering including ray tracing and global illumination,
signal processing for anti-aliasing and texture mapping, and animation
and inverse kinematics. There will be an emphasis on both the
mathematical and geometric aspects of graphics, as well as the ability
to write complete 3D graphics programs. This course is offered every
semester (the instructor may vary from offering to offering, as may
the content somewhat). This semester, the enrolment can be up to 108,
and we have 4 sections * (the fourth section has been added recently,
please join or shift to it as needed) *. * A major addition to the
course this semester is the use of modern graphics programming with
OpenGL and GLSL programmable shaders for all relevant assignments. We
will discuss this more in the class, and in the specific assignments. *

This will be a hopefully fun course, but will require considerable
implementation and understanding. This is especially so, since the
required programming for some of the assignments is difficult, and since
graphics programming in general, and especially coding in OpenGL and GLSL is a
new skill. Debugging and working with graphical programs requires
substantial work, which is difficult to replace by teaching it
theoretically. * The main advice is to START EARLY on all of the
programming assignments and ask the instructor or TAs if you run into
any difficulties; we are always ready to help. * Most students should
successfully complete the assignments, and find the course very
rewarding and fun, with the ability to understand the theory behind
and implement 3D graphics programs. * Some students every year are able to
use the course as a springboard to pursue graduate study in computer graphics,
or to take up positions in the graphics industry. *

* Pre-requisites for the course: *
Solid C/C++ programming background.
Linear algebra and some basic mathematical skills. (If you only
know Java, you may want to consider using this course as an
opportunity to become familiar with C++.) Prior knowledge of computer
graphics, OpenGL or GLSL is * NOT * required.

*Note*: This is the introductory graphics course. More
advanced follow on courses (for example, CS 283 this semester and CS 294
regularly ) will generally be taught every year. Beyond this, there are a
number of other CS 28x and CS 29x courses of interest, taught by the
department, that you may consider in the next academic year, if you will
still be at Berkeley next year.

Logistics: Lectures, Assignments and Exams

* Lectures will be held MW 10:30am - 12pm in Soda 306. *

Assignments comprise six projects (plus assignment 0),
comprising primarily of programming. All
projects are due by midnight on the dates specified below, unless
explicitly stated otherwise. The first and fourth assignments should
be completed individually, and the second, third and fifth assignments that
are larger, in groups of two. For more detail, see the
assignments
page. In group assignments, you only need to hand in one
copy of the assignment. In this case, it is *your*
responsibility to make sure that you both contribute
equally. That is, we cannot accept "half" of an
assignment from you if your partner failed to do his/her part.
You can change partners between assignments 2, 3 and 5 if you want.

* Late Policy:
Your grade will be reduced 15% (of your actual score) for each 12
hours late (or 30% per day). The late deduction is a step function.
That is, you lose 15% of your score for being 1 min late or for being
11 hours 59 minutes late. You lose 30% of your score for being 12
hours and 1 minute late. After 3 days, no credit will be given. No
extensions will normally be given, unless for very compelling personal
reasons. Additionally, a stronger late policy may be followed for the
final assignments to allow for timely grading. Also, if you do want an
extension, you must ask for it as far in advance as possible, clearly
stating the reason why; we will not usually give extensions close to the
deadline or after the fact, except for clear emergencies and
unforeseeable circumstances. To avoid most of these issues, please
START EARLY!*

In addition to the programming projects, we will have a midterm and final.
The midterm will
be in class. * The final will be in exam group 7, on Tuesday May 8,
from 3-6pm. * We will go over some review questions in classes specially
designated for that purpose. Doing well on the midterm/final will require
following the material at the level of the content covered in the review
sessions, as well as a basic understanding of course material.

Programming and Collaboration Policy

Programming projects are to be implemented either individually
(assignments 1 and 4) or in groups of 2 (assignments 2,3,5) *from
scratch*, i.e., you should not derive
solutions from existing sources or previous instances of this course.
Discussion of programming projects is allowed (encouraged). Copying of
solutions or code from other students, or from students who previously
took this course is not allowed. If you do obtain substantial help
from the instructor, TA or another student, you must document this in
your program. Furthermore, you should in
general not copy code from other sources. If in doubt, please ask.
Further specifics are given in the assignment specifications.
Some assignments have skeleton code, others less so. You may feel free to
re-use code from your own
previous assignments at any time, particularly to handle
window setup and interaction.

* To repeat, you may not copy solutions or code from other students,
or students who previously took this or a similar class. You must clearly
declare any code and ideas that came directly from others, as opposed to what
you created yourself. If you fail to do so, we can only assume you are
presenting your own work. Of course, presenting other people's work as your
own is academic dishonesty. Note also that in group assignments you are
collectively responsible for your project; both you and your partner can be
held liable (just as you both receive credit for) the resulting assignment.
Students who engage in dishonest activities, with an intent to alter their
grade, will receive an F for the course and be reported to the University for
further action. *

Most of the assignments are based on OpenGL, a portable graphics library. Since everything about these assignments is portable, you can do them on any computer you want. We have tested the skeleton code on Linux and Win 32. We hope to be able to support other systems during the course, but if you go beyond these, you may be a bit more on your own in terms of logistics, sample solutions and so forth. More specifics are in the assignments. In particular, one of the initial goals is to get set up with a suitable compilation environment. If there are issues, please speak to the instructor or TA.

Grading

Your final grades will be computed by weighting the assignments tentatively as follows (instructor reserves the right to change final weighting). Two-thirds of the grade is given for the homework assignments, and one-third for the midterm and final, with the latter weighted more heavily.

HW # | Written | Programming |

0 | 10 | 10 |

1 | 0 | 40 |

2 | 0 | 70 |

3 | 0 | 75 |

Midterm | 80 | 0 |

4 | 0 | 50 |

5 | 0 | 75 |

6 | 0 | 70 |

Final | 120 | 0 |

Books

* I would first like to note that it is difficult to find a suitable
graphics textbook; they all have their disadvantages. For some (many) of the
topics, we will not be following any particular textbook. As such, it is
not strictly required that you purchase the course textbook (though we strongly
recommend you get some version of the OpenGL and GLSL books as a reference);
however, it is always useful to have a reference, and so we have nominally
listed the course textbook as required. We will also
try to refer to the relevant textbook material in the lecture
notes, or note that this material is not well covered in the book (and
make the lecture slides complete). As far as what the course tests,
and therefore what you need to focus on in the reading, it will be
based on the lecture material only. We note here some of the texts we
recommend, along with commentary on the book's suitability. *

If these books are not available in the campus bookstore or nearby
stores, they are readily available with online booksellers like
Amazon. Additionally, we will place these and other books as course
reserves at the Engineering Library. Note also that previous editions
of a textbook are generally adequate, but the chapters on this website
will generally be with respect to the latest edition.

Required: Fundamentals of Computer Graphics

by Pete Shirley and Steve Marschner (3rd edition)

This is a fairly simple text. The third edition is considerably expanded and the chapters are with respect to that. The advantage is that it is easy to follow to get some understanding of the topics. The disadvantage is that the approach and content to the various topics may not quite follow the lectures, and some topics may be treated too simply or not very well at all. Most students like this textbook, and you should consider having it. However, it may not suffice well for all the material, and we will be closely following it only in the initial stages of the course. We will try to be explicit in lecture where we are and are not following the text. If we don't follow the text, we will try to prepare some notes, give out handouts, or make the lecture slides very explicit. In general, we will cover most of the first 11 chapters, as well as some advanced material, but in many cases not quite follow the approach in the textbook.

Optional: Computer Graphics: Principles and Practiceby Foley, van Dam, Feiner and Hughes

This is widely regarded as the bible of computer graphics, and is a comprehensive text. If you have further interest in graphics, like are considering taking the more advanced courses next year, I would definitely recommend getting this. If not, I would still recommend being able to follow up in it, in case there are certain topics you want to see in more detail. The main disadvantage is the encyclopedic nature of the text, making the exposition quite complicated, that can go over the head for many students taking graphics for the first time. In many ways, the Shirley text is at the other extreme, and the course (hopefully!) tries to find a middle path.

Required: The OpenGL Programming Guide Seventh Edition (The Red Book)

by Shreiner, Woo et al.

Earlier Versions Available Online: http://www.opengl.org/documentation/red_book

This is a comprehensive tutorial on the Graphics API we will be using for most of the course. If you ever intend to write substantial graphics programs, you should have this book. If you don't buy it, you're probably going to be sharing someone else's, or trying to decipher sample code. Please note that you will be using this primarily as a reference, looking things up as and when you write code. The syllabus below refers to chapters that you will need to know, but that is more as a reference to what we will be covering. In practice, you will gain more by actually doing and looking up what you don't know, rather than just reading the red book end to end (although that's not bad either, if you have the time). Also please note that the latest edition involves many changes (as the graphics pipeline itself has evolved in recent years). We will not in general be focusing on all the new features, so an old edition is probably ok, but we will touch on some recent developments, in particular the use of programmable shaders in OpenGL.

Recommended: The OpenGL Shading Language: Second or Third Edition (The Orange Book)

by Randi Rost.

This is the standard tutorial on the GLSL programmable shading system, that we will be using throughout the course. While the basics of GLSL are covered in the red book, I would highly recommend getting the orange book for a better explanation and deeper coverage. You may be able to get both red and orange books together as a package, and could also save on costs by getting the ebooks (since you will likely use these as a reference in any case).

Optional: Real Time Rendering Third Edition

by Moller and Haines

This is the best book available on techniques for creating interactive complex renderings. It explains many of the techniques used by game creators, without focusing too much on the exact details of any one particular system ( like the "Black Art of { mac, windows, etc. } Game Programming" series of books ). This book will probably be most useful as a reference for the interactive OpenGL project. The authors of this book maintain a webpage at http://www.realtimerendering.com/ which is full of valuable information.

Optional: Computer Animation: Algorithms and Techniques

by Rick Parent

This is a useful reference for the animation lectures in the course.

Optional: An introduction to ray tracing

by Andrew Glassner

This is a useful reference for implementing the raytracer in assignment 5. Some parts of this will be handed out in class. There are many newer textbooks on ray tracing and rendering, including Glassner's encyclopedic two-volume work on Principles of Digital Image Synthesis.

In addition to the above, a number of other basic and advanced texts may be of interest for specific parts of the class, such as

- Bartels, Beatty, Barsky. An Introduction to Splines for use in Computer Graphics and Geometric Modeling.
- Cohen and Wallace. Radiosity and Realistic Image Synthesis.

Lecture schedule and assignment due dates

Broadly, the course is divided into five segments. Note that we will periodically assign lectures to reviewing problems and working out mathematical examples.

The first segment deals with the mathematics of * transformations
and viewing, * telling you how to move and scale objects to place them
correctly in the world. This is the basis for assignment 1.
The second segment describes * interactive 3D programming and shading, *
using the OpenGL graphics API and the GLSL shading language. This is the
basis for assignment 2, and the more open-ended assignment 3. The
third segment describes how to use Bezier and B-spline curves to
interpolate points and create shapes. This is the basis for
assignment 4, and is the * modeling * part of the course.
The fourth segment describes how to make images once you have a geometric model
of the world. This is known as * rendering * or creating images
of computer graphics models. It also covers the basics of writing a ray
tracer, that is an alternative to the rasterization-based approach in OpenGL.
Assignment 5 requests you to write a raytracer.
Finally, we also describe more advanced global illumination techniques in
rendering. There is no related programming project (though
this topic will be continued if you take the graduate course next
year, and you can optionally do the final project on it). The fifth segment
deals very briefly with * animation * and inverse kinematics.
The final project could be on global illumination, animation, or any of the
other topics and assignments in the course.

Readings are with respect to the Shirley text (third edition) unless otherwise noted. Note that the course (and midterms/final etc.) is based primarily on the material in lecture; we will not test you on supplementary reading material not covered in lecture. In all of the lectures, we will try to make explicit which sections of the chapters we cover, and how our coverage relates to that in the text and handouts.

** The homework will generally be due by midnight on the day
following what is listed here. Thus, Homework 0a is actually
due by 11:59 pm on Thursday, Jan 26 and so on. However, note that homework 3 is due on Monday (Mar 12) itself (not on the following day Tue). Similarly, homework 5 milestone is due on Monday (Apr 9), and the final project is
due on Monday (May 7). **

Date |
Topic |
Due | Related Reading |

Jan 18 | Overview of Computer Graphics, course | 1 | |

Jan 23 | Vectors and Linear Algebra | 2,5 | |

Jan 25 | Transformations 1 | Homework 0a | 6 |

Jan 30 | Transformations 2 | Homework 0b | 6,7.2-3, 3.5 RTR (handout) |

Feb 1 | Viewing | 3.5 RTR (handout) | |

Feb 6 | OpenGL 1 | 3, GL chapters 1,3 | |

Feb 8 | OpenGL shading | Homework 1 | 10, GL chapters 15, GLSL 2,3 |

Feb 13 | OpenGL 2 | GL pages 91-110 | |

Feb 15 | Raster Graphics, Color | 3 | |

Feb 22 | Review of Transforms | Homework 2 | |

Feb 27 | Review of OpenGL | ||

Feb 29 | Curves 1 | (Optional) handout 4-5.1,8.1-3 of CAGD | |

Mar 5 | Curves 2 | (Optional) 15, polar forms paper | |

Mar 7 | Review of curves | ||

Mar 12 | Ray Tracing Intro | 4 | |

Mar 14 | Ray Tracing Nuts and Bolts 1 | Homework 3 | Haines chapter (handout) |

Mar 19 | Midterm | ||

Mar 21 | Ray Tracing 2 + Acceleration | Homework 4 (due Sunday Mar 25) | Hanrahan chapter (handout); 12.3,4 |

Apr 2 | Signal Processing | 9 | |

Apr 4 | Signal Processing (cont'd) | FvDFH Handout | |

Apr 9 | Texture Mapping | Homework 5 milestone due Apr 9 (Mon) | 11 |

Apr 11 | Radiometry | CW 2.6.2 handout; (optional) 20 | |

Apr 16 | Review on Radiometry | ||

Apr 18 | Animation | Homework 5 | (optional) 17 |

Apr 23 | Animation (cont'd) | ||

Apr 25 | Rendering Equation | Homework 6 (due May 7 [Mon]) | Handout; (optional) 24 |

Thanks to Greg Humphreys for the original design for layout of these pages (more than 10 years ago :-)