Transcript 3
The Rendering Pipeline
CS 445: Introduction to Computer Graphics
David Luebke
University of Virginia
Admin
Call roll
Forums signup
Demo
Ogre
Recap
Display Technology: DMDs
Digital Micromirror Devices (projectors)
– Microelectromechanical (MEM) devices, fabricated with VLSI
techniques
Recap:
Display Technology: DMDs
DMDs are truly digital pixels
Vary grey levels by modulating pulse length
Color: multiple chips, or color-wheel
Great resolution
Very bright
Flicker problems
Display Technologies:
Organic LED Arrays
Organic Light-Emitting Diode (OLED) Arrays
– The display of the future? Many think so.
– OLEDs function like regular semiconductor LEDs
– But with thin-film polymer construction:
Thin-film deposition of organic, light-emitting molecules through vapor
sublimation in a vacuum.
Dope emissive layers with fluorescent molecules to create color.
Not grown like a crystal, no high-temperature doping
Thus, easier to create large-area OLEDs
Display Technologies:
Organic LED Arrays
OLED pros:
–
–
–
–
–
–
Transparent
Flexible
Light-emitting, and quite bright (daylight visible)
Large viewing angle
Fast (< 1 microsecond off-on-off)
Can be made large or small
Display Technologies:
Organic LED Arrays
OLED cons:
– Not quite there yet (96x64 displays) except niche markets
Cell phones (especially back display)
Car stereos
– Not very robust, display lifetime a key issue
– Currently only passive matrix displays
Passive matrix: Pixels are illuminated in scanline order (like a raster
display), but the lack of phosphorescence causes flicker
Active matrix: A polysilicate layer provides thin film transistors at each
pixel, allowing direct pixel access and constant illumination
See http://www.howstuffworks.com/lcd4.htm for more info
– Hard to compete with LCDs, a moving target
Display Technologies:
Other
Liquid Crystal On Silicon (LCOS)
– “Next big thing” for projectors
– Don’t know much about this one
E-Ink
– Tiny black-and-white spheres embedded in matrix
– Slow refresh, very high resolution
– Over 200 dpi eBook devices available now in Japan
Others…
Framebuffers
So far we’ve talked about the physical display device
How does the interface between the device and the computer’s
notion of an image look?
Framebuffer: A memory array in which the computer stores an
image
– On most computers, separate memory bank from main memory
(why?)
– Many different variations, motivated by cost of memory
Framebuffers
So far we’ve talked about the physical display device
How does the interface between the device and the computer’s
notion of an image look?
Framebuffer: A memory array in which the computer stores an
image
– On most computers, separate memory bank from main memory
(why?)
– Many different variations, motivated by cost of memory
Framebuffers: True-Color
A true-color (aka 24-bit or 32-bit) framebuffer stores one byte
each for red, green, and blue
Each pixel can thus be one of 224 colors
Pay attention to
Endian-ness
How can 24-bit
and 32-bit mean
the same thing
here?
Framebuffers: IndexedColor
An indexed-color (8-bit or PseudoColor) framebuffer stores one
byte per pixel (also: GIF image format)
This byte indexes into a color map:
How many colors
can a pixel be?
Still common on
low-end displays
(cell phones, PDAs,
GameBoys)
Cute trick:
color-map animation
Framebuffers: Hi-Color
Hi-Color was a popular PC SVGA standard
Packs pixels into 16 bits:
– 5 Red, 6 Green, 5 Blue (why would green get more?)
– Sometimes just 5,5,5
Each pixel can be one of 216 colors
Hi-color images can exhibit worse quantization artifacts than a
well-mapped 8-bit image
The Rendering Pipeline:
A Whirlwind Tour
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
The Display You Know
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
The Framebuffer You
Know
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
The Rendering Pipeline
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
2-D Rendering:
Rasterization
(Coming Soon)
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
The Rendering Pipeline:
3-D
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
The Rendering Pipeline:
3-D
Scene graph
Object geometry
Result:
Modeling
Transforms
• All vertices of scene in shared 3-D “world” coordinate system
Lighting
Calculations
• Vertices shaded according to lighting model
Viewing
Transform
• Scene vertices in 3-D “view” or “camera” coordinate system
Clipping
Projection
Transform
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
The Rendering Pipeline:
3-D
Scene graph
Object geometry
Result:
Modeling
Transforms
• All vertices of scene in shared 3-D “world” coordinate system
Lighting
Calculations
• Vertices shaded according to lighting model
Viewing
Transform
• Scene vertices in 3-D “view” or “camera” coordinate system
Clipping
Projection
Transform
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
Rendering:
Transformations
So far, discussion has been in screen space
But model is stored in model space
(a.k.a. object space or world space)
Three sets of geometric transformations:
– Modeling transforms
– Viewing transforms
– Projection transforms
Rendering:
Transformations
Modeling transforms
– Size, place, scale, and rotate objects parts of the model w.r.t. each
other
– Object coordinates world coordinates
Y
Y
X
Z
Z
X
Rendering:
Transformations
Viewing transform
– Rotate & translate the world to lie directly in front of the camera
Typically place camera at origin
Typically looking down -Z axis
– World coordinates view coordinates
Rendering:
Transformations
Projection transform
– Apply perspective foreshortening
Distant = small: the pinhole camera model
– View coordinates screen coordinates
Rendering:
Transformations
All these transformations involve shifting coordinate systems
(i.e., basis sets)
Oh yeah, that’s what matrices do…
Represent coordinates as vectors, transforms as matrices
X cos q
= q
Y sin
-sin q X
q
cos Y
Multiply matrices = concatenate transforms!
Rendering:
Transformations
Homogeneous coordinates: represent coordinates in 3
dimensions with a 4-vector
– Denoted [x, y, z, w]T
Note that w = 1 in model coordinates
– To get 3-D coordinates, divide by w:
[x’, y’, z’]T = [x/w, y/w, z/w]T
Transformations are 4x4 matrices
Why? To handle translation and projection
The Rendering Pipeline:
3-D
Scene graph
Object geometry
Result:
Modeling
Transforms
• All vertices of scene in shared 3-D “world” coordinate system
Lighting
Calculations
• Vertices shaded according to lighting model
Viewing
Transform
• Scene vertices in 3-D “view” or “camera” coordinate system
Clipping
Projection
Transform
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
Rendering: Lighting
Illuminating a scene: coloring pixels according to some
approximation of lighting
– Global illumination: solves for lighting of the whole scene at once
– Local illumination: local approximation, typically lighting each
polygon separately
Interactive graphics (e.g., hardware) does only local
illumination at run time
The Rendering Pipeline:
3-D
Scene graph
Object geometry
Result:
Modeling
Transforms
• All vertices of scene in shared 3-D “world” coordinate system
Lighting
Calculations
• Vertices shaded according to lighting model
Viewing
Transform
• Scene vertices in 3-D “view” or “camera” coordinate system
Clipping
Projection
Transform
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
Rendering: Clipping
Clipping a 3-D primitive returns its intersection with the view
frustum:
Rendering: Clipping
Clipping is tricky!
– We will have a whole assignment on clipping
Clip
In: 3 vertices
Out: 6 vertices
Clip
In: 1 polygon
Out: 2 polygons
The Rendering Pipeline:
3-D
Transform
Illuminate
Transform
Clip
Project
Rasterize
Model & Camera
Parameters
Rendering Pipeline
Framebuffer
Display
Modeling: The Basics
Common interactive 3-D primitives: points, lines, polygons
(i.e., triangles)
Organized into objects
– Collection of primitives, other objects
– Associated matrix for transformations
Instancing: using same geometry for multiple objects
– 4 wheels on a car, 2 arms on a robot
Modeling: The Scene
Graph
The scene graph captures transformations and object-object
relationships in a DAG
Nodes are objects;
Arcs indicate instancing
– Each has a matrix
Robot
Head
Mouth
Body
Eye
Leg
Trunk
Arm
Modeling: The Scene
Graph
Traverse the scene graph in depth-first order, concatenating
transformations
Maintain a matrix stack of transformations
Robot
Visited
Head
Body
Unvisited
Active
Matrix
Stack
Mouth
Eye
Leg
Foot
Trunk
Arm
Modeling: The Camera
Finally: need a model of the virtual camera
– Can be very sophisticated
Field of view, depth of field, distortion, chromatic aberration…
– Interactive graphics (OpenGL):
Camera pose: position & orientation
Captured in viewing transform (i.e., modelview matrix)
Pinhole camera model
Field of view
Aspect ratio
Near & far clipping planes
Modeling: The Camera
Camera parameters (FOV, etc) are encapsulated in a projection
matrix
– Homogeneous coordinates 4x4 matrix!
– See OpenGL Appendix F for the matrix
The projection matrix premultiplies the viewing matrix, which
premultiplies the modeling matrices
– Actually, OpenGL lumps viewing and modeling transforms into
modelview matrix