200 likes | 368 Vues
This project by Deepak Bandyopadhyay delves into quadric-based surface simplification techniques, building on seminal work by Garland and Heckbert (SIGGRAPH '97). It focuses on iterative edge-collapse methods for triangle meshes, optimizing the selection of edge collapses to minimize quadric error using metrics derived from plane equations. The study presents various algorithmic improvements, emphasizing speed and feature preservation while reducing triangle counts from thousands to hundreds. Key formulation of the distance function and error propagation techniques are also discussed for enhanced performance in 3D photography applications.
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