Digital Processing

Computer Graphics CMU 15-462/15-662 Scotty 3D setup recitation Today! Hunt Library Computer Lab 3:30-5pm

CMU 15-462/662 Last time part 1: overview of geometry Many types of geometry in nature Geometry Demand sophisticated representations Two major categories: - IMPLICIT - “tests” if a point is in - EXPLICIT - directly “lists” points Lots of representations for both

CMU 15-462/662 Last time part 2: Meshes & Manifolds Mathematical description of geometry - simplifying assumption: manifold - for polygon meshes: “fans, not fins” Data structures for surfaces - polygon soup - halfedge mesh - storage cost vs. access time, etc. Today: next how do we manipulate geometry? twin

- face edge - geometry processing / resampling Halfedge

vertex

CMU 15-462/662 Today: Geometry Processing & Queries Extend traditional digital (audio, video, etc.) to deal with geometric signals: - upsampling / downsampling / resampling / filtering ... - aliasing (reconstructed gives “false impression”) Also ask some basic questions about geometry: - What’s the closest point? Do two triangles intersect? Etc. Beyond pure geometry, these are basic building blocks for many in graphics (rendering, animation...)

CMU 15-462/662 Digital Geometry Processing: Motivation 3D Printing

CMU 15-462/662 Geometry Processing Pipeline

scan print process

CMU 15-462/662 Geometry Processing Tasks

reconstruction filtering

remeshing parameterization compression shape analysis CMU 15-462/662 Geometry Processing: Reconstruction Given samples of geometry, reconstruct surface What are “samples”? Many possibilities: - points, points & normals, ... - image pairs / sets (multi-view stereo) - line density integrals (MRI/CT scans) How do you get a surface? Many techniques: - silhouette-based (visual hull) - Voronoi-based (e.g., power crust) - PDE-based (e.g., Poisson reconstruction) - Radon transform / isosurfacing ()

CMU 15-462/662 Geometry Processing: Upsampling Increase resolution via interpolation Images: e.g., bilinear, bicubic interpolation Polygon meshes: - subdivision - bilateral upsampling - ...

CMU 15-462/662 Geometry Processing: Downsampling Decrease resolution; try to preserve shape/appearance Images: nearest-neighbor, bilinear, bicubic interpolation Point clouds: subsampling (just take fewer points!) Polygon meshes: - iterative decimation, variational shape approximation, ...

CMU 15-462/662 Geometry Processing: Resampling Modify sample distribution to improve quality Images: not an issue! (Pixels always stored on a regular grid) Meshes: shape of polygons is extremely important! - different notion of “quality” depending on task - e.g., vs. solving equation

Q: What about aliasing? CMU 15-462/662 Geometry Processing: Filtering Remove noise, or emphasize important features (e.g., edges) Images: blurring, bilateral filter, edge detection, ... Polygon meshes: - flow - bilateral filter - spectral filter

CMU 15-462/662 Geometry Processing: Compression Reduce storage size by eliminating redundant data/ approximating unimportant data Images: - run-length, Huffman coding - lossless - cosine/wavelet (JPEG/MPEG) - lossy 840kb Polygon meshes: - compress geometry and connectivity - many techniques (lossy & lossless)

8kb

CMU 15-462/662 Geometry Processing: Shape Analysis Identify/understand important semantic features Images: computer vision, segmentation, face detection, ... Polygon meshes: - segmentation, correspondence, symmetry detection, ...

CMU 15-462/662 Enough overview— Let’s process some geometry!

CMU 15-462/662 Remeshing as resampling Remember our discussion of aliasing Bad sampling makes signal appear different than it really is E.g., undersampled curve looks flat Geometry is no different! - undersampling destroys features - oversampling bad for performance

CMU 15-462/662 What makes a “good” mesh? One idea: good approximation of original shape! Keep only elements that contribute information about shape Add additional information where, e.g., curvature is large

CMU 15-462/662 Approximation of position is not enough! Just because the vertices of a mesh are very close to the surface it approximates does not mean it’s a good approximation! Need to consider other factors, e.g., close approximation of surface normals Otherwise, can have wrong appearance, wrong area, wrong…

APPROXIMATION OF CYLINDER FLATTENED

(true area)

