1.  Dreamworks at RPI Nov 5 and 6

DREAMWORKS ANIMATION SKG is BACK!

DREAMWORKS ANIMATION SKG COMPANY OVERVIEW with Jim Conrads, Global Outreach Supervisor at PDI/DreamWorks Animation SKG and RPI alumnus Eli Bocek-Rivele, Lighting Technical Director for Madagascar 2

  • Open Presentation on Thursday, 11/5 at 4:00 PM in Sage 3510: Jim Conrads will give an overview of how movies are made at DreamWorks Animation SKG, and the skills and experiences necessary to work in the CG Animation field. He will show clips from some upcoming films, explain the DreamWorks Animation SKG production workflow and talk about how to present yourself in your resumes and demo reels to grab the attention of employers. He will also be showing examples of successful demo reels so you can see what will land you a job in the CG Animation, Visual Effects and Gaming industry.

The presentation is open to all students. DreamWorks Animation is particularly interested in meeting EMAC, EART, CSCI, ARCH & PDI/DIS students. Please come by for this exciting event!

For more information about DreamWorks Animation SKG, please visit http://www.dreamworksanimation.com

  • Friday, 11/6 at 1:00 PM in Sage 2202 : EMAC, EART and CSCI students are invited to hear Eli Bocek-Rivele (B.S. EMAC/CSCI and M.S. CSCI) give a special presentation entitled "What Does a Department Technical Director at DreamWorks Do?". The presentation is geared towards students in these majors who are interested in this exciting field.

2.  Course calendar

Reminder that the syllabus has a live link to the course calendar on Google at e40dor6ojh6bfjanmfnn3tj348@group.calendar.google.com. Here it is again:

3.  Next week:

  1. Tues: no lecture
  2. Wed: Kalyana talk on current GPUs in lab time
  3. Thurs: optional talk by Dreamworks
  4. Fri: optional talk by Dreamworks
  5. Fri: no 2pm lecture.

4.  Pmwiki available for student use

Anyone who'd like to use a wiki group for the term project, as I use for the class, email me. Your material will be readable only by Kalyana and me (unless you wish to open it up).

Next year I may have everyone turn in material by putting it up on separate wiki pages. Opinions?

5.  Homeworks

There will be about a dozen homeworks.

Due Questions Solution
Sep 9 Homework 1 Homework 1 Solution
Sep 16 Homework 2 Homework 2 Solution
Sep 23 Homework 3 Homework 3 Solution
Oct 2 Homework 4 Homework 4 Solution
Oct 23 Homework 5 Homework 5 Solution
Oct 30 Homework 6
Nov 6 Homework 7

6.  Lectures and labs day-by-day, Oct

No Date Summary
13 Fri Oct 2
  1. Tutorial on picking
  2. gasket3dl.c gasket3 with a display list. On my S10 netbook, it's twice as fast.
  3. pickdepth.c picking and name list.
14 Tues Oct 6 review for midterm exam
15 Wed Oct 7 Midterm exam. Midterm Solution.
Fri Oct 9 no class
16 Wed Oct 14 Lab to discuss midterm.
17 Fri Oct 16
  1. AngelCG10.ppt Geometry. Most interesting points:
    1. Points vs vectors (in this context):
      1. A point is a position.
      2. A vector is a delta, a displacement or change from one point to another.
    2. Parametric representation of line
      1. given 2 endpoints: P(t)=t A + (1-t) B
      2. given one point and the direction (tangent) P(t) = A + tD
    3. Parametric representation of plane, given 3 points: P(u,v)= A + u(B-A) + v(C-A)
    4. Parametric representations of curves and surfaces are important later.
    5. Normal to plane: N = (B-A)\times (C-A) . The length of N is probably not 1, so you'll then need to normalize it.
  2. AngelCG11.ppt Representation. Interesting points:
    1. Points in space don't need coordinates. E.g., you might name them. However, you need coordinates to work with them mathematically.
    2. You can imagine a fixed universal coordinate system.
    3. However, you can work with different coordinate systems for the same points. E.g., for an airplane:
      1. you might measure in meters from the nose with z pointing back, or
      2. in feet from the center of the wings with z pointing up, or
      3. ...
    4. You define a coordinate system by specifying (in terms of the universal coordinate system)
      1. its origin, and
      2. the directions of its 3 axes.
    5. If you know the coordinates of a point in one system, you can compute its coordinates in another.
    6. Homogeneous coordinates - big and important topic.
  3. My note on homogeneous coordinates and projections demoed by Albrecht Durer.
