CSCI-GA.2270-001
Graduate Computer Graphics

Warren Weaver Hall
251 Mercer St, room 101
Wednesdays, 7:10pm-9:00pm

Office hours: Tuesday, 4-5pm

What we will cover:

There are many courses that can teach you how to use commercial computer graphics packages and APIs. This course, in contrast, will teach you how to build 3D computer graphics from the ground up. This will include 3D modeling, animation, and rendering. At the end of the semester you will have built your own complete working real-time 3D computer graphics systems that runs in web browsers.

What you should already know:

If you are already familiar with JavaScript, that's great. If you are already familiar with Java, C++ or any similar high level language, you will not have any trouble picking up enough JavaScript to do this course.

Since this is a graduate course, I will assume that you are already an experienced programmer. If you are not, then I do not suggest you take this course, as there will be weekly programming assignments, and you would not be able to keep up.

Computer graphics uses a lot of matrix math and some calculus. During the semester we will go over all of the matrix and vector math that you will need.

Text:

Class notes (so make sure you come to class!), will be posted on-line after each lecture.

A useful (but not required) reference: Computer Graphics: Principles and Practice (3rd Edition)

Graders:

To be announced

Discussion list:

TBA

Rough outline of possible topics (this may change):

Setting up a homepage and access to computers:

Most of you have the homepage and computers thing already figured out. But just to make sure you have at least one way to show your work on line, your NYU webpage can be activated and modified as follows:

  • Go to http://nyu.edu
  • Click on the NYUHome Login tab at the top.
  • Sign in with your NetID and Password.
  • Click on the Files tab.
  • Click on the option to activate your website, if you haven't already.
  • Click on Files 2.0 Login.
  • Log in using your password.
  • Double click on the "public" folder to enter it.
  • Download the file "index.html" to your computer.
  • Edit the file to change it.
  • Click on the upload button to replace the old index.html file by your new one.

Alternately, you can use Github, by following the instructions at:

https://help.github.com/articles/creating-project-pages-manually/

To post assignments for this class, you should set up a subdirectory of your web site. Name this subdirectory "graphics". It should have a main "index.html" file, and that file should link to the various homework assignments. After the first class, you will send the grader an email, with subject line "graphics", telling him the URL.


January 28: Introductory lecture

First we did a very brief history of computer graphics. Then we did a general overview of the course, going over the various topics we will cover this semester.

After that we discussed why, of all computer science topics, computer graphics is both the most marvelous and the most terrifying.

Videos we watched:

Assignment (due before February 5 class):

  • Send me an email at: perlin@nyu.edu
  • Put GRAPHICS in the subject line
  • Include the URL you will use for your assignments
  • Tell me what inspires you about graphics
  • Tell me what you want to get out of this class

February 4: Introduction to shaders

The course notes and homework assignment for this week's class are here.


February 11: Introduction to ray tracing

The course notes and homework assignment for this week's class are here.

At the end of class we saw Bruce Branit's video World Builder.


February 18: More ray tracing

The course notes and homework assignment for this week's class are here.

For those of you who are still struggling with how to intersect a ray with a sphere, here is shader code that I have used for that. Feel free to use it in your upcoming assignment:

   float raySphere(vec3 V, vec3 W, vec4 s) {
      float b = 2. * dot(V -= s.xyz, W);
      float c = dot(V, V) - s.w * s.w;
      float d = b * b - 4. * c;
      return d < 0. ? 1. / 0. : (-b - sqrt(d)) / 2.;
   }


February 25: Even more ray tracing

The course notes and homework assignment for this week's class are here.


March 4: Introduction to matrices

The course notes and homework assignment for this week's class are here.

We also saw the great computer animated film Ryan by Chris Landreth.


March 11: More matrices + parametric shapes

I thought I'd give you a few days to enjoy your Spring break before posting the work for next week. :-) But alas, it's time to start thinking about getting back to work.

The course notes and homework assignment for this week's class are here.

We also saw the computer animated film Carlitopolis.


March 25: Introduction to splines

The course notes and homework assignment for this week's class are here.

At the end of the class we discussed higher level approaches for animating autonomous virtual characters, and what that might mean for the future of interactive content creation.

The last few minutes we watched a memorable computer animation produced at Pacific Data Images in 1992, Gas Planet.


April 1: Introduction to WebGL

In the first hour we went through the code of an example of building and animating a 3D scene by directly using the low level WebGL API. That code is here.

In the second hour we looked at some uses of the Chalktalk interface, first to implement a simple interactive animated character, and then to walk through a interactive lesson on signal theory, showing how audio delay filters can be used to create reverberation effects.

At the end we played the video Augmented (hyper)Reality, which shows a somewhat sardonic and dystopian view of an augmented reality future.

Rather than giving new homework this week, we will use this week as a general catch-up. Feel free to continue working on any of your past assignments, and try to get up to date by next Wednesday.

Also feel free, as extra credit, to build upon the WebGL example that I showed in class, combining it with what you have learned so far this semester in modeling, rendering, splines, matrices and animation.


April 8: Introduction to three.js

We spent the entire class exploring the possibilities of three.js, first by making our own simple examples, and then by exploring a few of the many fascinating examples that have been created by others.

The course notes and homework assignment for this week's class are here.


April 15: Current research in shared Virtual Reality

I showed some of our lab's ongoing research on shared untethered virtual reality.

For homework, please formulate an idea for a final project, and email me what you are pylanning to do for your final project. It should be on a topic that you find fun and interesting and that you want to learn more about. The total amount of work should be more or less equal to about three of our weekly homework assignments.


As I said in the last class, final projects need to be finished by Wednesday, May 20. I will be submitting the grades on Friday May 22. -KP