CMU 15-462/662 What else makes a “good” triangle mesh? Another rule of thumb: triangle

(pronunciation)

“GOOD” “BAD” DELAUNAY E.g., all angles close to 60 degrees More sophisticated condition: Delaunay Can help w/ numerical accuracy/stability Tradeoffs w/ good geometric approximation* e.g., long & skinny might be “more efficient”

*See Shewchuk, “What is a Good Linear Element” CMU 15-462/662 What else constitutes a good mesh? Another rule of thumb: regular vertex degree E.g., valence 6 for triangle meshes (equilateral)

“GOOD” “OK” “BAD” Why? Better polygon shape, important for (e.g.) subdivision:

subdivide

FACT: Can’t have perfect valence everywhere! (except on ) CMU 15-462/662 How do we upsample a mesh?

CMU 15-462/662 Upsampling via Subdivision

Repeatedly split each element into smaller pieces Replace vertex positions with weighted average of neighbors Main considerations: - interpolating vs. approximating - limit surface continuity (C1, C2, ...) - behavior at irregular vertices Many options: - Quad: Catmull-Clark - Triangle: Loop, Butterfly, Sqrt(3)

CMU 15-462/662 Catmull-Clark Subdivision Step 0: split every polygon (any # of sides) into quadrilaterals:

New vertex positions are weighted combination of old ones: STEP 1: Face coords STEP 2: Edge coords STEP 3: Vertex coords

New vertex coords: – vertex degree – average of face coords around vertex – average of edge coords around vertex – original vertex position

CMU 15-462/662 Catmull-Clark on quad mesh

(very few irregular vertices) Good approximation almost everywhere:

smooth smooth reflection lines caustics CMU 15-462/662 Catmull-Clark on triangle mesh

(huge number of irregular vertices!) Poor normal approximation almost everywhere:

jagged jagged reflection lines caustics ALIASING! CMU 15-462/662 Loop Subdivision Alternative subdivision scheme for triangle meshes Curvature is continuous away from irregular vertices (“C2”) : - Split each triangle into four - Assign new vertex positions according to weights:

1/8 u u

3/8 3/8 u u

n: vertex degree 1-nu u: 3/16 if n=3, 3/(8n) otherwise 1/8 u u

CMU 15-462/662 Loop Subdivision via Edge Operations First, split edges of original mesh in any order: split

Next, flip new edges that touch a new & old vertex:

flip

(Don’t forget to update vertex positions!)

Images cribbed from Denis Zorin. CMU 15-462/662 What if we want fewer triangles?

CMU 15-462/662 Simplification via Edge Collapse One popular scheme: iteratively collapse edges Greedy algorithm: - assign each edge a cost - collapse edge with least cost - repeat until target number of elements is reached Particularly effective cost function: quadric error metric*

30 #triangles: 30,000 3,000 300

*invented here at CMU! (Garland & Heckbert 1997) CMU 15-462/662 Quadric Error Metric Approximate distance to a collection of triangles Distance is sum of point-to-plane distances - Q: Distance to plane w/ normal N passing through point p? - A: d(x) = N•x - N•p = N•(x-p) x Sum of distances: p N N3 N2 N•(x-p) N4 N1 p N5

CMU 15-462/662 Quadric Error - Homogeneous Coordinates Suppose in coordinates we have - a query point (x,y,z) - a normal (a,b,c) - an offset d := -(p,q,r) • (a,b,c) Then in homogeneous coordinates, let - u := (x,y,z,1) - v := (a,b,c,d) Signed distance to plane is then just u•v = ax+by+cz+d Squared distance is (uTv)2 = uT(vvT)u =: uTKu Key idea: matrix K encodes distance to plane K is symmetric, contains 10 unique coefficients (small storage)

CMU 15-462/662 Quadric Error of Edge Collapse How much does it cost to collapse an edge? Idea: compute edge midpoint, measure quadric error

collapse

Better idea: use point that minimizes quadric error as new point! Q: Ok, but how do we minimize quadric error?

CMU 15-462/662 Review: Minimizing a Quadratic Function f(x) Suppose I give you a function f(x) = ax2+bx+c Q: What does the graph of this function look like?

Could also look like this! x Q: How do we find the minimum? A: Look for the point where the function isn’t f(x) changing (if we look “up close”) I.e., find the point where the derivative vanishes x

(What about our second example?)

CMU 15-462/662 Minimizing a Quadratic Form A quadratic form is just a generalization of our quadratic polynomial from 1D to nD E.g., in 2D: f(x,y) = ax2 + bxy + cy2 + dx + ey + g Can always (always!) write quadratic polynomial using a symmetric matrix (and a vector, and a constant):

(this expression works for any n!) Q: How do we find a critical point (min/max/saddle)? A: Set derivative to zero!

(Can you show this is true, at least in 2D?)

CMU 15-462/662 Positive Definite Quadratic Form Just like our 1D parabola, critcal point is not always a min! Q: In 2D, 3D, nD, when do we get a minimum? A: When matrix A is positive-definite:

1D: Must have xax = ax2 > 0. In other words: a is positive! 2D: Graph of function looks like a “bowl”:

positive definite positive semidefinite indefinite Positive-definiteness is extremely important in : it means we can find a minimum by solving linear equations. Basis of many, many modern algorithms (geometry processing, simulation, ...). CMU 15-462/662 Minimizing Quadratic Error Find “best” point for edge collapse by minimizing quad. form

Already know fourth (homogeneous) coordinate is 1! So, break up our quadratic function into two pieces:

Now we have a quadratic form in the 3D position x. Can minimize as before:

(Q: Why should B be positive-definite?) CMU 15-462/662 Quadric Error Simplification: Final Algorithm Compute K for each triangle (distance to plane) Set K at each vertex to sum of Ks from incident triangles Set K at each edge to sum of Ks at endpoints Find point at each edge minimizing quadric error Until we reach target # of triangles: - collapse edge (i,j) with smallest cost to get new vertex m - add Ki and Kj to get quadric Km at m - update cost of edges touching m More details in assignment writeup!

CMU 15-462/662 Quadric Simplification—Flipped Triangles Depending on where we put the new vertex, one of the new triangles might be “flipped” (normal points in instead of out):

Easy solution: check dot product between normals across edge If negative, don’t collapse this edge!

CMU 15-462/662 What if we’re happy with the number of triangles, but want to improve quality?

CMU 15-462/662 How do we make a mesh “more Delaunay”? Already have a good tool: edge flips! If α+β > π, flip it!

FACT: in 2D, flipping edges eventually yields Delaunay mesh Theory: worst case O(n2); no longer true for surfaces in 3D. Practice: simple, effective way to improve mesh quality

CMU 15-462/662 Alternatively: how do we improve degree? Same tool: edge flips! If total deviation from degree-6 gets smaller, flip it! flip

FACT: average vertex degree is 6 as number of elements increases Iterative edge flipping acts like “discrete diffusion” of degree Again, no (known) guarantees; works well in practice

CMU 15-462/662 How do we make a triangles “more round”? Delaunay doesn’t mean triangles are “round” (angles near 60°) Can often improve shape by centering vertices: average

Simple version of technique called “Laplacian smoothing”.* On surface: move only in direction How? Remove normal component from update vector. *See Crane, “Digital Geometry Processing with Discrete Exterior Calculus” http://keenan.is/ddg CMU 15-462/662 Isotropic Remeshing Algorithm Try to make triangles uniform shape & size Repeat four steps: - Split any edge over 4/3rds mean edge legth - Collapse any edge less than 4/5ths mean edge length - Flip edges to improve vertex degree - Center vertices tangentially

Based on: Botsch & Kobbelt, “A Remeshing Approach to Multiresolution Modeling” CMU 15-462/662 What can go wrong when you resample a signal?

CMU 15-462/662 Danger of Resampling

downsample upsample

(Q: What happens with an image?)

CMU 15-462/662 But wait: we have the original mesh. Why not just project each new sample point onto the closest point of the original mesh?

CMU 15-462/662 Next Time: Geometric Queries Q: Given a point, in space, how do we find the closest point on a surface? Are we inside or outside the surface? How do we find intersection of two triangles? Etc. Q: Do implicit/explicit representations make such tasks easier? Q: What’s the cost of the naïve algorithm, and how do we accelerate such queries for large meshes? So many questions!

p ???

CMU 15-462/662