18 Tues Oct 20
  1. Note that term project proposal is due Fri.
  2. AngelCG12.ppt Transformations
    1. Each type of transformation is a matrix.
    2. If applying several transformations, faster to first multiply the matrices, then just multiply all the points by that one matrix.
  3. AngelCG13.ppt Transformations 2
19 Wed Oct 21 regular lecture
  1. My note on 3D rotation
    1. all rigid transformations in 3D that don't move the origin have a line of fixed points, i.e., an axis, that they rotate around.
    2. deriving the vector formula for a rotation given the axis and angle
    3. computing the matrix from a rotation axis and angle
    4. testing whether a matrix is a rotation
    5. if it is, then finding the axis and angle
  2. Bill Jacobs' OpenGL video tutorial - excellent
20 Fri Oct 23
  1. The big unsolved problems in (or using) CG (and related tech) (my view):
    1. Using CG to control complicated systems
      1. Augmented reality, haptics
    2. Using CG to understand large and complicated systems and data sets
    3. Using CG and videogame techniques to improve learning.
      1. Games force interaction, and provide small immediate rewards.
      2. It's like tossing fish to seals at Sea World.
      3. How to use those ideas for more effective teaching?
  2. (Nothing to do with CG, but very interesting): Designs, Lessons and Advice from Building Large Distributed Systems at Google
  3. AngelCG13.ppt OpenGL transformations
    1. Note that the last transformation catenated onto the current matrix is the first transformation applied to the object.
    2. (Unless I hear objections) I'll defer quaternions until later (if there's time).
    3. More info is in chapter 4.
  4. AngelCG14.ppt Model Building
    1. This topic becomes ever more important as your models get bigger.
    2. The goal is to store large models in a more organized way, and then render them with fewer function calls.
    3. We start to see the separation of geometry from topology.
    4. A goal is to represent one piece of info, such as a vertex location, only once.
    5. Another goal is to store things that change more often (geometry), separately from things that don't (topology).
  5. AngelCG15.ppt Classical viewing
    This IMHO is largely obsolete. However you should recognize the terms. ''Vanishing points'' is useful for drawing perspective objects by hand.
  6. AngelCG16.ppt Computer viewing
    1. There are utility routines to help specify the camera and projection.
    2. The big idea is view normalization or projection normalization. We want to view the object with our desired perspective projection. To do this, we transform the object into another object that looks like an amusement park fun house (all the angles and lengths are distorted). However, the default parallel projection of this normalized object gives exactly the same result as our desired perspective projection of the original object. Therefore, we can always clip against a 2x2x2 cube, and project thus: (x,y,z)->(x,y,0) etc.
      More info is in Angel, page 270 and the next slide set.
  7. Reading: Chapter 5.
21 Tues Oct 27
  1. AngelCG17.ppt Projection matrices
  2. AngelCG18.ppt Shading I
    1. The big idea is the Phong shading model.
  3. AngelCG19.ppt Shading II
    1. We start to get into OpenGL specifics.
22 Wed Oct 28 special lecture

This is not CG, but is interesting enough to go to. There will be no exam questions on this.

Dynamic Instrumentation for Application Security and Analysis

Modern applications, with dynamically-loaded modules and dynamically-generated code, are assembled at runtime. Consequently, the power and reach of static analysis tools are diminishing. In this talk, I will present DynamoRIO, a general framework for efficient, fine-grained, and comprehensive code observation and modification entirely at runtime. DynamoRIO is a flexible platform for creating dynamic tools in areas including program analysis, introspection, profiling, auditing, trace gathering, taint tracking, optimization, translation, and more. Tools built with DynamoRIO operate on unmodified application binaries on commodity hardware. I will discuss in detail several particular tools, including a system for providing strong security guarantees during program execution. Dubbed Program Shepherding, it turned into a successful, award-winning commercial security product.

