Quick Overview
OpenVDB is an open-source C++ library for efficient storage and manipulation of sparse volumetric data. It provides hierarchical data structures and tools for high-resolution volumetric effects in visual effects and animation, particularly useful for simulations involving smoke, water, and clouds.
Pros
- Highly efficient storage and fast random access for sparse volumetric data
- Powerful set of tools for manipulating and rendering volumetric effects
- Well-optimized for both memory usage and computational performance
- Widely adopted in the visual effects industry
Cons
- Steep learning curve due to complex API and concepts
- Limited documentation for advanced features
- Requires significant computational resources for large-scale simulations
- Primarily focused on C++, with limited bindings for other languages
Code Examples
- Creating a simple fog volume:
#include <openvdb/openvdb.h>
openvdb::initialize();
openvdb::FloatGrid::Ptr grid = openvdb::FloatGrid::create();
openvdb::FloatGrid::Accessor accessor = grid->getAccessor();
for (int i = -50; i <= 50; ++i) {
for (int j = -50; j <= 50; ++j) {
for (int k = -50; k <= 50; ++k) {
float density = std::exp(-(i*i + j*j + k*k) / 1000.0f);
accessor.setValue(openvdb::Coord(i, j, k), density);
}
}
}
- Applying a blur filter to a grid:
#include <openvdb/tools/Filter.h>
openvdb::FloatGrid::Ptr grid = // ... create or load grid
int iterations = 3;
float radius = 1.0f;
openvdb::tools::Filter<openvdb::FloatGrid> filter(*grid);
filter.gaussian(iterations, radius);
- Raymarching through a volume:
#include <openvdb/tools/RayIntersector.h>
openvdb::FloatGrid::Ptr grid = // ... create or load grid
openvdb::math::Ray ray(openvdb::Vec3f(0, 0, 0), openvdb::Vec3f(1, 1, 1).unit());
openvdb::tools::RayIntersector<openvdb::FloatGrid> intersector(*grid);
openvdb::tools::RayIntersector<openvdb::FloatGrid>::Real t0, t1;
if (intersector.intersects(ray, t0, t1)) {
std::cout << "Ray intersects volume from " << t0 << " to " << t1 << std::endl;
}
Getting Started
- Install OpenVDB and its dependencies (Boost, TBB, etc.)
- Include OpenVDB headers in your C++ project
- Link against OpenVDB library
- Initialize OpenVDB in your code:
#include <openvdb/openvdb.h>
int main() {
openvdb::initialize();
// Your OpenVDB code here
return 0;
}
- Compile with C++11 or later standard
- Run your program
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
OpenVDB | AX | Nano | Houdini | License | CII |
---|---|---|---|---|---|
Website | Discussion Forum | Documentation | Releases | License | Slack
OpenVDB is an open source C++ library comprising a novel hierarchical data structure and a large suite of tools for the efficient storage and manipulation of sparse volumetric data discretized on three-dimensional grids. It was developed by DreamWorks Animation for use in volumetric applications typically encountered in feature film production.
Development Repository
This GitHub repository hosts the trunk of the OpenVDB development. This implies that it is the newest public version with the latest features and bug fixes. However, it also means that it has not undergone a lot of testing and is generally less stable than the production releases.
License
OpenVDB is released under the Mozilla Public License Version 2.0, which is a free, open source software license developed and maintained by the Mozilla Foundation.
The trademarks of any contributor to this project may not be used in association with the project without the contributor's express permission.
NOTE: OpenVDB is in the process of changing its license from Mozilla Public License Version 2.0 to Apache License, Version 2.0! Please see the file RE-LICENSE_NOTE.txt for more details.
Contributing
OpenVDB welcomes contributions to the OpenVDB project. Please refer to the contribution guidelines for details on how to make a contribution.
Developer Quick Start
The following provides basic installation examples for the core OpenVDB library. Other components, such as the python module, OpenVDB AX, NanoVDB and various executables, may require additional dependencies. See the build documentation for help with installations.
Linux/MacOS
# Linux
# @note If your distribution does not have required versions, consider using
# apt pinning. See the dependency documentation for more details.
apt-get install -y libboost-iostreams-dev
apt-get install -y libtbb-dev
apt-get install -y libblosc-dev
# MacOS
# @note We are using homebrew in this example to install requried dependencies
# https://brew.sh/
brew install boost
brew install tbb
brew install c-blosc
git clone git@github.com:AcademySoftwareFoundation/openvdb.git
cd openvdb
mkdir build
cd build
cmake ..
make -j4 && make install
Windows
Note that the following commands have only been tested for 64bit systems/libraries.
It is recommended to set the VCPKG_DEFAULT_TRIPLET
environment variable to
x64-windows
to use 64-bit libraries by default. You will also require
Visual Studio (for the MSVC C++
runtime and compiler toolchains), CMake and optionally
vcpkg for the installation of OpenVDB's
dependencies.
vcpkg install zlib:x64-windows
vcpkg install blosc:x64-windows
vcpkg install tbb:x64-windows
vcpkg install boost-iostreams:x64-windows
vcpkg install boost-any:x64-windows
vcpkg install boost-algorithm:x64-windows
vcpkg install boost-interprocess:x64-windows
git clone git@github.com:AcademySoftwareFoundation/openvdb.git
cd openvdb
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_VCPKG>\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -A x64 ..
cmake --build . --parallel 4 --config Release --target install
Building OpenVDB AX and NanoVDB
OpenVDB AX depends on the core OpenVDB library. NanoVDB can be built with and without OpenVDB support. Note that NanoVDB has its own build instructions, see the NanoVDB build documentation for details.
The following variables can be passed to the cmake
configure command. There
are more optional VDB components, see the build documentation
for a complete list.
Option | Details |
---|---|
-D OPENVDB_BUILD_AX=ON | to enable OpenVDB AX |
-D OPENVDB_BUILD_NANOVDB=ON | to enable NanoVDB |
-D NANOVDB_USE_OPENVDB=ON | to use OpenVDB in NanoVDB |
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot