CS 513 Real-Time Graphics
Fall 2009
TTh 9:30--10:45
Dane Smith 134
Instructor:
Joe Michael Kniss
Ferris 301G
277-2967
jmk (at) cs.unm.edu
Office Hours: TTr 2:00-4:00
It's a good idea to let me know you are coming
Info:
Official class web page:
www.cs.unm.edu/~jmk/cs513
Recommended Text
Real-Time Rendering Tomas Akenine-Moller, Eric Haines, Naty Hoffman, ISBN 978-1-56881-424-7, 3rd edition (if you have the 2nd edition, that's fine)
Order this book online
OpenGL Programming Guide 2.1 (6th edition) ARB, Shreiner, Woo, Neider, Davis, ISBN 978-0321481009
OpenGL Programming Guide 3.0 and 3.1 (7th edition) ARB, Shreiner, ISBN 978-0321552624
Note: text is not required, but recommended for the class.
Description
This course covers advanced topics in interactive and real-time
computer graphics. The focus will be on utilizing modern graphics
hardware and rendering APIs. Students should have an introductory
background in computer graphics methods, either raster graphics
(CS/ECE 412) or vector graphics (CS/ECE 413). Students should also
have some background in linear algebra and C or C++ programming
languages. Topics include GPU rendering, shadows, reflections,
procedural texture and shading, general purpose GPU computing, and
others.
Deliverables
Assignments must be delivered electronically. Only 1 late assignment
will be accepted with full credit (must be in before the next
assignment is due). Any other late assignments will incur a 10%
penalty per day. Students must solve 3-4 extra credit parts to
achieve an A in the class. Assignments should include:
- Description of files and project
- Timings and frame rates for essential algorithms
- Code that COMPILES
- Images and screen shots of results
- Well architected code with comments
Content **
- Week 1: Open GL review
- Tues, Aug 25
- Introduction
- Assignment 1: Viewer. due Sep 1
- Use OpenGL and Glut to produce a simple image viewer.
- Viewer must accept command-line parameters for size, camera, lights, etc...
- Viewer must report pixel values under mouse when image is clicked on...
- Viewer must report current state (size, camera...) in command line form
when 'C' key is pressed
- Viewer must display an image either read from file or generated by the program.
- Extra credit 1: measure speed of image updates. (how fast can images be loaded?)
- Extra credit 2: identify fastest method for image updates. (use GL extensions)
- Barycentric Coordinates and intro to lighting.
- Viewing parameters (eye, at, and up)
- Math Review
- Describe the basic properties (Associativity, Commutativity, and Distributivity) of:
- The inner (dot) product
- The outer product
- The cross product
- What other properties do these operators have?
- Thurs, Aug 27
- OpenGL basics, in only 500 slides!
- Concepts to know:
- Vertex/Fragment programs
- Frame Buffer Objects
- Vertex Arrays
- Finding Extensions
- Tues, Sep 1
- Vertex and Fragment Programs Cg Tutorial
- Frame Buffer objects FBO spec
- Assignment 2: Shadows. due Sep 8 (extended to Sep 10)
- Implement depth-buffer shadows (Shadow Maps)
- Use Vertex and Fragment programs for each stage
- Use a Framebuffer Object for depth buffer
- Scene must be animated: moving objects and light
- Scene must clearly demonstrate shadows
- Tues, Sep 8 Shadow Maps, FBO, VP, FP continued.
- Note: I have extended the Assignment 2 deadline to Sep 10. Turn it in
ontime for extra credit!
- Thurs, Sep 10. Compositing, Baking, Occluding, Reflecting, & Refracting
- Tues, Sep 15. Bumpmapping and tangent frames
- Thurs, Sep 17.
- Occlusion, reflection, refraction, bumps continued
- Assignment 3: Bumpmapping. Due Sep 24
- Implement bumpmapping for a textured object
- Generate normal map from height field image (gray scale)
- Show:
- Object shading in texture space (baking)
- Visualization of tangent frame
- Visualization of Object's original normals
- Visualization of Object's textured normals in object space
- Phong lighting of bumpmapped object
- Use an environment/cube-map to light bumpmapped object (specular & diffuse)
- Show object using single surface refraction (using cube map)
- Describe:
- How you computed the tangent frame.
- How you handle the texture seams, show artifacts before and after
- How you deal with environment mapping
- Framerates before/after bumpmapping per-light (1,2,3,... lights)
- Extra Credit Integrate shadow mapping
- Extra Credit Implement 2 surface (front/back) refraction
- Thurs Oct 1. Particle Systems
- Point Sprites
- Textures
- Opacity
- Dynamics
- Assignment 4.1 Particles due Oct 6
- Implement a basic particle system
- Must use Point Sprites
- Must implement some non-trivial dynamics (e.g. gravity)
- Must render points using vertex (point-size set in vertex program) & fragment program (render as circles)
- Extra Credit implement oriented sprites (using orientation)
- Extra Credit implement spherical sprites (using normal/bump mapping)
- Extra Credit implement "faux-perlin" noise on GPU, use texture-coordinate perturbation to add texture to sprites.
- Tues Oct 6. Bigger, Faster, Better Particles
- Vertex Buffer Objects
- Render to Vertex Array/Buffer
- Integration methods
- Assignment 4.2 Faster Particles due Oct 8
- Use Vertex Buffer Objects (VBOs) for your particles
- Implement particle update using Render to Vertex Array
- Provide timings for previous (vertex array) and new (VBO) methods
- Improve Particle "look":
- use fragment kill (cg::discard) to remove zero opacity fragments
- use additional objects in scene and correctly handle depth test with particles
- Enable blending (no sort required yet)
- Extra Credit use "depth replace" to give spherical particles correct spherical depth. Demonstrate that particle-particle intersection is improved.
- Thurs Oct 8. Sorting
- Tues Oct 20, Sorting for transparency
- Assignment 4.3 Blended Particles, due Oct 27
- Implement blending for your particles using CPU sorting
- Implement GPU-based "order-independent transparency", use your render-to-vertex-array implementation here.
- Provide runtimes for both
- Insure that particles have unique colors (randomize, or color based on position) so that correct blend order is visually obvious.
- Tues Nov 3, Real Transparency and Translucency
- Assignment 5.1 Transparent Frank, due Nov 5
- Implement transparency using "t=exp(-d*r)" where d is computed using the "thickness" of the model.
- Render a transparent frank over an image. You may ignore concavity, compute d using only front/back surfaces.
- Render frank using "translucent shadows", use transparency approach with shadow mapping. I.e. use transparency computation from light's point of view to estimate light passing through the object.
- Render frank with both, transparency over an image AND translucent shadows.
- Render frank using color specific transparency/translucency, i.e. a different "r" term for each of RGB.
- Tues Nov 10, Translucency wrapup, Volume Rendering
- Assignment 5.2 Translucent Frank, Due Nov 12
- Add blur to your translucent shadow implementation
- Bake translucent illumination into texture space
- Blur illumination in texture space using object-space distance for kernel weights
- Show results in texture space and worldspace (3D object)
- Show examples of different blur radii (different numbers of blur iterations)
- Extra Credit use a texture to modulate the blur radius; i.e. Amount of blur varies over the surface.
- Tues Nov 17, Shading and Conservation
- Assignment 5.3 Shade Frank, Due Dec 1
- Complete the shading of Frank, encorporating translucency AND surface shading
- Complete the translucent shading model to estimate the light returned to the surface facing the light
- Insure that the completed shading model conserves energy
- Report your shading equation and show that it conserves energy
- Be sure to use "unbounded light" sources and tone mapping
- Ideas for completed shading model:
- Soft Shadows
- Conservative Blinn-Phong
- A Fresnel term (rim lighting effects)
- More lights (consider colored lights, warm and cool)
- Bump mapping
- Highlight "bloom" effect
** subject to change
Resources