Bio:
Derek Bruening leads the Advanced Development Tools team at VMware. Prior to VMware, he co-founded the security company Determina, which commercialized the Program Shepherding security system based on DynamoRIO. Determina was acquired by VMware in August 2007. Derek holds a PhD, MEng, and BS from MIT, where he was the primary author of DynamoRIO.

The DynamoRIO tool platform was first released to the public in June 2002 and has since been used by many researchers to develop systems ranging from taint tracking to prefetch optimization. DynamoRIO is now publicly available in open source form at dynamorio.org.

Host: Ana Milanova (x6887)

Wednesday, October 28, 2009
CII (LOW) 3051 - 4:00 p.m. to 5:00 p.m.

23 Fri Oct 30
  1. AngelCG20.ppt Shading in OpenGL
  2. cubeview.c. Shows smooth shading the faces of a cube, and rotating it. See Angel 5.10.
  3. sphere.c. Shows 3 modes of shading a sphere with different levels of accuracy.
  4. shadow.c. Shows how to create a shadow onto a flat surface by projecting the object onto that surface. See Angel 5.10.
  5. tutors_src.zip. Nate Robbins's light tutorial.

Reading:
# Angel 5.10, 6.

Tues Nov 3 no class
Fri Nov 6 no class
24 Tues Nov 10
25 Wed Nov 11 regular lecture
26 Fri Nov 13
27 Tues Nov 17
28 Wed Nov 18 regular lecture
29 Fri Nov 20

7.  Syllabus

8.  Interested in taking ECSE-4750 Computer Graphics?

ECSE-4750 Computer Graphics Fall 2009 will be 80% the same as in Computer Graphics Fall 2008. I may add some lectures on data visualization, since that topic is useful to many people. I am glad to talk to anyone thinking about taking this course.

Don't worry about the COCO prereq. That is merely a proxy for sufficient computer background. Get an ADD form, fill it out, pin it by my door, I'll sign it, pick it up, turn it in.

9.  Obsolescence in engineering

Engineering has many beautiful solutions that very smart people worked hard to perfect, which are now obsolete. That's Creative_destruction. Some are still in the text, such as CRTs. We'll mention them only a little, for historical context.

10.  GLUT

GLUT - The OpenGL Utility Toolkit interfaces between OpenGL and your windowing system. It adds things, such as menus, mouse and keyboard interface, that were considered too platform-dependent and too far outside OpenGL's core mission to include in OpenGL. GLUT is platform independent, but quite basic. There are several alternatives, some of which are platform dependent but more powerful. You can't always have everything at once. However GLUT is the safe solution.

11.  No Oct 9 class

There will be no class on Fri Oct 9. There will be an extra lecture in one of the lab slots, TBA.

12.  HW 1 Tips for everyone in the class

William Maio writes,

Hello Professor Franklin,

I was doing my computer graphics hw, and I found some youtube videos that teaches people how to solve the homework problems. I thought it was really useful and I thought if people can see those videos then it would save them some time. I have not really learned plane equations and line intersecting planes, so these youtube videos were very helpful.

  1. Finding the Scalar Equation of a Plane http://www.youtube.com/watch?v=ISsO9Q4UCZw
  2. Finding the Point Where a Line Intersects a Plane http://www.youtube.com/watch?v=qVvvy5hsQwk&feature=related

Thanks! /WRF

13.  Linux Compiz - OpenGL occasional problem

Compiz is an option in linux systems that adds eye candy to the display. On some systems (but not others), it causes problems with OpenGL programs. The solution is to disable compiz, such as in Preferences → Appearance → Visual effects, setting None.

https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/96991

14.  Possible terrain visibility senior project

Anthony Klinkert (Klinkert [snail] SMU [period] edu -> mailto:Klinkert [snail] SMU [period] edu) writes,

