CS 176 (Winter 2008)
 
Project 3 Description

 


Due Wednesday 1/30/08 11:59 pm

Part 1

Complete your implementation of suggestive contours by drawing additional lines for the local curvature minima as explained in the suggestive contours paper, which can be found here. First do a simplified version where you use the mean curvature at vertices or the Gaussian curvature at vertices. Compute the mean curvature at vertices by looking at the magnitude of the mean curvature normal. For the Gaussian curvature use the angle excess formula. With these values at the vertices use linear interpolation across triangles to find the zero contours of these curvatures. These zero contours appear on any triangles that have vertices with differently signed curvatures. With the respect to the w vector (projection of the view direction into the tangent space [use as tangent space the one resulting from the mean curvature normal]) you will want to make sure that the zero contour of the curvature has the correct transition from positive to negative (or vice versa). The suggestive contours paper clarifies this. With this working go on and compute the real directional curvature II(w) at the vertices. For that you will need to compute the curvature tensor as described in the Cohen-Steiner/Morvan paper on Normal Cycles. Remember that the simple expression for the curvature tensor has the principal directions reversed relative to the real curvature tensor (the paper also gives a more complicated expression [not terribly so...]) for getting the correct curvature tensor. For the ball size make life simple on yourself and experiment with only the incident edges for a given vertex as the averaging neighborhood. If you wish, also try an averaging neighborhood over a two ring. Depending upon how you set up your mesh structure this may or may not be feasible.

Part 2

In part 1 you computed among other things mean curvature normals. In part 2 we ask you use these for purposes of mesh denoising/smoothing (see the paper by Desbrun on implicit fairing). You can use a mesh that seems noisy, or add a random displacement to vertices as you read them in. Use only an explicit time step (explicit Euler). We'll keep the need of using a solver to implement implicit time stepping for another homework. The main trick here is to pick a time step that is sufficiently small so things don't blow up on you. This is likely slow, but since you will only want to do a little bit of smoothing for purposes of denoising, this should not be too troublesome. Boundary vertices (if any) should be held fixed. Alternatively, if you wish to smooth/denoise the boundary as well you will want to do mean curvature flow on the boundary. For this consider for a given boundary vertex only the incident edges and apply, what amounts to, length shortening flow: move in the opposite direciton of the *length* gradient at a vertex (this would be the analog of moving in the opposite direction of the area gradient in the interior).

Questions should be directed to Janice.