.vdbfiles are now as much as 20% smaller.
Note: This change and other changes in this release (see ABI changes below) alter the grid ABI so that it is incompatible with earlier versions of the OpenVDB library, such as the ones in Houdini 15.0 and 15.5. Define the macro
OPENVDB_3_ABI_COMPATIBLEwhen compiling OpenVDB to disable these changes and preserve ABI compatibility.
LeafNode::Buffera top-level class and renamed it to LeafBuffer. [Contributed by Double Negative]
CopyPolicyenum and added GridBase::copyGridWithNewTree and Grid::copyWithNewTree in order to close const-correctness holes that allowed newly-constructed, non-
constgrids to share their trees with existing
constgrids. (Where that behavior is still required, use a ConstPtrCast.)
OPENVDB_3_ABI_COMPATIBLEwhen compiling OpenVDB to disable these changes and preserve ABI compatibility.
boolwere ignored during equality comparisons.
TestPoissonSolver::testSolveWithSegmentDomainfor an example in which this tool is used to identify regions of trapped fluid when solving for pressure in a volume of incompressible fluid.)
#defined when compiling client code.
vdb_viewissue whereby the frame buffer size did not necessarily match the window size. [Contributed by Rafael Campos]
math::Hermiteclass since it was no longer used and caused build issues for some.
openvdb_houdini::SOP_NodeVDB::duplicateSourceStealable(), which in conjunction with the Unload flag can help to minimize deep copying of grids between nodes. The Advect, Convert, Fill, Filter, Fracture, Noise, Offset Level Set, Prune, Remap, Remove Divergence, Renormalize Level Set, Resize Narrow Band, Smooth Level Set and Transform SOPs all have this optimization enabled, meaning that they can potentially steal, rather than copy, data from upstream nodes that have the Unload flag enabled. [Contributed by Double Negative]
.vdbfiles, meaning that memory is not allocated for voxel values until the values are actually accessed. (This feature is enabled by default.) Until a grid has been fully loaded, its source
.vdbfile must not be modified or deleted, so for safety, File::open automatically makes private copies of source files that are smaller than a user-specified limit (see File::setCopyMaxBytes). The limit can be set to zero to disable copying, but if it cannot be guaranteed that a file will not be modified, then it is best not to enable delayed loading for that file.
.vdbfiles can now optionally be compressed with the Blosc LZ4 codec. Blosc compresses almost as well as ZLIB, but it is much faster.
tools::topologyToLevelSet(), which generates a level set from the implicit boundary between active and inactive voxels in an arbitrary input grid. [DWA internal]
vdb_renderthat allows one to specify a reference grid to be used for material color lookups.
getoptfor command-line argument parsing in
vdb_viewis now compatible with both GLFW 2 and GLFW 3.
HALF_LIB_DIRMakefile variables with
ILMBASE_LIB, to match OpenEXR’s library organization. [Contributed by Double Negative]
OPENVDB_2_ABI_COMPATIBLEwhen compiling OpenVDB to disable these changes and preserve ABI compatibility.
uint32_targument indicating the type of compression instead of a
boolindicating whether compression is enabled.
io::Archive::setCompressionFlags()to io::Archive::compression and io::Archive::setCompression.
pruneLevelSetmethods from the Tree and various node classes. These methods have been replaced by the much faster pruning functions found in tools/Prune.h.
signedFloodFillmethods from the Grid, Tree and various node classes. These methods have been replaced by the much faster functions found in tools/SignedFloodFill.h.
Tree::setBackground()(use the faster changeBackground tool instead), and removed the default argument from RootNode::setBackground.
convertToQuads(), which convert volumes to meshes, and
createLevelSetFromPolygons(), which converts meshes to volumes. NumPy is required.
INSTALLfile for details.
vdb_renderto specify the isovalue of the level set.
.vdbfiles could not be read correctly if they contained grids with more than two distinct inactive values.
.vdbfiles. The first unnamed grid in a file is now retrieved using the name “
”, instead of “
intto distinguish tile vs. voxel hits. Instead, it now returns
falseif no intersection is detected and
trueotherwise. Also, t0 and t1 might now correspond to the first and last hits of multiple adjacent leaf nodes and/or active tiles.
.vdbfile format has changed slightly. Tools built with older versions of OpenVDB should be recompiled to ensure that they can read files in the new format.
ValueTypes of the two trees need not be the same.
rand()(which is not thread-safe), and deprecated
math::randUniform()and added math::Random01 to replace it.
NaNs or other incorrect behavior if certain methods were called on populations of size zero.
struct toleranceto math::Tolerance and
negativeto math::negative and removed
LeafNode::offset2globalCoord()to coordToOffset, offsetToLocalCoord, and offsetToGlobalCoord, respectively, and likewise for InternalNode. [Thanks to Rick Hankins for suggesting this change.]
setValueOnSumwith tools::setValueOnMin, tools::setValueOnMax and tools::setValueOnSum (and a new tools::setValueOnMult) and added Tree::modifyValue and Tree::modifyValueAndActiveState, which modify voxel values in-place via user-supplied functors. Similarly, replaced
ValueAccessor::setValueOnSum()with ValueAccessor::modifyValue and ValueAccessor::modifyValueAndActiveState, and added a modifyValue method to all value iterators.
GU_PrimVDB::buildFromPrimVolume(), seen during the conversion from Houdini volumes to OpenVDB grids, that could cause signed flood fill to be applied to non-level set grids, resulting in active tiles with incorrect values.
CoordBBoxcan be used as a blocked iteration range.
vdb_viewwhen stepping through multiple grids after changing render modes.
vdb_viewcan now render fog volumes and vector fields, and it now features interactively adjustable clipping planes that enable one to view the interior of a volume.
true, the grid’s background value is now also quantized to 16 bits. (Not quantizing the background value caused a mismatch with the values of background tiles.)
consttree, although buffer swapping with
consttrees is disabled.
vdb_viewto use the faster and less memory-intensive OpenVDB volume to mesh converter instead of marching cubes, and rewrote the shader to be OpenGL 3.2 and GLSL 1.2 compatible.
vdb_viewnow displays one grid at a time. The left and right arrow keys cycle between grids.
vdb_viewto compile on OS X systems (provided that GLFW is available).
.vdb files are now saved using a mask-based compression scheme that is an order of magnitude faster than ZLIB and produces comparable file sizes for level set and fog volume grids. (ZLIB compression is still enabled by default for other classes of grids).
Mat4classes and deprecated the old accumulation methods.
Hermitedata type and Hermite grids are no longer supported.
voxelSizein transform classes and elsewhere.
houdini_utils::ParmFactory::setChoiceListin favor of
houdini_utils::ParmFactory::setChoiceListItems, which requires a list of token, label string pairs.
houdini_utils::getNodeChain()that caused the Offset Level Set, Smooth Level Set and Renormalize Level Set SOPs to ignore frame changes. [Contributed by SESI]
houdini_utils::ParmFactorycan now correctly generate ramp multi-parms.
nameattribute unnecessarily (i.e., if its grid’s name is empty), but it now correctly allows the name to be changed to the empty string.
getNodeBoundingBoxmethod to RootNode, InternalNode and LeafNode that returns the index space spanned by a node.
houdini_utilslibrary to facilitate the collection of a chain of adjacent nodes of a particular type so that they can be cooked in a single step. (For example, adjacent
xformSOPs could be collapsed by composing their transformation matrices into a single matrix.)
consttree and transform references without triggering deep copies, as well as
constmethods that return
Gridmethods to populate a grid’s metadata with statistics like the active voxel count, and to retrieve that metadata. By default, statistics are now computed and added to grids whenever they are written to
vdb_viewwith the ordering of GL vertex buffer calls. [Contributed by Bill Katz]
ParticlesToLevelSettool and From Particles SOP can now transfer arbitrary point attribute values from the input particles to output voxels.
LeafManagersupports dynamic buffers stored as a structure of arrays (SOA), unlike
LeafArray, which supports only static buffers stored as an array of structures (AOS).
ParmFactory::setChoiceList()overload that accepts (token, label) string pairs, and a
setDefault()overload that accepts an STL string.
LeafArraybut supports a dynamic buffer count and allocates buffers more efficiently. Useful for temporal integration (e.g., for level set propagation and interface tracking),
LeafManageris meant to replace
LeafArray, which will be deprecated in the next release.
Tree::pruneLevelSet()as a Tree::pruneOp()-compatible functor. Tree::LevelSetPrune is a specialized Tree::pruneInactive for level-set grids and is used in interface tracking.
tools::dilateto dilateVoxels and improved its performance. The new name reflects the fact that the current implementation ignores active tiles.
processTypedGridthat resample grids in several different ways.
houdini_utils::OpFactorythat allows for customization of operator names, icons, and Help URLs.
Tree::pruneLevelSetmethod that is similar to but faster than Tree::pruneInactive() for level set grids.
LeafArrayfor finer control of parallelism.
houdini/UT_VDBUtils.h) to convert between Houdini and OpenVDB matrix and vector types. [Contributed by SESI]
GEO_PrimVDBthat make it easier to directly access voxel data and that are used by the HScript volume expression functions in Houdini 12.5. [Contributed by SESI]
fill()methods that could cause neighboring voxels to become inactive.
vdb_viewno longer aborts when asked to surface a vector-valued grid—but it still doesn’t render the surface.
tools/FastSweeping.h. It will be replaced with a much more efficient implementation in the near future.
.vdbfiles is now optional, but enabled by default. [Contributed by SESI]
CopyPolicyargument to GridBase::copyGrid and to Grid::copy that specifies whether and how the grid’s tree should be copied.
librtto the link dependencies to address build failures on Ubuntu systems.
"name", etc. if a file contains multiple grids with the same name.
Treemethods, evalActiveVoxelBoundingBox() and memUsage().
GridMapclass. File I/O now uses STL containers of grid pointers instead.