"I would like to provide you with an announcement for your advanced computer animation class seeking a student doing a senior project that might be interested in the following real-world problem. The task would be to create a computer utility that downloads Shuttle Radar Topography Mission (SRTM) terrain, adjusts the terrain for earth curvature, places and shows/visualizes candidate sites on real terrain, checks line-of-site (LOS) from one site to all other sites via great circle paths, then has an ability to accept under outside iterative program control adjustments to tower heights, and rechecking of LOS, until LOS is achieved, or a non-LOS condition exists even up to an upper limit on tower height. Basically, it accepts coordinates, and outputs a table of LOS/NLOS between one coordinate and every other coordinate. That would be the extent of the project. The student would learn a great deal about a real, growing and exciting industry problem."

Contact him with a copy to me if you're interested.

His website is http://www.klinkert.net/

15.  Science Quadrangle North

There was a question about the work. Here's Physical Plant's blog:

http://blogger.rpi.edu/plog/

16.  Graphics programming position available

Prof Brett R. Fajen, Department of Cognitive Science, is looking for one undergraduate student with C/C++ and OpenGL experience to work as a programmer in my virtual reality lab. The primary responsibility will be to write code to develop virtual environments that will be used for research on human visual perception and motor control.

The ideal candidate will have expertise in C/C++ and graphics programming, and be willing to work at least 10 hours per week throughout the semester. The position pays $12 per hour.

This is an excellent opportunity for students to develop their programming skills, gain experience working with virtual reality equipment, and learn a little about research in cognitive science.

For more information, please contact Brett Fajen (fajenb [snail] rpi [period] edu -> mailto:fajenb [snail] rpi [period] edu).

17.  Simulating 3-button mouse with 2 buttons

Sometimes you can set an option for the mouse and then press both buttons simultaneously.

18.  Lectures and labs day-by-day, Aug-Sept

No Date Summary
1 Tues Sep 1 Topics:
  1. Syllabus and Intro.
  2. AngelCG01.ppt: What is Computer Graphics?

Reading:

  1. Angel, chapter 1.

Announcements:

  1. Homework 1 available.
2 Wed Sep 2

In lab: work on homework, or go to the Carter financial talk.

3 Fri Sep 4
  1. Chapter 1. The progress of Computer Graphics is largely the progress of hardware. We'll see more of this later. However, here's an intro.
    1. What physical principles are each type of HW based on?
      1. CRT: certain rare earth materials emit photons when hit by electrons. Explaining this is what got Einstein his Nobel (not relativity).
      2. LCD: electric field causes big asymmetric molecules to untwist so that they no longer rotate polarized light passing through them.
    2. What engineering challenges required solving?
      1. Shadow-mask CRT: electron beams travel varying distances at different angles, but don't hit the wrong phosphor even as the system gets hotter. The precision is 0.1%.
      2. Hi-performance graphics requires hi bandwidth memory.
      3. Virtual reality headsets require knowing where your head is and its angle (harder).
    3. What tech advances enabled the solutions?
      1. Raster graphics requires cheap memory.
      2. LCD panels require large arrays of transistors.
  2. AngelCG02.ppt: Image Formation
  3. AngelCG03.ppt: Models and Architectures
4 Tues Sep 8 Topics:

Simple2


Simple3


Simple4


Simple5
  1. Engineering Grounded In Reality
  2. A little on API philosophy, e.g, Portability And Standards, and submarine patents.
  3. AngelCG04.ppt: Programming in OpenGL I
  4. simple2.c - simplest OpenGL program. Features:
    1. including required include file
    2. initializing OpenGL
    3. creating a top level window of default size and position
    4. setting window title
    5. defining and registering a display callback
    6. entering the main event loop
    7. clearing the frame (aka color) buffer to a default color (black)
    8. drawing a polygon with the default color (white)
    9. forcing pipeline to flush
    10. compiling and linking
  5. simple3.c - slightly bigger OpenGL program
    1. setting vertex colors and observing polygon color
    2. overlapping polygons
  6. my Makefile - YMMV

