Skip to content

Frame Fields

A frame field is a set of directions that live in the tangent space of a manifold. On a mesh, it can be represented as a set of vectors for each element (vertex/face/cell) on which it is defined.

Smooth frame field on the bunny model and on a CAD mesh

A demo of mouette's frame field algorithms visualized in Polyscope can be found here

The FrameField base class

Mouette implements frame fields via the abstract base class FrameField. This base class is instanciated with various algorithms using higher level functions.

Framefield smoothing

Given a FrameField object initialized by some external function, the user can run the smoothing algorithm using the .run() method. Alternatively, a FrameField object is callable:

ff.run() 
ff() # produces similar results

Variables access

FrameField objects are iterable. Indexing a frame field returns the representation of the frame at the given index. For 2D frame fields, this representation is a complex number. For 3D frame fields, it is a numpy array of shape (9,) representing the corresponding L4 spherical harmonics.

ff[7] # returns the representation of the frame for element (vertex/face/cell )

Singularity flagging

The .flag_singularities() method of the FrameField class allow to detect any singular point inside the frame field. When the boundary of the domain is constrained, those singularity points are bound to appear in 2D (due to the Poincaré-Hopf theorem). In 3D, the singularities are no longer ponctual, but form a network of lines called a singularity graph.

Export and Visualization

The export_as_mesh() method of the FrameField class outputs frames either as little crossed in 2D or little cubes in 3D for visualization purposes.

Frame fields in mouette

mouette implements different kinds of frame fields:

2D frame fields

To work on curved surfaces, these frame field require the definition of a discrete surface connection which allows the comparison of elements in adjacent tangent spaces.

3D frame fields

  • Volume frame fields are 3D crosses defined inside a volume mesh, either on its vertices or its cells.