|
OpenVDB 10.0.1
|
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.
[[deprecated]] attribute.As of this release, support for grid ABI=4 has been removed.
evalActiveVoxelBoundingBox is called. The correct behavior is to only return true if the grid contains any active values.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]_CRT_NONSTDC_NO_WARNINGS and _CRT_SECURE_NO_WARNINGS are now enabled by default with MSVC.OPENVDB_BUILD_PYTHON_UNITTESTS to disable or enable the python module tests and fixed the required environment for them on Windows. The python interpreter is no longer required by default if the tests are disabled.BLOSC_USE_EXTERNAL_SOURCES to FindBlosc to include blosc dependencies as interface libraries.USE_STATIC_DEPENDENCIES to force CMake to only locate static libraries on UNIX. On Windows, if enabled, located libraries are assumed to be static.CMAKE_MSVC_RUNTIME_LIBRARY for compilers that target the MSVC ABI. Requires CMake 3.15 or greater.OPENVDB_OPENEXR_STATICLIB was not being defined and OPENEXR_DLL was being defined when linking against static builds of OpenEXR/IlmBase on Windows.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.FindJemalloc.cmake where paths were not being handled correctly.CMakeLists.txt. [Reported by Daniel Elliott]FindOpenVDB.cmake now correctly propagates 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..so for the Python module on Linux and Unix platforms.opsparedata HScript command and hou.NodeType.spareData and hou.NodeType.spareDataDict methods to retrieve spare data associated with operator types.pythonrc.py startup script to set the tab menu visibility of nodes and their native Houdini equivalents, based on an OPENVDB_OPHIDE_POLICY environment variable."vdb6.2.0 houdini18.0.222".As of this release, the oldest supported Houdini version is 16.5.
vdb_print, etc.) now include the library ABI version in their -version output.[[1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]]).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.
leafmode, internalmode, tilemode and voxelmode parameters to leafstyle, internalstyle, etc. and converted them from ordinals to strings.header_test Makefile target that checks library header files for dependencies on missing or indirectly included headers. [Contributed by Dan Bailey]matchGroup(*gdp, evalStdString("group", time)).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.
"5.0.0abi3"..vdb file, and although their values are not printable, they can be written back to disk.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.vdb_test -f option that reads a list of tests to be run from a text file.vdb_view. [Contributed by Nick Avramoussis]vdb_view.for loops.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 auint32_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).
.vdb file UUIDs to avoid duplicate IDs. [Reported by Jason Lefley]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.-shuffle option that causes vdb_test to run unit tests in random order, which can help to identify unintended dependencies between tests.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..vdb files 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 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]boost::shared_ptr with std::shared_ptr.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.vdb_view issue whereby the frame buffer size did not necessarily match the window size. [Contributed by Rafael Campos]math::Hermite class since it was no longer used and caused build issues for some.pscale attribute.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].vdb files, 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 .vdb file 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 io::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..vdb files can now optionally be compressed with the Blosc LZ4 codec. Blosc compresses almost as well as ZLIB, but it is much faster.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..vdb files could not be read correctly if they contained grids with more than two distinct inactive values..vdb files. The first unnamed grid in a file is now retrieved using the name “[0]”, instead of “[1]”.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..vdb file 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 tolerance to math::Tolerance and 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.)const tree, although buffer swapping with const trees is disabled.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 tree and transform references without triggering deep copies, as well as 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 file.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.doc, vdb_test and vdb_view targets.houdini/UT_VDBUtils.h) to convert between Houdini and OpenVDB matrix and vector types. [Contributed by SESI]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..vdb files is now optional, but enabled by default. [Contributed by SESI]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."name[1]", "name[2]", etc. if a file contains multiple grids with the same name.Tree methods, evalActiveVoxelBoundingBox() and memUsage().GridMap class. File I/O now uses STL containers of grid pointers instead.