Reading:

  1. Angel, chapter 2.

Announcements:

  1. To compile the OpenGL examples in Visual C: If you get a redefinition error for exit, then do not include stdlib.h in your program. It is already included by another include file, and it lacks an inclusion guard.
  2. Homework 1 is due Wed Sep 9.
  3. Homework 2 now available, due Sep 16.
  4. simple4.c - modification created in class to add another polygon that obscures the polygons below it (this also happened with simple3).
  5. simple5.c - modification created in class to put glVertex in a for loop.
5 Wed Sep 9 chance to talk about homework, and about OpenGL and
C and C++ in Windows.
6 Fri Sep 11

Shape_test

Topics:

  1. AngelCG05.ppt: Programming in OpenGL II
  2. Demo, discuss, and modify shape_test.c. New features:
    1. OpenGL datatypes like GLfloat
    2. Allocate and enable depth (aka Z) buffer
    3. Perspective view
    4. Several utility polyhedra
      1. sphere, cone, cube, torus, dodecahedron, teapot, octahedron, icosahedron
      2. wire or solid
    5. Light source and color
    6. Enabling and disabling lighting
    7. Reshape callback
    8. Push and pop transformation matrix
    9. Rotate, scale, translate transformations
    10. Using viewport to draw into a small region of the window. Anything outside the viewport is clipped.

Reading:
Announcements:

7 Tues Sep 15

Gasket2


Gasket3

Topics:

  1. AngelCG06.ppt: Programming in OpenGL III
  2. Demo, discuss, and modify gasket2.c . Features:
    1. Array of vertices passed to glVertex2fv
    2. Array of triangles
    3. Recursively creating the graphic object
    4. glBegin and glVertex2fv are in different routines. It's the order in which they are executed that matters, not their order in the source file.
    5. Parallel (ortho) projection.
  3. Demo, discuss, and modify gasket3.c . Features:
    1. 3D.
    2. Spec colors in an array.
    3. Reshape callback. It handles rectangular windows, keeping the tetrahedra undistorted, with the same aspect ratio, centered in the window.. Portrait and landscape mode are separate cases.
    4. glPostRedisplay

Announcements:

  1. Homework 3 available, due Sep 23.
8 Wed Sep 16 Chance to talk about homework etc.
9 Fri Sep 18

Topics:

  1. AngelCG07.ppt: Input and interaction
  2. Demo, discuss, and modify alpha.c . Features:
    1. color a triangle with a partially-transparent color, which, when drawn into the color buffer, will mix (blend) with the existing color.
    2. enable blending in OpenGL.
  3. Demo, discuss, and modify paint.c . Features:
    1. keyboard callback
      1. write the key at a position stored in a global and update that
    2. mouse callback
    3. accumulating info, such as triangle vertices, from successive callbacks
    4. converting coords from what is passed to mouse callback (origin is top left corner) to what is used by openGL window (origin is bottom left corner)
    5. picking a region of window by analyzing coords of mouse click.
    6. immediate mode: on redisplay, if it's not explicitly redrawn, it's not there any more.
    7. colors as unsigned bytes.
    8. using globals to pass data to/from callback routines.
    9. menus
      1. create
      2. add entry
      3. add submenu
      4. attach to mouse button
    10. menu callback
      1. arg is the int key associated with that menu entry
    11. pushing and popping attributes
    12. writing text
      1. setting position
      2. writing char
      3. updating position by width of char
  |alpha

paint

Reading: Angel, chapter 2, excluding 2.11

