Smooth Geometry Images
Frank Losasso, Hugues Hoppe, Scott Schaefer, Joe Warren
Overview
Provide a simple representation using a single uniform bi-cubic B-spline
Multiple Patches
Single Patch
Geometry Images
[Gu et al 2002]
Sample arbitrary surface using a regular 2D grid
Connectivity is implicit
[Gu et al 2002]
cut
parametrize
[Gu et al 2002]
cut
sample
[Gu et al 2002]
cut
store
render
[r,g,b] = [x,y,z]
General cut
[Gu et al 2002]
Supports surfaces of arbitrary genus But, boundary has complicated topology – requires sideband
a a’
a’
a
Our Approach: X-Cut
a d x b c
x d x
a
x b
c
x
Special type of cut curve Make a X-cut centered at x Unfold domain into a square image Creates simple boundary symmetries
The X-Cut
a d x b c x d x c a x b x
Spherical Remeshing
mesh M
sphere S
domain D
image I
demo
[Praun and Hoppe 2003]
How To Obtain Control Points
B-spline is approximating should not directly sample surface
Instead, use least-squares fitting:
How To Obtain Smoothness
Application of boundary rules
Pad image to recreate 1-ring around all vertices
How To Obtain Smoothness
All vertices regular, except boundary midpoints
generally not C1
Add a simple linear constraint
C1
Bi-cubic Subdivision on GPU
4 operators, stored as fragment programs
bilinear subdivision
mesh averaging
limit
tangent repeat
Bi-cubic Subdivision on GPU
4 operators, stored as fragment programs
1 2
1 1
1 4
1 2
1 1
1 1 1 1
1 1 2 16 1
2 1 4 2 2
1
1 1 4 36 1
4 4
16 4 1
1
bilinear subdivision
mesh averaging
limit
tangent repeat
1
1 4 6 1
0 1 0 4 0 1
Rendering
“Interpret as vertex array” (OpenGL extension)
Render using triangles
Discrete Subdivision Levels
Both sub-sampling and subdivision are easily implemented
(2k+1) x (2k+1)
…
Subsampled
…
Original Image
…
…
Subdivided
Continuous Subdivision Levels
Prevent „popping‟ when changing subdivision levels
gk
gk+1
Continuous Subdivision Levels
Prevent „popping‟ when changing subdivision levels
x d x
a
x
linear bsubdivision
1- +
c
x
gk+ gk
bilinear subdivision mesh averaging
gk+1
Real-Time Demo
Displacement Mapping
simulation
CPU
33x33
GPU GPU
scalar displacement map 257x257
Performance Results
Millions
Subdivision Performance
60 50
1
Resource Utilization
0.9 0.8
R350
ALU Utilization
Triangle/Second
Utilization
40
0.7 0.6 0.5 0.4 0.3 0.2 0.1
R300
30 20 10 0 1 2 3 4
Bandwidth Utilization
0 1 2 3 4
Subdivision Level
Subdivision Level
Drawbacks and Limitations
Genus cannot be >0
Surface rippling
Summary
Closed smooth surface using single patch
Stored as geometry image Simple and efficient GPU evaluation Continuous level-of-detail Displacement mapping
5x5
9x9
Eye candy
65x65 65x65 33x33