Explanation

  • This test involves computing a 3D frame field aligned to the boundary curve of a cylindrical patch.
  • I’m using both tangent and normal constraints.
  • Input curve (4 sides) is normalized to have unit AABB diagonal.
  • There are two inputs taken from patches with angular size 90 deg and 180 deg.
  • I compare two types of boundary surface: unit cube (centered at 0) and the AABB box of the (normalized) curve with a small padding (set to 0.1 here).
  • I also compare two types of meshes, a coarse mesh and a fine mesh (max tet volume = 0.00001)
  • The constraints are sampled quite densely along the boundary curve (128 samples along the quarter- / half-circle). This seems to prevent the undesirable twisting of frames along the input curves (example here)
  • Frame field is discretized per-vertex of the tet mesh and computed using unconstrained quadratic optimization (smoothness + alignment energy), ignoring the non-linear quadratic constraint. I then do a projection on the feasible set via the gradient descent from [Ray & Sokolov 2015].
  • For visualisation, the frame field is sampled on the surface of the cylinder: barycentric interpolation of spherical harmonic coefficients on tetmesh vertices + projection on the feasible set of frames.

Comments

  • Some of the frames are obviously wrong: that’s most likely a bug in the projection on the feasible set that occurs when the frame is a rotation of the reference frame around x-, y- or z-axis by pi/4
  • Harmonic energy gives a constant field away from circles – not what we want
  • Biharmonic is a bit better, but – strangely – the results depend too much on the input mesh. For instance the result is close to what we want (both input, 90 and 180 deg) using unit cube as boundary and coarse mesh, but it no longer works if we take a fine mesh or use the AABB boundary surf.

Legend

  • magenta: frame field constraints
  • blue: boundary vertices of the tet mesh
  • green: interior vertices of the tet mesh
  • stats in the top: cylinder params, mesh stats (#verts, #tets), boundary type (cube or aabb), smoothness type (harmonic or biharmonic), optimization weights (smoothness and alignment), computation time in seconds (solve, projection)

Harmonic smoothness

Quarter-circle (90° arc)

Bd surf: unit cube

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Bd surf: AABB + margin

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Half-circle (180° arc)

Bd surf: unit cube

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Bd surf: AABB + margin

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Biharmonic smoothness

Quarter-circle (90° arc)

Bd surf: unit cube

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Bd surf: AABB + margin

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Half-circle (180° arc)

Bd surf: unit cube

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)

Bd surf: AABB + margin

  • coarse mesh (+ dense network)

  • fine mesh (+ dense network)