Assignment #4:
Mesh Deformation

Submission date: Friday, 11/26/21, 23:59

Objective:

  1. Develop and implement a mesh deformation tool.
  2. Implement the ARAP mesh deformation method. An example is shown here.

Tasks:

  1. Develop a simplified version of the ARAP mesh deformation method.
  2. The method should perform a single linear solve step to compute new vertex positions in responce to change in handle vertex positions. Initialize the the rotation matrices per vertex using a heuristic of your choice (identity is fine but maybe you can do better?).
  3. Use an off-the-shelf linear solver to efficiently solve the resulting linear system/systems (using Eigen would perhaps be the easiest, since it is already being used inside minimesh).
  4. Once this method works use it as a basis for a full implementation of ARAP that includes update of the rotation matrices witihin a loop that used solve and update steps to reach the desired output.
  5. Develop a user friendly API/visualization mechanism for your algorithm (the class minimesh::Mesh_viewer has all the functionality that is needed; it is up to you to use this functionality correctly in your code).

Instructions:

  1. Develop an anchor based mesh deformation tool for closed manifold meshes that uses the ARAP method described in class. Start by implementing a simplifeid version of the method which has a single solve per anchor displacement (no rotation update). Only when this method works you can add support for iterated solver with rotation updates.
  2. For solving the linear system(s) you obtain you can use either the EIGEN library which comes with minimesh (see assignment #3) or another solver, as long as you are WELL familiar with it. Make sure the matrix you feed the solver is full rank. Pay attention to efficiency.
  3. You can limit your method to changing one anchor at a time (this way you can have a fixed rotation axis for you ROI  - think how this can simplify your updates).
  4. Your API should support the following mesh operations, performed repeatedly and in any order (pay attention to API ease of use):
  5. To visualize the deformation process and ensure correctness you should provide a mechanism to highlight the ROI and anchor. You should provide an interface option (e.g. key-press) allowing the user to switch the visualization on and off. Minimesh::Mesh_buffer::set_colorful_spheres() can be helpful (see below).
  6. While you should work independently, it is a good idea to compare your results with other students, to verify code correctness.

BONUS:


Reading User Input for Deformation and Anchor Selection:

Download minimesh version 1.6 and later. You should then have the following functionality in minimesh::Mesh_viewer:

Submission:

You can use your grace days (if you still have them). No late assignments, beyond those, will be accepted.

This assignment is 15% of your final grade.