OpenVDB
12.0.0
|
Computes signed distance values from an initial iso-surface and optionally performs velocity extension at the same time. This is done by means of a novel sparse and parallel fast sweeping algorithm based on a first order Godunov's scheme. More...
#include <openvdb/tools/FastSweeping.h>
Classes | |
struct | DilateKernel |
Private class of FastSweeping to perform multi-threaded initialization. More... | |
struct | InitSdf |
struct | MinMaxKernel |
struct | PruneMinMaxFltKernel |
struct | SweepingKernel |
Private class of FastSweeping to perform concurrent fast sweeping in two directions. More... | |
Public Member Functions | |
FastSweeping () | |
Constructor. More... | |
~FastSweeping () | |
Destructor. More... | |
FastSweeping (const FastSweeping &)=delete | |
Disallow copy construction. More... | |
FastSweeping & | operator= (const FastSweeping &)=delete |
Disallow copy assignment. More... | |
SdfGridT::Ptr | sdfGrid () |
Returns a shared pointer to the signed distance field computed by this class. More... | |
ExtGridT::Ptr | extGrid () |
Returns a shared pointer to the extension field computed by this class. More... | |
ExtGridT::Ptr | extGridInput () |
Returns a shared pointer to the extension grid input. This is non-NULL if this class is used to extend a field with a non-default sweep direction. More... | |
bool | initSdf (const SdfGridT &sdfGrid, SdfValueT isoValue, bool isInputSdf) |
Initializer for input grids that are either a signed distance field or a scalar fog volume. More... | |
template<typename ExtOpT > | |
bool | initExt (const SdfGridT &sdfGrid, const ExtOpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename ExtGridT::ConstPtr extGrid=nullptr) |
Initializer used whenever velocity extension is performed in addition to the computation of signed distance fields. More... | |
bool | initDilate (const SdfGridT &sdfGrid, int dilation, NearestNeighbors nn=NN_FACE, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL) |
Initializer used when dilating an existing signed distance field. More... | |
template<typename MaskTreeT > | |
bool | initMask (const SdfGridT &sdfGrid, const Grid< MaskTreeT > &mask, bool ignoreActiveTiles=false) |
Initializer used for the extension of an existing signed distance field into the active values of an input mask of arbitrary value type. More... | |
void | sweep (int nIter=1, bool finalize=true) |
Perform nIter iterations of the fast sweeping algorithm. More... | |
void | clear () |
Clears all the grids and counters so initialization can be called again. More... | |
size_t | sweepingVoxelCount () const |
Return the number of voxels that will be solved for. More... | |
size_t | boundaryVoxelCount () const |
Return the number of voxels that defined the boundary condition. More... | |
bool | isValid () const |
Return true if there are voxels and boundaries to solve for. More... | |
FastSweepingDomain | sweepDirection () const |
Return whether the sweep update is in all direction (SWEEP_ALL), greater than isovalue (SWEEP_GREATER_THAN_ISOVALUE), or less than isovalue (SWEEP_LESS_THAN_ISOVALUE). More... | |
bool | isInputSdf () |
Return whether the fast-sweeping input grid a signed distance function or not (fog). More... | |
template<typename OpT > | |
bool | initExt (const SdfGridT &fogGrid, const OpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode, const typename ExtGridT::ConstPtr extGrid) |
Computes signed distance values from an initial iso-surface and optionally performs velocity extension at the same time. This is done by means of a novel sparse and parallel fast sweeping algorithm based on a first order Godunov's scheme.
Solves:
FastSweeping | ( | ) |
Constructor.
|
inline |
Destructor.
|
delete |
Disallow copy construction.
|
inline |
Return the number of voxels that defined the boundary condition.
void clear | ( | ) |
Clears all the grids and counters so initialization can be called again.
|
inline |
Returns a shared pointer to the extension field computed by this class.
|
inline |
Returns a shared pointer to the extension grid input. This is non-NULL if this class is used to extend a field with a non-default sweep direction.
bool initDilate | ( | const SdfGridT & | sdfGrid, |
int | dilation, | ||
NearestNeighbors | nn = NN_FACE , |
||
FastSweepingDomain | mode = FastSweepingDomain::SWEEP_ALL |
||
) |
Initializer used when dilating an existing signed distance field.
sdfGrid | Input signed distance field to to be dilated. |
dilation | Numer of voxels that the input SDF will be dilated. |
nn | Stencil-pattern used for dilation |
mode | Determines the direction of the dilation. SWEEP_ALL will dilate in both sides of the signed distance function, SWEEP_GREATER_THAN_ISOVALUE will dilate in the positive side of the iso-surface, SWEEP_LESS_THAN_ISOVALUE will dilate in the negative side of the iso-surface. |
This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.
bool initExt | ( | const SdfGridT & | sdfGrid, |
const ExtOpT & | op, | ||
const ExtValueT & | background, | ||
SdfValueT | isoValue, | ||
bool | isInputSdf, | ||
FastSweepingDomain | mode = FastSweepingDomain::SWEEP_ALL , |
||
const typename ExtGridT::ConstPtr | extGrid = nullptr |
||
) |
Initializer used whenever velocity extension is performed in addition to the computation of signed distance fields.
sdfGrid | Input scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf). |
op | Functor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. Strictly the return type of this functor is only required to be convertible to ExtValueT! |
background | Background value of return grid with the extension field. |
isoValue | Iso-value to be used for the boundary condition of the fast sweeping algorithm (typically 0 for sdfs and a positive value for fog volumes). |
isInputSdf | Used to determine if sdfGrid is a sigend distance field (true) or a scalar fog volume (false). |
mode | Determines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to fog values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to fog values that are less than a given isovalue. If a mode other than SWEEP_ALL is chosen, a user needs to supply extGrid. |
extGrid | Optional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a level-set value that is less than the isovalue. Otherwise, the extension field voxel value will be computed by the Fast Sweeping algorithm. The opposite convention is implemented when SWEEP_LESS_THAN_ISOVALUE is supplied as an argument for mode. |
This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.
bool initExt | ( | const SdfGridT & | fogGrid, |
const OpT & | op, | ||
const ExtValueT & | background, | ||
SdfValueT | isoValue, | ||
bool | isInputSdf, | ||
FastSweepingDomain | mode, | ||
const typename ExtGridT::ConstPtr | extGrid | ||
) |
bool initMask | ( | const SdfGridT & | sdfGrid, |
const Grid< MaskTreeT > & | mask, | ||
bool | ignoreActiveTiles = false |
||
) |
Initializer used for the extension of an existing signed distance field into the active values of an input mask of arbitrary value type.
sdfGrid | Input signed distance field to be extended into the mask. |
mask | Mask used to identify the topology of the output SDF. Note this mask is assume to overlap with the sdfGrid. |
ignoreActiveTiles | If false, active tiles in the mask are treated as active voxels. Else they are ignored. |
This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.
Initializer for input grids that are either a signed distance field or a scalar fog volume.
sdfGrid | Input scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf). |
isoValue | Iso-value to be used to define the Dirichlet boundary condition of the fast sweeping algorithm (typically 0 for sdfs and a positive value for fog volumes). |
isInputSdf | Used to determine if sdfGrid is a sigend distance field (true) or a scalar fog volume (false). |
This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.
|
inline |
Return whether the fast-sweeping input grid a signed distance function or not (fog).
|
inline |
Return true if there are voxels and boundaries to solve for.
|
delete |
Disallow copy assignment.
|
inline |
Returns a shared pointer to the signed distance field computed by this class.
void sweep | ( | int | nIter = 1 , |
bool | finalize = true |
||
) |
Perform nIter iterations of the fast sweeping algorithm.
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
finalize | If true the (possibly asymmetric) inside and outside values of the resulting signed distance field are properly set. Unless you're an expert this should remain true! |
RuntimeError | if sweepingVoxelCount() or boundaryVoxelCount() return zero. This might happen if none of the initialization methods above were called or if that initialization failed. |
|
inline |
Return whether the sweep update is in all direction (SWEEP_ALL), greater than isovalue (SWEEP_GREATER_THAN_ISOVALUE), or less than isovalue (SWEEP_LESS_THAN_ISOVALUE).
|
inline |
Return the number of voxels that will be solved for.