QEM

advertisement
Surface Simplification Using
Quadric Error Metrics
Garland & Heckbert
Siggraph 97
Vertex Clustering (Rossignac
Borrel 1992)
2
What this is about
Related terms




Level of detail
Progressive mesh
Polygon decimation
Multiresolution modeling
3
Define the problem carefully
Mn: triangulated input model
Mg: target approximation (criterion: desired
face count or a maximum tolerable error)
Context: multiresolution modeling
Topology preservation: no guarantee


In rendering, topologgy is less important than
overall appearance
In particular, non-manifold regions can occur
4
Advantages
Efficiency
Quality
Generality


As we will examine these carefully as we
go along
(and we learned how to “sell” our
research)
5
Pair Contraction
Problems



Definition of pair
Priority of pair
Contraction
 Book keeping
 Geometry
optimization:
error analysis
6
Approximating Error with Quadrics
Error at vertex v
Plane Equation
Point-plane distance (signed)
= pTv
Squared distance
    
 v  pp v
2
D 2  p T v  vT p p T v
T
T
Symmetric matrix
7
After Contraction
Find
 q11
q
Q   12
 q13

q14
q12
q13
q22
q23
q23
q33
q24
q34
q14 
q24 
q34 

q44 
In case it fails (to find the inverse), find any point along v1, v2
8
Error Metric
“Choose a heuristic to
characterize the geometric error”
Sum of squared distances to its incident planes

Initial error is then zero
When contraction occurs, the new point assumes the
planes from both vertices
And it should be placed where the error is minimized
(it also happens that) the error is linearly additive


The multiply count issue: argue … to get away???
(end of sec.5: sacrifice error for simplicity)
6.1 Evaluating

Quote a formula (from Hoppe) to measure the distance
between approximate and original model
9
Algorithm
10
Result
Fig 5 & 6
11
12
13
Mesh Decimater in OpenMesh
(ref, class)
Perform halfedge collapsing based ona
priority queue
Priority determined by “modules” considering
Aspect ratio
Edge length
Hausdorff
indepedentSets
Normal deviation
Normal flipping
Progressive mesh
Quadric error
Roundness
• More than one decimation module can be
used. But a non-binary module must be
registered with the decimater
• (discussion in mailing list)
14
Decimater in OpenMesh
Decimater.info (std::cout);
Decimater.add (Module);
DecimaterT (mesh);
Decimater.decimate(); // reduce as
much as possible
Decimater.decimate_to (n_vertices);
Decimater.decimate_to_faces (nv, nf);
15
16
Download