"user manual"

"user manual"
1
CS 488/688
Winter 2006
Craig S. Kaplan, Stephen Mann
CONTENTS
2
Contents
1 Administration
9
1.1 General Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Topics Covered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Introduction
2.1 History . .
2.2 Pipeline . .
2.3 Primitives .
2.4 Algorithms
2.5 APIs . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
14
14
15
3 Devices and Device Independence
17
3.1 Calligraphic and Raster Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 How a Monitor Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Physical Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Device Interfaces
4.1 Device Input Modes . .
4.2 Application Structure .
4.3 Polling and Sampling . .
4.4 Event Queues . . . . . .
4.5 Toolkits and Callbacks .
4.6 Example for Discussion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Geometries
5.1 Vector Spaces . . . . . . . . . .
5.2 Affine Spaces . . . . . . . . . .
5.3 Euclidean Spaces . . . . . . . .
5.4 Cartesian Space . . . . . . . . .
5.5 Summary of Geometric Spaces
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Affine Geometry and Transformations
6.1 Linear Combinations . . . . . . . . . . . .
6.2 Affine Combinations . . . . . . . . . . . .
6.3 Affine Transformations . . . . . . . . . . .
6.4 Matrix Representation of Transformations
6.5 Geometric Transformations . . . . . . . .
6.6 Compositions of Transformations . . . . .
6.7 Change of Basis . . . . . . . . . . . . . . .
6.8 Ambiguity . . . . . . . . . . . . . . . . . .
6.9 3D Transformations . . . . . . . . . . . .
6.10 World and Viewing Frames . . . . . . . .
6.11 Normals . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
21
21
22
22
23
24
.
.
.
.
.
27
27
27
28
28
29
.
.
.
.
.
.
.
.
.
.
.
31
31
31
32
35
36
38
38
41
42
43
47
CONTENTS
3
7 Windows, Viewports, NDC
49
7.1 Window to Viewport Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.2 Normalized Device Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8 Clipping
53
8.1 Clipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
9 Projections and Projective Transformations
9.1 Projections . . . . . . . . . . . . . . . . . . .
9.2 Why Map Z? . . . . . . . . . . . . . . . . . .
9.3 Mapping Z . . . . . . . . . . . . . . . . . . .
9.4 3D Clipping . . . . . . . . . . . . . . . . . . .
9.5 Homogeneous Clipping . . . . . . . . . . . . .
9.6 Pinhole Camera vs. Camera vs. Perception .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
57
57
61
62
65
65
67
10 Transformation Applications and Extensions
10.1 Rendering Pipeline Revisited . . . . . . . . .
10.2 Derivation by Composition . . . . . . . . . .
10.3 3D Rotation User Interfaces . . . . . . . . . .
10.4 The Virtual Sphere . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
71
72
73
11 Polygons
11.1 Polygons – Introduction .
11.2 Polygon Clipping . . . . .
11.3 Polygon Scan Conversion
11.4 Dos and Don’ts . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
76
79
80
.
.
.
.
.
.
83
83
83
84
85
86
87
12 Hidden Surface Removal
12.1 Hidden Surface Removal .
12.2 Backface Culling . . . . .
12.3 Painter’s Algorithm . . .
12.4 Warnock’s Algorithm . . .
12.5 Z-Buffer Algorithm . . . .
12.6 Comparison of Algorithms
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13 Hierarchical Models and Transformations
89
13.1 Hierarchical Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
13.2 Hierarchical Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
14 Picking and 3D Selection
14.1 Picking and 3D Selection
97
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
15 Colour and the Human Visual System
101
15.1 Colour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
CONTENTS
4
16 Reflection and Light Source Models
16.1 Goals . . . . . . . . . . . . . . . . . . . . . . .
16.2 Lambertian Reflection . . . . . . . . . . . . . .
16.3 Attenuation . . . . . . . . . . . . . . . . . . . .
16.4 Coloured Lights, Multiple Lights, and Ambient
16.5 Specular Reflection . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
Light
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
103
. 103
. 103
. 105
. 106
. 107
17 Shading
111
17.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
17.2 Gouraud Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
17.3 Phong Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
18 Graphics Hardware
18.1 Graphics Hardware . . . . . . . .
18.2 NVIDIA Vertex Shader Assembly
18.3 High-Level Shading Languages .
18.4 Cg . . . . . . . . . . . . . . . . .
18.5 Sh . . . . . . . . . . . . . . . . .
19 Ray
19.1
19.2
19.3
19.4
19.5
19.6
19.7
19.8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
115
115
117
119
119
121
Tracing
Fundamentals . . . . . . . . . . . . .
Intersection Computations . . . . . .
Shading . . . . . . . . . . . . . . . .
Recursive Ray Tracing . . . . . . . .
Surface Information . . . . . . . . .
Modeling and CSG . . . . . . . . . .
Texture Mapping . . . . . . . . . . .
Bounding Boxes, Spatial Subdivision
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
123
123
124
127
128
129
131
133
136
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
139
139
139
140
141
20 Bidirectional Tracing
20.1 Missing Effects . . . . . .
20.2 Distribution Ray Tracing
20.3 Bidirectional Path Tracing
20.4 Photon Maps . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21 Aliasing
143
21.1 Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
22 Shadows
22.1 Overview . . . . .
22.2 Projective Shadows
22.3 Shadow Maps . . .
22.4 Shadow Volumes .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
147
147
147
148
150
23 Modeling of Natural Phenomena
155
23.1 Fractal Mountains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
23.2 L-system Plants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
23.3 Particle Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
CONTENTS
24 Radiosity
24.1 Definitions and Overview
24.2 Form Factors . . . . . . .
24.3 Progressive Refinement . .
24.4 Meshing in Radiosity . . .
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
159
. 159
. 164
. 167
. 168
25 Photon Maps
173
25.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
26 Polyhedral Data Structures
177
26.1 Storage Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
26.2 Euler’s Formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
26.3 Winged Edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
27 Splines
27.1 Constructing Curve Segments
27.2 Bernstein Polynomials . . . .
27.3 Bézier Splines . . . . . . . . .
27.4 Spline Continuity . . . . . . .
27.5 Tensor Product Patches . . .
27.6 Barycentric Coordinates . . .
27.7 Triangular Patches . . . . . .
27.8 Subdivision Surfaces . . . . .
27.9 Wavelets . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
185
185
187
188
191
195
198
200
202
205
28 Non-Photorealistic Rendering
209
28.1 2D NPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
28.2 3D NPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
29 Animation
29.1 Overview . . . . . . . . . . . . . .
29.2 Traditional 2D Cel Animation . . .
29.3 Automated Keyframing . . . . . .
29.4 Functional Animation . . . . . . .
29.5 Motion Path Animation . . . . . .
29.6 Orientation and Interpolation . . .
29.7 Quaternions . . . . . . . . . . . . .
29.8 Animating Camera Motion . . . .
29.9 Tools for Shape Animation . . . .
29.10Kinematics and Inverse Kinematics
29.11Physically-Based Animation . . . .
29.12Human Motion . . . . . . . . . . .
29.13Sensor-Actuator Networks . . . . .
29.14Morphing . . . . . . . . . . . . . .
29.15Motion Capture . . . . . . . . . . .
29.16Flocking . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
217
. 217
. 217
. 218
. 218
. 220
. 222
. 224
. 226
. 227
. 229
. 230
. 232
. 233
. 234
. 235
. 237
CONTENTS
30 Assignments
30.1 Assignment
30.2 Assignment
30.3 Assignment
30.4 Assignment
30.5 Assignment
30.6 Assignment
6
0:
1:
2:
3:
4:
5:
Introduction . . . . . . .
Introduction to OpenGL
Frames and Perspective .
Hierarchical Modelling .
A Raytracer . . . . . . .
The Project . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
239
. 239
. 239
. 240
. 241
. 242
. 243
CONTENTS
7
These notes contain the material that appears on the overhead slides (or on the computer)
shown in class. You should, however, read the course text and attend lectures to fill in the missing
details. The material in this course is organized around the assignments, with the material at the
end of the course being a sequence of topics not covered on the assignments. Some of the images
shown on the slides cannot be included in the printed course notes for copyright reasons.
The following former CS 488/688 students have images appearing in these notes:
• Eric Hall
• Ian McIntyre
• Selina Siu
• Bryan Chan
• Franke Belme
• Andrew Lau
• Jerome Carriére
• Bonnie Liu
• Zaid Mian
• Ryan Meridith-Jones
Administration
0 8
1
ADMINISTRATION
1
Administration
1.1
General Information
Instructors: Craig S. Kaplan, Stephen Mann
Electronic Resources:
Web: http://www.student.cs.uwaterloo.ca/~cs488/
Newsgroup: uw.cs.cs488
Email: [email protected]
When sending email from non-uwaterloo account,
put “CG:” in the subject
Texts:
• D. Hearn and M.P. Baker,
Computer Graphics, 3rd ed. (required)
• Course Overview and Notes (online or at Bookstore)
• OpenGL Programming Guide (optional)
Assignments:
5 Assignments (A0-A4) plus a Project (A0 is worth 0 marks).
Marking Algorithm:
Assignments: 32%; Project: 24%; Midterm: 14%; Final: 30%.
Must obtain 50% in both Programming and Exam portions to pass.
Programming Environment:
C++, OpenGL, Lua; Linux PCs.
General Comments:
A tough course: lots of work! Be committed.
If you don’t know C++, you will have major problems.
Do NOT take graphics and either real-time (CS452) or compilers (CS444).
1.2
Topics Covered
• Graphics Pipeline and Hardware
• Mathematical Foundations:
– Affine and Projective Geometry, Linear Algebra and Transformations
– Numerical Analysis and Splines
• Modelling and Data Structures
• Hidden Surface Removal
• Colour and the Human Visual System
9
Assignments
1.2 10
• Lighting and Shading
• Ray Tracing
• Global Illumination (optional; if time permits)
• Animation (optional; if time permits)
1.3
Assignments
Number: 5 Assignments (A0-A4) plus a Project (A0 worth 0 marks)
Environment: Linux PCs.
You are expected to share machines. Be nice!
Code Credit: You must request in README.
For each missed objective, in README state what is wrong and how you would attempt to fix
it, mark up printout of code.
Hand in: At start of class (first 5 minutes). NO LATES!
Hand in documentation only; code read online.
Documentation Requirements:
• Title page (with name, student ID, userid)
• Signed objective list: 10 points you are graded on; see course notes.
• README and Manual
• Annotated hardcopy (only if code broken)
• Checksum (run /u/gr/cs488/bin/grsubmit to obtain)
Assignment Format:
• Very strict!
• Read assignment policies in course notes.
• Do A0 to avoid losing marks later.
• See (and use) checklist.
Code:
• Run /u/gr/cs488/bin/setup.
• All files need to be cs488 group owned and group readable.
• See course notes for assignment specs and objectives.
2
INTRODUCTION
2
2.1
Introduction
History
A Brief History of Computer Graphics
Early 60s: Computer animations for physical simulation;
Edward Zajac displays satellite research using CG in 1961
1963: Sutherland (MIT)
Sketchpad (direct manipulation, CAD)
Calligraphic (vector) display devices
Interactive techniques
Douglas Englebart invents the mouse.
1968: Evans & Sutherland founded
1969: First SIGGRAPH
Late 60’s to late 70’s: Utah Dynasty
1970: Pierre Bézier develops Bézier curves
1971: Gouraud Shading
1972: Pong developed
1973: Westworld, The first film to use computer animation
1974: Ed Catmull develops z-buffer (Utah)
First Computer Animated Short, Hunger :
Keyframe animation and morphing
1975: Bui-Tuong Phong creates Phong Shading (Utah)
Martin Newell models a teapot with Bézier patches (Utah)
Mid 70’s: Raster graphics (Xerox PARC, Shoup)
1976: Jim Blinn develops texture and bump mapping
1977: Star Wars, CG used for Death Star plans
1979: Turner Whitted develops ray tracing
Mid 70’s - 80’s: Quest for realism
radiosity; also mainstream real-time applications.
1982: Tron, Wrath of Khan. Particle systems and obvious CG
1984: The Last Starfighter, CG replaces physical models. Early attempts at realism using CG
1986: First CG animation nominated for an Academy Award: Luxo Jr. (Pixar)
1989: Tin Toy (Pixar) wins Academy Award
11
Pipeline
2.1 12
1995: Toy Story (Pixar and Disney), the first full length fully computer-generated
3D animation
first fully 3D CG Saturday morning cartoon
Babylon 5, the first TV show to routinely use CG models
Reboot, the
late 90’s: Interactive environments, scientific and medical visualization, artistic rendering, image
based rendering, path tracing, photon maps, etc.
00’s: Real-time photorealistic rendering on consumer hardware? Interactively rendered movies?
(Readings: Watt, Preface (optional), Hearn and Baker, Chapter 1 (optional), Red book [Foley,
van Dam et al: Introduction to Computer Graphics], Chapter 1 (optional). White book [Foley, van
Dam et al: Computer Graphics: Principles and Practice, 2nd ed.], Chapter 1 (optional). )
2.2
Pipeline
We begin with a description of forward rendering, which is the kind of rendering usually supported in hardware and is the model OpenGL uses. In forward rendering, rendering primitives are
transformed, usually in a conceptual pipeline, from the model to the device.
However, raytracing, which we will consider later in the course, is a form of backward rendering. In backward rendering, we start with a point in the image and work out what model
primitives project to it.
Both approaches have advantages and disadvantages.
The Graphics Pipeline
• Rendering is the conversion of a scene into an image:
3D
Scene
Render
2D
Image
• Scenes are composed of models in three-dimensional space.
Models are composed of primitives supported by the rendering system.
• Models entered by hand or created by a program.
• The image is drawn on monitor, printed on laser printer, or written to a raster in memory or
a file.
Requires us to consider device independence.
• Classically, “model” to “scene” to “image” conversion broken into finer steps, called the
graphics pipeline.
• Parts of pipeline implemented in graphics hardware to get interactive speeds.
• Modern hardware acceleration supports programmable pipelines.
– Some of pipeline stages are programmable units
Pipeline
2.1 13
– You can implement your own lighting models or geometric transformations.
– Programmable graphics accelerator: GPU
– You have to know what you’re doing (i.e. know the math) to use a GPU!
• The basic forward projection pipeline looks like:
Model
Modelling
Transformations
Viewing
Transformations
M1
Model
3D World
Scene
M2
3D View
Scene
V
M3
Model
(VCS)
(WCS)
(MCS)
Projection
P
Clip
Rasterization
Normalize
2D/3D Device
Scene
(NDCS)
(DCS or SCS)
2D
Image
• Each stage refines the scene,
converting primitives in modelling space
to primitives in device space,
where they are converted to pixels (rasterized).
• A number of coordinate systems are used:
MCS: Modelling Coordinate System.
WCS: World Coordinate System.
VCS: Viewer Coordinate System.
NDCS: Normalized Device Coordinate System.
DCS or SCS: Device Coordinate System or equivalently the Screen Coordinate System.
Keeping these straight is the key to understanding a rendering system.
• Transformation between two coordinate systems represented with matrix.
• Derived information may be added (lighting and shading) and primitives may be removed
(hidden surface removal) or modified (clipping).
Primitives
2.2 14
(Readings: Readings: Watt, Chapter 5 introduction, 5.1. Hearn and Baker, Section 6-1 (but they
give a more detailed version than used here). Red book, 6-1, 6-6 (intro). White book, 8-3, Blinn:
16.)
2.3
Primitives
• Models are composed of/converted to geometric primitives.
• Typical rendering primitives directly supported in hardware:
– Points (single pixels)
– Line Segments
– Polygons (perhaps only convex polygons or triangles).
• Modelling primitives also include
– Piecewise polynomial (spline) curves
– Piecewise polynomial (spline) surfaces
– Implicit surfaces (quadrics, blobbies, etc)
– Other...
• Software renderer may support modelling primitives directly, or may convert them into polygonal or linear approximations for hardware rendering.
2.4
Algorithms
A number of basic algorithms are needed:
• Transformation: Convert representations of models/primitives from one coordinate system
to another.
• Clipping/Hidden Surface Removal: Remove primitives and parts of primitives that are
not visible on the display.
• Rasterization: Convert a projected screen-space primitive to a set of pixels.
Later, we will look at some more advanced algorithms:
• Picking: Select a 3D object by clicking an input device over a pixel location.
• Shading and Illumination: Simulate the interaction of light with a scene.
• Animation: Simulate movement by rendering a sequence of frames.
Devices and Device Independence
2.5
2 15
APIs
Application Programming Interfaces (APIs):
Xlib, GDI: 2D rasterization.
PostScript, PDF, SVG: 2D transformations, 2D rasterization
OpenGL, Direct3D: 3D pipeline
APIs provide access to rendering hardware via a conceptual model.
APIs hide which graphics algorithms are or are not implemented in hardware by simulating missing
pieces in software.
For interactive applications, we might modify the scene or a model directly or just the viewing
information, then regenerate the image.
Devices and Device Independence
2 16
3
DEVICES AND DEVICE INDEPENDENCE
3
3.1
17
Devices and Device Independence
Calligraphic and Raster Devices
Calligraphics and Raster Devices
Calligraphic Display Devices draw polygon and line segments directly:
• Plotters
• Direct Beam Control CRTs
• Laser Light Projection Systems
Raster Display Devices represent an image as a regular grid of samples.
• Each sample is usually called a pixel (“picture element”)
• Rendering requires rasterization algorithms to quickly determine a sampled representation of geometric primitives.
3.2
How a Monitor Works
How a CRT Works
Raster Cathode Ray Tubes (CRTs) most common display device
• Capable of high resolution.
• Good colour fidelity.
• High contrast (100:1).
• High update rates.
Electron beam scanned in regular pattern of horizontal scanlines.
Raster images stored in a frame buffer.
Frame buffers composed of VRAM (video RAM).
VRAM is dual-ported memory capable of
• Random access
• Simultaneous high-speed serial output: built-in serial shift register can output entire
scanline at high rate synchronized to pixel clock.
Intensity of electron beam modified by the pixel value.
Burst-mode DRAM replacing VRAM in many systems.
Colour CRTs have three different colours of phosphor and three independent electron guns.
Shadow Masks allow each gun to irradiate only one colour of phosphor.
Physical Devices
3.2 18
G
R
B
G
R
B
G
R
B
G
R
B
G
R
B
G
R
B
G
R
G
B
Shadow Mask
Colour is specified either
• Directly, using three independent intensity channels, or
• Indirectly, using a Colour Lookup Table (LUT).
In the latter case, a colour index is stored in the frame buffer.
Sophisticated frame buffers may allow different colour specifications for different portions of frame
buffer. Use a window identifier also stored in the frame buffer.
How Liquid Crystal Displays Work
Liquid Crystal Displays (LCDs)
• Flat panels
• Flicker free
• Decreased viewing angle
Works as follows:
• Random access to cells like memory.
• Cells contain liquid crystal molecules that align when charged.
• Unaligned molecules twist light.
• Polarizing filters allow only light through unaligned molecules.
• Subpixel colour filter masks used for RGB.
(Readings: Watt, none. Hearn and Baker, Chapter 2. Red book, Chapter 4. White book, Chapter
4.
LCD reference: http://www.cgl.uwaterloo.ca/˜pogilhul/present/lcd )
Device Interfaces
3.3
3 19
Physical Devices
Physical Devices
Physical input devices include
• Dials (Potentiometers)
• Sliders
• Pushbuttons
• Switches
• Keyboards (collections of pushbuttons called “keys”)
• Trackballs (relative motion)
• Mice (relative motion)
• Joysticks (relative motion, direction)
• Tablets (absolute position)
• Etc.
Need some abstractions to keep organized. . .
(Readings: Watt: none. Hearn and Baker, Chapter 8. Red book: 8.1. White book: 8.1. )
Device Interfaces
3 20
4
DEVICE INTERFACES
4
21
Device Interfaces
4.1
Device Input Modes
Device Input Modes
Input from devices may be managed in different ways:
Request Mode: Alternating application and device execution
• application requests input and then suspends execution;
• device wakes up, provides input and then suspends execution;
• application resumes execution, processes input.
Sample Mode: Concurrent application and device execution
• device continually updates register(s)/memory location(s);
• application may read at any time.
Event Mode: Concurrent application and device execution together with a concurrent queue
management service
• device continually offers input to the queue
• application may request selections and services from the queue
(or the queue may interrupt the application).
4.2
Application Structure
Application Structure
With respect to device input modes, applications may be structured to engage in
• requesting
• polling or sampling
• event processing
Events may or may not be interruptive.
If not interruptive, they may be read in a
• blocking
• non-blocking
fashion.
Event Queues
4.3
4.3 22
Polling and Sampling
Polling
In polling,
• Value of input device constantly checked in a tight loop
• Wait for a change in status
Generally, polling is inefficient and should be avoided, particularly in time-sharing systems.
Sampling
In sampling, value of an input device is read and then the program proceeds.
• No tight loop
• Typically used to track sequence of actions (the mouse)
4.4
Event Queues
Event Queues
• Device is monitored by an asynchronous process.
• Upon change in status of device, this process places a record into an event queue.
• Application can request read-out of queue:
– Number of events
– First waiting event
– Highest priority event
– First event of some category
– All events
• Application can also
– Specify which events should be placed in queue
– Clear and reset the queue
– Etc.
• Queue reading may be blocking or non-blocking
• Processing may be through callbacks
• Events may be processed interruptively
• Events can be associated with more than physical devices. . .
Windowing system can also generate virtual events, like “Expose”.
Toolkits and Callbacks
4.4 23
Without interrupts, the application will engage in an event loop
• not a tight loop
• a preliminary of register event actions followed by a repetition of test for event actions.
For more sophisticated queue management,
• application merely registers event-process pairs
• queue manager does all the rest
“if event E then invoke process P.”
• Events can be restricted to particular areas of the screen, based on the cursor position.
• Events can be very general or specific:
– A mouse button or keyboard key is depressed.
– The cursor enters a window.
– The cursor has moved more than a certain amount.
– An Expose event is triggered under X when a window becomes visible.
– A Configure event is triggered when a window is resized.
– A timer event may occur after a certain interval.
• Simple event queues just record a code for event (Iris GL).
• Better event queues record extra information such as time stamps
(X windows).
4.5
Toolkits and Callbacks
Toolkits and Callbacks
Event-loop processing can be generalized:
• Instead of switch, use table lookup.
• Each table entry associates an event with a callback function.
• When event occurs, corresponding callback is invoked.
• Provide an API to make and delete table entries.
• Divide screen into parcels, and assign different callbacks to different parcels (X Windows does
this).
• Event manager does most or all of the administration.
Modular UI functionality is provided through a set of widgets:
Example for Discussion
4.5 24
• Widgets are parcels of the screen that can respond to events.
Graphical representation that suggests function.
• Widgets may respond to events with a change in appearance, as well as issuing callbacks.
• Widgets are arranged in a parent/child hierarchy.
– Event-process definition for parent may apply to child, and child may add additional
event-process definitions
– Event-process definition for parent may be redefined within child
• Widgets may have multiple parts, and in fact may be composed of other widgets in a hierarchy.
Some UI toolkits:
• Tk
• Tkinter
• Motif
• Gtk
• Qt
• WxWindows
• FLTK
• AWT
• Swing
• XUL
• ...
UI toolkits recommended for projects: Gtkmm, GLUT, SDL.
4.6
Example for Discussion
Example for Discussion
#include <gtkmm.h>
#include <iostream>
void test() { std::cout << "Hello, World!" << std::endl; }
int main( int argc, char *argv[] ) {
Gtk::Main kit( argc, argv );
Gtk::Window hw;
hw.set_border_width( 10 );
Gtk::Button b( "Click me" );
Geometries
b.signal_clicked().connect( &test );
hw.add( b );
b.show();
Gtk::Main::run( hw );
}
1. Where is the definition of the event?
2. What constitutes the event?
3. What process is associated with the event?
4. Who manages the event loop?
4 25
Geometries
4 26
5
GEOMETRIES
5
27
Geometries
5.1
Vector Spaces
Vector Spaces
Definition:
• Set of vectors V.
• Two operations. For ~v , ~u ∈ V:
Addition: ~u + ~v ∈ V.
Scalar multiplication: α~u ∈ V, where α is a member of some field F, (i.e. R).
Axioms:
Addition Commutes: ~u + ~v = ~v + ~u.
Addition Associates: (~u + ~v ) + w
~ = ~u + (~v + w).
~
Scalar Multiplication Distributes: α(~u + ~v ) = α~u + α~v .
Unique Zero Element: ~0 + ~u = ~u.
Field Unit Element: 1~u = ~u.
Span:
• Suppose B = {~v1 , ~v2 , . . . , ~vn }.
P
• B spans V iff any ~v ∈ V can be written as ~v = ni=1 αi~vi .
Pn
•
vi is a linear combination of the vectors in B.
i=1 αi~
Basis:
• Any minimal spanning set is a basis.
• All bases are the same size.
Dimension:
• The number of vectors in any basis.
• We will work in 2 and 3 dimensional spaces.
5.2
Affine Spaces
Affine Space
Definition: Set of Vectors V and a Set of Points P
• Vectors V form a vector space.
• Points can be combined with vectors to make new points:
P + ~v ⇒ Q with P, Q ∈ P and ~v ∈ V.
Frame: An affine extension of a basis:
Requires a vector basis plus a point O (the origin):
F = (~v1 , ~v2 , . . . , ~vn , O)
Dimension: The dimension of an affine space is the same as that of V.
Cartesian Space
5.3
5.3 28
Euclidean Spaces
Euclidean Spaces
Metric Space: Any space with a distance metric d(P, Q) defined on its elements.
Distance Metric:
• Metric d(P, Q) must satisfy the following axioms:
1.
2.
3.
4.
d(P, Q) ≥ 0
d(P, Q) = 0 iff P = Q.
d(P, Q) = d(Q, P ).
d(P, Q) ≤ d(P, R) + d(R, Q).
• Distance is intrinsic to the space, and not a property of the frame.
Euclidean Space: Metric is based on a dot (inner) product:
d2 (P, Q) = (P − Q) · (P − Q)
Dot product:
(~u + ~v ) · w
~ = ~u · w
~ + ~v · w,
~
α(~u · ~v ) = (α~u) · ~v
= ~u · (α~v )
~u · ~v = ~v · ~u.
Norm:
|~u| =
√
~u · ~u.
Angles:
cos(∠~u~v ) =
~u · ~v
|~u||~v |
Perpendicularity:
~u · ~v = 0 ⇒ ~u ⊥ ~v
Perpendicularity is not an affine concept! There is no notion of angles in affine space.
5.4
Cartesian Space
Cartesian Space
Cartesian Space: A Euclidean space with an standard orthonormal frame (~ı, ~, ~k, O).
Orthogonal: ~ı · ~ = ~ · ~k = ~k ·~ı = 0.
Normal: |~ı| = |~| = |~k| = 1.
Notation: Specify the Standard Frame as FS = (~ı, ~, ~k, O).
As defined previously, points and vectors are
Summary of Geometric Spaces
5.4 29
• Different objects.
• Have different operations.
• Behave differently under transformation.
Coordinates: Use an “an extra coordinate”:
• 0 for vectors: ~v = (vx , vy , vz , 0) means ~v = vx~ı + vy~ + vz~k.
• 1 for points: P = (px , py , pz , 1) means P = px~i + py~j + pz~k + O.
• Later we’ll see other ways to view the fourth coordinate.
• Coordinates have no meaning without an associated frame!
– Sometimes we’ll omit the extra coordinate . . .
point or vector by context.
– Sometimes we may not state the frame . . .
the Standard Frame is assumed.
5.5
Summary of Geometric Spaces
Space
Vector Space
Affine Space
Euclidean Space
Objects
Vector
Vector, Point
Vector Point
Cartesian Space
Vector, Point,
O.N. Frame
Operators
~u + ~v , α~v
~u + ~v , α~v , P + ~v
~u + ~v , α~v , P + ~v , ~u · ~v , Question: where does the cross
d(P, Q)
~u + ~v , α~v , P + ~v , ~u · ~v ,
d(P, Q), ~i, ~j, ~k, O
product enter?
(Readings: Watt: 1.1, 1.2. White book: Appendix A. Hearn and Baker: A-2, A-3. )
Affine Geometry and Transformations
5 30
6
AFFINE GEOMETRY AND TRANSFORMATIONS
6
6.1
31
Affine Geometry and Transformations
Linear Combinations
Linear Combinations
Vectors:
V = {~u},
~u + ~v ,
α~u
By Extension:
X
αi ~ui (no restriction on αi )
i
Linear Transformations:
T (~u + ~v ) = T (~u) + T (~v ),
T (α~u) = αT (~u)
By Extension:
X
X
T(
αi ~ui ) =
αi T (~ui )
i
i
Points:
P = {P },
P + ~u = Q
By Extension...
6.2
Affine Combinations
Affine Combinations
Define Point Subtraction:
Q − P means ~v ∈ V such that Q = P + ~v for P, Q ∈ P.
By Extension:
X
αi Pi is a vector iff
X
αi = 0
Define Point Blending:
Q = (1 − a)Q1 + aQ2 means Q = Q1 + a(Q2 − Q1 ) with Q ∈ P
Alternatively:
we may write Q = a1 Q1 + a2 Q2 where a1 + a2 = 1.
By Extension:
X
ai Pi is a point iff
X
ai = 1
Geometrically:
• The following ratio holds for Q = a1 Q1 + a2 Q2
|Q − Q1 |
a2
=
|Q − Q2 |
a1
(a1 + a2 = 1)
Affine Transformations
6.2 32
a1
Q2
a2
Q
Q1
• If Q breaks the line segment Q1 Q2 into the ratio b2 : b1 then
Q=
b1 Q1 + b2 Q2
b1 + b 2
(b1 + b2 6= 0)
Legal vector combinations:
P
Vectors can be formed into any combinations i αi ~ui (a “linear combination”).
Legal point combinations:
P
Points can be formed into combinations i ai Pi iff
• The coefficients sum to 1: The result is a point
(an “affine combination”).
• The coefficients sum to 0: The result is a vector
(a “vector combination”).
Parametric Line Equation:
has geometric meaning (in an affine sense):
L(t) = A + t(B − A)
= (1 − t)A + tB
The weights t and (1 − t) create an affine combination.
The result is a point (on the line).
Parametric Ray Equation:
Same as above, but t ≥ 0. Will write as
R(t) = A + td~
Where A is the point of origin and d~ is the direction of the ray. Used in ray-tracing.
(Readings: White book, Appendix A)
6.3
Affine Transformations
Affine Transformations
Let T : A1 7−→ A2 , where A1 and A2 are affine spaces.
Then T is said to be an affine transformation if:
• T maps vectors to vectors and points to points
Affine Transformations
6.2 33
• T is a linear transformation on the vectors
• T (P + ~u) = T (P ) + T (~u)
By Extension:
T preserves affine combinations on the points:
T (a1 Q1 + · · · + an Qn ) = a1 T (Q1 ) + · · · + an T (Qn ),
P
If P ai = 1, result is a point.
If
ai = 0, result is a vector.
Observations:
• Affine transformations map lines to lines:
T ((1 − t)P0 + tP1 ) = (1 − t)T (P0 ) + tT (P1 )
• Affine transformations map rays to rays:
~ = T (A) + tT (d)
~
T (A + td)
• Affine transformations preserve ratios of distance along a line
(converse is also true: preserves ratios of such distances ⇒ affine).
• Absolute distances or angles may not be preserved.
Absolute distances and angles are not affine concepts. . .
Examples:
•
•
•
•
•
translations
rotations
scales
shears
reflections
Translations and rotations called rigid body motions.
Affine vs Linear
Which is a larger class of transformations: Affine or Linear?
• All affine transformations are linear transformations on vectors.
• Consider identity transformation on vectors.
There is one such linear transformation.
• Consider Translations:
– Identity transformation on vectors
– Infinite number different ones (based on effect on points)
Thus, there are an infinite number of affine transformations that are identity transformation
on vectors.
• What makes affine transformations a bigger class than linear transformation is their translational behaviour on points.
Affine Transformations
6.2 34
Extending Affine Transformations to Vectors
Suppose we only have T defined on points.
Define T (~v ) as follows:
• There exist points Q and R such that ~v = Q − R.
• Define T (~v ) to be T (Q) − T (R).
Note that Q and R are not unique.
The definition works for P + ~v :
T (P + ~v ) = T (P + Q − R)
= T (P ) + T (Q) − T (R)
= T (P ) + T (~v )
Can now show that the definition is well defined.
Theorem: Affine transformations map parallel lines to parallel lines.
Mapping Through an Affine Transformation
Need to pick a numerical representation; use coordinates:
Let A and B be affine spaces.
• Let T : A 7→ B be an affine transformation.
• Let FA = (~v1 , ~v2 , OV ) be a frame for A.
• Let FB = (w
~ 1, w
~ 2 , OW ) be a frame for B.
• Let P be a point in A whose coordinates relative FA are (p1 , p2 , 1).
(P = p1~v1 + p2~v2 + 1OV )
OV and OW are called the origins of their respective frames.
Question: What are the coordinates (p01 , p02 , 1) of T (P ) relative to the frame FB ?
Fact: An affine transformation is completely characterized by the image of a frame in the domain:
T (P ) = T (p1~v1 + p2~v2 + OV )
= p1 T (~v1 ) + p2 T (~v2 ) + T (OV ).
If
T (~v1 ) = t1,1 w
~ 1 + t2,1 w
~2
T (~v2 ) = t1,2 w
~ 1 + t2,2 w
~2
T (OV ) = t1,3 w
~ 1 + t2,3 w
~ 2 + OW
then we can find (p01 , p02 , 1) by substitution and gathering like terms.
Matrix Representation of Transformations
6.3 35
B
Α
T
w2
OB w
1
v2
T(v2)
OA v1
T(OA) T(v )
1
(Readings: White book, Appendix A)
6.4
Matrix Representation of Transformations
Matrix Representation of Transformations
Represent points and vectors as n × 1 matrices. In 2D,


p1
P ≡ p =  p2 
1


v1
~v ≡ v =  v2 
0
This is a Shorthand: Coordinates are specified relative to a frame F = (~v1 , ~v2 , OV ):


p1
P ≡ [~v1 , ~v2 , OV ]  p2 
1
= F p.
Technically,
• Should write the p as pF .
• The frame F should note what space it’s in.
Usually, we’re lazy and let ‘p’ denote both
• The point
• Its matrix representation relative to an understood frame.
Transformations:
• FA = (~v1 , ~v2 , OV ) is the frame of the domain,
• FB = (w
~ 1, w
~ 2 , OW ) is the frame of the range.
Then . . .
P = p transforms to p0 = MT p.
Geometric Transformations
6.4 36
Can also read this as FA = FB MT .
MT is said to be the matrix representation of T relative to FA and FB .
• First column of MT is representation of T (~v1 ) in FB .
• Second column of MT is representation of T (~v2 ) in FB .
• Third column of MT is representation of T (OV ) in FB .
6.5
Geometric Transformations
Geometric Transformations
Construct matrices for simple geometric transformations.
Combine simple transformations into more complex ones.
• Assume that the range and domain frames are the Standard Frame.
• Will begin with 2D, generalize later.
Translation: Specified by the vector [∆x, ∆y, 0]T :
• A point [x, y, 1]T will map to [x + ∆x, y + ∆y, 1]T .
• A vector will remain unchanged under translation.
• Translation is NOT a linear transformation.
• Translation is linear on sums of vectors. . .
Matrix representation of translation
• We can create a matrix representation of translation:
T (∆x,∆y)
z
}|
{  


1 0 ∆x
x
x + ∆x
 0 1 ∆y   y  =  y + ∆y 
0 0 1
1
1
• T (∆x, ∆y) will mean the above matrix.
• Note that vectors are unchanged by this matrix.
• Although more expensive to compute than the other version of translation, we prefer
this one:
– Uniform treatment of points and vectors
– Other transformations will also be in matrix form.
We can compose transformations by matrix multiply. Thus, the composite operation
less expensive if translation composed, too.
Scale about the origin:
Specified by factors sx , sy ∈ R.
• Applies to points or vectors, is linear.
Compositions of Transformations
6.5 37
• A point [x, y, 1]T will map to [sx x, sy y, 1]T .
• A vector [x, y, 0]T will map to [sx x, sy y, 0]T .
• Matrix representation:
S(sx ,sy )
z

}|
{ 



sx 0 0
x
sx x
 0 sy 0   y
 =  sy y 
0 or 1
0 0 1
0 or 1
Rotation: Counterclockwise about the origin, by angle θ.
• Applies to points or vectors, is linear.
• Matrix representation:
R(θ)
z
}|
{ 



cos(θ) − sin(θ) 0
x
x0
 sin(θ) cos(θ) 0   y
 =  y0 
0
0
1
0 or 1
0 or 1
Shear: Intermixes coordinates according to α, β ∈ R:
• Applies to points or vectors, is linear.
• Matrix representation:
Sh(α,β)
z

}|
{ 
 

1 β 0
x
x + βy
 α 1 0  y
 =  αx + y 
0 or 1
0 or 1
0 0 1
• Easiest to see if we set one of α or β to zero.
Reflection: Through a line.
• Applies to points or vectors, is linear.
• Example: through x-axis, matrix representation is





1 0 0
x
x
 0 −1 0   y
 =  −y 
0 0 1
0 or 1
0 or 1
• See book for other examples
Note: Vectors map through all these transformations as we want them to.
(Readings: Hearn and Baker, 5-1, 5-2, and 5-4; Red book, 5.2, 5.3; White book, 5.1, 5.2)
Change of Basis
6.6
6.6 38
Compositions of Transformations
Compositions of Transformations
Suppose we want to rotate around an arbitrary point P ≡ [x, y, 1]T .
• Could derive a more general transformation matrix . . .
• Alternative idea: Compose simple transformations
1. Translate P to origin
2. Rotate around origin
3. Translate origin back to P
• Suppose P = [xo , yo , 1]T
• The the desired transformation is
T (xo , yo ) ◦ R(θ) ◦ T (−xo , −yo )

 
 

1 0 xo
cos(θ) − sin(θ) 0
1 0 −xo
=  0 1 yo  ◦  sin(θ) cos(θ) 0  ◦  0 1 −yo 
0 0 1
0
0
1
0 0
1


cos(θ) − sin(θ) xo (1 − cos(θ)) + yo sin(θ)
=  sin(θ) cos(θ) yo (1 − cos(θ)) − xo sin(θ) 
0
0
1
• Note where P maps: to P .
• Won’t compute these matrices analytically;
Just use the basic transformations,
and run the matrix multiply numerically.
Order is important!
T (−∆x, −∆y) ◦ T (∆x, ∆y) ◦ R(θ) = R(θ)
6= T (−∆x, −∆y) ◦ R(θ) ◦ T (∆x, ∆y).
(Readings: Hearn and Baker, Section 5-3; Red book, 5.4; White book, 5.3 )
6.7
Change of Basis
Change of Basis
Suppose:
• We have two coordinate frames for a space, F1 and F2 ,
• Want to change from coordinates relative to F1 to coordinates relative to F2 .
Change of Basis
6.6 39
P
F2
F1
Know P ≡ p = [x, y, 1]T relative to F1 = (w
~ 1, w
~ 2 , OW ).
Want the coordinates of P relative to F2 = (~v1 , ~v2 , OV ).
How do we get fi,j ?
• If F2 is orthonormal:
fi,j = w
~ j · ~vi ,
fi,3 = (OW − OV ) · ~vi .
• If F2 is orthogonal:
w
~ j · ~vi
,
~vi · ~vi
(OW − OV ) · ~vi
=
.
~vi · ~vi
fi,j =
fi,3
• Otherwise, we have to solve a small system of linear equations, using F1 = F2 M1,2 .
• Change of basis from F1 to Standard Cartesian Frame is trivial (since frame elements
normally expressed with respect to Standard Cartesian Frame).
Example:
v1 = w2
P=[1 1 1]T
w2
Ow
v2= -w1
w1
Ov = [3 1 1]T
Ambiguity
6.7 40
where FW is the standard coordinate frame.
Generalization to 3D is straightforward . . .
Example:
• Define two frames:
FW
FV
= (w
~ 1, w
~ 2, w
~ 3 , OW )
    
0
1
  0   1 
   
= 
  0 ,  0 ,
0
0
= (~v1 , ~v2 , ~v3 , OV )
  √
 
0
√2/2
  2/2   0
 

= 
  0 ,  1
0
0

 
0
0
 0   0
 , 
 1   0
0
1
 √
√2/2
  − 2/2
, 
 
0
0

 
 
 
 
 
1
  0  
,   
  3  
1


• All coordinates are specified relative to the standard frame in a Cartesian 3 space.
• In this example, FW is the standard frame.
• Note that both FW and FV are orthonormal.
• The matrix mapping FW to FV is given by
√
 √
2/2
2/2
 0
√
√0
M = 
 2/2 − 2/2
0
0
√
0 − 2/2
1
−3
√
0 − 2/2
0
1




• Question: What is the matrix mapping from FV to FW ?
Notes
• On the computer, frame elements usually specified in Standard Frame for space.
Eg, a frame F = [~v1 , ~v2 , OV ] is given by
[ [v1x , v1y , 0]T , [v2x , v2y , 0]T , [v3x , v3y , 1]T ]
relative to Standard Frame.
Question: What are coordinates of these basis elements relative to F ?
• Frames are usually orthonormal.
• A point “mapped” by a change of basis does not change;
We have merely expressed its coordinates relative to a different frame.
(Readings: Watt: 1.1.1. Hearn and Baker: Section 5-5 (not as general as here, though). Red
book: 5.9. White book: 5.8.)
Ambiguity
6.8
6.7 41
Ambiguity
Ambiguity
Three Types of Transformations:
1. T : A 7→ B (between two spaces)
2. T : A 7→ A (“warp” an object within its own space)
3. T : change of coordinates
Changes of Coordinates:
• Given 2 frames:
– F1 = (~v1 , ~v2 , O), orthonormal,
– F2 = (2~v1 , 2~v2 , O), orthogonal.
• Suppose ~v ≡ F1 [1, 1, 0]T .
• Then ~v ≡ F2 [1/2, 1/2, 0]T .
Question: What is the length of ~v ?
Suppose we have P ≡ [p1 , p2 , 1]T and Q ≡ [q1 , q2 , 1]T
• P, Q relative to F = (~v1 , ~v2 , O),
• We are given a matrix representation of a transformation T :


2 0 0
MT =  0 1 0 
0 0 1
• Consider P 0 = T P and Q0 = T Q.
• How do we interpret P 0 and Q0 ?
How do we interpret P 0 and Q0 ?
1. Change of Coordinates?
v2=v2’
Q
P
v1’
O=O’
v1
2. Scale?
v2
Q
P
O
P’
v1
Q’
3D Transformations
6.8 42
3. Transformations between spaces?
v2
Q
Q’
P
O
P’
v1
Do we care? YES!
• In (1) nothing changes except the representation.
• In (1) distances are preserved while they change in (2) and the question has no meaning
in (3).
• In (3), we’ve completely changed spaces.
Consider the meaning of |P 0 − P |
1. |P 0 − P | = 0
p
2. |P 0 − P | = (2p1 − p1 )2 + (p2 − p2 )2 = |p1 |
3. |P 0 − P | has no meaning
To fully specify a transformation, we need
1. A matrix
2. A domain space
3. A range space
4. A coordinate frame in each space
6.9
3D Transformations
3D Transformations
Assume a right handed coordinate system
Points P ≡ [x, y, z, 1]T , Vectors ~v ≡ [x, y, z, 0]T
Translation:

1
 0
T (∆x, ∆y, ∆z) = 
 0
0
0
1
0
0

0 ∆x
0 ∆y 

1 ∆z 
0 1
Scale: About the origin

sx 0 0
 0 sy 0
S(sx , sy , sz ) = 
 0 0 sz
0 0 0

0
0 

0 
1
World and Viewing Frames
6.9 43
Rotation: About a coordinate axis

cos(θ) − sin(θ)
 sin(θ) cos(θ)
Rz (θ) = 

0
0
0
0

1
0
 0 cos(θ)
Rx (θ) = 
 0 sin(θ)
0
0

cos(θ)

0
Ry (θ) = 
 − sin(θ)
0
0
0
1
0

0
0 

0 
1

0
0 

0 
1

0 sin(θ) 0
1
0
0 

0 cos(θ) 0 
0
0
1
0
− sin(θ)
cos(θ)
0
Shear: see book
Reflection: see book
Composition: works same way (but order counts when composing rotations).
y
Rz(90)
Rx(90)
z
y
x
y
x
x
z
y
x
Rz(90)
z
z
Rx(90)
y
x
x
z
z
y
(Readings: Hearn and Baker, Chapter 11; Red book, 5.7; White book, 5.6 )
6.10
World and Viewing Frames
World and Viewing Frames
• Typically, our space S is a Cartesian space.
– Call the standard frame the world frame.
– The world frame is typically right handed.
World and Viewing Frames
6.9 44
– Our scene description is specified in terms of the world frame.
...
.
y
x
z
World
Frame
• The viewer may be anywhere and looking in any direction.
– Often, x to the right, y up, and z straight ahead.
∗ z is called the viewing direction.
∗ This is a left handed coordinate system.
– We could instead specify z and y as vectors
∗
∗
∗
∗
z is the the view direction.
y is the up vector.
Compute x = y × z
Get a right handed coordinate system.
– We can do a change of basis
∗ Specify a frame relative to the viewer.
∗ Change coordinates to this frame.
• Once in viewing coordinates,
– Usually place a clipping “box” around the scene.
– Box oriented relative to the viewing frame.
...
.
y
x
z
World
Frame
View
Frame
• An orthographic projection is made by “removing the z−coordinate.”
World and Viewing Frames
6.9 45
– Squashes 3D onto 2D, where we can do the window-to-viewport map.
– The projection of the clipping box is used as the window.
• Mathematically, relative to
FV = (~ı, ~, ~k, O)
we map Q ≡ [q1 , q2 , q3 , 1]T onto
FP = (~u, ~v , O0 )
as follows:
Ortho(q1~ı + q2~ + q3~k + O) = q1 ~u + q2~v + O0
or if we ignore the frames,
[q1 , q2 , q3 , 1]T 7→ [q1 , q2 , 1]T
• We can write this in matrix form:




 q
q1
1 0 0 0  1 
 q2  =  0 1 0 0   q2 
 q3 
1
0 0 0 1
1

• Question: why would we want to write this in matrix form?
Viewing-World-Modelling Transformations :
• Want to do modelling transformations and viewing transformation (as in Assignment 2).
• If V represents World-View transformation, and M represents modelling transformation,
then
VM
transforms from modelling coordinates to viewing coordinates.
Note: M is performing both modelling transformation and Model to World change of
basis.
• Question: If we transform the viewing frame (relative to viewing frame) how do we
adjust V ?
• Question: If we transform model (relative to modelling frame) how do we adjust M ?
Viewing Transformations:
• Assume all frames are orthonormal
• When we transform the View Frame by T , apply T −1 to anything expressed in old view
frame coordinates to get new View Frame coordinates
World and Viewing Frames
6.9 46
T = Trans(1.5, .5)
T(F)
p
F
p=[1 .5 1] wrt F
p=[-.5 0 1] wrt T(F)
• To compute new World-to-View change of basis, need to express World Frame in new
View Frame
Get this by transforming World Frame elements represented in old View Frame by T −1 .
• Recall that the columns of the World-to-View change-of-basis matrix are the basis elements of the World Frame expressed relative to the View Frame.
• If V is old World-to-View change-of-basis matrix, then T −1 V will be new World-to-View
change-of-basis matrix, since each column of V represents World Frame element, and
the corresponding column of T −1 V contains T −1 of this element.
Modelling Transformations:
• Note that the columns of M are the Model Frame elements expressed relative to the
World Frame.
• Want to perform modelling transformation relative to modelling coordinates.
• If we have previously transformed Model Frame, then we next transform relative to
transformed Model Frame.
• Example: If


x1 x2 x3 x4
 y 1 y2 y3 y 4 

M =
 z1 z 2 z3 z4 
0 0 0 1
and we translate one unit relative to the first Model Frame basis vector, then we want
to translate by (x1 , y1 , z1 , 0) relative to the World Frame.
• Could write this as

1
 0
0
M =
 0
0
0
1
0
0


0 x1
x1 x2 x3 x4 + x1
 y 1 y2 y3 y 4 + y 1
0 y1 
·M =
 z1 z 2 z3 z4 + z 1
1 z1 
0 1
0 0 0
1




Normals
6.10 47
• But this is also equal to

1

0
M0 = M · 
 0
0
0
1
0
0
0
0
1
0
 
x1 x2 x3 x4 + x1
1


0   y1 y2 y 3 y 4 + y 1
=
0   z1 z 2 z3 z 4 + z 1
1
0 0 0
1




• In general, if we want to transform by T our model relative to the current Model Frame,
then
MT
yields that transformation.
• Summary:
Modelling transformations embodied in matrix M
World-to-View change of basis in matrix V
V M transforms from modelling coordinates to viewing coordinates
If we further transform the View Frame by T relative to the View Frame, then the new
change-of-basis matrix V 0 is given by
V 0 = T −1 V
If we further transform the model by T relative to the modelling frame, the new modelling
transformation M 0 is given by
M0 = MT
• For Assignment 2, need to do further dissection of transformations, but this is the basic
idea.
(Readings: Hearn and Baker, Section 6-2, first part of Section 12-3; Red book, 6.7; White book,
6.6 )
6.11
Normals
Transforming Normals
The Truth: Can really only apply affine transforms to points.
Vectors can be transformed correctly iff they are defined by differences of points.
Transforming Normal Vectors:
Consider non-uniform scale of circle, and normal to circle:
Windows, Viewports, NDC
6 48
n
Scale(1, 2)
Why doesn’t normal transform correctly?
• Normal vectors ARE NOT defined by differences of points
(formally, they are covectors, which are dual to vectors).
• Tangent vectors ARE defined by differences of points.
• Normals are vectors perpendicular to all tangents at a point:
~ · T~ ≡ nT t = 0.
N
~ is as a row vector.
• Note that the natural representation of N
• Suppose we have a transformation M , a point P ≡ p, and a tangent T~ ≡ t at P .
• Let M` be the “linear part” of M , i.e. the upper 3 × 3 submatrix.
p0 = M p,
t0 = M t
= M` t.
n t = nT M`−1 M` t
T
= (M`−1T n)T (M` t)
= (n0 )T t0
~ 0 · T~ 0 .
≡ N
• Transform normals by inverse transpose of linear part of transformation: n0 = M`−1T n.
• If MT is O.N. (usual case for rigid body transforms), MT−1T = MT .
• Only worry if you have a non-uniform scale or a shear transformation.
• Transforming lines: Transform implicit form in a similar way.
• Transforming planes: Transform implicit form in a similar way.
(Readings: Red Book, 5.8 (?); White Book, 5.6. )
7
WINDOWS, VIEWPORTS, NDC
7
49
Windows, Viewports, NDC
7.1
Window to Viewport Mapping
Window to Viewport Mapping
• Start with 3D scene, but eventually project to 2D scene
• 2D scene is infinite plane. Device has a finite visible rectangle.
What do we do?
• Answer: map rectangular region of 2D device scene to device.
Window: rectangular region of interest in scene.
Viewport: rectangular region on device.
Usually, both rectangles are aligned with the coordinate axes.
Viewport
xvr,yvt
Window
xwr,ywt
xw,yw
xwl,ywb
xvl,yvb
xv,yv
• Window point (xw , yw ) maps to viewport point (xv , yv ).
Length and height of the window are Lw and Hw ,
Length and height of the viewport are Lv and Hv .
• Proportionally map each of the coordinates according to:
∆xw
∆xv
=
,
Lw
Lv
∆yw
∆yv
=
.
Hw
Hv
• To map xw to xv :
xw − xwl
Lw
⇒
=
xv =
xv − xvl
Lv
Lv
(xw − xwl ) + xvl ,
Lw
and similarily for yv .
• If Hw /Lw 6= Hv /Lv the image will be distorted.
These quantities are called the aspect ratios of the window and viewport.
Normalized Device Coordinates
7.1 50
(Readings: Watt: none. Hearn and Baker: Section 6-3. Red book: 5.5. White book: 5.4, Blinn:
16.
Intuitively, the window-to-viewport formula can be read as:
• Convert xw to a distance from the window corner.
• Scale this w distance to get a v distance.
• Add to viewport corner to get xv .
)
7.2
Normalized Device Coordinates
Normalized Device Coordinates
• Where do we specify our viewport?
• Could specify it in device coordinates . . .
BUT, suppose we want to run on several platforms/devices
Two common conventions for DCS:
– Origin in the lower left, with x to the right and y upward.
– Origin in the top left, with x to the right and y downward.
Many different resolutions for graphics display devices:
– Workstations commonly have 1280×1024 frame buffers.
– A PostScript page is 612×792 points, but 2550×3300 pixels at 300dpi.
– And so on . . .
Aspect ratios may vary . . .
• If we map directly from WCS to a DCS, then changing our device requires rewriting this
mapping (among other changes).
• Instead, use Normalized Device Coordinates (NDC) as an intermediate coordinate system that gets mapped to the device layer.
• Will consider using only a square portion of the device.
Windows in WCS will be mapped to viewports that are specified within a unit square in NDC
space.
• Map viewports from NDC coordinates to the screen.
Clipping
7 51
"Viewport"
1,1
Viewport
Window
0,0
World Space
NDC Space
Screen Space
(Readings: Watt: none. Hearn and Baker: Sections 2-7, 6-3. Red book: 6.3. White book: 6.5. )
Clipping
7 52
8
CLIPPING
8
8.1
53
Clipping
Clipping
Clipping
Clipping: Remove points outside a region of interest.
• Discard (parts of) primitives outside our window. . .
Point clipping: Remove points outside window.
• A point is either entirely inside the region or not.
Line clipping: Remove portion of line segment outside window.
• Line segments can straddle the region boundary.
• Liang-Barsky algorithm efficiently clips line segments to a halfspace.
• Halfspaces can be combined to bound a convex region.
• Can use some of the ideas in Liang-Barsky to clip points.
Parametric representation of line:
L(t) = (1 − t)A + tB
or equivalently
L(t) = A + t(B − A)
• A and B are non-coincident points.
• For t ∈ R, L(t) defines an infinite line.
• For t ∈ [0, 1], L(t) defines a line segment from A to B.
• Good for generating points on a line.
• Not so good for testing if a given point is on a line.
Implicit representation of line:
`(Q) = (Q − P ) · ~n
• P is a point on the line.
• ~n is a vector perpendicular to the line.
• `(Q) gives us the signed distance from any point Q to the line.
• The sign of `(Q) tells us if Q is on the left or right of the line, relative to the direction
of ~n.
• If `(Q) is zero, then Q is on the line.
• Use same form for the implicit representation of a halfspace.
Clipping
8.0 54
n
P
Q
Clipping a point to a halfspace:
• Represent window edge as implicit line/halfspace.
• Use the implicit form of edge to classify a point Q.
• Must choose a convention for the normal:
points to the inside.
• Check the sign of `(Q):
– If `(Q) > 0, then Q is inside.
– Otherwise clip (discard) Q:
It is on the edge or outside.
May want to keep things on the boundary.
Clipping a line segment to a halfspace:
There are three cases:
1. The line segment is entirely inside:
Keep it.
2. The line segment is entirely outside:
Discard it.
3. The line segment is partially inside and partially outside:
Generate new line to represent part inside.
n
P
Input Specification:
Clipping
8.0 55
• Window edge: implicit, `(Q) = (Q − P ) · ~n
• Line segment: parametric, L(t) = A + t(B − A).
Do the easy stuff first:
We can devise easy (and fast!) tests for the first two cases:
• `(A) < 0 AND `(B) < 0 =⇒ Outside
• `(A) > 0 AND `(B) > 0 =⇒ Inside
Need to decide: are boundary points inside or outside?
Trivial tests are important in computer graphics:
• Particularly if the trivial case is the most common one.
• Particularly if we can reuse the computation for the non-trivial case.
Do the hard stuff only if we have to:
If line segment partially in/partially out, need to clip it:
• Line segment from A to B in parametric form:
L(t) = (1 − t)A + tB = A + t(B − A)
• When t = 0, L(t) = A. When t = 1, L(t) = B.
• We now have the following:
A
P
L(t) = A+t(B-A)
n
Recall: `(Q) = (Q − P ) · ~n
• We want t such that `(L(t)) = 0:
(L(t) − P ) · ~n = (A + t(B − A) − P ) · ~n
= (A − P ) · ~n + t(B − A) · ~n
= 0
• Solving for t gives us
t =
(A − P ) · ~n
(A − B) · ~n
B
Projections and Projective Transformations
8 56
• NOTE:
The values we use for our simple test can be reused to compute t:
t =
(A − P ) · ~n
(A − P ) · ~n − (B − P ) · ~n
Clipping a line segment to a window:
Just clip to each of four halfspaces in turn.
Pseudo-code (here wec = window-edge coordinates):
Given line segment (A,B), clip in-place:
for each edge (P,n)
wecA = (A-P) . n
wecB = (B-P) . n
if ( wecA < 0 AND wecB < 0 ) then reject
if ( wecA >= 0 AND wecB >= 0 ) then next
t = wecA / (wecA - wecB)
if ( wecA < 0 ) then
A = A + t*(B-A)
else
B = A + t*(B-A)
endif
endfor
Note:
• Liang-Barsky Algorithm can clip lines to any convex window.
• Optimizations can be made for the special case of horizontal and vertical window edges.
Question:
Should we clip before or after window-to-viewport mapping?
Line-clip Algorithm generalizes to 3D:
• Half-space now lies on one side of a plane.
• Plane also given by normal and point.
• Implicit formula for plane in 3D is same as that for line in 2D.
• Parametric formula for line to be clipped is unchanged.
(Readings: Watt: none. Hearn and Baker: Sections 6-5 through 6-7 (12-5 for 3D clipping). Red
book: 3.9. White Book: 3.11. Blinn: 13. )
9
PROJECTIONS AND PROJECTIVE TRANSFORMATIONS
9
9.1
57
Projections and Projective Transformations
Projections
Projections
Perspective Projection
• Identify all points with a line through the eyepoint.
• Slice lines with viewing plane, take intersection point as projection.
View Plane
• This is not an affine transformation, but a projective transformation.
Projective Transformations:
•
•
•
•
•
•
Angles are not preserved (not preserved under Affine Transformation).
Distances are not preserved (not preserved under Affine Transformation).
Ratios of distances are not preserved.
Affine combinations are not preserved.
Straight lines are mapped to straight lines.
Cross ratios are preserved.
Cross Ratios
• Cross ratio: |AC| = a1 , |CD| = a2 , |AB| = b1 , |BD| = b2 , then
a1 /a2
a01 /a02
= 0 0
b1 /b2
b1 /b2
This can also be used to define a projective transformation (ie, that lines map to lines
and cross ratios are preserved).
D
D’
P
C
A
B
a2
a1
b1
C’
A’
B’
a’2
a’1
b2
b’1
b’2
Projections
9.0 58
Comparison:
Affine Transformations
Image of 2 points on a line
determine image of line
Image of 3 points on a plane
determine image of plane
In dimension n space,
image of n + 1 points/vectors
defines affine map.
Vectors map to vectors
~v = Q − R = R − S ⇒
A(Q) − A(R) = A(R) − A(S)
Projective Transformations
Image of 3 points on a line
determine image of line
Image of 4 points on a plane
determine image of plane
In dimension n space,
image of n + 2 points/vectors
defines projective map.
Mapping of vector is ill-defined
~v = Q − R = R − S but
P (Q) − P (R) 6= P (R) − P (S)
S
P(S)
P
A(R)
R
Q
S
A(S)
A
R
A(Q)
P(R)
P(Q)
Q
Can represent with matrix multiply
(sort of)
Can represent with matrix multiply
and normalization
Perspective Map:
• Given a point S, we want to find its projection P .
x
S=(x,z)
P=(?,d)
(0,0)
Q=(0,d)
z
Projection plane, z=d
• Similar triangles: P = (xd/z, d)
• In 3D, (x, y, z) 7→ (xd/z, yd/z, d)
• Have identified all points on a line through the origin with a point in the projection
plane.
(x, y, z) ≡ (kx, ky, kz), k 6= 0.
• These are known as homogeneous coordinates.
• If we have solids or coloured lines,
then we need to know “which one is in front”.
• This map loses all z information, so it is inadequate.
Pseudo-OpenGL version of the perspective map:
• Maps a near clipping plane z = n to z 0 = −1
Projections
9.0 59
• Maps a far clipping plane z = f to z 0 = 1
(1,1,1)
(-1,-1,-1)
n
f
• The “box” in world space known as “truncated viewing pyramid” or “frustum”
– Project x, y as before
– To simplify things, we will project into the z = 1 plane.
Derivation:
• Want to map x to x/z (and similarly for y).
• Use matrix multiply followed by homogenization:

 


1 0 0 0
x
x
 0 1 0 0  y 


y

 


 0 0 a c   z  =  az + c 
0 0 b d
1
bz + d
 x 

≡ 

bz+d
y
bz+d
az+c
bz+d
1



• Solve for a, b, c, and d such that z ∈ [n, f ] maps to z 0 ∈ [−1, 1].
• Satisfying our constraints

1
 0

 0
0
gives us
0
1
0
0
0
0
0
0
f +n
f −n
−2f n
f −n
1
0



x
 y 

  = 

 z 
1
• After homogenizing we get
x y z(f + n) − 2f n T
[ , ,
, 1]
z z
z(f − n)
x
y
z(f +n)−2f n
f −n
z




Why Map Z?
9.1 60
• Could use this formula instead of performing the matrix multiply followed by the division . . .
• If we multiply this matrix in with the geometric transforms,
the only additional work is the divide.
The OpenGL perspective matrix uses
• a = − ff +n
−n and b = −1.
– OpenGL looks down z = −1 rather than z = 1.
– Note that when you specify n and f ,
they are given as positive distances down z = −1.
• The upper left entries are very different.
– OpenGL uses this one matrix to both project and map to NDC.
– How do we set x or y to map to [−1, 1]?
– We don’t want to do both because we may not have square windows.
OpenGL maps y to [−1, 1]:
y
P=1
d
O
z
c
• Want to map distance d to 1.
• y 7→ y/z is the current projection . . .
Our final matrix is





cot(θ/2)
aspect
0
0
0
0
0
cot(θ/2)
0
f +n
0
± f −n
0
±1
0
0
−2f n
f −n
0





where the ± is 1 if we look down the z axis and -1 if we look down the −z axis.
OpenGL uses a slightly more general form of this matrix that allows skewed viewing pyramids.
Why Map Z?
9.2
9.1 61
Why Map Z?
Why Map Z?
• 3D 7→ 2D projections map all z to same value.
• Need z to determine occlusion, so a 3D to 2D projective transformation doesn’t work.
• Further, we want 3D lines to map to 3D lines (this is useful in hidden surface removal)
• The mapping (x, y, z, 1) 7→ (xn/z, yn/z, n, 1) maps lines to lines, but loses all depth information.
• We could use
(x, y, z, 1) 7→ (
xn yn
,
, z, 1)
z z
Thus, if we map the endpoints of a line segment, these end points will have the same relative
depths after this mapping.
BUT: It fails to map lines to lines
R
Q
Rp
R0
Qp
Q0
P0
P = Pp
• In this figure, P, Q, R map to P 0 , Q0 , R0 under a pure projective transformation.
yn
p
p
p
• With the mapping (x, y, z, 1) 7→ ( xn
z , z , z, 1) P, Q, R actually map to P , Q , R , which fail
to lie on a straight line.
Mapping Z
9.2 62
R
Q
S
Rp
Qp
Sp
S0
P = Pp
• Now map S to S 0 to S p .
• Line segments P p Rp and Qp S p cross!
• The map
(x, y, z, 1) 7→ (
xn yn zf + zn − 2f n
,
,
, 1)
z z
z(f − n)
does map lines to lines, and it preserves depth information.
R
near
far
Q
Qp
R’= R
Q’
1/3
P
9.3
p
p
7/9
1
P
P’
Mapping Z
Mapping Z
• It’s clear how x and y map. How about z?
2
3
4
Mapping Z
9.2 63
• The z map affects: clipping, numerics
z 7→
zf + zn − 2f n
= P (z)
z(f − n)
• We know P (f ) = 1 and P (n) = −1. What maps to 0?
P (z)
=0
⇒
zf +zn−2f n
z(f −n)
=0
⇒
z
=
2f n
f +n
Note that f 2 + f n > 2f n > f n + n2 so
f>
2f n
>n
f +n
• What happens as z goes to 0 or to infinity?
lim P (z) =
z→0+
=
lim P (z) =
z→0−
=
lim P (z) =
z→+∞
=
lim P (z) =
z→−∞
=
Pictorially, we have
−2f n
z(f − n)
−∞
−2f n
z(f − n)
+∞
z(f + n)
z(f − n)
f +n
f −n
z(f + n)
z(f − n)
f +n
f −n
Mapping Z
9.2 64
+
8
+
8
-
f
8
-
n
8
0
2fn
f+n
-1
0
1
• What happens if we vary f and n?
–
lim P (z) =
f →n
=
z(f + n) − 2f n
z(f − n)
(2zn − 2n2 )
z·0
–
lim P (z) =
f →∞
=
zf − 2f n
zf
z − 2n
z
–
zf
zf
= 1
lim P (z) =
n−>0
• What happens as f and n move away from each other.
Look at size of the regions [n, 2f n/(f + n)] and [2f n/(f + n), f ].
• When f is large compared to n, we have
2f n
f +n
.
= 2n
So
2f n
.
−n = n
f +n
f+n
f-n
3D Clipping
9.3 65
and
f−
2f n
f +n
.
= f − 2n.
But both intervals are mapped to a region of size 1.
9.4
3D Clipping
3D Clipping
• When do we clip in 3D?
We should clip to the near plane before we project. Otherwise, we might attempt to project
a point with z = 0 and then x/z and y/z are undefined.
• We could clip to all 6 sides of the truncated viewing pyramid.
But the plane equations are simpler if we clip after projection, because all sides of volume
are parallel to coordinate plane.
• Clipping to a plane in 3D is identical to clipping to a line in 2D.
• We can also clip in homogeneous coordinates.
(Readings: Red Book, 6.6.4; White book, 6.5.4. )
9.5
Homogeneous Clipping
Homogeneous Clipping
Projection: transform and homogenize
• Linear transformation
nr 0
 0 ns

 0 0
0 0

0
0
0
0
f +n
f −n
n
− f2f−n
1
0

 
x
x̄
  y   ȳ
  = 
  z   z̄
1
w̄
• Homogenization

 
x̄
x̄/w̄
 ȳ   ȳ/w̄

 
 z̄  =  z̄/w̄
w̄
1
Region mapping:



X
  Y 
=

  Z 
1




Homogeneous Clipping
9.4 66
4
7
10
2
5
8
11
O
n
3
6
8
8
-
1
f
12
9
4
7
10
3
5
8
11
2
6
9
12
1
+1
Clipping not good after homogenization:
• Ambiguity after homogenization
−1 ≤
x̄, ȳ, z̄
≤ +1
w̄
– Numerator can be positive or negative
– Denominator can be positive or negative
• Normalization expended on points that are subsequently clipped
Clip in homogeneous coordinates:
• Compare unnormalized coordinate against w̄
−|w̄| ≤ x̄, ȳ, z̄ ≤ +|w̄|
Clipping Homogeneous Coordinates
• Assume NDC window of [−1, 1] × [−1, 1]
8
8
-1
Pinhole Camera vs. Camera vs. Perception
9.5 67
• To clip to X = −1 (left):
– Projected coordinates: Clip to X = −1
– Homogeneous coordinate: Clip to x̄/w̄ = −1
– Homogeneous plane: w̄ + x̄ = 0
w-
0
x=
w+
x=
0
w
w=1
x
– Point is visible if w̄ + x̄ > 0
• Repeat for remaining boundaries:
– X = x̄/w̄ = 1
– Y = ȳ/w̄ = −1
– Y = ȳ/w̄ = 1
– Near and far clipping planes
9.6
Pinhole Camera vs. Camera vs. Perception
Pinhole Camera vs. Camera
• “Lines map to lines – can’t be true because I’ve seen pictures that curve lines”
• Camera is not a pinhole camera
• Wide angle lens suffers from barrel distortion
Vertical Convergence
• Is vertical convergence a pinhole camera effect or another kind of distortion?
Slanted apartments
• Vertical convergence is a perspective projection effect.
Occurs when you tilt the camera/view ”up”
Pinhole Camera vs. Camera vs. Perception
9.5 68
• You can get rid of it if view plane parallel to up axis
Projection
Plane
Projection
Plane
• Pinhole camera (ray tracer) - Mathematically correct, but looks wrong
Spheres, cylinders: same size, on a plane parallel to view plane:
Spheres on cylinders
Art
• Painting Sculpture - Mathematically incorrect, but ”looks right”
Skew-eyed David
What’s going on?
Pinhole Camera vs. Camera vs. Perception
9.5 69
Distortion
Spheres
Spheres, and lots of them!
Occurs in Computer Graphics Images
Ben-hur races in front of distorted columns
In Real Life
• Eye/attention only on small part of field of view
Sphere looks circular
• Rest of field of view is “there”
Peripheral spheres not circular, but not focus of attention
and you don’t notice
• When you look at different object, you shift projection plane
Different sphere looks circular
• In painting, all spheres drawn as circular
When not looking at them, they are mathematically wrong
but since not focus of attention they are “close enough”
Transformation Applications and Extensions
• In graphics...
9 70
10
TRANSFORMATION APPLICATIONS AND EXTENSIONS
10
71
Transformation Applications and Extensions
10.1
Rendering Pipeline Revisited
Rendering Pipeline Revisited
Modelling
Transformations
Model
Viewing
Transformations
M1
Model
3D World
Scene
M2
V
3D View
Scene
M3
Model
(VCS)
(WCS)
(MCS)
Projection
P
Clip
Rasterization
2D/3D Device
Scene
Normalize
(NDCS)
(DCS or SCS)
2D
Image
Composition of Transforms: p0 ≡ P V Mi p.
10.2
Derivation by Composition
Derivation by Composition
• Can derive the matrix for angle-axis rotation by composing basic transformations.
• Rotation given by ~a = (x, y, z) and θ.
• Assume that |~a| = 1.
• General idea: Map ~a onto one of the canonical axes,
rotate by θ, map back.
1. Pick the closest axis to ~a using maxi ~ei · ~a = max(x, y, z).
(Assume we chose the x-axis in the following).
2. Project ~a onto ~b in the xz plane:
~b = (x, 0, z).
3. Compute cos(φ) and sin(φ), where φ is the angle of ~b with the x-axis.
cos(φ) =
sin(φ) =
x
,
x2 + z 2
z
√
.
2
x + z2
√
3D Rotation User Interfaces
10.2 72
4. Use cos(φ) and sin(φ) to create Ry (−φ):

cos(−φ)

0
Ry (−φ) = 
 sin(−φ)
0
0 − sin(−φ)
1
0
0 cos(−φ)
0
0

0
0 
.
0 
1
5. Rotate ~a onto the xy plane using Ry (−φ):
~c = Ry (−φ)~a
p
=
x2 + z 2 , y, 0 .
6. Compute cos(ψ) and sin(ψ), where ψ is the angle of ~c with the x-axis.
√
x2 + z 2
cos(ψ) = p
x2 + y 2 + z 2
p
=
x2 + z 2 ,
y
sin(ψ) = p
x2 + y 2 + z 2
= y.
7. Use cos(ψ) and sin(ψ) to create Rz (−ψ):

cos(−ψ) − sin(−ψ)
 sin(−ψ) cos(−ψ)
Rz (−ψ) = 

0
0
0
0
0
0
1
0

0
0 
.
0 
1
8. Rotate ~c onto the x axis using Rz (−ψ).
9. Rotate about the x-axis by θ: Rx (−θ).
10. Reverse z-axis rotation: Rz (ψ).
11. Reverse y-axis rotation: Ry (φ).
The overall transformation is
R(θ, ~a) = Ry (φ) ◦ Rz (ψ) ◦ Rx (θ) ◦ Rz (−ψ) ◦ Ry (−φ).
10.3
3D Rotation User Interfaces
3D Rotation User Interfaces
Goal: Want to specify angle-axis rotation “directly”.
Problem: May only have mouse, which only has two degrees of freedom.
The Virtual Sphere
10.3 73
Solutions: Virtual Sphere, Arcball.
T
S
Virtual Sphere
10.4
Arcball
Comparison
The Virtual Sphere
The Virtual Sphere
T
T
S
S
1. Define portion of screen to be projection of virtual sphere.
2. Get two sequential samples of mouse position, S and T .
3. Map 2D point S to 3D unit vector p~ on sphere.
~
~ to 3D tangental velocity d.
4. Map 2D vector ST
~
5. Normalize d.
~
6. Axis: ~a = p~ × d.
~ |.
7. Angle: θ = α|ST
(Choose α so a 180◦ rotation can be obtained.)
8. Save T to use as S for next time.
Polygons
10 74
11
POLYGONS
11
75
Polygons
11.1
Polygons – Introduction
Polygons
• Need an area primitive
• Simple polygon:
– Planar set of ordered points, v0 , . . . , vn−1
(sometimes we repeat v0 at end of list)
– No holes
– No line crossing
0
3
2
OK
1
Line Crossing
Hole
• Normally define an interior and exterior
Points ordered in counter-clockwise order
To the “left” as we traverse is inside
2
3
4
3
1
1
2
4
0
0
• Try to avoid degeneracies, but sometimes unavoidable
3
1
1
2
0
2
4
0
4
4
3
0,3
5
0,1,2
3
1,2
Polygon Clipping
11.1 76
• Convex and Concave polygons
Polygon is convex if for any two points inside polygon, the line segment joining these two
points is also inside.
Convex polygons behave better in many operations
• Affine transformations may introduce degeneracies
Example: Orthographic projection may project entire polygon to a line segment.
11.2
Polygon Clipping
Polygon Clipping (Sutherland-Hodgman):
• Window must be a convex polygon
• Polygon to be clipped can be convex or not
Approach:
• Polygon to be clipped is given as v1 , . . . , vn
• Each polygon edge is a pair [vi , vi+1 ] i = 1, . . . , n
– Don’t forget wraparound; [vn , v1 ] is also an edge
• Process all polygon edges in succession against a window edge
– Polygon in – polygon out
– v1 , . . . , vn → w1 , . . . , wm
• Repeat on resulting polygon with next sequential window edge
Contrast with Line Clipping:
• Line Clipping:
– Clip only against possibly intersecting window edges
– Deal with window edges in any order
– Deal with line segment endpoints in either order
• Polygon Clipping:
– Each window edge must be used
Polygon Clipping
11.1 77
– Polygon edges must be handled in sequence
– Polygon edge endpoints have a given order
– Stripped-down line-segment/window-edge clip is a subtask
Notation:
• s = vi is the polygon edge starting vertex
• p = vi+1 is the polygon edge ending vertex
• i is a polygon-edge/window-edge intersection point
• wj is the next polygon vertex to be output
There are four cases to consider
Case 1: Polygon edge is entirely inside the window edge
• p is next vertex of resulting polygon
• p → wj and j + 1 → j
Inside
Outside
s
p
(output)
Case 2: Polygon edge crosses window edge going out
• Intersection point i is next vertex of resulting polygon
• i → wj and j + 1 → j
Case 1
Polygon Clipping
11.1 78
Inside
Outside
s
p
i
(output)
Case 2
Case 3: Polygon edge is entirely outside the window edge
• No output
Inside
Outside
p
(no output)
s
Case 3
Case 4: Polygon edge crosses window edge going in
• Intersection point i and p are next two vertices of resulting polygon
• i → wj and p → wj+1 and j + 2 → j
Polygon Scan Conversion
11.2 79
Inside
Outside
s
(output 2) p
i (output 1)
Case 4
An Example: With a non-convex polygon...
s5
s4
we1
i2
s3
t4
i1
t3
t2
we2
t1
s2
s1
t5
w1 w6
w5
w4
w3
v2
u3
u1
u4
u2
we3
i3
v5 i6
i5
u5
i4
v1
v4
we4
v3
w2
(Readings: Watt: 6.1. Hearn and Baker: Section 6-8. Red book: 3.11. White book: 3.14. )
11.3
Polygon Scan Conversion
Scan Conversion
• Once mapped to device coordinates, want to scan convert polygon.
• Scan converting a general polygon is complicated.
• Here we will look at scan conversion of a triangle.
• Look at y value of vertices. Split triangle along horizontal line at middle y value.
Dos and Don’ts
11.3 80
C
L2(t)
L1(t)
A
scan later
B
• Step along L1 and L2 together along the scan lines from A to C and from B to C respectively.
• Scan convert each horizontal line.
Code for triangle scan conversion
• Assume that triangle has been split and that A, B, C are in device coordinates, that
A.x < B.x, and that A.y = B.y 6= C.y.
y = A.y;
d0 = (C.x-A.x)/(C.y-A.y);
d1 = (C.x-B.x)/(C.y-B.y);
x0 = A.x;
x1 = B.x;
while ( y <= C.y ) do
for ( x = x0 to x1 ) do
WritePixel(x,y);
end
x0 += d0;
x1 += d1;
y++;
end
• This is a floating point algorithm
(Readings: Watt: 6.4. Hearn and Baker: Chapter 3-11. Red book: 3.5 (more general than above).
White book: 3.6 (more general than above). )
11.4
Dos and Don’ts
When modelling with polygonal objects, remember the following guidelines:
• Model Solid Objects — No façades
It’s easier to write other software if we can assume polygon faces are oriented
• No T-vertices
These cause shading anomalies and pixel dropout
• No overlapping co-planar faces
Violates solid object constraint.
If different colours, then psychedelic effect due to floating point roundoff
Hidden Surface Removal
• Well shaped polygon
Equilateral triangle is best.
Long, skinny triangles pose problems for numerical algorithms
Bad Polygon Examples
11 81
Hidden Surface Removal
11 82
12
HIDDEN SURFACE REMOVAL
12
83
Hidden Surface Removal
12.1
Hidden Surface Removal
Hidden Surface Removal
• When drawing lots of polygons, we want to draw only those “visible” to viewer.
• There are a variety of algorithms with different strong points.
• Issues:
– Online
– Device independent
– Fast
– Memory requirements
– Easy to implement in hardware
(Readings: Watt: 6.6. Red book: 13. White book: 15. Hearn and Baker: Chapter 13. )
12.2
Backface Culling
Backface Culling
Backface Culling
• A simple way to perform hidden surface is to remove all “backfacing” polygons.
• If polygon normal facing away from the viewer then it is “backfacing.”
• For solid objects, this means the polygon will not be seen by the viewer.
V
N
• Thus, if N · V > 0, then cull polygon.
• Note that V is vector from eye to point on polygon
You cannot use the view direction for this.
Backface Culling Not a complete solution
• If objects not convex, need to do more work.
• If polygons two sided (i.e., they do not enclose a volume) then we can’t use it.
Painter’s Algorithm
12.2 84
• A HUGE speed advantage if we can use it since the test is cheap and we expect at least
half the polygons will be discarded.
• Usually performed in conjunction with a more complete hidden surface algorithm.
• Easy to integrate into hardware (and usually improves performance by a factor of 2).
12.3
Painter’s Algorithm
Painter’s Algorithm
• Idea: Draw polygons as an oil painter might: The farthest one first.
– Sort polygons on farthest z
– Resolve ambiguities where z’s overlap
– Scan convert from largest z to smallest z
1
2
3
• Since closest drawn last, it will be on top (and therefore it will be seen).
• Need all polygons at once in order to sort.
Painter’s Algorithm — Z overlap
• Some cases are easy:
Warnock’s Algorithm
12.3 85
y
z=1
y
z=3
z=2
x
x
• But other cases are nasty!
y
y
x
(have to split polygons)
• Ω(n2 ) algorithm, lots of subtle detail
12.4
Warnock’s Algorithm
Warnock’s Algorithm
• A divide and conquer algorithm
Warnock(PolyList PL, ViewPort VP)
If ( PL simple in VP) then
Draw PL in VP
else
Split VP vertically and horizontally into VP1,VP2,VP3,VP4
Warnock(PL in VP1, VP1)
Warnock(PL in VP2, VP2)
Warnock(PL in VP3, VP3)
Warnock(PL in VP4, VP4)
end
• What does “simple” mean?
– No more than one polygon in viewport
Scan convert polygon clipped to viewport
– Viewport only 1 pixel in size
Shade pixel based on closest polygon in the pixel
x
Z-Buffer Algorithm
12.4 86
Warnock’s Algorithm
• Runtime: O(p × n)
– p: number of pixels
– n: number of polygons
12.5
Z-Buffer Algorithm
Z-Buffer Algorithm
• Perspective transformation maps viewing pyramid to viewing box in a manner that maps
lines to lines
• This transformation also maps polygons to polygons
• Idea: When we scan convert, step in z as well as x and y.
• In addition to framebuffer, we’ll have a depth buffer (or z buffer) where we write z values
• Initially, z buffer values set to ∞
Depth of far clipping plane (usually 1) will also suffice
• Step in z, both in the while loop and in the for loop.
• Scan convert using the following WritePixel:
WritePixel(int x, int y, float z, colour)
if ( z < zbuf[x][y] ) then
zbuf[x][y] = z;
frambuffer[x][y] = colour;
end
Comparison of Algorithms
12.5 87
• Runtime: O(pc + n)
– pc : number of scan converted pixels
– n: number of polygons
Z-buffer in Hardware
Z-buffer is the algorithm of choice for hardware implementation
+ Easy to implement
+ Simple hardware implementation
+ Online algorithm (i.e., we don’t need to load all polygons at once in order to run algorithm)
- Doubles memory requirements (at least)
But memory is cheap!
- Scale/device dependent
12.6
Comparison of Algorithms
Comparison of Algorithms
• Backface culling fast, but insufficient by itself
• Painter’s algorithm device independent, but details tough, and algorithm is slow
• Warnock’s algorithm easy to implement, but not very fast, and is semi-device dependent.
• Z-buffer online, fast, and easy to implement, but device dependent and memory intensive.
Algorithm of choice for hardware
Comparison of no hidden surface removal, backface culling, and hidden surface removal:
Hierarchical Models and Transformations
12 88
13
HIERARCHICAL MODELS AND TRANSFORMATIONS
13
13.1
89
Hierarchical Models and Transformations
Hierarchical Transformations
Hierarchical Transformations
How do we model complex objects and scenes?
• Describing everything as a single complex model is a Bad Idea.
• Use hierarchical modeling instead. . .
Start with basic set of 3D primitives: Cubes, spheres, prisms . . .
• Each is defined in a “nice” way in its own space.
• To put primitives together, use transformations.
• Each transformation embeds one space in another.
• Use a whole hierarchy of spaces to build up complex models. . .
• Not just one “Model space”, but one for each model and part of a model.
Suppose we want two houses.
M
B
N
D
(WCS)
Pictorially we have a DAG —a directed acyclic graph.
World
B
D
House
M
Prism
We can model this procedurally:
N
Cube
Hierarchical Transformations
13.0 90
Procedure Scene()
House(B);
House(D);
end
Procedure House(E)
Prism(E o M);
Cube(E o N);
end
Procedure Cube(F)
. . .
end
Procedure Prism(F)
. . .
end
Implementation:
• Procedure calls are making depth first traversal of tree/DAG.
• Use a matrix stack—sometimes maintained in H/W.
• Each time we make an embedding,
1. “Push” the new transformation onto the matrix stack
2. “Pop” it on return.
• OpenGL’s glPushMatrix call duplicates the top of the stack.
• OpenGL’s glMultMatrix multiplies a matrix with the top of the stack, replacing the
top of the stack with the result.
• OpenGL’s glPopMatrix pops the stack.
• Stack starts with identity matrix on bottom.
• OpenGL also has transformation calls, such as glRotate, glScale, etc that perform basic
transformations.
• These transformations operate on the top of the stack.
• Put perspective and world-to-view matrices into the stack.
• These are pushed on first, giving P V on the bottom.
• Might have more than one stack, i.e. MODEL, VIEW, and PROJECTION stacks.
Hierarchical Data Structures
13.1 91
PushMatrix
MultMatrix
PV
PV
PVB
PV
PV
PushMatrix
PVB
MultMatrix
PVBM
PVB
PVB
PV
DRAW
PV
PRISM
PVB
MultMatrix
PVBM
PVB
PV
PopMatrix
PushMatrix
PVB
PVB
PV
PV
PV
Code now looks like
...
Procedure Scene()
MultMatrix(P);
MultMatrix(V);
PushMatrix();
MultMatrix(B);
House();
PopMatrix();
PushMatrix();
MultMatrix(D);
House();
PopMatrix();
end
Procedure House()
PushMatrix();
MultMatrix(M);
Prism();
Popmatrix();
PushMatrix();
MultMatrix(N);
Cube();
Popmatrix();
end
Procedure Cube()
. . .
end
PVBN
PVB
Procedure Prism()
. . .
end
Hierarchical Data Structures
13.2
13.1 92
Hierarchical Data Structures
Hierarchical Data Structures
• Don’t want to write a program for each scene. . .
• Instead, develop a data structure and traverse it.
• Use an external data format to describe model hierarchies.
• Process many different scenes with the same program.
• DAG data structure: lots of variations on the example given here.
• Consider the following DAG:
• Use one of a variety of data structures to allow an arbitrary number of links from each node.
Example:
class Node {
...
private:
Primitive *prim;
vector<Node*> children;
};
Hierarchical Data Structures
• We walk through the hierarchy with a preorder traversal. . .
• Traversal pseudocode:
void Node::traverse() {
PushMatrix(); MultMatrix(transform);
if (prim) {
prim->draw();
} else {
for (vector<Node*> iterator i=children.begin();
i != children.end(); ++i) {
(*i)->traverse();
}
}
PopMatrix();
}
A3/A4 House Code
scene = gr.transform( ’scene’ )
# Assume we have predefined materials ’red’, ’green’ and ’blue’
house = gr.transform( ’house’ )
prism = gr.polyhedron( ’prism’, ... )
roof = gr.transform( ’roof’ )
gr.add_child( roof, prism )
gr.set_transform( roof, gr.translation( 0,1,0 ) )
gr.add_child( house, roof )
frame = gr.cube( ’frame’ )
gr.add_child( house, frame )
farmhouse = gr.transform( ’farmhouse’ )
gr.add_child( farmhouse, house )
gr.set_material( farmhouse, green )
(continued on next slide)
(continuation from previous slide)
barn = gr.transform( ’barn’ )
gr.add_child( barn, house )
gr.set_material( barn, red )
gr.set_transform( barn, gr.translation( 2,0,3 ) * gr.scaling( 2,2,2 ) \
* gr.rotation( ’Y’, 30 ) )
doghouse = gr.transform( ’doghouse’ )
gr.add_child( doghouse, house )
gr.set_material( doghouse, blue )
gr.set_transform( doghouse, gr.translation( 1.5, 0, -0.2 ) \
* gr.scaling( 0.2,0.2,0.2 ) * gr.rotation( ’Y’, -15 ) )
gr.add_child( scene, farmhouse )
13.1 93
Hierarchical Data Structures
13.1 94
gr.add_child( scene, barn )
gr.add_child( scene, doghouse )
# Later in the code...
... gr.render( scene ) ...
Improved A3/A4 House Code
# Assume materials are defined
# About 30 lines defining make_ functions left out here.
# Build a group node whose children are the arguments to the function.
house = make_group(
make_cube(), make_poly( prism_data, transform=gr.translation( 0,1,0 ) )
)
farmhouse = make_instance( house, material=green )
barn = make_instance( house, material=red,
transform=gr.translation(2,0,3)*gr.scaling(2,2,2)*gr.rotation(’Y’,30) )
doghouse = make_instance( house, material=blue,
transform=gr.translation(1.5,0,-0.2)*gr.scaling(0.2,0.2,0.2)*
gr.rotation(’Y’,-15) )
scene = make_group( farmhouse, barn, doghouse )
... gr.render( scene ) ...
• Note: Conceptually, DAG is
scene
farmhouse
barn
doghouse
house
roof
prism
• Primitives only occur at leaf nodes.
• Transformations only occur at internal nodes.
• Rendered scene:
frame
Picking and 3D Selection
• How to associate materials with objects?
• For assignments, just associate with primitives.
• More complex:
– Material assigned to inner nodes
Who has precedence, lower or higher in hierarchy?
– Parameterized materials
∗ Subtree with materials
(house with white paint, green roof)
∗ Might want instances of house to have different materials
(cream paint, black roof)
∗ Have to parameterize materials on creation
∗ Have to have method for setting materials in subtree
13 95
Picking and 3D Selection
13 96
14
PICKING AND 3D SELECTION
14
Picking and 3D Selection
14.1
Picking and 3D Selection
Picking and 3D Selection
• Pick: Select an object by positioning mouse over it and clicking.
• Question: How do we decide what was picked?
– We could do the work ourselves:
∗ Map selection point to a ray;
∗ Intersect with all objects in scene.
– Let OpenGL/graphics hardware do the work.
• Idea: Draw entire scene, and “pick” anything drawn near the cursor.
– Only “draw” in a small viewport near the cursor.
– Just do clipping, no shading or rasterization.
– Need a method of identifying “hits”.
– OpenGL uses a name stack managed by
glInitNames(), glLoadName(), glPushName(), and glPopName().
– “Names” are unsigned integers
– When hit occurs, copy entire contents of stack to output buffer.
• Process:
– Set up pick buffer
– Initialize name stack
May need glPushName(-1);
– Save old projective transformation and set up a new one
– Draw your scene with appropriate use of name stack
– Restore projective transformation
– Query for number of hits and process them
• A hit occurs if a draw occurs in the (small) viewport
• All information (except ’hits’) is stored in buffer given with glSelectBuffer
• Example:
– Two objects
– Might pick none
– Might pick either one
– Might pick both
97
Picking and 3D Selection
glSelectBuffer(size, buffer);
/* initialize */
glRenderMode(GL_SELECT);
glInitNames();
glPushName(-1);
glGetIntegerv(GL_VIEWPORT,viewport);
/* set up pick view */
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluPickMatrix(x,y,w,h,viewport);
glMatrixMode(GL_MODELVIEW);
ViewMatrix();
glLoadName(1);
Draw1();
glLoadName(2);
Draw2();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
hits = glRenderMode(GL_RENDER);
• Hits stored consecutively in array
• In general, if h is the number of hits, the following is returned.
– hits = h.
– h hit records, each with four parts:
1.
2.
3.
4.
The
The
The
The
number of items q on the name stack at the time of the hit (1 int).
minimum z value among the primitives hit (1 int).
maximum z value among the primitives hit (1 int).
contents of the hit stack, deepest element first (q ints).
• At most one hit between each call glRenderMode or a change to name stack
• In our example, you get back the following:
– If you click on Item 1 only:
hits = 1,
buffer = 1, min(z1), max(z1), 1.
– If you click on Item 2 only:
hits = 1,
buffer = 1, min(z2), max(z2), 2.
– If you click over both Item 1 and Item 2:
hits = 2,
buffer = 1, min(z1), max(z1), 1,
1, min(z2), max(z2), 2.
• More complex example:
14.0 98
Colour and the Human Visual System
14 99
/* initialization stuff goes here */
glPushName(1);
Draw1();
/* stack: 1 */
glPushName(1);
Draw1_1();
/* stack: 1 1 */
glPushName(1);
Draw1_1_1();
/* stack: 1 1 1 */
glPopName();
glPushName(2);
Draw1_1_2();
/* stack: 1 1 2 */
glPopName();
glPopName();
glPushName(2); /* stack: 1 2 */
Draw1_2();
glPopName();
glPopName();
glPushName(2);
Draw2();
/* stack: 2 */
glPopName();
/* wrap-up stuff here */
• What you get back:
– If you click on Item 1:
hits = 1,
buffer = 1, min(z1), max(z1), 1.
– If you click on Items 1:1:1 and 1:2:
hits = 2,
buffer = 3, min(z111), max(z111), 1, 1, 1,
2, min(z12), max(z12), 1, 2.
– If you click on Items 1:1:2, 1:2, and 2:
hits = 3,
buffer = 3, min(z112), max(z112), 1, 1, 2,
2, min(z12), max(z12), 1, 2,
1, min(z2), max(z2), 2.
• Important Details:
– Make sure that projection matrix is saved with a glPushMatrix() and restored with a
glPopMatrix().
– glRenderMode(GL RENDER) returns negative if buffer not big enough.
– When a hit occurs, a flag is set.
– Entry to name stack only made at next gl*Name(s) or glRenderMode call. So, each
draw block can only generate at most one hit.
Colour and the Human Visual System
14 100
15
COLOUR AND THE HUMAN VISUAL SYSTEM
15
101
Colour and the Human Visual System
15.1
Colour
Introduction to Colour
• Light sources emit intensity:
I(λ)
assigns intensity to each wavelength of light
• Humans perceive I(λ) as a colour – navy blue, light green, etc.
• Experiments show that there are distinct I perceived as the same colour (metamers)
• Normal human retina have three types of colour receptors which respond most strongly to
short, medium, or long wavelengths.
Sensitivity diagram
• Note the low response to blue.
One theory is that sensitivity to blue is recently evolved.
• Different animals have different number of wavelengths that they are sensitive to:
–
–
–
–
Dogs: 1
Primates: 2 or 3
Pigeon: 4
Birds: up to 18 (hummingbird?)
• Different Regions of the eye are “designed” for different purposes:
– Center - fine grain colour vision
– Sides - night vision and motion detection
Tri-Stimulus Colour Theory
• Tri-stimulus Colour Theory models visual system as a linear map:
V :Λ→C
where Λ is a continuous function of wavelength
C is a three dimensional vector space (colour space)
~ = `~` + mm
V (I(λ)) = C
~ + s~s
where
` =
Z
∞
L(λ)I(λ)dλ
m =
Z0 ∞
M (λ)I(λ)dλ
s =
Z0 ∞
S(λ)I(λ)dλ
0
where L, M , and S are weight functions.
Reflection and Light Source Models
Colour Systems
• RGB (Red, Green, Blue) Additive
Prism to RBG/CMY wheel
• CMY (Cyan, Magenta, Yellow) Subtractive (complement of RGB)
Additive colour scheme
Often add K (blacK) to get better black
• HSV (Hue, Saturation, Value) Cone shaped colour space
HSV colour cone
Also HSL (double cone)
• CIE XYZ (Colour by committee) More complete colour space
Also L*u*v and L*a*b
• YIQ (Y == Luminance == CIE Y; IQ encode colour)
Backwards compatible with black-and-white TV (only show Y)
15 102
16
REFLECTION AND LIGHT SOURCE MODELS
16
103
Reflection and Light Source Models
16.1
Goals
Lighting
• What we want:
Given a point on a surface visible to the viewer through a pixel, what colour should we assign
to the pixel?
• Goals:
– Smoothly shade objects in scene
– Want shading done quickly
Interactive speeds
• Begin with a simple lighting model at a single point on a surface
• Not going to worry too much about the physics. . .
• Later, we will improve lighting model
• Initial Assumptions:
– Linearity of reflection: outgoing energy proportional to incoming
– Energy conservation: no more outgoing energy than incoming
– Full spectrum of light can be represented by three floats (Red,Green,Blue)
(Readings: Watt: 6.2. Red book: 14.1. White book: 16.1. )
16.2
Lambertian Reflection
Lambertian Reflection
• Assume: Incoming light is partially absorbed, then remainder of energy propagated equally
in all directions
Light
• Approximates the behavior of matte materials.
Lambertian Reflection
16.1 104
• Want an expression for Lout (~v ), the radiance (light energy transported along a ray) reflected
in some direction ~v , given
– the incoming direction ~`
– incoming radiance Lin (~`),
– and the material properties (reflectance).
• Given radiance Lin (~`) striking surface from direction ~`
• Want to determine Lout (~v ) reflected in direction ~v .
N
Light
A out
A in
A surf
• Energy received at surface (irradiance E) depends on projection of incoming beam orientation
onto surface’s orientation:
∆Ain
~
~
Ein (`) = Lin (`)
.
∆Asurf
• Want to compute projected area:
N
θ in
A in
A surf
∆Ain
∆Asurf
= cos(θin )
= ~` · ~n
where ~n is the surface normal and ~` points towards the light.
Attenuation
16.2 105
• Our “view” of the surface will include a corresponding factor for cos(θout ).
• Outgoing radiance proportional to incoming irradiance, but proportionality may depend on
view vector ~v and light vector ~`:
Lout (~v ) = ρ(~v , ~`)Ein (~`).
• Have assumed outgoing radiance is equal in all directions so ρ must be a constant.
• The Lambertian lighting model is therefore
Lout (~v ) = kd Ein (~`)
= kd Lin (~`) ~` · ~n.
• For complete environment, Lambertian lighting model is
Z
Lout (~v ) =
(kd /π)Lin (~`) (~` · ~n) dσ(~`)
Ω
where Ω is the hemisphere of all possible incoming directions and dσ is the solid angle measure.
• If kd ∈ [0, 1], then factor of π is necessary to ensure conservation of energy.
• Often convert integral to a sum over light sources
16.3
Attenuation
Attenuation
Attenuation
• We will model two types of lights:
– Directional
– Point
Want to determine Lin (~`) at surface for each
• Directional light source has parallel rays:
Light
Most appropriate for distant light sources (the sun)
No attenuation, since energy does not “spread out”.
Coloured Lights, Multiple Lights, and Ambient Light
16.3 106
Point light sources:
• Light emitted from a point equally in all directions:
Screen
Eye
Light
P
Surface
• Conservation of energy tells us
I
Lin (~`) ∝ 2
r
where r is the distance from light to P (energy is spread over surface of a sphere), and
I is light source intensity.
• For “empirical graphics”, usually ignore π factors...
• However, r2 attenuation looks too harsh.
Harshness because real lighting is from area sources, multiple reflections in environment. True
point sources impossible.
Commonly, we will use
I
Lin (~`) =
c1 + c2 r + c3 r2
• Note that we do NOT attenuate light from P to screen. Surface foreshortening when farther
away takes care of that:
Pixel
Eye
The pixel represents an area that increases as the square of the distance.
16.4
Coloured Lights, Multiple Lights, and Ambient Light
Coloured Lights, Multiple Lights, and Ambient Light
• To get coloured lights, we perform lighting calculation three times to get an RGB triple.
Specular Reflection
16.4 107
• More correct to use spectra, and better approximations to spectra exist, but RGB sufficient
for now
• To get multiple lights, compute contribution independently and sum:
Lout (~v ) =
X
ρ(~v , ~`i )Ii
i
~`i · ~n
c1 + c2 ri + c3 ri2
• Question: what do pictures with this illumination look like?
Ambient Light:
• Lighting model so far is still too harsh
• Problem is that only direct illumination is modeled
• Global illumination techniques address this—but are expensive
• Ambient illumination is a simple approximation to global illumination
• Assume everything gets uniform illumination in addition to direct illumination
Lout (~v ) = ka Ia +
X
ρ(~v , ~`i )Ii
i
16.5
~`i · ~n
c1 + c2 ri + c3 ri2
Specular Reflection
Specular Reflection
• Lambertian term models matte surface but not shiny ones
• Shiny surfaces have “highlights” because energy reflected depends on viewer’s position
• Phong Bui-Tuong developed an empirical model:
Lout (~v ) = ka Ia + kd (~` · ~n)Id + ks (~r · ~v )p Is
• Using our previous notation:
p
(~r · ~v )
ρ(~v , ~`) = kd + ks
~n · ~`
• The vector ~r is ~` reflected by the surface:
~r = −~` + 2(~` · ~n)~n
Specular Reflection
16.4 108
Light
N
r
v
P
• This is the classic Phong lighting model
• Specular term at a maximum (ks ) when ~v = ~r
• The exponent p controls sharpness of highlight:
– Small p gives wide highlight
– Large p gives narrow highlight
Small p
Large p
Eye
Specular Reflection
16.4 109
• Blinn introduced a variation, the Blinn-Phong lighting model :
Lout (~v ) = ka Ia + kd (~` · ~n)Id + ks (~h · ~n)p Is
Compare to Phong model of
Lout (~v ) = ka Ia + kd (~` · ~n)Id + ks (~r · ~v )p Is
• The halfway vector ~h is given by
~
~h = ~v + `
|~v + ~`|
• Value (~h · ~n) measures deviation from ideal mirror configuration of ~v and ~`
• Exponent works similarily to Phong model.
• OpenGL uses Blinn-Phong model.
• Blinn-Phong better motivated physically . . .
• BUT both models break several laws of physics
(conservation of energy, for instance).
Shading
• Better physically-based and empirical models exist:
Cook-Torrance, He, Ward, Lafortune’s modified Phong, etc.
• Good empirical model for project:
Ashikhmin and Shirley,
An Anisotropic Phong BRDF Model,
Journal of Graphics Tools, AK Peters/ACM,
Volume 5, Number 2, 2000.
16 110
17
SHADING
17
111
Shading
17.1
Introduction
• Want to shade surfaces
• Lighting calculation for a point
Given: Lin , ~`, and surface properties (including surface normal)
Compute: Lout in direction ~v
• Need surface normals at every point
• Commonly, surface is polygonal
– True polygonal surface: use polygon normal
– Sampled surface: sample position and normal, create polygonal approximation
• Want colour for each pixel in rasterized surface
Flat Shading
• Shade entire polygon one colour
• Perform lighting calculation at:
– One polygon vertex
– Center of polygon
What normal do we use?
– All polygon vertices and average colours
• Problem: Surface looks faceted
• OK if really is a polygonal model, not good if a sampled approximation to a curved surface.
17.2
Gouraud Shading
• Gouraud shading interpolates colours across a polygon from the vertices.
• Lighting calculations are only performed at the vertices.
• Interpolation well-defined for triangles.
• Extensions to convex polygons . . . but not a good idea, convert to triangles.
• Barycentric combinations are also affine combinations. . .
Triangular Gouraud shading is invariant under affine transformations.
Gouraud Shading
17.1 112
B
α
α=
β=
γ=
γ
P
β
PBC / ABC
APC / ABC
ABP / ABC
α+β+γ=1
P = αA + βB + γC
A
C
• To implement, can use repeated affine combination along edges, across spans, during rasterization.
• Gouraud shading is well-defined only for triangles
• For polygons with more than three vertices:
– Sort the vertices by y coordinate.
– Slice the polygon into trapezoids with parallel top and bottom.
– Interpolate colours along each edge of the trapezoid. . .
– Interpolate colours along each scanline.
C
F = lerp(A,B)
H = lerp(D,E)
G
D
I = lerp(H,E)
B
H
J = lerp(B,F)
P = lerp(I,J)
I
J
P
E
F
A
• Gouraud shading gives bilinear interpolation within each trapezoid.
Phong Shading
17.2 113
• Since rotating the polygon can result in a different trapezoidal decomposition, n-sided Gouraud
interpolation is not affine invariant.
• Aliasing also a problem: highlights can be missed or blurred.
Not good for shiny surfaces unless fine polygons are used.
• Exercise: Provide an example of the above effect.
• Exercise: Prove repeated affine combinations (the above algorithm) is equivalent to barycentric combinations on triangles.
• Exercise: Prove that the extension of the repeated affine combination algorithm to arbitrary
polygons is not invariant under affine transformations.
• Common in hardware renderers; the model that (classic) OpenGL supports.
• Linear interpolation in device space not consistent with linear interpolation in world space.
Modern implementations of OpenGL actually implement rational linear interpolation, which
takes perspective into account.
17.3
Phong Shading
• Phong Shading interpolates lighting model parameters, not colours.
• Much better rendition of highlights.
• A normal is specified at each vertex of a polygon.
• Vertex normals are independent of the polygon normal.
• Vertex normals should relate to the surface being approximated by the polygonal mesh.
• The normal is interpolated across the polygon (using Gouraud techniques).
• At each pixel,
– Interpolate the normal. . .
– Interpolate other shading parameters. . .
– Compute the view and light vectors. . .
– Evaluate the lighting model.
• The lighting model does not have to be the Phong lighting model!
• Normal interpolation is nominally done by vector addition and renormalization.
• Several “fast” approximations are possible.
• The view and light vectors may also be interpolated or approximated.
• Problems with Phong shading:
– Distances change under perspective transformation
Graphics Hardware
17 114
– Where do we do interpolation?
– Normals don’t map through perspective transformation
– Can’t perform lighting calculation or linear interpolation in device space
– Have to perform lighting calculation in world space or view space, assuming model-view
transformation is affine.
– Have to perform linear interpolation in world or view space, project into device space
– Results in rational-linear interpolation in device space!
– Interpolate homogeneous coordinates, do per-pixel divide.
– Can be organized so only need one division per pixel, regardless of the number of parameters to be interpolated.
• Phong shading, and many other kinds of advanced shading, can be simulated with programmable vertex and fragment shaders on modern graphics hardware:
– Classic Gouraud shading is linear in device space.
– Modern graphics hardware performs rational linear interpolation — looks like interpolation happens in world space.
– Interpolate normals, view vectors, and light vectors using generic interpolation hardware
– Usually also interpolate diffuse term after computing it in vertex shader.
– Write fragment shader to renormalize normals to unit length, compute lighting model,
and assign colour to pixel.
– Can also use texture maps as lookup tables. . .
18
GRAPHICS HARDWARE
18
115
Graphics Hardware
18.1
Graphics Hardware
• Graphics hardware has been evolving over the past several decades
• In the 60’s, 70’s, vector displays costing millions of dollars
US military was main (only) customer
• Raster displays started appearing in the 70’s
• In the 80’s, raster displays and graphics hardware cost 10’s to 100’s of thousands of dollars.
Cost low enough that companies could afford the hardware.
SGI won the battle of work station graphics, OpenGL became standard
• In the 90’s, graphics hardware started moving to PC’s
DirectX is MicroSoft’s challenge to OpenGL
• In the 00’s, PC graphics hardware has displaced work station graphics
Good, inexpensive cards for PCs
• Currently getting faster in excess of Moore’s law
• Many graphics cards are “more powerful” than CPU in floating-point
• Can be used for general purpose computation too! PCI-express makes graphics accelerators
like coprocessors
Traditional OpenGL (1.2)
vertices
tranform
lighting
transformed
vertices
fragments
rasterize
(clipping)
texcoords
colour
texturing
texture memory
textured
fragment
composite
frame buffer
• A fragment is a sort of virtual pixel
• fragment carries colour that is composited onto pixel in frame buffer if it passes depth, stencil,
and alpha tests.
• Clipping done in transform/lighting portion
Graphics Hardware
18.0 116
OpenGL (2.0)
vertex program
vertices
vertex
shader
transformed
vertices
fragment program
shaded
fragment
fragment
shader
texcoords1
texcoords2
1 2 ...
.
.
.
prim colour
scnd colour
texture memory
fragments
rasterize
(clipping)
• Vertex Shader and Fragment Shader are programmable by application
GeForce 3/4:
• 100’s of lines of assembly for vertex shader (floating point 4-tuple)
• Configurable pipeline for fragment shader
– 4 texture shader stages (floating point)
– 8 register combiner stages (10-bit signed int)
ATI 9700
• 1000’s of lines of assembly for both vertex and fragment shader
• Single precision float for vertex shader
• 24-bit float in fragment shader
15-bit significand
GeForce 5x00:
• Single precision floating point in vertex shaders
• Half and single precision floating point in fragment shaders
• Floating point textures and rendering targets
• Unlimited number of dependent texture reads in fragment shader
ATI 8x0
• Single precision float for vertex shader
• 24-bit float in fragment shader
• Multiple floating point rendering targets supported
composite
frame buffer
NVIDIA Vertex Shader Assembly
GeForce 6x00:
• Single precision floating point in vertex shaders
• Half and single precision floating point in fragment shaders
• Floating point textures and rendering targets
• Filtering and interpolation support for half-float textures
• Multiple rendering targets
• Control constructs (loops and conditionals) in both vertex and fragment programs
• Texture access in vertex unit (no filtering)
OpenGL 2.0
• Full single-precision floating point in both shaders
• Unlimited number of instructions
• Conditional execution and loops
• High level shading language in driver
Full support only available on 3Dlabs Realizm cards, so far...
18.2
NVIDIA Vertex Shader Assembly
Vertex Shader
• Sets of four word registers
• Data passed in through v, c registers
Results passed to next stage through o registers
– 16 vertex attribute registers
v[0],...,v[15]
Mnemonic names: v[OPOS], v[WGHT], V[NML],...
position, weight, normal, primary color,...
Programmer responsible for loading data into them
Vertex attribute registers are read only
Only one v register per instruction
• 15 vertex result registers
o[HPOS] – Homogeneous clip space position
o[COL0] – Primary colour
o[TEX0] – Texture coordinate set 0
...
Vertex result registers are write only
Vertex program must write to o[HPOS]
18.1 117
NVIDIA Vertex Shader Assembly
18.1 118
• 12 temporary registers, R0,...,R11
Read/write
• A0.x is the “address register”
Write only
Used to access constant registers
• 96 constant registers, c[0],...,c[95]
May also address as c[A0.x]
Read-only to normal program
Read/write to vertex state program
Only one constant register per instruction
• 17 assembly instructions
– Operate on scalar(s) or 4-component register
– Result is for single register
Either 4-component or replicated scalar
– Examples:
Opcode
MOV
ADD
RSQ
DP4
Inputs
v
v,v
s
v,v
Output
v
v
ssss
ssss
Operations
move
add
reciprocal square root
4-component dot product
– Scalar input must have modifier .x, .y, .z, or .w
– Swizzle: .xxyy, .wzyx, etc.
• Generate id, load/compile vertex program, etc.,...
glGenProgramsNV, glLoadProgramNV,...
• Web pages:
http://developer.nvidia.com/docs/IO/1239/ATT/VertexPrograms.pdf
http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program.txt
http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program1_1.txt
Example: Phong Lighting
//
//
//
//
//
//
//
X = Vertex position
LP = Light position
EP = Eye position
L = Normalized light vector
E = Normalized eye vector
R = Reflection vector
n = Specular exponent
// Parameters:
//
c[0-3] = Modelview times projection matrices
//
c[10] = Diffuse color
High-Level Shading Languages
//
//
//
//
//
c[11]
c[12]
c[13]
c[14]
c[16]
=
=
=
=
=
18.2 119
Specular color
Light position
Eye position
(n, 0.0, 0.0, 0.0)
(2.0, 2.0, 2.0, 2.0)
GLubyte vpPhong_str[] =
"!!VP1.0\n"
"DP4
"DP4
"DP4
"DP4
o[HPOS].x,
o[HPOS].y,
o[HPOS].z,
o[HPOS].w,
"ADD
"DP3
"RSQ
"MUL
R0,
R1,
R2,
R0,
c[0],
c[1],
c[2],
c[3],
v[OPOS];"
v[OPOS];"
v[OPOS];"
v[OPOS];"
c[12], -v[OPOS];"
R0, R0;"
R1.w;"
R0, R2;"
//
//
//
//
// Apply modelview and
// projection matrices
R0
R1
R2
R0
=
=
=
=
LP - X
|LP - X|^2
1/|LP - X|
L
"DP3 R3, R0, v[NRML];"
// R3 = N.L
"ADD
"DP3
"RSQ
"MUL
//
//
//
//
R4,
R5,
R6,
R4,
c[13], -v[OPOS];"
R4, R4;"
R5.w;"
R4, R6;"
R4
R5
R6
R4
=
=
=
=
EP - X
|EP - X|^2
1/|EP - X|
E
"DP3 R7, R4, v[NRML];"
"MUL R7, R7, c[16];"
"MAD R8, R7, v[NRML], -R4;"
// R7 = E.N
// R7 = 2*(E.N)
// R8 = 2*(E.N)N-E = R
"DP3 R9, R8, R0;"
// R9 = R.L
"LOG R10, R9.x;"
"MUL R9, c[14].x, R10.z;"
"EXP R11, R9.z;"
// R10.z = LOG(R.L)
// R9 = n*LOG(R.L)
// R11 = EXP(n*LOG(R.L)) = (R.L)^n
"MUL R10, R3, c[10];"
"MAD o[COL0], c[11], R11.z, R10;"
// R10 = Cd*(N.L)
// o[COL0] = Cd*(N.L) + Cs*(R.L)^n
"END";
18.3
High-Level Shading Languages
• OpenGL, DirectX APIs support assembly interface for vertex and fragment programs
• Hard to program (maintain, read) assembly
• Several high level shading languages now available: Cg, GLSL, Microsoft HLSL, Sh
18.4
Cg
• Cg is an example of a C-like language to create shaders
Cg
18.3 120
• Created and supported by NVIDIA, but can target other cards
• Also API independent: OpenGL or DirectX
• Compile in advance (to assembly) or at runtime
• Web page for docs http://developer.nvidia.com/Cg
Cg example (from nvidia Cg Toolkit User’s Manual)
Have to define inputs and outputs:
// define inputs from application
struct appin {
float4 Position : POSITION;
float4 Normal : NORMAL;
};
// define outputs from vertex shader
struct vertout {
float4 Hposition : POSITION;
float4 Color0 : COLOR0;
};
vertout main(appin In,
uniform float4x4 ModelViewProj : C0,
uniform float4x4 ModelViewIT : C4,
uniform float4 LightVec)
{
vertout Out;
Out.Hposition = mul(ModelViewProj, In.Position);
// transform normal from model space to view space
float4 normal = normalize(mul(ModelViewIT, In.Normal).xyzz);
// store normalized light vector
float4 light = normalize(LightVec);
// calculate half angle vector
float4 eye = float4(0.0, 0.0, 1.0, 1.0);
float4 half = normalize(light + eye);
// calculate diffuse component
float diffuse = dot(normal, light);
// calculate specular component
float specular = dot(normal, half);
specular = pow(specular, 32);
// blue diffuse material
float4 diffuseMaterial = float4(0.0, 0.0, 1.0, 1.0);
// white specular material
float4 specularMaterial = float4(1.0, 1.0, 1.0, 1.0);
Sh
18.4 121
// combine diffuse and specular contributions
// and output final vertex color
Out.Color0 = diffuse * diffuseMaterial + specular * specularMaterial;
return Out;
}
18.5
Sh
• Sh embeds the shading language in a C++ API
• Developed at the University of Waterloo
• API independent: OpenGL or DirectX
• Compiles at runtime
• Can also generate code for host CPU
• Can also be used for general-purpose computation
• Web page: http://libsh.org
Sh example (following Cg example)
Have to define global parameters (a little more general than Cg shader, have converted hardcoded values to parameters):
// transformation matrices
ShMatrix4x4f ModelViewProj;
ShMatrix4x4f ModelViewIT;
// light direction vector
ShVector3f LightVec;
// blue diffuse material
ShColor4f diffuseMaterial(0.0, 0.0, 1.0, 1.0);
// white specular material
ShColor4f specularMaterial(1.0, 1.0, 1.0, 1.0);
// specular power
ShAttrib1f spec_power = 32;
ShProgram vs = SH_BEGIN_PROGRAM("gpu:vertex") {
ShInputPosition4f position;
ShInputNormal3f normal;
ShOutputPosition4f Hposition;
ShOutputColor4f Color0;
Hposition = ModelViewProj | position;
Ray Tracing
// transform normal from model space to view space
normal = normalize(ModelViewIT | normal)(0,1,2));
// store normalized light vector (will be lifted to host)
ShVector3f light = normalize(LightVec);
// calculate half angle vector
ShVector3f eye(0.0, 0.0, 1.0);
ShVector3f half = normalize(light + eye);
// calculate diffuse component
ShAttrib1f diffuse = (normal | light);
// calculate specular component
ShAttrib1f specular = (normal | half);
specular = pow(specular, spec_power);
// combine diffuse and specular contributions
// and output final vertex color
Color0 = diffuse * diffuseMaterial + specular * specularMaterial;
} SH_END;
// load it into vertex shader
shBind(vs);
18 122
19
RAY TRACING
19
123
Ray Tracing
19.1
Fundamentals
Ray Tracing: Photorealism – The Holy Grail
• Want to make more realistic images
– Shadows
– Reflections
• What happens in the real world?
Problem: Many rays never reach the eye.
• Idea: Trace rays backwards
Ray Tracing: Basic Code
foreach pixel
ray = (eye, pixel-eye);
Intersect(Scene, ray);
end
Issues:
• Which pixels?
• How do we perform intersections?
• How do we perform shading?
• How can we speed things up?
• How can we make things look better?
Ray Tracing/Casting: Selecting the initial ray
• Setting: eyepoint, virtual screen (an array of virtual pixels, and scene are organized in
convenient coordinate frames (e.g. all in view or world frames)
Intersection Computations
19.1 124
• Ray: a half line determined by the eyepoint and a point associated with a chosen pixel
• Interpretations:
– Ray is the path of photons that succesfully reach the eye
(we simulate selected photon transport through the scene)
– Ray is a sampling probe that gathers color/visibility information
ray
scene
screen
eye
(Readings: Watt: 12.1. Red book: 14.7. White book: 16.12. )
19.2
Intersection Computations
Intersection Computations
General Issues:
• Ray: express in parametric form
E + t(P − E)
where E is the eyepoint and P is the pixel point
• Scene Object: direct implicit form
– express as f (Q) = 0 when Q is a surface point, where f is a given formula
– intersection computation is an equation to solve:
find t such that f (E + t(P − E)) = 0
• Scene Object: procedural implicit form
– f is not a given formula
– f is only defined procedurally
– A(f (E + t(P − E)) = 0) yields t, where A is a root finding method
(secant, Newton, bisection, ...)
Quadric Surfaces
Surface given by
Ax2 + Bxy + Cxz + Dy 2 + Eyz + F z 2 + Gx + Hy + Jz + K = 0
Intersection Computations
• Ellipsoid:
19.1 125
x2 y 2 z 2
+ 2 + 2 =1
a2
b
c
Ellipsoid
• Elliptic paraboloid:
x2 y 2
+ 2 =1
p2
q
Elliptic paraboloid
x2 y 2 z 2
+ 2 − 2 =1
a2
b
c
• Hyperboloid of one sheet:
Hyperboloid of one sheet
• Cone:
x2 y 2 z 2
+ 2 − 2 =0
p2
q
r
Cone
• Elliptic cylinder:
x2 y 2
+ 2 =1
p2
q
Elliptic cylinder
• Ray given by
x = xE + t(xP − xE )
y = yE + t(yP − yE )
z = zE + t(zP − zE )
• Substitute ray x,y,z into surface formula
– quadratic equation results for t
– organize expression terms for numerical accuracy; ie. to avoid
∗ cancellation
∗ combinations of numbers with widely different magnitudes
Polygons:
• The plane of the polygon should be known
Ax + By + Cz + D = 0
– (A, B, C, 0) is the normal vector
Shading
19.2 126
– pick three succesive vertices
vi−1 = (xi−1 , yi−1 , zi−1 )
vi = (xi , yi , zi )
vi+1 = (xi+1 , yi+1 , zi+1 )
– should subtend a “reasonable” angle
(bounded away from 0 or 180 degrees)
– normal vector is the cross product (vi1 − vi ) × (vi−1 − vi )
– D = −(Ax + By + Cz) for any vertex (x, y, z, 1) of the polygon
• Substitute ray x,y,z into surface formula
– linear equation results for t
• Solution provides planar point (x̄, ȳ, z̄)
– is this inside or outside the polygon?
Planar Coordinates:
• Take origin point and two independent vectors on the plane
O = (xO , yO , zO , 1)
~b0 = (u0 , v0 , w0 , 0)
b~1 = (u1 , v1 , w1 , 0)
• Express any point in the plane as
P − O = α0~b0 + α1~b1
– intersection point is (ᾱ0 , ᾱ1 , 1)
– clipping algorithm against polygon edges in these α coordinates
Alternatives: Must this all be done in world coordinates?
• Alternative: Intersections in model space
– form normals and planar coordinates in model space and store with model
– backtransform the ray into model space using inverse modeling transformations
– perform the intersection and illumination calculations
• Alternative: Intersections in world space
– form normals and planar coordinates in model space and store
– forward transform using modeling transformations
Shading
19.3
19.2 127
Shading
Shading, shadows
• How do we use ray to determine shade of pixel?
• At closest intersection point, perform Phong shading.
Gives same images as polygon renderer, but more primitives.
• Idea: Before adding contribution from a light, cast ray to light.
– If ray hits object before light, then don’t shade.
– This gives shadows.
Reflections
• Idea: Cast a ray in the mirror direction.
• Add the colour coming from this ray to the shade of the initial ray.
• This gives mirror reflections
N
• We perform a full lighting calculation at the first intersection of this reflected ray.
Recursive Ray Tracing
19.3 128
(Readings: Watt: 12.1.)
19.4
Recursive Ray Tracing
Ray Tracing: Recursive
• Eye-screen ray is the primary ray
• Backward tracking of photons that could have arrived along primary
• Intersect with all objects in scene
• Determine nearest object
• Generate secondary rays
– to light sources
– in reflection-associated directions
– in refraction-associated directions
• Continue recursively for each secondary ray
• Terminate after suitably many levels
• Accumulate suitably averaged information for primary ray
• Deposit information in pixel
Ray Casting: Non-recursive
• As above for ray tracing, but stop before generating secondary rays
• Apply illumination model at nearest object intersection with no regard to light occlusion
• Ray becomes a sampling probe that just gathers information on
– visibility
– color
(Readings: Watt: 12.2.)
Surface Information
19.5
19.4 129
Surface Information
Surface Normals:
• Illumination models require:
–
–
–
–
surface normal vectors at intersection points
ray-surface intersection computation must also yield a normal
light-source directions must be established at intersection
shadow information determined by light-ray intersections with other objects
• Normals to polygons:
– provided by planar normal
– provided by cross product of adjacent edges
– Or use Phong normal interpolation if normals specified at vertices
• Normals to any implicit surface (eg. quadrics)
– move from (x, y, z) to (x + ∆x, y + ∆y, z + ∆z) which is maximally far from the surface
– direction of greatest increase to f (x, y, z)
• Taylor series:


f (x + ∆x, y + ∆y, z + ∆z) = f (x, y, z) + [∆x, ∆y, ∆z] 

∂f
∂x
∂f
∂y
∂f
∂z


 + ···

– maximality for the gradient vector of f
– not normalized
• Normal to a quadric surface


2Ax + By + Cz + G
 Bx + 2Dy + Ez + H 


 Cx + Ey + 2F z + J 
0
Normal Transformations: How do affine transformations affect surface normals?
• Let Pa and Pb be any two points on object
– arbitrarily close
– ~n · (Pb − Pa ) = 0
– using transpose notation: (~n)T (Pb − Pa ) = 0
• After an affine transformation on Pa ,Pb :
M(Pb − Pa ) = MPb − MPa
we want (N~n) to be a normal for some transformation N:
(N~n)T M(Pb − Pa ) = 0
=⇒ ~nT NT M(Pb − Pa )
and this certainly holds if N = (M−1 )T
Modeling and CSG
19.5 130
• Only the upper 3-by-3 portion of M is pertinent for vectors
• Translation:
(M−1 )T

1 0
 0 1
0 0

1
0
 0
1
=
 0
0
−∆x −∆y
 

 nx
0 

ny 
=
0 
 nz  
1
0



0
1 0 0
0 
 −→  0 1 0 
0 
0 0 1
1
0
0
1
−∆z

nx
ny 

nz 
0
=⇒ no change to the normal
• Rotation (example):
T
cos(−θ) sin(−θ) 0 0
 − sin(−θ) cos(−θ) 0 0 

= 

0
0
1 0 
0
0
0 1


cos(θ) sin(θ) 0 0
 − sin(θ) cos(θ) 0 0 

= 

0
0
1 0 
0
0
0 1


cos(θ) sin(θ) 0
−→  − sin(θ) cos(θ) 0 
0
0
1

(M−1 )T
=⇒ rotation applied unchanged to normal
• Scale:
1
sx
0
0

 0
−1 T
(M ) = 
 0

1
sy
0
0
1
sz
0
0


0

1
sx
0

 0

0
1
sy
0

0
 1

s
0 
 x
 −→  0

0 

0
1
 nx 
nx

 
  ny  

 
0 
 n  = 

 
z
1
0

sz
=⇒ reciprocal scale applied to normal
0

sx
ny
sy
nz
sz
0






0
0
1
sy

0 

0
1
sz
Modeling and CSG
19.6
19.5 131
Modeling and CSG
Modeling: Constructive Solid Geometry
• How do we model for a Ray Tracer?
• Hierarchical modeling works well, but we can do more.
• In Constructive Solid Geometry all primitives are solids.
• New type of internal node: Boolean operation.
Intersection, Union, Difference
• Thus, our model is a DAG with
– Leaf nodes representing primitives
– Interal nodes are transformations, materials, or boolean operations.
material
boolean
transform
transform
primitive
primitive
CSG: The primitives
We will want a rich set of primitives. How do we specify them?
• As a “canonical” primitive
x
x
y
z
x
y
z
x
y
z
Sphere()*Scale(2,2,2)*Translate(x,y,z)
• As a transformed canonical primitive
– Sphere(r,x,y,z);
– Cube(x,y,z,dx,dy,dz);
– Cone(width,height,x,y,z,dx,dy,dz);
CSG: Traversing the transformation tree
• After transformation applied, primitives will be warped.
y
z
Modeling and CSG
19.5 132
• Rather than intersect ray with warped primitive, we transform the ray.
• On the way down, apply inverse transformation to ray.
• On the way back, apply transformation to the point, normal
Caution: see notes on transforming normals
Primitive
CSG: Boolean operations
• Could apply boolean operations to transformed primitives
Problem: representation too complex
• Idea: perform a complete ray intersect object with each primitive. This gives us a set of
line segment(s).
Next, perform boolean operations on line segments.
A
B
C
D
AB U CD
AB ^ CD
AB − CD
CD − AB
• Note that if we transform the ray on the way down, then we must transform the entire
segment on the way back
• Also, we must be careful with normals: they flip for difference.
Texture Mapping
19.6 133
Examples: Union, Intersection, Difference, Difference, Complex Model
19.7
Texture Mapping
• If we add detail by increasing model complexity, then computation cost increases.
• If detail is surface detail, then we can use texture mapping.
• Idea: scan a photo of the detail and paste it on objects.
– Associate texture with polygon
– Map pixel onto polygon and then into texture map
– Use weighted average of covered texture to compute colour.
Pixel
Texture Map
Surface (polygon)
• Tile polygon with texture if needed
– For some textures, tiling introduces unwanted pattern
– Various method to extend textures
• Greatly improves images!
• Not just ray traced image
Texture Mapping
19.6 134
Bump Mapping
• Textures will still appear “smooth” (i.e., no shadows)
• Bump mapping is similiar to texture mapping except that we peturb the normal rather than
the colour.
+
=
• Perturbed normal is used for lighting calculation.
• Convincing – usually fail to notice silhouette is wrong.
Texture Mapping
Solid Textures
• 2D textures can betray 2D nature in images
• Hard to texture map onto curved surfaces
• Idea: Use a 3D texture instead
• Usually procedural
Example:
if ( (floor(x)+floor(y)+floor(z))%2 == 0 ) then
return RED;
else
return SILVER:
end
Gives a “3D checker board”
• Turbulence can also be simulated (marble)
19.6 135
Bounding Boxes, Spatial Subdivision
(Readings: Watt: 8.)
19.8
Bounding Boxes, Spatial Subdivision
Speed-ups
• Ray tracing is slow
• Ray intersect object is often expensive
• Improve speed two ways
– Reduce the cost of ray intersect object
– Intersect ray with fewer objects
Bounding Boxes
• Idea: Place a bounding box around each object
• Only compute ray intersect object if the ray intersects the bounding box
19.7 136
Bidirectional Tracing
19 137
• If box aligned with coordinate axes, ray intersect box is very cheap
• Be careful with CSG/Hierarchical
• Can also use bounding spheres
• Most useful when ray intersect object is VERY expensive
Example: polygonal object with lots of facets
• Construction of good bounding box can be difficult
Spatial Subdivision
• Idea: Divide space in to subregions
• Place objects from scene in to appropriate subregions
• When tracing ray, only intersect with objects in sub-regions through which the ray passes
• Useful when lots of small objects in scene
• Determining subdivision is difficult
Bidirectional Tracing
19 138
20
BIDIRECTIONAL TRACING
20
139
Bidirectional Tracing
20.1
Missing Effects
• Problem: Raytracing and radiosity can’t model all effects
Caustics
Lens
• Some effects requiring tracing light rays from light back to eye
• Too many to trace them all. How do we select?
20.2
Distribution Ray Tracing
• Ray trace, but at each reflection cast a lot of rays
• Cast with distribution function to represent reflection properties
Bidirectional Path Tracing
• Distributing rays over reflected direction gives soft reflections
(similar effect if distributed over transmission direction)
• Distributing rays over light area gives soft shadows
• Distributing rays over aperature gives depth of field
• Distributing rays over time gives motion blur
• Can use to model caustics, but need lots of rays
(20+ rays per reflection)
• Can model many effects simply, but often very expensive
Example: Distributed reflection
Example: Distributed aperture
20.3
Bidirectional Path Tracing
• Idea: trace paths from eye and from light and connect them up
Trace paths (single reflected ray)
• Reflect with distribution function
• When far enough, connect them up
• Problem: A whole lot of rays
• Low error, high noise
• Less expensive than distribution ray tracing
20.2 140
Aliasing
20.4
Photon Maps
• Cast rays from light
Global illumination (view independent)
• Create a “photon map” wherever this light hits
• The use standard ray casting,
no secondary rays
look at photon map(s) to determine special lighting
• Use density estimation to convert photon map to intensity
• Fast, easy to program, low noise
• Errors
Example: caustics
20 141
Aliasing
20 142
21
ALIASING
21
Aliasing
21.1
Aliasing
Aliasing and Anti-Aliasing
• Raster Image is a sampling of a continuous function
• If samples spaced too far apart, then don’t get true representation of scene:
• In graphics, a variety of bad things happen:
– Stairstep or “jaggies”
– Moire Patterns
– Loss of small objects
– Temporal
∗ Sampled too far apart in time
Backwards rotating wheels
∗ Crawling jaggies
∗ Appearing/dissappearing objects, flashing objects
Image as a signal
• Signal processing signal is function of time
• Scene is a function of space
Spatial domain: f (u)
• Raster image is a sampling of this signal
• Can represent signal as sum of sine waves
Frequency domain: F (u)
143
Aliasing
21.0 144
0.5
1
0.5
0.5
0
0
0
0
−0.5
0
5
10
−1
0
0.5
1
0
0
5
10
−0.5
0
5
10
1
−0.5
0
5
10
5
10
2
0
0
−1
−0.5
0
5
10
−1
0
5
10
−2
0
5
10
−2
0
• Regular sampling restricts frequencies at which we sample
Nyquist Limit
• Theory tells us that we must sample at twice the highest frequency in the image to avoid
aliasing.
• This sampling rate is known as the Nyquist Limit
• Problem: Man made objects have distinct edges
Distinct edges have infinite frequency
What to do?
• After we get image, run through low pass filter
This helps, but not a full solution
• Get a Higher Resolution Monitor
This helps, but...
– Not usually feasible
– Alleviates jaggies but
∗ Moire patterns merely shifted
Aliasing
21.0 145
∗ Small objects still vanish
– Increased CPU spent on extra pixels can be put to better use.
• Smarter sampling
Area Sampling
Rather than sample, we could integrate.
For lines, this means treating them as boxes
.4
.05
.4
.8
.5
.6
.5
.1
• Colour shades of gray based on fraction of pixel covered
• Gives better looking images at a sufficiently far distance
Look close and it looks blurry
Weighted Sampling
• Unweighted sampling is a box filter
I=
Z
x∈Box
Ix dI
– No contribution outside of pixel
– All contributions are equal
• Weighted sampling
– Give different weights depending on position in pixel
vs
– Filter may extend outside of pixel
Avoids certain temporal aliasing problems
“Correct” filter is infinite
.4
Shadows
21 146
Anti-aliasing in Ray Tracing
• Can’t always integrate area under pixel
• For ray tracing, we want to point sample the image
• Super Sampling
Take more samples and weight with filter
If sampling pattern regular, we still get aliasing
• Stochastic Sampling
– Idea: Eye easily detects coherent errors (aliasing)
Eye is poor at detecting incoherent errors (noise)
– Rather than regular supersampling, we “jitter” the samples in one of several ways:
∗ Choose random location within pixel
∗ Displace small, random distances from regular grid
22
SHADOWS
22
Shadows
22.1
Overview
• Shadows help viewer to locate objects
• Already seen shadows in ray tracer: how about interactive?
• Will consider three methods:
Projective shadows, shadow maps, volume shadows
22.2
Projective Shadows
For drawing shadows on a plane.
After drawing scene,
• Draw ray from light through corners of polygon and intersect with plane.
• Draw projected polygon as a dark colour with alpha blending
Depth test strictly less than!
Advantages: fast, simple
Disadvantages: shadows only on a plane
147
Shadow Maps
22.3
22.2 148
Shadow Maps
Given a scene...
Near
Screen
Render scene from light’s viewpoint (disable colour write)
Far
Shadow Maps
22.2 149
Near
Far
Light Screen
Screen
• Store the z-map (this is the shadow map)
• Possibly render “deeper”
Now render from eye’s viewpoint
Near
Far
Screen
P
At point P that eye sees on surface,
• Convert P ’s coordinates to light’s frame
• Look up distance from light using shadow map
Shadow Volumes
22.3 150
• If distance in shadow map “equal” to distance from light to P , do lighting calculation. Otherwise in shadow.
• One (or more!) shadow map(s) per light
• Aliasing (lots of work on this)
• Depth test (lots of work on this)
• Needs hardware support
– Special purpose hardware (obsolete)
– Use fragment shader to do look up
• If you don’t move lights or objects (just view),
then you don’t need to rerender shadow maps each frame.
• Works best with directional and spot lights...
With point light source in viewing volume, have to put cube around light and render 6 shadow
maps
Near
Far
Screen
Light Screens
22.4
Shadow Volumes
• Multiple drawing passes to render shadows
• Uses stencil buffer to determine where shadows are
Stencil buffer: store per pixel data, do operations and tests on stencil data, and use to affect
drawing to frame buffer
Shadow Volumes
22.3 151
• Idea (assume one light source):
– For each point P on surface, consider shadow planes cast by silhouette edges
– Count each front facing shadow plane as +1
and each rear facing plane as -1
– If sum is > 0 then P in shadow, otherwise light reaches P .
• We can use graphics hardware for shadow volumes as described on next slide.
+1 +1
-1
-1
1
0
0
1
1. Draw scene normally
2. Draw in stencil buffer, front facing shadow polygons using prev depth buffer (do not update
depth buffer)
Increment stencil buffer on draws
3. Draw in stencil buffer, backfacing polygons polygons
Decrement stencil buffer on draws
4. Redraw scene with light off, but only update pixels that
• have exact depth match
• have non-zero stencil value
22.3 152
Screen
Screen
Shadow Volumes
Screen
Shadow Volume
Screen
Screen
Scene
0
0
1
1
0
0
Front facing +1
0
0
1
0
Back facing -1
Draw
Shadow
Redraw with light off
Single Polygon
Screen
Screen
Screen
When more than one polygon...
Silhoutte
• Draw shadow faces only for silhouette edges of polyhedra
Problem: have to detect silhouette edges
• Draw shadow volume for each polygon facing away from light
Shadow face for two polygons sharing an edge cancel
Only silhouette edges have only one of front/back pair
Downside: a lot more drawing than needed
• Lots of drawing modes to get right
Multiple Polygons
Modeling of Natural Phenomena
• Infinite polygons?
OpenGL tweaks can give you this
• Light map may help
• Problems if viewpoint inside shadow volume
• Need to repeat for each light
22 153
Modeling of Natural Phenomena
22 154
23
MODELING OF NATURAL PHENOMENA
23
23.1
155
Modeling of Natural Phenomena
Fractal Mountains
1. How do we model mountains?
• Lots of semi-random detail
• Difficult to model by hand
• Idea: Let computer generate random effect in controlled manner
2. Start with triangle, refine and adjust vertices
• At each step of refinement, adjust height of vertices
• Use scaled random numbers to adjust height
Z0 = h(1)
Z4=(Z0+Z1)/2 + h(2)
Z3=(Z0+Z2)/2 + h(2)
Z1 = h(1)
Z2 = h(1)
Level 0
Z5=(Z1+Z2)/2 + h(2)
Level 1
Level 2
3. Details
• What to use for h?
Random number, Gaussian distribution, scaled based on level
I.e., for deeper level, use smaller scale
• May want to do first step manually
Triangular grid, place peaks and valleys
• Could use different h functions to simulate different effects
• Automatic colour generation
high == white
medium == brown
low == green
4. Results:
• Not physically based, but...
• Look good for little work
• Don’t look at from directly overhead
(Readings: Red book, 9.5; White book, 20.3;
References; Fornier, Fussell, Carpenter, Computer Rendering of Stochastic Models, GIP, 1982
)
Particle Systems
23.2
23.2 156
L-system Plants
1. L-systems: Context free plants
2. Idea: Model growth/structure of plant as CFG
3. CFG: Symbols, rules
• A, B, C, D
• A → CBA, B → BD
4. Start symbol A
A → CBA → CBDCBA → CBDDCBDCBA
5. Plants need more complex L-systems/geometry
• Thickness
• Semi-random, 3D branching
• Leaf model
6. Top three things to make it look good:
Texture mapping,
Texture mapping,
Texture mapping
7. Plants don’t grow like this
• Grow from top up, outside out
• Respond to environment (context sensitive)
• Interact with each other
23.3
Particle Systems
• How do we model “fuzzy” objects? Objects with
– “soft” boundary
– changing boundary
– chaotic behavior
Examples: Clouds, fire, water, grass, fur
• Could texture map “fuzziness,” but changing shape is hard
• Another way is with Particle Systems
Basic idea: model fuzzy objects as large collection of particles
Used to model “Genesis” effect in The Wrath of Kahn
Particle Systems
• Animate fuzzy or gaseous objects as a changing cloud of “particles”
• Aim for overall effects by having many, simple particles
• Each particle has properties:
– Geometry (point, sphere, line segment)
– Position
– Velocity vector
– Size
– Colour
– Transparency
– State
– Lifetime
Animating Particles Systems
• New particles are born, old ones die
• State information describes type of particle
• At each time step, based on state
– Update attributes of all particles
– Delete old particles
– Create new particles
– Display current state of all particles
• To anti-alias, draw line segment from old position to new position
• To draw grass or fur, draw entire trajectory of particle
23.2 157
Radiosity
Particle System Details
• Easy to implement state machine
• Hard part is determining how to make particles act
• Particles usually independent
Don’t know about one another
• Often will model gravity when updating particles
• Render fire etc using transparency
Brighter where particle system denser
23 158
24
RADIOSITY
24
159
Radiosity
24.1
Definitions and Overview
Radiosity
Radiosity: Diffuse interaction of light
• Ambient term is an approximation to diffuse interaction of light
• Would like a better model of this ambient light
• Idea: “Discretize” environment and determine interaction between each pair of pieces.
• Models ambient light under following assumptions:
– Conservation of energy in closed environment
– Only diffuse reflection of light
• All energy emitted or reflected accounted for by its reflection or absorption elsewhere
• All light interactions computed once, in a view independent way
– Multiple views can then be rendered just using hidden surface removal
– No mirror/specular reflections
– Ideal for architectural walkthroughs
Radiance: Electromagnetic energy flux, the amount of energy traveling
• at some point x
• in a specified direction θ,φ
• per unit time
• per unit area perpendicular to the direction
• per unit solid angle
• for a specified wavelength λ
• denoted by L(x, θ, φ, λ)
Spectral Properties: Total energy flux comes from flux at each wavelength
R λmax
• L(x, θ, φ) = λmin
L(x, θ, φ, λ)dλ
Picture: For the indicated situation L(x, θ, φ)dx cos θdωdt is
• energy radiated through differential solid angle dω = sin θdθdφ
• through/from differential area dx
• not perpendicular to direction (projected area is dx cos θ)
• during differential unit time dt
Definitions and Overview
24.0 160
n
dω
θ
dx
φ
Power: Energy per unit time (as in the picture)
• L(x, θ, φ)dx cos θdω
Radiosity: Total power leaving a surface point per unit area
R
R π R 2π
• Ω L(x, θ, φ) cos θdω = 02 0 L(x, θ, φ) cos θ sin θdφdθ
(integral is over the hemisphere above the surface point)
Bidirectional Reflectance Distribution Function:
• is a surface property at a point
• relates energy in to energy out
• depends on incoming and outgoing directions
• varies from wavelength to wavelength
• Definition: Ratio
– of radiance in the outgoing direction
– to radiant flux density for the incoming direction
ρbd (x, θi , φi , λi , θo , φo , λo ) =
Li (x,θ xi ,φ xi , λi )
Lo (x, θxo , φox , λo )
Li (x, θxi , φix , λi ) cos θxi dωxi
n
Lo(x,θ xo ,φ xo , λo )
θ xo
x
t
φ xo
Definitions and Overview
24.0 161
Energy Balance Equation:
Lo (x, θxo , φox , λo ) = Le (x, θxo , φox , λo ) +
Z π Z 2π Z λmax
2
ρbd (x, θxi , φix , λi , θxo , φox , λo )
0
0
λmin
cos(θxi )Li (x, θxi , φix , λi )dλi sin(θxi )dφix dθxi
• Lo (x, θxo , φox , λo ) is the radiance
– at wavelength λo
– leaving point x
– in direction θxo , φox
• Le (x, θxo , φox , λo ): radiance emitted by surface from point
• Li (x, θxi , φix , λi ): incident radiance impinging on the point
• ρbd (x, θxi , φix , λi , θxo , φox , λo ) is the BRDF at the point
– describes the surface’s interaction with light at the point
• the integration is over the hemisphere above the point
Radiosity Approach to Global Illumination:
• Assume that all wavelengths act independently
– ρbd (x, θxi , φix , λi , θxo , φox , λo ) ≡ ρbd (x, θxi , φix , θxo , φox )
– L(x, θx , φx , λ) ≡ L(x, θx , φx )
• Assume that all surfaces are purely Lambertian
– ρbd (x, θxi , φix , θxo , φox ) ≡
ρd (x)
π
• As a result of the Lambertian assumption
– L(x, θx , φx ) ≡ L(x)
R
– B(x) def. = Ω L(x) cos(θx )dω = πL(x)
Simple Energy Balance (Hemisphere Based):
Z
ρd (x) i
o
e
L (x) = L (x) +
L (x) cos(θxi )dω
π
Ω
Multiplying by π and letting E(x) = πLe (x):
B(x) = E(x) + ρd (x)
Z
Li (x) cos(θxi )dω
Ω
But, in general
Li (x, θxi , φix ) = Lo (y, θyo , φoy ) for some y
So we let
θxi = θxy , θyo = θyx , and Li (x) =
for the appropriate point y.
Picture (Scene Based Energy Balance):
B(y)
π
Definitions and Overview
24.0 162
ny
yx
nx
xy
y
dA(y)
r
x
dA(x)
Visibility:
We use a term to pick out the special y
1 if y is visible from x
H(x, y) =
0 otherwise
Area:
We convert dω to surface area
dω =
cos θyx
dA(y)
kx − yk2
Simple Energy Balance (Scene Based):
Z
B(x) = E(x) + ρd (x)
B(y)
y∈S
cos θxy cos θyx
H(x, y)dA(y)
πkx − yk2
Piecewise Constant Approximation:
• Approximate the integral by breaking it into a summation over patches
• Assume a constant (average) radiosity on each patch
B(y) = Bj for y ∈ Pj
X Z
cos θxy cos θyx
B(x) ≈ E(x) + ρd (x)
Bj
H(x, y)dA(y)
πkx − yk2
y∈Pj
j
• Solve only for a per-patch average density
Definitions and Overview
24.0 163
– ρd (x) ≈ ρi for x ∈ Pi
R
– Bi ≈ A1i x∈Pi B(x)dA(x)
R
– Ei ≈ A1i x∈Pi E(x)dA(x)
Piecewise Constant Radiosity Approximation:
Z
Z
X
1
cos θi cos θj
Bi = Ei + ρi
Bj
Hij dAj dAi
Ai x∈Pi y∈Pj πkx − yk2
j
Form Factor:
1
Fij =
Ai
Z
Z
x∈Pi
cos θi cos θj
Hij dAj dAi
πkx − yk2
y∈Pj
Note, by symmetry, that we have
Ai Fij = Aj Fji
Linear Equations: (by Summetry)
Bi = Ei + ρi
X
Fij Bj
j
Bi = Ei + ρi
X
Fji
j
Aj
Bj
Ai
Radiosity: (Summary)
• Discretize scene into n patches (polygons) each of which emits and reflects light uniformly
under its entire area.
• Radiosity emitted by patch i is given by
Bi = Ei + ρi
X
Fij Bj
X
Fji
j
= E i + ρi
j
Aj
Bj
Ai
–
–
–
–
Bi , Bj : radiosity in energy/unit-time/unit-area
Ei : light emitted from patch i
ρi : patch i’s reflectivity
Fj,i : Form factor specifying fraction of energy leaving j that reaches i (accounts for
shape, orientation, occulsion)
– Ai , Aj : Area of patches
Radiosity: Full Matrix Solution
• The equations are
Bi = Ei + ρi
X
Bj Fij
1≤j≤n
or
Bi − ρi
X
1≤j≤n
Bj Fij = Ei
Form Factors
24.1 164
• In matrix form

1 − ρ1 F1,1 −ρ1 F1,2 . . .
 −ρ2 F2,1 1 − ρ2 F2,2 . . .


..
..

.
.
−ρn Fn,1
−ρn Fn,2 . . .
−ρ1 F1,n
−ρ2 F2,n
..
.
1 − ρn Fn,n





B1
B2
..
.
Bn


 
 
=
 
E1
E2
..
.
En





• Bi ’s are only unknowns
• If Fi,i = 0 (true for polygonal patches) then diagonal is 1
• Solve 3 times to get RGB values of Bi
(Readings: Hearn and Baker in OpenGL: 10-12. Watt: Chapter 11.)
24.2
Form Factors
Calculation
• Form factor specifies fraction of energy leaving one patch that (directly) arrives at another
patch.
Aj
dA j
j
Nj
Ni
r
i
dA i
Ai
• The differential form factor is given by
ddFdi,dj =
cos θi cos θj
Hij dAj dAi
πr2
if dAi occluded from dAj
if dAi visible from dAj
where
Hij =
0
1
Form Factors: Calculation
• To see how much of dAi illuminates patch j, we integrate:
Z
cos θi cos θj
dFdi,j =
Hij dAj dAi
πr2
Aj
Form Factors
24.1 165
• The form factor from Ai to Aj is an area average of the integral over Ai :
Z Z
cos θi cos θj
1
Hij dAj dAi
Fi,j =
Ai Ai Aj
πr2
• Typically we approximate this integral:
–
–
–
–
Ray tracing
Hemi-sphere
Hemi-cube
Compute dFdi,j
• Lots of Fi,j ’s may be zero leading to a sparse matrix
Form Factors: Hemi-sphere Form Factors
• Place a hemisphere around patch i and project patch j onto it
N
dAi
• Select a point on each patch and look at angles
• Project patch j onto hemisphere, and project projection into circle: Fdi,j =
HA is the area of the circle.
• Note that any polygon with same “cross section” has same form factor
• Projecting onto hemisphere is still hard
Form Factors: Hemi-cube Form Factors
• Project onto a hemi-cube
• Subdivide faces into small squares
PA
HA
where
Form Factors
24.1 166
• Now determine which squares patch j projects onto
Form Factors: Delta Form Factors
• Each hemi-cube cell P has pre-computed delta form factor
∆FP =
cos(θi )cos(θP )
∆AP
πr2
dAp
r
N
i
P
N
• Approximate dFdj,i by summing delta form factors
• If distance from i to j is large, this is good approximation for Fj,i .
Form Factors: Exact Form Factors
• We can compute the exact form factor for point to polygon
Progressive Refinement
24.2 167
Nj
R3
0
R2
E2
E3
E1
Ai
R0
E0
dAj
R1
The differential form factor is given by FdAj Ai =
1
2π
P
i Nj
· Γi where
– Nj is the normal to patch j
– Γi is the vector in direction Ri+1 × Ri with length equal to θi (in radians).
• Doesn’t account for occlusion
24.3
Progressive Refinement
• Recall our equation says how much radiosity is comes from patch j to patch i:
Bi due to Bj = ρi Bj Fji
Light is being gathered at patch i.
• Instead we can ask “how much radiosity” is shot from patch i to patch j?
Bj due to Bi = ρj Bi Fij
= ρj Bi Fji
Aj
Ai
• Idea: Choose a patch, shoot its radiosity to all other patches, repeat.
Progressive Refinement: Code
Keep track of total radiosity (B) and unshot radiosity (dB)
Procedure Shoot(i)
For all j, calculate all Fji
Foreach j
drad = pj*dBi*Fji*Ai/Aj
dBj += drad
Bj += drad
endfor
dBi = 0
Meshing in Radiosity
24.3 168
Call from
while (unshot > eps) do
Choose patch i with highest dB
Shoot(i)
end
Progressive Refinement: Analysis
• Shoot lights first
• Can stop and look at partial results
• Can be formulated as a matrix equation
• Lots of cute tricks:
– Add initial ambient to all patches so that initial results more viewable
– Can move objects and lights after calculation has started
• Technically it is slower than full matrix methods, but...
• Form factors usually not stored since they are computed on the fly
– Advantage: save storage space
– Disadvantage: some form factors may need to be computed multiple times
Radiosity Issues
Questions:
• How big should we make initial patches?
• When do we stop Progressive-Refinement?
Problems
• T-vertices and edges cause light/shadow leakage
• Occlusions and shadows hard to model
• Form factor estimations often cause aliasing
Extensions
• Methods for adding specular (but expensive)
• Substructuring improves quality without increasing big-O
• Smarter substructuring reduces big-O
24.4
Meshing in Radiosity
Issues
• Initial Mesh Size?
• T-vertices, etc?
• Shadow Boundaries
Meshing in Radiosity
24.3 169
• Soft Shadows
Two Techniques:
• Split along shadow boundaries
• Adaptive Subdivision
Split Along Shadow Boundaries – 2D
3 regions:
• Lit
• Unlit
• Linear
Source
Occluder
Split Along Shadow Boundaries – 3D
Lots of regions:
• Lit
• unlit
• Linear
• Quadratic
Source
Occluder
Adaptive Subdivision
• Make initial Meshing Guess
• Point sample a patch
• Average and check variance
Meshing in Radiosity
24.3 170
– Low ⇒ Good estimate
– High ⇒ Poor estimate
Subdivide and repeat
Problems with Adaptive Subdivision
• Radiosity has O(n2 ) run time
Subdivision increases n
• Ideas:
– Shoot from big patches
– Receive at small patches
Sub problems:
– sub-patch to big-patch association
– T-vertices
Gap
Quad Tree
B
A
D
E
F
G
C
• Store as
Photon Maps
24 171
A B
C
DE F G
• Traverse up to find parent
• Traverse up-down to find neighbor
• Anchoring
Photon Maps
24 172
25
PHOTON MAPS
25
173
Photon Maps
25.1
Overview
• Radiosity too expensive, doesn’t do caustics, etc.
• Photon mapping idea:
– trace rays from lights, bounce off shiny surfaces,
– store light information where light hits diffuse surfaces.
– Then ray trace, and use stored light to achieve global illumination effects.
• General steps of photon mapping:
– Emit photons
Mostly distribution of n photons around light source
– Trace photons
Bounce off shiny surfaces, store at diffuse surfaces
– Estimate irradiance
– Ray trace, using estimated irradiance as needed
• LS+D: Idea based on bouncing light off shiny surfaces until it hits diffuse surface
L
S
D
S
• L(S|D)*D: bounce off both shiny and diffuse surfaces and store information at diffuse surfaces.
• “Shiny” surface: light leaves in a fixed direction (relative to incoming direction)
Includes transparent (refractive) surfaces
• Similar to ray tracing, but cast rays from lights
• When light hits shiny surface, bounce to next surface
Use Russian Roulette to send ray to next surface based on BRDF.
• When light hits diffuse surface, store surface point in data structure (kD tree, etc).
Also store surface normal, intensity/power of light.
Overview
To estimate irradiance at a point,
• Do a k nearest neighbour search to find closest stored photon information
Usually try to limit search to a local region (sphere)
• Average to get irradiance for the point
• Since kD-tree is space (not surface) based, may pick up photons on nearby surface
May cause noise in image
• When ray tracing, use radiance information in lighting equation
• To get caustics, use
Direct light + mirror + refraction + ambient + irradiance est
• To use for global illumination, use
Direct light + mirror + refraction + irradiance est
but photon tracing is performed differently
25.0 174
Overview
25.0 175
• Need to work harder or smarter to get global illumination
• Harder: trace a LOT more rays from light
• Smarter: trace rays from light (Russian Roulette)
and trace rays from eye (Monte Carlo)
and meet in the middle
Eye
...
...
Light
Monte Carlo
During ray tracing
During photon tracing
Polyhedral Data Structures
• Number of photons to cast from light
• Parameters in irradiance estimate
value of k, radius of limiting volumes, etc.
• Monte Carlo vs Russian Roulette
• Noise, noise, noise
25 176
26
POLYHEDRAL DATA STRUCTURES
26
177
Polyhedral Data Structures
26.1
Storage Models
Polyhedra
• How do we store a polyhedron in memory?
Must consider the following:
– Memory
– Efficiency
Operations
• Will look at three formats
– Ray Tracer
– Generalized Ray Tracer
– Winged-edge variations
Ray Tracer Format
• We already saw one ASCII format (for the ray tracer)
• Data structure for this is simple:
– Array of points (triples of floats)
– Array of faces, with pointers to points
(x, y, z)
(x, y, z)
V0
(x, y, z)
(x, y, z)
V2
V3
V1
Compact, simple to get face information
3
3
3
3
012
213
031
023
Storage Models
26.0 178
• Advantages
– Space efficient
– Easy to generate, parse, build data structure
• Disadvantages
– Vertex neighbours?
– Modify the data structure?
Example: What if we want to know faces surround a vertex?
Radiosity might want this
• Solution: For each point, have a list of pointers to surrounding faces.
– Can use same ASCII input format
– Build lists when reading data
V0
(x, y, z)
(x, y, z)
023
(x, y, z)
013
(x, y, z)
123
012
V2
V3
V1
Question: Where do these lists come from?
• Problems still remain:
– How do we modify a polyhedron?
– Easy to move vertex
3
3
3
3
012
213
031
023
Euler’s Formula
26.1 179
– Add face or vertex is easy
– Split face not too hard
0
0
3
2
1
1
[0 1 2] -> [0 1 3]
[1 2 3]
[2 0 3]
– Delete is hard
O(n) or leaves holes in our list
(Readings: Hearn and Baker in OpenGL: 8-1 (not very useful). Watt: 2.1.)
26.2
Euler’s Formula
• Closed polyhedron:
V − E + F − H = 2(C − G)
– V: Number of vertices
– E: Number of edges
– F: Number of faces
– H: Number of holes
– C: Number of connected components
– G: Number of genus (sphere = 0, torus = 1)
• Examples:
2
Winged Edge
26.2 180
Cube
V=
E=
F=
G=
C=
H=
F=
G=
C=
H=
F=
G=
C=
H=
Torus 1
V=
E=
Torus 2
V=
26.3
E=
Winged Edge
• Operations:
– Want to traverse
∗ Neighbouring faces of a face/vertex
∗ Neighbouring vertices of a face/vertex
∗ Edges of a face
– Want to modify (add/delete) the polyhedron
• Key ideas of winged-edge:
– Edge is important topological data structure
– Also, separate topology from geometry
• Edge is the primary data structure
Winged Edge
26.2 181
v1
next left
f1
prev right
f2
prev left
next right
v2
• Pictorially:
Polygon and neighbors
Data Structures for...
F
Lots of pointers
F
Variations
• Some operations simplified by splitting edge into half-edges
• Uses a lot of space. Time-space trade-off.
Winged Edge
26.2 182
Winged Edge
Half-edge
Minimal Edge
Data types
struct he {
struct he* sym;
struct he* next;
struct he* prev;
struct vert* v;
struct face* f;
void* data;
}
struct vert {
struct he* rep;
void* data;
}
struct face {
struct he* rep;
void* data;
}
• Example: Neighbouring faces of f
struct
struct
struct
struct
int i;
face* f;
he* e;
he* s;
face* fl[LOTS];
s = e = f->rep;
i = 0;
Winged Edge
do {
fl[i++] = e->sym->f;
e = e->next;
} while (e != s);
• Example: Removing an edge
RemoveEdge(struct he* e) {
/* fix edge->edge pointers */
e->prev->next = e->sym->next;
e->next->prev = e->sym->prev;
e->sym->next->prev = e->prev;
e->sym->prev->next = e->next;
/* fix edge->face pointers */
ee = e->sym->next;
while (ee != e->sym) {
ee->f = e->f;
ee = ee->next;
}
/* fix face->edge pointers */
e->f->rep = e->prev;
/* fix vertex->edge pointers */
e->v->rep = e->sym->prev;
e->sym->v->rep = e->prev;
DeleteFace(e->sym->f);
DeleteEdge(e);
}
• Manifolds with Boundary
– Half-edge allows representation of manifold w/boundary
Set sym pointer to NULL
– Allows for lone face
– Makes some constructions easier
• Duality
– Faces and vertices are dual
Representations and rôles are identical
– Can replace each face with a vertex and each vertex with a face
26.2 183
Splines
26 184
– If boundaries, then dual may not be manifold
• Evaluation
+ Faces with arbitrary number of sides
Vertices with arbitrary number of neighbours
+ Iterate over everything
– Not space efficient
– Painful to write/debug code
** Simpler data structure better unless you need to modify, iterate
• API
– Discussions in papers use low level operators
– Better if user of package does NOT manipulate pointers
– Higher level “safe” operators, iterators:
∗
∗
∗
∗
ForeachMeshVertex
ForeachFaceVertex
Split 3-1
RemoveEdge
– Example: Split all faces 3-1
ForeachMeshFace(m,f) {
p = SplitFace3to1(f);
SetPosition(P,x,y,z);
}
– Which operations should we provide?
27
SPLINES
27
27.1
185
Splines
Constructing Curve Segments
Constructing Curve Segments
Linear blend:
• Line segment from an affine combination of points
P01 (t) = (1 − t)P0 + tP1
t
(1-t)
P 10
P0
P1
Quadratic blend:
• Quadratic segment from an affine combination of line segments
P01 (t) =
(1 − t)P0 + tP1
P11 (t) =
(1 − t)P1 + tP2
2
P0 (t) = (1 − t)P01 (t) + tP11 (t)
P1
P 11
P 10
P0
Cubic blend:
P 20
P2
Constructing Curve Segments
27.0 186
• Cubic segment from an affine combination of quadratic segments
P01 (t)
P11 (t)
P02 (t)
P11 (t)
P21 (t)
P12 (t)
P03 (t)
=
(1 − t)P0 + tP1
=
(1 − t)P1 + tP2
= (1 − t)P01 (t) + tP11 (t)
=
(1 − t)P1 + tP2
=
(1 − t)P2 + tP3
= (1 − t)P11 (t) + tP21 (t)
= (1 − t)P02 (t) + tP12 (t)
3
P0
P 11
P 10
(1-t)
P 12
P1
2
2
P0
P2
(1-t)
P 30
P0
t
P1
t (1-t)
1
P 20
P3
(1-t)
1
1
P0
P 21
t
P2
P1
t (1-t)
t (1-t)
P0
0
P1
0
P2
P3
P0
P1
P2
P3
• The pattern should be evident for higher degrees.
Geometric view (deCasteljau Algorithm):
• Join the points Pi by line segments
• Join the t : (1 − t) points of those line segments by line segments
• Repeat as necessary
• The t : (1 − t) point on the final line segment is a point on the curve
• The final line segment is tangent to the curve at t
0
t
0
Bernstein Polynomials
27.1 187
P 10
t
(1
-t)
P 01
P 11
(1-t)
t
t
-t)
(1
P 20
P 02
P 00
Expanding Terms (Basis Polynomials):
• The original points appear as coefficients of Bernstein polynomials
P00 (t)
P01 (t)
P02 (t)
P03 (t)
=
=
=
=
1 · P0
(1 − t)P0 + tP1
(1 − t)2 P0 + 2(1 − t)tP1 + t2 P2
(1 − t)3 P0 + 3(1 − t)2 tP1 + 3(1 − t)t2 P2 + t3 P3
P0n (t)
=
Pn
where
n
i=0 Pi Bi (t)
Bin (t)
=
n!
(n−i)!i! (1
−
t)n−i ti
=
n
i
(1 − t)n−i ti
• The Bernstein polynomials of degree n form a basis for the space of all degree-n polynomials
27.2
Bernstein Polynomials
Bernstein Polynomial Properties
Partition of Unity:
Pn
n
i=0 Bi (t)
=1
Proof:
1 = (t + (1 − t))n
n X
n
=
(1 − t)n−i ti
i
=
i=0
n
X
i=0
Bin (t).
Bézier Splines
Non-negativity:
27.2 188
Bin (t) ≥ 0, for t ∈ [0, 1].
Proof:
n
i
> 0
t ≥ 0 for 0 ≤ t ≤ 1
(1 − t) ≥ 0 for 0 ≤ t ≤ 1
Many other nice properties...
27.3
Bézier Splines
Bezier Curves
Definition:
A degree n (order n + 1) Bézier curve segment is
P (t) =
n
X
Pi Bin (t)
i=0
where the Pi are k-dimensional control points.
Examples:
Convex
Pn Hull:
n
n
i=0 Bi (t) = 1, Bi (t) ≥ 0 for t ∈ [0, 1]
=⇒ P (t) is a convex combination of the Pi for t ∈ [0, 1]
=⇒ P (t) lies within convex hull of Pi for t ∈ [0, 1].
Affine Invariance:
• A Bézier curve is an affine combination of its control points.
Bézier Splines
27.2 189
• Any affine transformation of a curve is the curve of the transformed control points.
!
n
n
X
X
n
T
Pi Bi (t) =
T (Pi ) Bin (t)
i=0
i=0
• This property does not hold for projective transformations!
Interpolation:
P
B0n (0) = 1, Bnn (1) = 1, ni=0 Bin (t) = 1, Bin (t) ≥ 0 for t ∈ [0, 1]
=⇒ Bin (0) = 0 if i 6= 0, Bin (1) = 0 if i 6= n
=⇒ P (0) = P0 , P (1) = Pn .
Derivatives:
n−1
n−1
d n
(t))
dt Bi (t) = n(Bi−1 (t) − Bi
0
=⇒ P (0) = n(P1 − P0 ), P 0 (1) = n(Pn − Pn−1 ).
Smoothly Joined Segments (C1 ): :
Let Pn−1 , Pn be the last two control points of one segment.
Let Q0 , Q1 be the first two control points of the next segment.
Pn = Q0
(Pn − Pn−1 ) = (Q1 − Q0 )
Pn-1
Pn
Q0
Q1
Smoothly Joined Segments (G1 ):
Pn = Q0
(Pn − Pn−1 ) = β(Q1 − Q0 ) for some β > 0
Spline Continuity
27.3 190
Recurrence, Subdivision:
n−1
Bin (t) = (1 − t)Bin−1 + tBi−1
(t)
=⇒ de Casteljau’s algorithm:
P (t) = P0n (t)
k−1
Pik (t) = (1 − t)Pik−1 (t) + tPi+1
Pi0 (t) = Pi
Use to evaluate point at t, or subdivide into two new curves:
• P00 , P01 , . . . P0n are the control points for the left half;
1 , . . . P n are the control points for the right half
• Pn0 , Pn−1
0
P 01
P 02
P 00
P 03
P 11
P 10
P 12
P 01
P 02
P 30
P 00
P 21
P 20
P 21
P 20
1
P0
P 00
P 03
P 12
P 30
P 03
Spline Continuity
27.4
27.3 191
Spline Continuity
Polynomials Inadequate
• Weierstrass Approximation Theorem: Can approximate any C 0 curve to any tolerance
with polynomials
But may require high degree
• To model complex curves, will need high degree
• High degree:
– Non-local
– Expensive to evaluate
– Slow convergence as we increase degree
Piecewise Polynomials
• Idea: Instead of one high degree polynomial, piece together lots of low degree polynomials
• Benefits:
– Fast to evaluate
– Good convergence properties
– Potentially local
• Problem:
– Continuity between pieces
C 0 Piecewise Cubic Bézier
• Piecewise cubic
• Bézier form
• Bézier Property: curve interpolates first control point
• Bézier Property: curve interpolates last control point
• C 0 : Set last control point of one segment to be first control point of next segment
P1
P2
Q1
P0
Q3
P3 = Q 0
Q2
C 1 Piecewise Cubic Bézier
Spline Continuity
27.3 192
• Need parameterizations of intervals to discuss C 1 continuity
• Assume uniform parameterization
[0, 1], [1, 2], [2, 3], . . .
• Need C 0 to have C 1
P3 = Q0
• C 1 is P3 − P2 = Q1 − Q0
P1
P2
P0
P3 = Q0
Q3
Q1 Q2
Cubic Hermite Interpolation
• Problem: Given points P0 , . . . , PN and vectors ~v0 , . . . , ~vN
Find: Piecewise C 1 cubic P s.t.
P (i) = Pi
P 0 (i) = ~vi
for i = 0, . . . , N
• Solution: Use one cubic Bézier segment per interval
Then
Pi,0 = Pi
Pi,1 = Pi +
~vi
3
Pi,2 = Pi+1 −
~vi+1
3
Pi,3 = Pi+1
Catmull-Rom Splines
• When modelling, specifying derivatives can be either good or bad, but more commonly
bad
• Want to specify just points
• Idea: make up derivatives from points, and use Cubic Hermite
Spline Continuity
27.3 193
• For i = 1, . . . , N − 1 let
~vi = Pi+1 − Pi−1
• Need derivatives for i = 0, N .
– Discard data
– Set to 0
– Set to P1 − P0 (perhaps scaled)
C 2 Piecewise Cubic Bézier
• With cubics, we can have C 2 continuity (why not C 3 ?)
• A-frame construction gives C 2 constraints on Bézier segments
• Too hard to make user place points in this manner, so...
• Modelling: User places four control points, program places next three, user places one
more, program places next three, ...
• Could hide program placed control points
• Redundant representation
C 1 Bézier Spline
• Suppose we have a C 1 Bézier spline
P1
P0
P2
P3 = Q0
Q1 Q2
Q3
Spline Continuity
27.3 194
• For C 1 , cubic Bézier spline, need only two control points per segment, plus one more at start
and one more at end.
P1
P2
P0
Q3
Q1 Q2
C 2 Bézier Spline
• Suppose we have a C 2 Bézier spline
Joints can be computed as described for C 1
If we keep the gray points, we can compute the black points
• Thus, for C 2 , cubic Bézier spline, need only one control point per segment, plus two more at
start and end.
Tensor Product Patches
27.4 195
• From gray points, we can recover Bézier control points
• The gray points are B-spline control points.
Evaluating B-splines
• Cubic B-splines give us C 2 continuity for little effort.
• To evaluate a B-spline, we could convert to Bézier and evaluate the Bézier curves.
• There is also a de Casteljau style evaluation
The de Boor algorithm.
• Thus far, have considered the case for intervals [0, 1], [0, 2], . . .
(i.e., integers)
One polynomial over each interval
• In general, B-splines can go over arbitrary intervals [t0 , t1 ], [t1 , t2 ], . . .
where t0 < t1 < t2 < . . .
ti are called knots
• B-splines have different basis functions
27.5
Tensor Product Patches
• Control polygon is polygonal mesh with vertices Pi,j
• Patch basis functions are products of curve basis functions
P (s, t) =
n X
n
X
n
Pi,j Bi,j
(s, t)
i=0 j=0
where
n
Bi,j
(s, t) = Bin (s)Bjn (t)
P00
P01
P33
P02
P03
Tensor Product Patches
27.4 196
The Teapot
Properties:
• Patch basis functions sum to one
n X
n
X
Bin (s)Bjn (t) = 1
i=0 j=0
• Patch basis functions are nonnegative on [0, 1] × [0, 1]
Bin (s)Bjn (t) ≥ 0 for 0 ≤ s, t ≤ 1
=⇒ Surface patch is in the convex hull of the control points
=⇒ Surface patch is affinely invariant
(Transform the patch by transforming the control points)
Subdivision, Recursion, Evaluation:
• As for curves in each variable separately and independently
• Tangent plane is not produced!
– Normals must be computed from partial derivatives.
Partial Derivatives:
• Ordinary derivative in each variable separately:
n X
n
X
∂
d n
P (s, t) =
Pi,j
B (s) Bjn (t)
∂s
ds i
i=0 j=0
n X
n
X
∂
d n
n
P (s, t) =
Pi,j Bi (s)
B (t)
∂t
dt j
i=0 j=0
• Each is a tangent vector in a parametric direction
Tensor Product Patches
27.4 197
• The (unnormalized) surface normal is given at any regular point by
∂
∂
P (s, t) × P (s, t)
±
∂s
∂t
(the sign dictates what is the outward pointing normal)
• In particular, the cross-boundary tangent is given by
(e.g. for the s = 0 boundary):
n
X
n
(Pi,1 − Pi,0 ) Bin (t)
i=0
(and similarly for the other boundaries)
P0,3
P3,3
P0,0
P3,0
Smoothly Joined Patches:
• Can be achieved by ensuring that
(Pi,n − Pi,n−1 ) = β(Qi,1 − Qi,0 ) for β > 0
(and correspondingly for the other boundaries)
P2 2
P1 2
P1 3
P0 2
Q 01
• Divide up into polygons:
Q 20
Q 10
P0 3 Q 0 0
Rendering:
P2 3
Q 21
Q 11
Q 31
P3 2
Q 30
P3 3
Barycentric Coordinates
27.5 198
A. By stepping
s = 0, δ, 2δ, . . . , 1
t = 0, γ, 2γ, . . . , 1
and joining up sides and diagonals to produce a triangular mesh
B. By subdividing and rendering the control polygon
Tensor Product B-splines
• Could use B-splines instead of Bézier
Automatic continuity between patches
Problem with tensor product patches
• Work well for rectilinear data
• Problems arise when filling non-rectangular holes
Suitcase Corner
• A lot of data is non-rectangular
Triangular
27.6
Barycentric Coordinates
Coordinate Frames:
• Vector oriented; Derived from linear space basis
• One point and n vectors in space of dimension n: Dn , ~v0 , . . . , ~vn−1
– Vectors ~vi are linearly independent
– Coordinates are weights of vectors, with weight of 1 for point
Barycentric Frames
Triangular Patches
27.6 199
• Point oriented
• n+1 points in space of dimension n: D0 , . . . , Dn
– Points are in general position
– Coordinates are weights of points, with coordinates summing to 1
Frames of Both Types Are Equivalent
• Express each ~vi as Di − Dn for Di = Dn + vi
P
= Dn +
= Dn +
= (1 −
n−1
X
i=0
n−1
X
pi~vi
pi (Di − Dn )
i=0
n−1
X
pi )Dn +
i=0
=
n
X
wi Di where
i=0
n−1
X
pi Di
i=0
n
X
wi = 1
i=0
• And, of course, conversely
D1
v1
D0
v0
D
D1
D0
D2
D2
Triangular Patches
27.7
27.6 200
Triangular Patches
deCasteljau Revisited Barycentrically:
• Linear blend expressed in barycentric terms
(1 − t)P0 + tP1 = rP0 + tP1 where r + t = 1
• Higher powers:
P (t) =
n
X
Pi
i=0
n!
i!(n − i)!
(1 − t)n−i ti
Symmetric Form of Bernstein Polynomials
P ((r, t))
=
=⇒
X
Pi
i+j =n
i ≥ 0, j ≥ 0
X
n!
i!j!
ti rj where r + t = 1
n
Pij Bij
(r, t)
i+j =n
i ≥ 0, j ≥ 0
Examples
0
{B00
(r, t)} = {1}
1
1
{B01
(r, t), B10
(r, t)} = {r, t}
2
2
2
{B02
(r, t), B11
(r, t), B20
(r, t)} = {r2 , 2rt, t2 }
3
3
3
3
{B03
(r, t), B12
(r, t), B21
(r, t), B30
(r, t)} = {r3 , 3r2 t, 3rt2 , t3 }
Surfaces – Barycentric Blends on Triangles:
• Formulas:
X
P (r, s, t) =
i+j+k =n
i ≥ 0, j ≥ 0, k ≥ 0
n
Bijk
(r, s, t) =
n! i j k
rs t
i!j!k!
Triangular deCasteljau:
• Join adjacently indexed Pijk by triangles
• Find r : s : t barycentric point in each triangle
n
Pijk Bijk
(r, s, t)
Subdivision Surfaces
27.7 201
• Join adjacent points by triangles
• Repeat
– Final point is the surface point P (r, s, t)
– Final triangle is tangent to the surface at P (r, s, t)
P300
P030
P021
P012
P003
Properties:
• Each boundary curve is a Bézier curve
• Patches will be joined smoothly if pairs of boundary triangles are affine images of domain
triangles
P111
P120
P030
P021
P102
P003
P012
Q 111
Q 102
Q 120
Problems:
• Continuity between two patches is easy, but joining n patches at a corner is hard
• In general, joining things together with either tensor product or triangular patches is
hard
Subdivision Surfaces
27.8
27.7 202
Subdivision Surfaces
Introduction
• Hard to piece spline surfaces together
• Hard to fit splines to arbitrary mesh
n-sides faces, n-vertex neighbours
• Subdivision is an alternative surfacing scheme
Fits surface to arbitrary mesh
Only a few “gotcha’s”
• Will look at two simple subdivision schemes
Both schemes are simple to implement
Neither scheme is one of “choice”
• (This material is from Chapter 7 of Warren, Weimer, Subdivision Methods for Geometric
Design)
Polyhedron
• Start with a description of a polyhedron
List of vertices, list of faces
• Example: A cube
Vertices:
{{0,0,0}, {1,0,0}, {1,1,0}, {0,1,0}, {0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}}
Faces:
{{1,4,3,2}, {1,2,6,5}, {2,3,7,6}, {3,4,8,7}, {4,1,5,8}, {5,6,7,8}}
• Valence(v): number of faces containing v
• Triangle mesh: all faces are triangles
• Quad mesh: all faces are quads
Topological Subdivision
• First step in subdivision is to split each face into new set of faces
Will consider two types of splits (others exist)
• Triangular (linear) splits
• Quad (bilinear) subdivision
Subdivision Surfaces
27.7 203
Bilinear Subdivision Plus Averaging
1. Perform bilinear subdivision of mesh
2. Compute centroid cf of each quad face f
3. For each vertex v of subdivided mesh, set v to
P
f ∈n(v) cf
#n(v)
where n(v) is the set of faces neighbouring v and
#n(v) is the number of faces neighbouring v
(different rules used for mesh boundaries)
Catmull-Clark Example
Wavelets
27.8 204
• Start with a cube
• Repeatedly subdivide
• Do “something” to get normals
Linear Subdivision Plus Triangle Averaging
1. Perform linear subdivision of each triangle in mesh
2. For each vertex v of subdivided mesh,
(a) For each triangle f neighbouring v compute
cf = v/4 + 3v + /8 + 3v − /8
where v + and v − are the other two vertices of f
(b) Set v to
P
f ∈n(v) cf
#n(v)
Details, Issues
• The two schemes shown here are simple, but give poor surfaces
Catmull-Clark and Loop are examples of better schemes
• Boundaries are handled using different rules
• Special rules to add creases to surface
• Major implementation issue is data structure
• Extraordinary vertices pose difficulties
Valence other than 4 in quad mesh
Valence other than 6 in tri mesh
• Mathematics behind the schemes is far more elaborate than the schemes themselves
• Parameterizations needed for texture mapping
• Normals?
Wavelets
27.9
27.8 205
Wavelets
Wavelets are a discrete form of Fourier series
• Take a discrete signal (image).
• Decompose it into a sequence of frequencies.
• Use compact support basis functions rather than infinite support sin and cos.
• Construct a vector space using “unit pixels” as basis elements (piecewise constant functions).
• Average to get low frequencies.
• Construct “detail functions” to recover detail.
• Unit pixel bases form nested sequence of vector spaces, with the detail functions (wavelets)
being the difference between these spaces.
1-D Haar
• Suppose we have the coefficients
[9 7 3 5]
where we think of these coefficients as 1-D pixel values
The simplest wavelet transform averages adjacent pixels, leaving
[8 4]
• Clearly, we have lost information.
Note that 9 and 7 are 8 plus or minus 1, and 3 and 5 are 4 minus or plus one.
These are our detail coefficients:
[1 − 1]
Wavelets
27.8 206
• We can repeat this process, giving us the sequence
Resolution
4
2
1
Averages
[9 7 3 5]
[8 4]
[6]
Details
[1 -1]
[2]
• The Wavelet Transform (wavelet decomposition) maps from [9 7 3 5] to [6 2 1 –1] (i.e., the
final scale and all the details).
– The process is called a Filter Bank.
– No data is gained or loss; we just have a different representation.
– In general, we expect many detail coefficients to be small. Truncating these to 0 gives
us a lossy compression technique.
• Basis function for wavelets are called scaling functions.
For Haar, can use
φji (x) = φ(2j x − i)
where φ(x) = 1 for 0 ≤ x < 1 and 0 otherwise.
Support of a function refers to the region over which the function is non-zero.
Note that the above basis functions have compact support, meaning they are non-zero over a
finite region.
• The Haar Wavelets are
ψij (x) = ψ(2j − i)
where

for 0 ≤ x < 1/2
 1
−1 for 1/2 ≤ x < 1
ψ(x) =

0
otherwise
Wavelets
27.8 207
• Example again.
Originally, w.r.t. V 2 ,
I(x) = 9φ20 (x) + 7φ21 (x) + 3φ22 (x) + 5φ23 (x)
Rewriting w.r.t. V 1 and W 1 ,
I(x) = 8φ10 (x) + 4φ11 (x) + 1ψ01 (x) + (−1)ψ11 (x)
Rewriting the φs in terms of V 0 , W 0 ,
I(x) = 6φ00 (x) + 2ψ00 (x) + 1ψ01 (x) + (−1)ψ11 (x)
9x
8x
6x
7x
4x
2x
5x
1x
1x
3x
-1x
-1x
Non-Haar Wavelets
• Haar is simple but doesn’t have certain properties
• Non-Haar wavelets possible
• Example: Daubechies wavelet starts from
1.5
1
0.5
0
−0.5
0
0.5
1
The function is not as smooth as it looks!
1.5
2
2.5
3
Non-Photorealistic Rendering
27 208
• Haar often used in practice because it’s simple, cheap
Wavelet Compression
• Lossless image compression – how do we represent an image using as few bits as possible?
– Pigeon hole principle tells us we’ve lost before we start.
Have to have expectations about image before you can achieve any compression.
– Lossy compression involves two main steps: Losing part of the data, and then performing
lossless compression on what’s left.
• Can use wavelets to perform simple lossy part of compression.
If we order coefficients in decreasing magnitude, then error is minimized.
2D Haar and Image Compression
• Standard decomposition: Apply 1-D Haar to each row. Then apply 1-D Haar to each column.
• Nonstandard decomposition: Apply one step of 1-D Haar to each row. Then apply one step
of 1-D Haar to each column. Repeat on quadrant containing averages in both directions.
• Image compression in similar fashion, except it’s expensive to sort coefficients.
28
NON-PHOTOREALISTIC RENDERING
28
209
Non-Photorealistic Rendering
28.1
2D NPR
• Traditional goal of computer graphics is photorealism
• Accurate depiction of reality isn’t always the real goal
• How can computer graphics help us visualize, communicate, create art?
• We’ll look at some applications of computer graphics in the creation of art
Painterly rendering
• Idea: create a painterly interpretation of a photograph
• Starting with a source image, apply a model of strokes to approximate it
• Possible goals:
– Closeness of approximation
– Use as little paint (number of strokes, total stroke length) as possible
– Coverage of canvas
Paint by Relaxation
Could try to optimize directly, but it’s easier to have a kind of greedy approach, painting a sequence
of strokes
4 photographer images
Paint by numbers
Haeberli, SIGGRAPH 1990
• Interactive stroke placement (random displacement from pointer position)
• Stroke colours sampled from source image
3 face images
http://thinks.com/java/impressionist/
Extensions
Stroke orientation
2D NPR
28.0 210
Extensions
Painterly rendering with curved brushstrokes of multiple sizes
Hertzmann, SIGGRAPH 1998
• Create painting in layers: coarse to fine strokes (fill in detail where it’s needed)
• Pick a set of stroke locations; draw strokes where painting is unlike source image
• Long, curved strokes flow along contours of constant colour (perpendicular to image gradient)
• Large set of intuitive customizable parameters to create painting styles (e.g., max stroke
length)
Fast paint texture
Hertzmann, NPAR 2002
• Can also render a secondary bump map by drawing stroke texture instead of solid colour
• Bump map colour image using stroke texture image
4 stroke images
4 palm tree images
6 skeleton images
2D NPR
28.0 211
Stylization and abstraction of photographs
Santella and DeCarlo, SIGGRAPH 2002
• Stroke models follow image features, but they don’t understand the image. How can we apply
an NPR filter in a meaningful way?
• Let a person determine importance by having them look at the source image and tracking
their eye movements
• Not strokes, but large regions of constant colour
• Edges drawn as well
Woman with guitar photo
Woman with guitar NPR image
Simulating natural media
• Implement a physical simulation to approximate the behaviour and appearance of a traditional
artistic medium
Computer-Generated Watercolor
Curtis, Anderson, Seims, Fleischer and Salesin, SIGGRAPH 1996
• Very realistic simulation of the appearance of watercolour paints
• Treat the painting as a big fluid flow simulation
• Navier-Stokes equations to push fluid around on top of the paper
• Fluid and paper exchange pigment
• Paper propagates water via capillary action
Photo of watercolour brush strokes
Real paint
Simulation of watercolour brush strokes
Simulated
Samples of watercolour paint simulations
Fruit, and lots of it!
2D NPR
28.0 212
Pencil Rendering
Sousa and Buchanan, GI 1999, CGF 2000
• Simulation of pencil lead and paper, derived from close observation of real materials
• Model the geometry of the pencil tip, pressure on page
• Graphite particles can move to and from paper, so system can model pencils, erasers, and
blenders
• Pressure affects geometry of paper, and therefore appearance of future strokes
Real and simulated pencil
Crumpled paper
photo and 2 NPR pencil sketches of girl
Batik
Moose
Pen and Ink Illustration
• Problem: each stroke must simultaneously convey texture and tone
Stroke textures
Example textures
Wall images
View-dependent rendering of surface texture
Wall images
Lighting-dependent rendering for shadows and accenting
House
Two more houses
Indication
Interactive pen-and-ink
Examples
Approximately constant t
space
Wall images
3D NPR
28.1 213
Examples
Examples
ExamplesExamples
Orientable textures
Paint bushes
Racoon
28.2
3D NPR
• Support real-time non-photorealistic rendering of 3D scenes via hardware acceleration
HijackGL and NPRQuake
NPR Quake
NPR Quake
NPR Quake
Real-time hatching
Six examples
Image-space silhouettes
• Silhouettes are discontinuities in the depth image
• Creases are second order discontinuities in the depth image
Hex nut exampl
• The right image on which to do edge detection
Funky box examples
• Creases can also be seen as discontinuities in the normal image
Bust
Object-space silhouettes
• Given a polyhedral mesh and a camera position, find and draw all visible silhouettes
• Two subproblems:
– Find all possible silhouettes relative to the current viewpoint
– Process these silhouettes to determine visibility
3D NPR
28.1 214
Silhouettes
• What is a silhouette? For a smooth object, it’s a point where the vector from the camera
just grazes the point.
• In other words:
(p − c) · n = 0
Where p is the point on the surface,
c is the location of the camera,
and n is the normal at point p.
Silhouettes on meshes
• A mesh with face normals is not smooth
• Approximate silhouettes by finding mesh edges that separate a front face from a back face
• Slow to check all edges every frame, so use some kind of acceleration (edge buffer, probabilistic
checking, ...)
• Can also identify silhouettes on smooth mesh (one with vertex normals)
Silhouette visibility
• Just because an edge is a silhouette doesn’t mean it’s visible:
– Occlusion by another object
– Occlusion by another part of the same object
– Partially visible
• Need to decide, for every silhouette edge, which parts are visible
Image-space visibility processing
• Turn on depth buffering
• Draw all mesh faces in background colour
• Draw all silhouette edges, give every edge a unique colour that identifies it
• Frame buffer now holds pixel-accurate image of which pieces of silhouettes are visible
Stylized silhouettes
• Use visibility to guide placement of stylized strokes along paths
• Parameterization and temporal coherence are still problems
Animation
28 215
Toon shading
• Cartoons typically use a small range of colours for each object in a scene
– Shadow, body, and sometimes highlight
• Easy to simulate in ray tracer or real-time
– Quantize by diffuse attenuation to two or three colours
Elf girl
Roses
Toon shading in OpenGL
• Perform diffuse lighting computation at every vertex in software
• Use diffuse brightness as parameter to a one-dimensional texture map
– Map has only two or three colours
• Sample the texture with nearest-neighbour interpolation: deliberately not blended
• Could definitely be implemented directly on the GPU as a fragment program
Recent work
• WYSIWYG NPR (SIGGRAPH 2002)
• Coherent Stylized Silhouettes (SIGGRAPH 2003)
• Suggestive Contours (SIGGRAPH 2003)
Animation
28 216
29
ANIMATION
29
217
Animation
29.1
Overview
Computer Animation
Animation: Rapid display of slightly different images create the illusion of motion.
Conventional approach: Keyframed animation
Keyframes, inbetween frames
Computer Assisted:
• Human key frames, computer inbetweening
• Supporting techniques:
Squish-box deformations and skeletons, motion capture, kinematics and inverse kinematics.
• Other animation approaches:
Physically-based dynamics, constraint-based animation, procedural animation, behavioral animation.
29.2
Traditional 2D Cel Animation
Traditional 2D Cel Animation
• Traditional animation is labor intensive.
– Start with story board.
– Master artist draws keyframes to define action.
– Sweat-shop artists draw inbetween frames to complete animation.
• A few traditional animation rules:
– Stretch and squash (anti-aliasing), timing, secondary actions
– Exaggeration, appeal, follow through
– Anticipation, staging.
– Be careful with camera
∗ Smooth changes
∗ Few changes
• Disney was the most successful, but it was high risk.
Functional Animation
29.3
29.3 218
Automated Keyframing
• Replace the human inbetweener with interpolation algorithms.
• Keyframes correspond to settings of parameters at different points in time.
+ The computer provides repeatability and automatic management of keyframes.
– Interpolation is not as smart as a human inbetweener.
Animator may have to provide more key frames and/or additional information to get a good
result.
Utility
A good keyframe system limits the number and maximizes the utility of key parameters.
• Parameters should have immediate geometric or visible significance.
Entries in a transformation matrix are not good parameters.
• Static properties maintained automatically.
• Relationships between parts of articulated objects maintained automatically.
• Interpolation routines geared towards parameter types.
Motion paths, orientation, camera attitude, and surface properties: different types of control.
• Real-time interface to interactively set parameters and iteratively improve the animation.
29.4
Functional Animation
• Independent scalar function specified for each “keyframed” parameter.
• Functional animation is a basic capability that supports all others.
• Most useful for truly scalar quantities: brightness of a light source, for example.
• Splines are useful for representing functions.
• Continuity control is a must: both its automatic maintenance and selective breaking.
• The functions can be edited both explicitly, as graphs, or implicitly, through a direct manipulation interface.
Linear Interpolation
• Basic interpolation technique for supporting animation is linear interpolation, or the lerp.
• Given two parameters p0 and p1 at times t0 and t1 , an intermediate value is
p(t) =
t1 − t
t − t0
p0 +
p1 .
t1 − t 0
t1 − t0
Functional Animation
29.3 219
• Advantages and Disadvantages:
– Discontinuities in derivative exist at all key frame points.
+ The rate of change within a segment is constant (and so can easily be controlled).
Controlling Velocity
Given a constant rate of change, can create variable rate of change.
Given any function τ = f (t), reparameterize with τ .
For the lerp,
f (t) − f (t0 )
f (t1 ) − f (t)
p0 +
p1 .
p(τ ) = p(f (t)) =
f (t1 ) − f (t0 )
f (t1 ) − f (t0 )
Spline Interpolation
Instead of linear interpolation, spline interpolation can be used.
+ Continuity control can be obtained.
+ Fewer keyframes may be required for a given level of “quality”.
– Control points for the splines may have to be computed based on interpolation constraints at
the control points.
– Extra information may be required at keyframes, such as tangent vectors.
– Splines are more expensive to evaluate.
– Splines are more difficult to implement.
Spline Types for Animation
Different spline types will have different tradeoffs and capabilities:
B-splines: Give automatic continuity control, but only approximate their control points.
Non-uniform B-splines: Are needed to break continuity.
Non-uniform Rational B-splines (NURBS): Provide additional local control over the shape
of a curve.
Hermite splines: Require tangent vectors at each keyframe.
Catmull-Rom splines: Provide only first derivative continuity.
Motion Path Animation
29.4 220
Transformation Matrix Animation
• One way to support an animation capability: interpolate a transformation matrix.
• Keyframes would be “poses” of objects given by the animator.
• Functional animation would be applied independently to all entries of the transformation
matrix.
Unfortunately, does not support animation of rigid bodies.
• Given two poses of an object that differ by a 180◦ rotation.
• Under linear interpolation, object will not rotate but will turn inside out
collapses to a plane in the middle of the interpolation.
Rigid Body Animation
• Rigid body transformations only have 6 degrees of freedom
General affine transformations have 12.
• To obtain good interpolation we have to consider separately
– three degrees of freedom from translation
– three that result from orientation.
29.5
Motion Path Animation
We would like to translate a point through space along a given path. We would like:
• Independent control of velocity along path.
• Continuity control.
While splines can easily support continuity control, velocity control is more difficult.
Motion Path Spline Interpolation Problems
Spline position interpolation gives continuity control over changes position, but:
• Visually notice discontinuities in 2nd derivative – need C 3 splines (degree 4).
• Equal increment in spline parameter does not correspond to equal increment in distance along
the spline.
• Different segments of the spline with the same parametric length can have different physical
lengths.
• If we parameterize the spline directly with time objects will move at a non-uniform speed.
Orientation and Interpolation
29.5 221
Arc Length Parameterization
1. Given spline path P (u) = [x(u), y(u), z(u)], compute arclength of spline as a function of u:
s = A(u).
2. Find the inverse of A(u): u = A−1 (s).
3. Substitute u = A−1 (s) into P (u) to find a motion path parameterized by arclength, s: P (s) =
P (A−1 (s)).
Note that u (and thus s) should be global parameters, extending across all segments of the original
spline.
Velocity Control
To control velocity along a spline motion path,
• Let s = f (t) specify distance along the spline as a function of time t.
• The function f (t), being just a scalar value, can be supported with a functional animation
technique (i.e., another spline).
• The function f (t) may be specifed as the integral of yet another function, v(t) = df (t)/dt,
the velocity.
Integral of a spline function can be found analytically, through a manipulation of the control
points.
• The motion path as a function of time t is thus given by P (A−1 (f (t))).
Problems with Arc-Length Parameterization
1. The arc-length s = A(u) is given by the integral
s
Z u dx(v) 2
dy(v) 2
dz(v) 2
s = A(u) =
+
+
dv
dv
dv
dv
0
No analytic solution if the motion path is a cubic spline.
2. Since A(u) has no analytic form, A−1 (s) has no analytic form.
Issues in Real-Time Animation
• Exact arc-length parameterization not feasible.
• An alternative: compute points on the spline at equally-spaced parametric values, and use
linear interpolation along these chords.
• The linear interpolation should consider the distance between samples to maintain constant
velocity.
Orientation and Interpolation
29.6
29.5 222
Orientation and Interpolation
Interpolate angles rather than transformation matrices.
• In two dimensions, only one angle is involved and animation is straightforward.
• In three dimensions, orientation requires three degrees of freedom.
Interpolation is much nastier and harder to visualize.
Approaches
Two standard approaches to the orientation interpolation problem. Both related to problem of
specifying orientation in the first place:
Euler angles. Three angles: x-roll followed by y-roll followed by z-roll.
– Has defects: parameterization singularities, anisotropy, “gimbal lock”, unpredictable interpolation.
– Hard to solve inverse problem: given orientation, what are the angles?
+ Widely used in practice.
+ Easy to implement.
+ Inexpensive computationally.
Quaternions. Four-dimensional analogs of complex numbers.
+ Isotropic: avoid the problems of Euler angles.
+ Inverse problem easy to solve.
+ The user interface tends to be simpler.
– More involved mathmatically.
– Interpolation can be expensive in practice.
Euler Angles
• With ca = cos(θa ) and sa = sin(θa ),

cy cz
cy sz
−sy
 sx sy cz − cx sz sx sy sz + cx cz sx cy
R(θx , θy , θz ) = 
 cx sy cz + sx sz cx sy sz − sx cz cx cy
0
0
0
= Rx (θx )Ry (θy )Rz (θz ),

0
0 

0 
1
where Rx (θx ), Ry (θy ) and Rz (θz ) are the standard rotation matrices.
• Given a point P represented as a homogeneous row vector, the rotation of P is given by
P 0 = P R(θx , θy , θz ).
• Animation between two rotations involves simply interpolating independently the three angles
θx , θy , and θz .
Quaternions
29.6 223
Problems with the Euler angle approach include:
Parametric Singularity: A degree of freedom can suddenly vanish.
Anisotropy: The order of the axes is important.
Nonobviousness: The parameters lack useful geometric significance.
Inversion: Finding the Euler angles for a given orientation is difficult (not unique).
Coordinate system dependence: The orientation of the coordinate axes is important.
Gimbal Lock: An Example
• Gimbal lock is an example of a parametric singularity.
• Gimbal lock is a mechanical problem that arises in gyroscopes as well as quaternions.
• Set θy = π/2 = 90◦ , and set θx and θz arbitrarily. Then cy = 0, sy = 1 and the matrix
R(θx , π/2, θz ) can be reduced to


0
0
−1 0
 sx cz − cx sz sx sz + cx cz 0 0 

R(θx , θy , θz ) = 
 cx cz + sx sz cx sz − sx cz 0 0 
0
0
0 1


0
0
−1 0
 sin(θx − θz ) cos(θx − θz ) 0 0 

= 
 cos(θx − θz ) sin(θx − θz ) 0 0  .
0
0
0 1
• A y-roll by π/2 rotates the x-axis onto the negative z axis, and so a x-roll by θ has the same
effect as a z-roll by −θ.
y
y
90
z
xz
x
• Gimbal lock can be very frustrating in practice:
– During interactive manipulation the object will seem to “stick”;
– Certain orientations can be hard to obtain if approached from the wrong direction;
– Interpolation through these parametric singularities will behave strangely.
Quaternions
29.7
29.6 224
Quaternions
• Four-dimensional analogs of complex numbers.
• Can be used to represent orientation without a directional selectivity.
• Recall: multiplication of complex numbers represents orientation and rotation in the plane.
• The rectangular and polar form of a complex number p are
p = a + bi = Aeiθ .
• Multiplication is a rotation about the origin:
p1 p2 = A1 A2 ei(θ1 +θ2 )
Quaternions — Definitions
• Quaternions defined using three imaginary quantities: i, j, and k:
q = a + bi + cj + dk.
• Rules for combining these imaginary quatities:
i2 = j 2 = k 2 = −1,
ij = −ji = k,
jk = −kj = i,
ki = −ik = j.
• These rules are sufficient to define multiplication for quaternions.
• Quaternion multiplication does not commute.
• A quaternion can be broken into a scalar and a vector part:
q = (s, ~v ) = s + v1 i + v2 j + v3 k.
• In vector notation, product of two quaternions is
q1 q2 = (s1 s2 − ~v1 · ~v2 , s1~v2 + s2~v1 + ~v1 × ~v2 ).
• Quaternions also have conjugates: q̄ = (s, −~v ).
• The norm of a quaternion is defined by
|(s, ~v )| =
q
s2 + v12 + v22 + v32 .
Quaternions
29.6 225
Unit Quaternions
• Unit quaternions have unit norms
• Isomorphic to orientations
• The unit quaternion given by
qr = (cos(θ), sin(θ)~v )
is equivalent to a rotation by an angle of 2θ around the unit ~v .
Note that qr is equivalent to −qr when interpreted as an orientation.
Rotations and Quaternions
• Points in space can be represented by quaternions with a zero scalar part.
• Point P is represented by the quaternion
qP = (0, P ).
• The rotation of a point P by qr is
qP 0 = qr qP qr−1 .
• For unit quaternions, the inverse is equivalent to the conjugate.
Advantages of Quaternions
• Doing rotation this way is fairly perverse, except for three points:
1. For many applications, the independent definition of an axis of rotation and an angle
makes sense.
2. The definition of an orientation by a quaternion is coordinate system independent and
isotropic.
3. Spherical interpolation of quaternions gives better results than interpolation of Euler
angles.
Interpolating Unit Quaternions
• Linear interpolation on all the entries of the quaternion does not have unit norm.
Angular velocity is not constant if we renormalize.
• Spherical linear interpolation (slerp):
– Consider the quaternions as vectors, and find the angle between them:
ω = cos−1 (q1 · q2 ).
– Given a parameter u ∈ [0, 1], the slerp is
q(u) = q1
sin((1 − u)ω)
sin(uω)
+ q2
.
sin(ω)
sin(ω)
Animating Camera Motion
29.7 226
• Numerical difficulties when ω ≈ 0.
In such as case, replace the slerp with a lerp.
• Also problems with ω ≈ nπ/2;
This should probably be flagged with an error and/or a request for more keyframes.
29.8
Animating Camera Motion
• Requirements for camera motion are different from object motion:
– Specification of camera motion has a long cinematic tradition that should be respected.
– The camera should always be level, unless we specify otherwise.
– The image of objects of interest should be stable on the film plane.
Camera Cinematic Terminology
Dolly: Move forward, along the line of sight of the camera (towards the object of interest).
Track: Move horizontally, perpendicular to the line of sight of the camera. More generally, move
in a horizontal plane.
Crane: Raise the camera vertically.
Tilt (Bank): Rotate about the horizontal axis perpendicular to the line of sight of the camera.
Pan (Yaw): Rotate about the vertical axis of the camera (after tilt).
In addition, cameras have other parameters that can be animated:
Zoom (in, out): Change the angular field of view of the camera.
Focus: Change the focal depth, i.e. the distance at which objects are in focus.
Depth of Field: Changing the aperture size has the effect of changing the depth of field, i.e. the
range of depths over which objects can be considered to be in focus.
Camera Cinematics
• An animated zoom changes perspective, which can be disturbing.
Use dolly to enlarge the image of an object of interest.
• The camera should almost never be rotated about its view direction
Unless a seasick audience is the objective.
• Changing the focal depth can be used to track objects of interest,
but a sophisticated renderer is required to simulate focus.
• Depth of field is rarely changed in real cinematography due to technical limitations,
but might be useful in computer animation.
Tools for Shape Animation
29.8 227
• Use smooth spline animation for camera animation.
Quick camera moves should normally be replaced by cuts
(instantaneous changes of scene) unless a special effect is desired.
• Animation of spotlight sources is similar to the animation of a camera.
Support of a “light’s-eye-view”, therefore, is often useful.
Camera Animation Specification
• With a camera, usually more interested in what it’s looking at than its exact orientation
• Camera animation may be specified by
– A motion path for the camera itself.
– A motion path for a lookat point
(possibly derived from the motion of an object of interest).
• Camera moved along the motion path and the orientation of camera determined by the lookat
point.
• Ideally, “focus would be pulled” to match the distance to object of interest.
• Tilt might be constrained to lie within certain bounds.
29.9
Tools for Shape Animation
Skeletons
• Given a model with large number of vertices, vertices can be grouped and manipulated as a
unit.
Example: in an arm, all points describing the forearm move more-or-less as a rigid body.
• Connectivity between groups can be represented by tying each group to a “bone” and arranging bones in an articulated “skeleton”.
• The bone and all its associated vertices are treated as a single rigid object for the purposes
of transformation.
• Movement of the bones is constrained by the joints in the skeleton.
• Different kinds of joints (revolute, hinge, ball) can support specific types of motion.
• An animation can be previewed using only the bones, speeding rendering time.
• In the final rendering, the model is shown without bones.
• Enhancement: vertices may be influenced by more than one bone.
Results in more flexible and realistic surface near joints.
Example: a kneecap and its skin surface affected by both the femur and shinbone, and assume
a position halfway between either.
Tools for Shape Animation
29.8 228
Free-Form Deformations
• Sometimes, skelton cannot capture desired shape change of an object.
• Example: The “sqaush and stretch” of a bouncing ball as it hits the ground.
• Such global changes in shape can be expressed using a deformation.
• A deformation
– Changes the space around an object
– Nonlinear transformation
– New coordinates for every point in space are determined as functions of the old coordinates.
Process
1. Place rectangular “squish box” object to be animated.
2. The coordinates of all points within the box are determined relative to the frame given by
the box.
Suppose a vertex P can be expressed as [u, v, w] relative to the coordinates of the box.
3. The new coordinates of P are given by a tensor product Bézier spline B n1 ,n2 ,n3 (u, v, w) with
control points Pi,j,k .
4. If the Pi,j,k have coordinates
Pi,j,k = [i/(n1 + 1), j/(n2 + 1), k/(n3 + 1)],
the transformation is given by the identity:
[u, v, w] = B n1 ,n2 ,n3 (u, v, w).
Normally the control points are initially set to these values and are moved to effect a deformation.
FFD Issues
• Continuity conditions can be enforced.
Example: A hand is being deformed but the arm is not.
The control points along the edge of the box that cuts the wrist should not be moved, nor
the next layer.
This maintains both position and derivative continuity across the wrist.
• The object should be finely tesselated or radical deformations will not work properly.
• Not volume preserving.
For realistic animation, typically only small deformations are used.
• Modeling UI non-trivial
Manipulating control points inadequate
Kinematics and Inverse Kinematics
29.9 229
Skeletons and FFDs
• Skeletons and free-form deformations can be used simultaneously.
• The number of control points in a free-form deformation can be large
• If moved in groups relative to skeleton, excellent animation control can be obtained for arbitrary models.
29.10
Kinematics and Inverse Kinematics
Kinematics and Inverse Kinematics
Kinematics: The study of motion independent of the forces that cause the motion. Includes
position, velocity, acceleration.
Forward kinematics: The determination of the
• positions,
• velocities,
• accelerations
of all the links in an articulated model given the
• position,
• velocity,
• acceleration
of the root of the model and all the transformations between links.
• Forward kinematics is a necessity for skeletal keyframed animation
• Easy to implement.
Inverse kinematics: The derivation of the motion of intermediate links in an articulated body
given the motion of some key links.
Inverse Kinematics
• Often nonlinear, underdetermined or overdetermined, possibly ill-conditioned.
• Complexity of determining solution proportional to number of free links.
• One free joint between two fixed ones can be solved fairly efficiently, for example, with only
one spare degree of freedom.
• Extra constraints may be needed to obtain a unique and stable solution.
– Example: Requiring a joint to point downwards as a gross approximation to gravity
– Joint motion constraints (hinge vs. revolute vs. ball) are also useful.
Physically-Based Animation
29.10 230
• Additional optimization objectives
– Resulting optimization problem solved iteratively as an animation proceeds.
– Example optimization objectives:
∗ minimize the kinetic energy of structure;
∗ minimize the total elevation of the structure;
∗ minimize the maximum (or average) angular torque.
29.11
Physically-Based Animation
Idea: to obtain a physically plausible animation, simulate the laws of Newtonian physics.
In contrast to kinematics, this is called a dynamics approach.
• Have to control objects by manipulating forces and torques, either directly or indirectly.
• Animated objects may be passive: bouncing balls, jello, wall of bricks falling down, etc.
Inverse dynamics is difficult
• Finding forces to move a physical object along a desired path
• Most current applications are “passive” variety
• Useful for secondary effects in keyframe animation:
–
–
–
–
–
a mouse character’s ears should flap when it shakes its head,
a T. Rex’s gut should sway while it runs,
a feather in a cap should wave when wind blows on it,
cloth should drape around an actor and respond to his/her/its movements,
a wall of bricks should fall down when a superhero crashes into it.
Caution: simulated secondary effects can make bad keyframed animation look even worse!
Simulation
Setting up and solving a physically-based animation proceeds as follows:
1. Create a model with physical attributes: mass, moment of inertia, elasticity, etc.
2. Derive differential equations by applying the laws of Newtonian physics.
3. Define initial conditions, i.e., initial velocities and positions.
4. Supply functions for external forces (possibly via keyframing).
5. Solve the differential equations to derive animation, i.e., motion of all objects in scene as a
function of time.
• During solution of the differential equations we have to be prepared to deal with discontinuities
due to collisions.
• We will discuss the simulation of spring-mass and point mass models.
• Both have useful applications and are relatively simple to simulate.
Physically-Based Animation
29.10 231
Spring-Mass Models
Create a model:
• Composed of a mesh of point masses mi connected by springs with spring constants kij and
rest lengths `ij .
• Let Pi (t) = [xi (t), yi (t), zi (t)] be the position of mass mi at time t.
• Let Ni be all masses connected to mass mi .
If j ∈ Ni , then mi and mj are connected by a spring.
• Springs exert force proportional to displacement from rest length, in a direction that tends
to restore the rest length:
Pi (t) − Pj (t)
f~ijs (t) = −kij (`ij − |Pi (t) − Pj (t)|)
,
|Pi (t) − Pj (t)|
X
f~is (t) =
f~ijs (t).
j∈Ni
• Masses assumed embedded in a medium that provides a damping force of
f~d = −ρi~vi (t),
~vi (t) is velocity of mi at time t.
• Motion of each mass governed by second order ordinary differential equation:
mi~a(t) = −ρi~v (t) + f~is (t) + f~ie (t).
f~ie (t) is the sum of external forces on node i and
2
d xi (t) d2 yi (t) d2 zi (t)
,
,
,
~a =
dt2
dt2
dt2
dxi (t) dyi (t) dzi (t)
,
,
~v =
dt
dt
dt
• Initial conditions: user supplies initial positions of all masses and velocities.
• The user supplies external forces: gravity, collision forces, keyframed forces, wind, hydrodynamic resistance, etc. as a function of time.
• Simulation.
– Factor second-order ODE into two coupled first-order ODE’s:
~v = [vxi (t), vyi (t), vzi (t)]
dxi (t) dyi (t) dzi (t)
=
,
,
,
dt
dt
dt
dvxi (t) dvyi (t) dvzi (t)
~a =
,
,
,
dt
dt2
dt
1 =
−ρi~v (t) + f~is (t) + f~ie (t) .
mi
Human Motion
29.11 232
– Solve using your favourite ODE solver.
The simplest technique is the Euler step:
∗ Pick a ∆t.
∗ Then compute the values of all positions at t + ∆t from the positions at t by discretizing the differential equations:
∆t −ρi~v (t) + f~is (t) + f~ie (t) ,
mi
~vi (t + ∆t) ← vi (t) + ~a(t)∆t,
~ai (t + ∆t) ←
Pi (t + ∆t) ← Pi (t) + ~v (t)∆t.
29.12
Human Motion
Walking
Modeling walking is hard
• Human motion (walking) is extremely complex
Fine grained balancing act
• Human walking involves more than just the feet and legs
Hips, body, shoulder, head
• Human perception of walking is very precise
Poor walking immediately spotted
• Task is still an area of active research
We will look at some basics
Walk Cycle
• Walking is mostly a cycle of motions
Have to adapt each time through cycle for terrain, etc.
• In walking, at least one foot on ground
• Left stance, right swing, right stance, left swing
Repeat
left heel strike
right heel strike
left heel strike
Sensor-Actuator Networks
• Hip movement: rotation
• Hip rotation requires knee flexion
• Ankle, toe joints
• Can animate leg motion by specifying angles of all joints as function of time
29.13
Sensor-Actuator Networks
Sensor-Actuator Networks
• van de Panne
• Model creature as set of
– Links
– Sensors
– Actuators
• SAN relates sensors and actuators
• Control uses sensor data to apply forces thru actuators
Links
• Rigid
• Have mass
• May restrict to planar for simplicity
Sensors :
•
•
•
•
4 types
Touch (picture)
Angle (picture)
Eye - used to find target
Length (picture)
Actuators
• Length/linear
– push/pull points
– max/min, strength
• Angle
– create torques
– max/min angle, strength
Motion
• Evaluation metric
– Distance traveled
– Don’t fall over
• Generate random controllers and evaluate with metric
• Try lots, and fine tune the best
29.12 233
Morphing
29.13 234
SAN Example
L1
A1,S3
L4
L2
A2,S4
A3,S5
L5
L3
S1
29.14
A4,S6
S2
Morphing
• Morphing is lerping between images.
• Nice effects at low cost.
• Key issues:
– Partitioning images into pieces that correspond
E.g., eyes to eyes, etc.
– Lerping pieces (geometry)
– Lerping pieces (pixels, colours)
– Filtering
• Developed at NRC in the 1970’s (line drawings).
• Make it quick, don’t look too closely at intermediate images.
Motion Capture
29.14 235
• Simplest morph linearly interpolates each point
Mostly okay, but can cause problems:
A
C’
B=B’
A’
C
t=0
t=.25
t=0.5
t=0.75
t=1
Often tweak by hand to get rid of such problems
• More sophisticated morphs introduce other problems
• Desired properties:
Vertex trajectories smooth and continuous
Triangles don’t cross each other
Minimize triangle size variations
Linear when other properites not violated
29.15
Motion Capture
• Keyframing complex actions (walking, etc) requires a lot of key frames.
• Instead, capture motion from real objects.
Creatures and/or actors performing the desired motion.
• The positions of key points on the actor are tracked
these motions are mapped to corresponding points in the model.
• May be necessary to generate secondary actions for the computer model.
(tracking is expensive)
• Tracking technologies include
1. Electromagnetic position and orientation sensors.
Flocking
29.15 236
– Requires a wire to each sensor.
– Readings can be distorted by metal and magnetic fields.
– Limited working volume.
2. Ultrasonic rangefinder triangulation.
– Cheaper but less accurate than magnetic sensors.
3. Optical triangulation.
–
–
–
–
Reflective or emissive markers are attached to objects
Two cameras triangulate position
Can track more points cheaply, without wires
Points can be occluded.
4. Body suit.
– Fibers in instrumented clothing detect angles of all joints.
5. Rotoscoping.
– Arbitrary video from two cameras converted to motion paths
∗ manual selection of key points
∗ computer vision
– Prone to error and occlusion.
– Tedious if done manually.
6. Puppetry.
– Real-time data collected from an arbitrary input device
– Mapped to an computer model, which is displayed in real time during capture.
– A special-purpose input device in the shape of the object being animated may be
built.
• Motion capture tends to require more-or-less exotic technology.
• Even puppetry requires at least real-time graphics.
• Problems with motion capture include:
– How do we map motion paths to objects of a different shape and scale (the ostrich-to-T.
Rex problem)?
– How do we deal with noise and missing data?
– How can we reduce the number of samples?
– How can we generalize motion? I.e. we have a walk and a turn. How do we get an actor
to follow a path?
Flocking
29.16
29.15 237
Flocking
• Want to animate groups of animals
Birds, fish, herds
• Motion of individuals is semi-independent
Too many individuals to key frame each one
• Fewer elements than particle systems, but more interelement interaction
• Relative placing not rigid
Flock of birds vs airplanes in formation
(migrating geese, etc., being more like the latter)
Two main forces at work
• Collision avoidance
– Avoid hitting objects (trees, buildings, etc.)
– Avoid hitting one another
• Flock centering
– Each member trying to remain a member of flock
– Global flock centering too restricting
Does not allow flock splitting to pass around objects
Local Control
• Controlling each flock member with local behaviour rules
Computationally desirable
Appears to be how flocks work in real world
• No reference to global conditions of flock, environment
• Three things to model:
– Physics
Gravity, collisions
– Perception
Information flock member has with which to make decisions
– Reasoning/reaction
Rules by which flock member decides where to go
Assignments
Perception
• Aware of itself and two or three neighbors
• What’s in front of it
• Doesn’t follow a designated leader
• No knowledge of global center
Reasoning/reaction
• Collision avoidance
• Flock centering
• Velocity matching
Try to match velocity of neighbors
Helps with flock centering and helps avoid collisions
Additional details
• Global control
Animator needs to direct flock.
• Flock leader
Usually one member whose path is scripted (global control)
Not realistic (leader changes in real flocks),
but usually not noticed and easier to deal with
• Splitting and Rejoining
Flocks pass around objects, splitting them
Difficult to balance rejoining with collision avoidance
29 238
30
ASSIGNMENTS
30
Assignments
30.1
Assignment 0: Introduction
The goals of this assignment include:
• Familiarization with the course computing environment.
• Setting up your account and directories.
• Modifying a UI.
• A trial assignment submission.
This assignment is not worth any marks. However, we strongly suggest you do it:
• It’s easy.
• You have to learn most of it eventually anyways.
• It’ll save you from losing marks over dumb mistakes in protocol.
30.2
Assignment 1: Introduction to OpenGL
In this assignment you will learn how to use OpenGL to render a polygonal model.
• Draw polygons
• Lighting
• Transformations
• UI
Screen Shots
Sample screen shots. Some details may vary term to term.
239
Assignment 2: Frames and Perspective
30.3
30.2 240
Assignment 2: Frames and Perspective
This assignment includes:
• Modeling, Viewing, and Perspective Transformations
• 3D Line/Plane Clipping
• Menus and Valuators
Your program will manipulate a cube and 3 sets of coordinate frames.
The cube is in a modelling frame, is transformed to a world frame, and then into a viewing
frame which is projected onto a window.
You will draw gnomons for the modelling and world frames.
Frames
There are six entities you need to consider:
The Cube Model: Defined on the unit points [±1, ±1, ±1].
The Cube Model Frame: For entering the initial coordinates of the Cube Model.
The Cube Model Gnomon: A graphic representation of the Cube Model Frame.
The World Frame: A coordinate system for describing the position and orientation of objects in
the scene.
The World Frame Gnomon: A graphic representation of the World Frame.
The Viewing Frame: A coordinate system for representing a view of the scene relative to the
eyepoint and window.
Features
Your program will support the following features:
Menus: Selection of transformation mode and coordinate system.
Valuators: Mouse movement to specify scalar parameters.
Modelling Transformations: Rotation, translation, scale.
Viewing Transformations: Camera rotation and translation, perspective.
3D Line Clipping: To avoid divide by zero, you need to clip all lines to the near plane.
Viewport: Clip the drawing to a 2D viewport.
OpenGL may be used for only 2D line drawing.
You must implement all transformations and clipping yourselves.
Assignment 3: Hierarchical Modelling
30.3 241
Screen Shots
Sample screen shots. Some details may vary term to term.
30.4
Assignment 3: Hierarchical Modelling
This assignment includes:
• Hierarchical Models (and data structures).
• Matrix Stacks
• 3D Picking
• Z-Buffer Hidden Surface Removal
• Lighting Models and Shaded Polygons
• Display Lists
• Virtual Sphere or Arcball
You may use any feature of OpenGL you desire, including transformations and lighting models,
to implement this assignment.
Lua should be used as the modelling language.
Assignment 4: A Raytracer
30.4 242
Screen Shots
Sample screen shots. Some details may vary term to term.
30.5
Assignment 4: A Raytracer
• In this assignment you will investigate the implementation of
– Ray Tracing
– Colour and Shading
• Some sample code will be provided to get you started.
• Your raytracer will implement at least spheres, cubes, polygons, and the Phong lighting
model.
• Only primary and shadow rays are required in the basic implementation.
Additional Features
You will also be asked to implement one additional feature of your choice. For example, you could
implement:
• Secondary rays for reflective surfaces
• Depth of field using (jittered) aperture supersampling
Assignment 5: The Project
30.5 243
• Antialiasing using (jittered) pixel supersampling
• A fisheye lens
• Texture or bump mapping
• CSG operations
• Additional object types
Screen Shots
Sample screen shots. Some details may vary term to term.
30.6
Assignment 5: The Project
• The project submission is distributed over three phases:
– A proposal
– A revised proposal, addressing our comments.
– A final submission and demonstration.
• Your project should have a significant computer graphics content, but is otherwise unconstrained.
• A project does not have to have an interactive user interface, but if not you will have to work
harder on the algorithms
• You will have to prepare documentation for your project, and the quality of this documentation will strongly influence your mark.
• Ask us for project suggestions; also, it would be wise to run your idea past us before submitting
your proposal.
Assignment 5: The Project
Objective List
• Your proposal needs to include an Objectives list, which we will use to mark you.
• No objectives from assignments!
• Roughly...
– 1/3 to 1/2 easy objectives
Modelling, texture mapping, alpha blending
– A few medium ones
L-systems, reflection, 2D collisions
– 1 or 2 hard ones
3D collisions, hardware tricks, stuff from papers
• Try to break hard objectives into multiple pieces
Common Objectives
• Modelling/scene
• Animation
• User interface (more complex interaction)
• Texture mapping
• Artifical Intelligence, sound
If your other objectives had enough graphics content
• Ray tracer:
– Must tell us your A4 extra feature
– CSG
– Reflection, refraction, anti-aliasing
– Extra primitives (torus)
Warm/cold Fuzzies About Objectives
• Think about what subjective mark you could get
Technical, artistic, documentation, difficulty
• Negative subjective marks for not using what you’ve learned
eg, flat shading in OpenGL projects
• Get advise from TAs and profs
• Beware of too easy/too hard projects
You can always do extra stuff
30.5 244
Assignment 5: The Project
30.5 245
• Make objectives, not subjective
“Good UI” is subjective...
• When wondering if something makes a good project, try making an objective list for it.
OpenGL vs Ray Tracing
OpenGL Projects
• Interactive
• Avoid UI intensive projects
• Try to have a purpose (game, etc)
Ray Tracing
• Must get 9/10 on A4 to do ray tracing project
• Easier to come up with objective list
• Design objectives around a scene
Photograph or real object you want to ray trace
• Nice scene must be one objective!
Describe it
Other Stuff
• Technical outline should clarify objectives
• You can start before you get proposal back
• Avoid dynamic memory
• See TAs if you have problems
Don’t spend 2 days hacking at it
• If running out of time, prof or TA can give advice on what objectives to tackle
• Project is marked on objective list of revised proposal.
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement