Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 

Algebraic Representations for Volumetric Frame Fields

Introduction

This code includes algorithms for computing volumetric (octahedral and odeco) frame fields, described in detail in our paper:

Palmer, D., Bommes, D., & Solomon, J. (2020). Algebraic Representations for Volumetric Frame Fields. ACM Transactions on Graphics (TOG), 39(2), 1-17.

View ARFF on File Exchange

DOI

External Dependencies

Installation

First, remember to build and install the Mosek Fusion API as described here.

The following commands will compile all MEX files and add the code to the MATLAB path.

cd src/batchop
mexbuild /path/to/tbb/include
cd ../sdp
mexbuild /path/to/tbb/include /path/to/mosek/9.0
cd ../../ext/ray
mexbuild /path/to/eigen3 /path/to/tbb/include
cd ../..
install

Usage

The main commands for computing fields are MBO, OctaManopt, and OdecoManopt.

Loading Models

Some tetrahedral meshes in Medit format are included in the meshes directory for convenience. To load a mesh, use

mesh = ImportMesh('meshes/rockerarm_91k.mesh'); % Medit format

We also support meshes in Tetgen format:

mesh = ImportMesh('path/to/file.node'); % Tetgen .node/.ele format

Computing Frame Fields

The following commands compute octahedral and odeco fields by MBO with random initialization:

qOcta = MBO(mesh, OctaMBO, [], 1, 0);
qOdeco = MBO(mesh, OdecoMBO, [], 1, 0);

For modified MBO as described in our paper, set the diffusion time multiplier and exponent as follows:

qOcta = MBO(mesh, OctaMBO, [], 50, 3);
qOdeco = MBO(mesh, OdecoMBO, [], 50, 3);

The following lines compute octahedral and odeco fields by RTR with specified initial fields. Drop the second argument for random initialization.

qOcta = OctaManopt(mesh, qOcta);
qOdeco = OdecoManopt(mesh, qOdeco);

We have also included an implementation of the method of Ray et al. [2016] in the ext/ray directory. To use it, invoke

qRay = Ray(mesh);

Visualization

To visualize an octahedral or odeco field, use VisualizeResult, which plots the integral curves and singular structure, e.g.,

VisualizeResult(mesh, qOdeco);

PlotInterpolatedFrames plots field-oriented cubes at specified sample points:

PlotInterpolatedFrames(q, mesh.tetra, samples)

where samples is a $k \times 3$ matrix of sample positions.

Figures

We have included scripts for generating (MATLAB versions of) figures that appear in the paper in the figures/ directory.

  • EnergyTest compares energy divergence behavior of octahedral and odeco fields, as in Figure 12 in the paper.

  • PrismFigures generates a figure similar to Figure 1 in the paper, showing scaling behavior of an odeco field.

  • ConvergenceComparisons generates figures like Figures 5 and 6 in the paper:

    ConvergenceComparisons('../meshes', 'path/to/output/');
  • GenerateComparisons generates a table like that in our supplemental document:

    GenerateComparisons('../meshes', 'path/to/output/');
  • To verify the exactness of SDP projection into the octahedral and odeco varieties, respectively, execute

    OctaExactnessTest(n);
    OdecoExactnessTest(n);

    for a sufficiently large value of n.

About

Algebraic Representations for Volumetric Frame Fields

Resources

License

Stars

Watchers

Forks

Packages

No packages published