200 likes | 340 Views
Extended Quadric Error Functions for Surface Simplification . Deepak Bandyopadhyay COMP 258 F2000 Project. Quadric-based Simplification (Garland and Heckbert, SIGGRAPH97 ). Works on triangle meshes Iterative edge-collapse based (also face)
E N D
Extended Quadric Error Functions for Surface Simplification Deepak Bandyopadhyay COMP 258 F2000 Project Deepak Bandyopadhyay / UNC Chapel Hill
Quadric-based Simplification(Garland and Heckbert, SIGGRAPH97) • Works on triangle meshes • Iterative edge-collapse based (also face) • Edge to collapse picked (and new vertex position chosen) to minimize error according to a metric. • The Quadric Error Metric: • ax+by+cz+d=0 is equation for plane i thru v • Initially, Qv = iQi for all planes intersecting at v • Vertices combine during edge collapse: • Q = Q1 + Q2 • Find new point X s.t. xT Q x is minimized Deepak Bandyopadhyay / 258 / 3D Photography
QEM Algorithm (QSlim package) • The main steps of the algorithm: • Initialize the quadrics at each vertex • Process each valid vertex pair (edge (v1, v2)) and compute optimal contracted vertex (v) and its error • Place all pairs in heap, min error on top. • Repeat • Remove pair from heap, contract it, update edge links and error values for these edges • Until desired face/edge count achieved. Deepak Bandyopadhyay / 258 / 3D Photography
QEM, Characteristics • Very good simplification, very fast • Sharp features and non-manifolds preserved until triangle count really low (5.8k to 1000, here) Deepak Bandyopadhyay / 258 / 3D Photography
Improvements to QEM • Some wasted work in finding optimal target for each edge if not going to collapse all edges. • Could an approximation be used • to pick the least cost edge ? • to compute position of new vertex? • to compute error of new vertex (if storing per-vertex error) ? • Tried all three of these, with varying results • Basis of approximation - “distance function” Deepak Bandyopadhyay / 258 / 3D Photography
What is the “distance function” ? • A term that refers to the following non-Euclidean distance • for 2 points p and q, with normals Np and Nq : • DF(p,q)= ||p-q|| + (1-) * { pTQqp + qTQpq } • Observation: Euclidean term does more harm than good • take =0 Deepak Bandyopadhyay / 258 / 3D Photography
Quadric Variants (good ones underlined) • Original quadric (algorithm as presented) • Variant 1: Quadric with vertex error propagation • Distance fn. only for picking edge (midterm results) • Variant 2: Distance function for edge picking with vertex error propagation • Same, change DF by varying • Variant 3: Distance function for edge picking, new vertex computation and propagation (the works). Deepak Bandyopadhyay / 258 / 3D Photography
Vertex Errors • In original quadric, implicitly pTQpp is the vertex error (distance of p from planes) • The error of an edge collapse is • E(x) = Minx [xT(Qp+Qq)x] • referred to as “Merge Error of x” or ME(p,q,x) • We add to this terms for the accumulated error of p and q, which is zero initially for all vertices since they lie on all their planes. Deepak Bandyopadhyay / 258 / 3D Photography
Error Propagation • Merge error may be optimum quadric error (best case), or distance fn error (an approximation) • Specially for DF, E(p)+E(q) is very important • it weights against merging heavily merged vertices which might otherwise have an attractive distance fn. • New vertex created stores error value E(x) E(x) = E(p) + E(q) + ME(p,q,x) Deepak Bandyopadhyay / 258 / 3D Photography
Summary of Successful Variants • Variant 1 (Quadric w/ vertex errors) • ME(p,q,x) is optimum quadric error • Just like original, ME’s on all possible edges precomputed • vertex error propagation is used • heap key for an edge (p,q) that collapses to x is E(x) = E(p) + E(q) + xT(Qp+Qq)x Deepak Bandyopadhyay / 258 / 3D Photography
Summary of Successful Variants • Variant 2 (Distance function w/ vertex error) • ME(p,q,x) is DF(p,q), vertex error propagates • Value on heap is E(x). So DF is precomputed for each edge • Involves two pT Q p - type quadric evaluations; very fast • However, new vertex position still chosen to optimize quadric error • Optimization (involves a matrix inversion) is not computed except for edges that are actually chosen to collapse Deepak Bandyopadhyay / 258 / 3D Photography
Summary of Successful Variants • Variant 3 (Distance function for vertex placement) • ME(p,q,x) is DF(p,q), vertex error propagates • Value on heap is E(x). So DF is precomputed for each edge • Involves two pT Q p - type quadric evaluations; very fast • New vertex position is chosen to try to reduce DF error • Placement strategy : place closer to q if q is closer to the planes of p than p is to the planes of q (linear interpolation) • Optimization involves pTQqp and qTQpq which have already been computed for ME(p,q,x) Deepak Bandyopadhyay / 258 / 3D Photography
Comparison of Performance • “Worst” case - 69k 100 triangles • Original, Var1, Var2, Var3 all about 18 sec • Why bad? Because almost all edges collapsed anyway! • “Average” case - 69k 10k triangles • Original 15 sec, Var1 17 sec, Var2 13.5 sec, Var3 13 sec • “Heavy load” case - 407k 40k triangles • Original (slowest) 1 min 40 sec, Var3 (fastest) 1 min25 sec • Full in depth profiling not done • Code is still unoptimized, results wouldn’t be accurate Deepak Bandyopadhyay / 258 / 3D Photography
How to compare quality ? • Visually compare models at different resolutions • how well appearance, detail, extremal features preserved • Compare the lowest resolution models. • who can do the best with 100 ’s? Active research topic! • Use my “average (RMS) plane radius” function: Avg. Radius = • Average distance of point p from a plane in its quadric. Deepak Bandyopadhyay / 258 / 3D Photography
Results : Full Resolution Models Cow (5.8 k triangles) Bunny (69 k triangles) Deepak Bandyopadhyay / 258 / 3D Photography
Results: Cow, 3000 triangles Original Quadric(0) Quadric w/ Vertex Error (1) Spheres drawn per vertex, radius = Average Plane Radius x 1000 Deepak Bandyopadhyay / 258 / 3D Photography
Results : Cow, 3000 triangles DF w/ vertex error (2) 2 + DF to calc new vertex (3) Spheres are drawn x1000 Deepak Bandyopadhyay / 258 / 3D Photography
Results: Cow, 250 triangles Original Quadric(0) Quadric w/ Vertex Error (1) Spheres are drawn x100 Deepak Bandyopadhyay / 258 / 3D Photography
Results : Cow, 250 triangles DF w/ vertex error (2) 2 + DF to calc new vertex (3) Deepak Bandyopadhyay / 258 / 3D Photography
Results: Bunny, 1000 triangles Original quadric (0) DF all the way (3) Still looks pretty good : large errors near holes in the topology Deepak Bandyopadhyay / 258 / 3D Photography