10 Fri Sep 25
  1. passivemotion.c. Changes the image depending on where the mouse is, using a mouse passive motion callback.
  2. passivemotion2.c. Extends passivemotion to redraw only when something changes. This prevents the image tearing caused by redrawing during the refresh. It's also more efficient.
  3. single_double.c. Shows:
    1. The difference between single and double buffering.
    2. Creating two graphics windows in one program. Note the order:
      1. Set the display mode.
      2. Create the window.
      3. Register the callbacks.
      4. Repeat for each window.
      5. Call MainLoop.
    3. Mouse input.
    4. Changing the idle callback. The new one replaces the previous one.
  4. getinfo.c. Shows how to read information about the OpenGL version and how to get internal state variables. This also shows how to access command line arguments. This shows just a sample; there are more.
  5. showinput.c. Shows how to get input. This also shows the coordinate system used to report mouse events. Units are pixels.
       (0,0) ...... (xmax,0)
       ....
       ....
       ....
       (0,ymax).....(xmax,ymax)  
    
  6. Beyond double buffering: How to avoid tearing caused by swapping the foreground and background buffers in the middle of refreshing the image and the two buffers have different images?
    1. One solution is to wait until the vertical retrace to swap the buffers. However, if each buffer takes about 1/60 second to recompute, sometimes more and other times less, then the refresh rate will fluctuate between 1/60 and 2/60 second.
    2. Another solution is to use 3 buffers. You display from the 1st, have the 2nd ready to swap with the 1st in the next vertical retrace, and meanwhile compute into the 3rd. This uses 50% more memory.
    3. How to fight tearing
    4. OpenGL Extension WGL_I3D_swap_frame_lock
    5. Smooth Gaming with Triple Buffering
  7. AngelCG08.ppt more on callbacks

Reading: Angel, chapter 3.
Announcements:

  1. Homework 4 available, due Oct 2.
11 Tues Sep 29 Special presentation
Innovation Engineering and the Software Technology Program

Steve Linthicum, Manager
Innovation Engineering
GE Health Care IT

Rex Roeges, Technology Account Manager
Software Technology Progream
GE Health Care IT

Innovation Electric develops new products and tools for the health care environment using cutting edge technologies. The STP recruits top graduates in Computer Science and Computer Engineering for a 3-year program to develop top engineering talent in medical infomatics.

GE Health Care IT is a major application of Computer Graphics and interactive techniques, and is a major employer.

12 Wed Sep 30 regular lecture (not optional lab)
Topics:
  1. OpenGL platform dependencies:
    1. On some systems, such as my (expensive) Lenovo w700 laptop at home, both windows of single_double look the same. Presumably those systems have better graphics. They look different on the cheap Lenovo s10 laptop that I use in class.
    2. On some systems again like my w700, paint's screen does not clear when you hide and the expose the window. That is because the windowing system is storing the window's contents, so that the program does not have to redraw the window. However, I think that popping up a program menu still clears the window. Please report any counterexamples.
  2. Debugging OpenGL: The OpenGL FAQ and Troubleshooting Guide can be useful.
  3. more OpenGL reference material:
    1. I've been using the OpenGL Programming Guide, 6th edition. ($42 from Amazon. The 5th edition is online free. The differences are small. My mirror of the demo programs is Gfiles:OpenGL-1.4-ProgGuide.tgz .
    2. The OpenGL(R) SuperBible: Comprehensive Tutorial and Reference (4th Edition) ($51 from Amazon) is also excellent.
    3. So is Angel's OpenGL Tutorial, which is smaller.
  4. square2.c. Demonstrates glutMotionFunc callback. Change glutMotionFunc to glutPassiveMotionFunc to see what happens.
  5. manywindows.c. Shows that many top level windows (a new one with each left mouse click) can be dynamically created.
  6. paintxor.c modified by paint.c to write triangles into the color buffer in XOR mode. Everything else is still written in COPY mode. XOR mode is useful for cursors and rubberbanding because XORing the same object twice restores the original buffer.
  7. feedback.c. Captures drawn objects, after transforming them, into an array instead of drawing them.
  8. AngelCG09.ppt Better interactive programs. The problem is finding what in your hierarchical 3D object that's been transformed corresponds to the mouse position. This is harder because you may have a tree of objects of subobjects. Think of a fleet of cars, each with 4 wheels, each with 5 lug nuts. It's not sufficient to know that you clicked on a nut. You need to know that you clicked on nut #2 of wheel #3 of car #17. That's where the name stack comes in.