|
OpenVDB 12.1.0
|
OpenVDB is now licensed under the Apache 2.0 license, instead of the MPL 2.0 license.
This version introduces ABI changes relative to older major releases, so to preserve ABI compatibility it might be necessary to define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 10 for Houdini 20.0 and 11 for Houdini 20.5.
GCC 9 is no longer supported.
OPENVDB_ENABLE_ASSERTS cmake argument/compile define to toggle assertions in OpenVDB code, independantly of NDEBUG. Asserts are no longer enabled by default in when NDEBUG is absent (e.g. Debug builds).OPENVDB_USE_DELAYED_LOADING is OFF [Reported by Brian McKinnon]NANOVDB_DISABLE_SYNC_CUDA_MALLOC that maps cudaMallocAsync and cudaFreeAsync to cudaMalloc and cudaFree respectively.UINT64_C.OPENVDB_ENABLE_RPATH is ON, the location of libopenvdb_houdini is now added to the rpath of all Houdini dsos.USE_EXPLICIT_INSTANTIATION is now disabled on Windows by default due to OOM linker issues.CONCURRENT_MALLOC is set to Auto.This version introduces ABI changes relative to older major releases, so to preserve ABI compatibility it might be necessary to define the macro OPENVDB_ABI_VERSION_NUMBER=N.
OpenEXR 2 and Python 2 are no longer supported.
boost::any in favor of std::any. [Contributed by Brian McKinnon]GridClass::IndexGrid that separates values from treeIndex, OnIndex, IndexMask, OnIndexMask) used by IndexGridcreateNanoGrid that replaces older conversion methods in GridBuilder.h, IndexGridBuilder.h and OpenToNanoVDB.hcudaPointsToGrid that constructs a point device grid from a list of points.cudaVoxelsToGrid that constructs a voxel device grid from a list of voxels.GpuTimer for timing of kernels in a specific cuda stream.cudaIndexToGrid that converts IndexGrids into regular Grids.cudaSignedFloodFill that performs signed-flood filling on the GPU.cudaAddBlindData that adds blind data to an existing grid on the GPU.cudaGridChecksum that computes checksums of device grids.cudaGridHandle that handles grids on the GPU.cudaNodeManager that constructs a NodeManager on the GPU.Points and GridType::PointIndex for point grids.GridType::Vec3u16 and GridType::Vec3u8 for compressed coordinates.BBox::expandAtomic and BBox::intersectAtomic.Coord::expandAtomic.Mask::DenseIterator, Mask::setOnAtomic, and Mask::setOffAtomic.InternalNode::ChildIterator is now const-correct.This version introduces ABI changes relative to older major releases, so to preserve ABI compatibility it might be necessary to define the macro OPENVDB_ABI_VERSION_NUMBER=N.
This version introduces ABI changes relative to older major releases, so to preserve ABI compatibility it might be necessary to define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 7 for Houdini 18.5 and 8 for Houdini 19.0.
Official release of NanoVDB, which for the first time offers GPU support for static sparse volumes in OpenVDB. See the documentation for details.
Added support for TBB 2021.
Added support for OpenEXR 3. This is contributed by Cary Phillips.
As of this release, support for grid ABI=5 has been removed.
This version introduces ABI changes relative to older major releases, so to preserve ABI compatibility it might be necessary to define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 6 for Houdini 18.0 and 7 for Houdini 18.5.
Official release of OpenVDB AX, a new C++ library that implements a domain specific JIT (just-in-time) compiled expression language, providing users with a new way of interacting with OpenVDB data. AX is tailored towards writing highly parallelizable and customizable OpenVDB volume and point kernel operations. See the documentation for more.
As of this release, support for grid ABI=4 has been removed.
GEO_Detail::getBBox() instead of GEO_Detail::computeQuickBounds() as the latter was incorrectly using the point of the VDB when computing bounding box. SOPs affected include Clip, Fill, Points Group, Rasterize Points, Read, Remove Divergence. [Contributed by Kuba Roth]OPENVDB_2_ABI_COMPATIBLE and OPENVDB_3_ABI_COMPATIBLE macros.CONCURRENT_MALLOC CMake option now only applies to the executables.OpenVDB::openvdb_je interface target through the FindOpenVDB CMake module which adds Jemalloc as a link time dependency.Some 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 built into Houdini up to and including Houdini 18. To preserve ABI compatibility, when compiling OpenVDB or any dependent code define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 5 for Houdini 17.0 and 17.5 and 6 for Houdini 18.0.
As of this release, a C++14 compiler is required and the oldest supported Houdini version is 17.0.
Xxx_ROOT variables.USE_SYSTEM_LIBRARY_PATHS option with DISABLE_CMAKE_SEARCH_PATHS and removed the hard coded list of SYSTEM_LIBRARY_PATHS in favor of using CMake's default search procedure. SYSTEM_LIBRARY_PATHS can still be used as a global list of paths for all dependency searches.CXX version requirements.USE_COLORED_OUTPUT option to CMake to display compiler output in color.OPENVDB_CODE_COVERAGE option to CMake.OPENVDB_USE_DEPRECATED_ABI (or set the CMake OPENVDB_USE_DEPRECATED_ABI option to ON) to suppress deprecation messages when compiling OpenVDB or dependent code.opsparedata HScript command and hou.NodeType.spareData and hou.NodeType.spareDataDict methods to retrieve spare data associated with operator types."vdb6.2.0 houdini18.0.222".As of this release, the oldest supported Houdini version is 16.5.
Some 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 built into Houdini up to and including Houdini 17. To preserve ABI compatibility, when compiling OpenVDB or any dependent code define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 3 for Houdini 15, 15.5 and 16, 4 for Houdini 16.5 and 5 for Houdini 17.0.
header_test Makefile target that checks library header files for dependencies on missing or indirectly included headers. [Contributed by Dan Bailey]const_cast the GU_Detail. [Contributed by Jeff Lait]final (that is, non-overridable) to facilitate the implementation of compilable SOPs. Override SOP_NodeVDB::cookVDBSop instead. (In most cases, it suffices to rename cookMySop to cookVDBSop.)Some 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 built into Houdini up to and including Houdini 16. To preserve ABI compatibility, when compiling OpenVDB or any dependent code define the macro OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 3 for Houdini 15, 15.5 and 16 and 4 for Houdini 16.5.
DESTDIR_LIB_DIR Makefile variable for Linux multiarch support. [Contributed by Mathieu Malaterre]OPENVDB_2_ABI_COMPATIBLE and OPENVDB_3_ABI_COMPATIBLE macros in favor of a new OPENVDB_ABI_VERSION_NUMBER macro. The new macro defaults to the library major version number but can be set at compile time to an earlier version number to disable ABI changes since that version. (Older ABIs will not be supported indefinitely, however.) For example, compile OpenVDB and any dependent code with -DOPENVDB_ABI_VERSION_NUMBER=4 to use the 4.x ABI.Note: To preserve ABI compatibility, this fix is currently enabled only on platforms for which the alignment of a tbb::atomic<uint32_t> is the same as for a
uint32_t. On other platforms, warnings will be logged during OpenVDB initialization, and it is recommended to disable delayed loading in that case (for example, by defining the environment variableOPENVDB_DISABLE_DELAYED_LOAD).
houdini_utils::OpFactory can generate help cards for operators automatically. New OpFactory::setDocumentation and ParmFactory::setDocumentation methods allow one to add custom help text in wiki markup format.vdb_lod, a command-line tool to generate volume mipmaps for level-of-detail effects.install_lib build target to the Makefile. [Contributed by Double Negative]getLoggingLevel, setLoggingLevel, and setProgramName, to allow configuration of the logging system.houdini_utils::ParmFactory::setGroupChoiceList, a convenience method for the creation of menus of primitive groups.hython to report a DSO error. [Reported by Double Negative]install_lib build target to the Makefile.openvdb_houdini::startLogForwarding, openvdb_houdini::stopLogForwarding and openvdb_houdini::isLogForwarding, which control the forwarding of log messages to Houdini’s error manager. Forwarding of library warnings and error messages is now enabled by default for SOPs when OpenVDB is built with log4cplus.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 built into Houdini 15, 15.5 and 16. To disable these changes and preserve ABI compatibility, define the macro
OPENVDB_3_ABI_COMPATIBLEwhen compiling OpenVDB or any code that depends on OpenVDB.
io::File::readGridPartial. [Reported by Nick Avramoussis]LeafManager::getPreFixSum to LeafManager::getPrefixSum.LeafNode::Buffer a top-level class and renamed it to LeafBuffer. [Contributed by Double Negative]io::File::readGridPartial in favor of delayed loading.tools::ClosestSurfacePoint::initialize now returns a boolean indicating whether initialization was successful.CopyPolicy enum and added GridBase::copyGridWithNewTree and Grid::copyWithNewTree in order to close const-correctness holes that allowed newly-constructed, non-const grids to share their trees with existing const grids. (Where that behavior is still required, use a ConstPtrCast.)OPENVDB_3_ABI_COMPATIBLE when compiling OpenVDB or any code that depends on OpenVDB.bool were ignored during equality comparisons.math::Mat3::setBasis and math::Mat4::setBasis.GudonovsNormSqrd to GodunovsNormSqrd [Contributed by Branislav Radjenovic]ValueType to PosType in the PointArray interface.TestPoissonSolver::testSolveWithSegmentDomain for an example in which this tool is used to identify regions of trapped fluid when solving for pressure in a volume of incompressible fluid.)-version option to vdb_print, vdb_render and vdb_view.OPENVDB_USE_BLOSC was #defined when compiling client code.Tree::prune.Tree::signedFloodFill.Tree::setBackground().tools::topologyToLevelSet(), which generates a level set from the implicit boundary between active and inactive voxels in an arbitrary input grid. [DWA internal]vdb_render that allows one to specify a reference grid to be used for material color lookups.io::File::readGridPartial allocates the nodes of a grid’s tree as before, but it now allocates leaf nodes without data buffers. (This feature is mainly for internal use. Partially-read grids should be used with care if at all, and they should be treated as read-only.)unittest_util::CpuTimer from unittest/util.h.getopt for command-line argument parsing in vdb_test.vdb_view is now compatible with both GLFW 2 and GLFW 3.HALF_INCL_DIR and HALF_LIB_DIR Makefile variables with ILMBASE_INCL_DIR and ILMBASE_LIB_DIR and added ILMBASE_LIB, to match OpenEXR’s library organization. [Contributed by Double Negative]OPENVDB_2_ABI_COMPATIBLE when compiling OpenVDB to disable these changes and preserve ABI compatibility.uint32_t argument indicating the type of compression instead of a bool indicating whether compression is enabled.io::Archive::isCompressionEnabled() and io::Archive::setCompressionEnabled() and renamed io::Archive::compressionFlags() and io::Archive::setCompressionFlags() to io::Archive::compression and io::Archive::setCompression.pruneInactive and pruneLevelSet methods from the Tree and various node classes. These methods have been replaced by the much faster pruning functions found in tools/Prune.h.signedFloodFill methods from the Grid, Tree and various node classes. These methods have been replaced by the much faster functions found in tools/SignedFloodFill.h.Grid::setBackground() and Tree::setBackground() (use the faster changeBackground tool instead), and removed the default argument from RootNode::setBackground.convertToPolygons() and convertToQuads(), which convert volumes to meshes, and createLevelSetFromPolygons(), which converts meshes to volumes. NumPy is required.INSTALL file for details.vdb_render command-line renderer.vdb_render to specify the isovalue of the level set.int to distinguish tile vs. voxel hits. Instead, it now returns false if no intersection is detected and true otherwise. Also, t0 and t1 might now correspond to the first and last hits of multiple adjacent leaf nodes and/or active tiles.rand() (which is not thread-safe), and deprecated math::randUniform() and added math::Random01 to replace it.negative to math::negative and removed math::toleranceValue().LeafNode::coord2offset(), LeafNode::offset2coord() and LeafNode::offset2globalCoord() to coordToOffset, offsetToLocalCoord, and offsetToGlobalCoord, respectively, and likewise for InternalNode. [Thanks to Rick Hankins for suggesting this change.]setValueOnMin, setValueOnMax and setValueOnSum with 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.LeafNode::addValue and LeafNode::scaleValue.LeafNode::addValue and LeafNode::scaleValue.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.CoordBBox can be used as a blocked iteration range.vdb_view when stepping through multiple grids after changing render modes.vdb_view can 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.)vdb_view.vdb_view to 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_view now displays one grid at a time. The left and right arrow keys cycle between grids.vdb_view to 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).Transform, Map and Mat4 classes and deprecated the old accumulation methods.tools::dilateVoxels().Hermite data type and Hermite grids are no longer supported.voxelDimensions to voxelSize in transform classes and elsewhere.houdini_utils::ParmFactory::setChoiceList in 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::ParmFactory can now correctly generate ramp multi-parms.name attribute unnecessarily (i.e., if its grid’s name is empty), but it now correctly allows the name to be changed to the empty string.getNodeBoundingBox method to RootNode, InternalNode and LeafNode that returns the index space spanned by a node.houdini_utils library 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 xform SOPs could be collapsed by composing their transformation matrices into a single matrix.)const methods that return const shared pointers.Grid methods 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 files.vdb_view with the ordering of GL vertex buffer calls. [Contributed by Bill Katz]ParticlesToLevelSet tool and From Particles SOP can now transfer arbitrary point attribute values from the input particles to output voxels.LeafArray class. LeafManager supports 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.LeafArray but supports a dynamic buffer count and allocates buffers more efficiently. Useful for temporal integration (e.g., for level set propagation and interface tracking), LeafManager is 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::dilate to tools::dilateVoxels() and improved its performance. The new name reflects the fact that the current implementation ignores active tiles.processTypedGrid that resample grids in several different ways.houdini_utils::OpFactory that allows for customization of operator names, icons, and Help URLs.Mat3.Tree::pruneLevelSet method that is similar to but faster than Tree::pruneInactive() for level set grids.LeafArray for finer control of parallelism.vdb_test and vdb_view targets.GEO_PrimVDB that 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]setValue*() and fill() methods that could cause neighboring voxels to become inactive.vdb_view no longer aborts when asked to surface a vector-valued grid—but it still doesn’t render the surface.setValueOn.tools/FastSweeping.h. It will be replaced with a much more efficient implementation in the near future.openvdb_houdini::Interrupter::start() and end() calls.CopyPolicy argument to GridBase::copyGrid and to Grid::copy that specifies whether and how the grid’s tree should be copied.librt to the link dependencies to address build failures on Ubuntu systems.Tree methods, evalActiveVoxelBoundingBox() and memUsage().GridMap class. File I/O now uses STL containers of grid pointers instead.