Latest improvements

Mesh generation

Current pipeline:

  1. Uniformly resample input curves.
  2. Define a narrow band, i.e. an implicit volume around the curves with a user-specified radius.
  3. Using CGAL, compute a tet mesh bounded by the implicit volume.
  4. Using TetGen, compute a constrained tet mesh containing the input curves bounded by the surface mesh from Step 3.

Notes:

  • Step 3 is necessary since TetGen needs an explicit boundary surface.
  • Step 4 is necessary since CGAL cannot compute constrained Delaunay triangulations in 3D.
  • Using this pipeline, we make sure that each input edge has a corresponding tet edge. No Steiner points are added on the input edges (nor on the surface mesh).

Examples:

Frame field

I’ve had a problem with projection onto feasible SH coefficients (the curved corner example). I’ve solved it by replacing the project_original method with the project_variant_h, which seems to work better.

project_original (used previously)

project_variant_h (now using)

Parametrization

Snapping constraints are now enforced along curves instead of pointwise. In practice, we determine if neighboring curve edges should be snapped to the same isoline, if yes, they share auxiliary integers used for soft snapping. This ensures the continuity of isolines along the input curves, and prevents jumps.

Another benefit of this approach is that the number of integer variables is significanlty lower (thanks to the grouping approach), the parametrization is therefore computed much faster (we’re still using CoMISo).


ToDo and Questions

Mesh generation

ok for now.

Frame field

  • iterative scheme: compute frame field, get the labels, smooth them (?), recompute the frame field with additional constraints on labels (?)
  • Q: is biharmonic energy valid with current boundary constraints? What happens at tet mesh boundary? Do we even need biharmonic fields?

Parametrization

  • snapping: make sure we don’t snap the same corner multiple times, or even to all three axes (?)
  • add constraints between auxiliary integers at cuts
  • anisotropic scale: finer scale in the tangent direction, coarser in the two non-tangent directions
  • smart strategy for the order of greedy rounding?

(output) Curve network extraction

  • instead of greedily choosing the nearest hex edge, use weights for hex edges
  • extraction weight: measure alignment of input curves and the frame field
  • extraction weight: estimate density of input samples (using KNN?)

Data generation

  • Q: what kind of data do we want to apply this method to?
    • Q: what are the strengths of our method?
    • Q: what data can we generate?
    • Q: can we get data from professional designers? (e.g. Fiverr)

Surface generation

  • Q: can we use the extra information (frame field, param., hex mesh) to surface the resulting curve network? Can we even do it directly? (what we were thinking of doing originally). Iterative scheme?

Comparisons

  • implement baseline comparison using binary extraction from a tet mesh edges (instead of hex mesh edges)

Visualisation

  • visualise quality of the tet mesh
  • visualise quality of the parametrization
    1. Jacobian: colormap blue->white->red
    2. tet type: valid=green, degenerate=red, inverted=blue
  • visualise quality of the hex mesh
  • visualise isolines that we snap to in the parametric space
  • filter hex edges by extraction costs
  • color interior tet faces differently
  • color uvw cut faces in the tet mesh differently, only show them
  • color tet mesh vertices/corners according to which auxiliary integer they are snapped to

Import/Export

  • import/export isolines to/from a file

Misc - low priority

  • add timings
  • list details of tests from .json
  • export extraction weights?
  • smart import - don’t crash if not available