Skip to content

Commit dd0ac13

Browse files
authored
Merge pull request #2071 from AcademySoftwareFoundation/v12.1.0_rc
V12.1.0
2 parents 9acc3af + e4621ae commit dd0ac13

File tree

15 files changed

+278
-130
lines changed

15 files changed

+278
-130
lines changed

.github/workflows/weekly.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,21 +192,21 @@ jobs:
192192
strategy:
193193
matrix:
194194
config:
195-
- { runson: ubuntu-latest, cxx: g++, cmake: '' }
195+
- { runson: ubuntu-latest, cxx: g++, cmake: '' }
196196
# Disable the clang job for now. See https://github.com/actions/runner-images/issues/8659
197197
# - { runson: ubuntu-latest, cxx: clang++, cmake: '' }
198198
# @todo gcc on macos
199-
- { runson: macos-latest, cxx: '', cmake: '-DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm@15/bin/clang++ -DLLVM_DIR=/opt/homebrew/opt/llvm@15/lib/cmake/llvm' }
199+
- { runson: macos-latest, cxx: '', cmake: '-DLLVM_DIR=/opt/homebrew/opt/llvm@20/lib/cmake/llvm' }
200200
fail-fast: false
201201
steps:
202202
- uses: actions/checkout@v3
203203
- name: install_deps
204204
run: |
205205
if [ "$RUNNER_OS" == "Linux" ]; then
206-
sudo apt-get -q install -y libboost-dev libboost-iostreams-dev libtbb-dev libblosc-dev llvm-15-dev libgtest-dev libgmock-dev libcppunit-dev
206+
sudo apt-get -q install -y libboost-dev libboost-iostreams-dev libtbb-dev libblosc-dev llvm-dev libgtest-dev libgmock-dev libcppunit-dev
207207
./ci/install_nanobind.sh 2.0.0
208208
elif [ "$RUNNER_OS" == "macOS" ]; then
209-
./ci/install_macos.sh 15
209+
./ci/install_macos.sh 20
210210
./ci/install_tbb_macos.sh
211211
else
212212
echo "$RUNNER_OS not supported"; exit 1

CHANGES

Lines changed: 138 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,161 @@
11
OpenVDB Version History
22
=======================
33

4-
Version 12.0.2 - In development
4+
Version 12.1.0 - August 8, 2025
5+
6+
OpenVDB:
7+
New features:
8+
- New level set constructor tools::createLevelSetCapsule creates a grid
9+
containing a narrow-band level set representation of a capsule (tube
10+
with constant radius and sphere caps).
11+
- New level set constructor tools::createLevelSetTaperedCapsule creates a
12+
grid containing a narrow-band level set representation of a tapered
13+
capsule (tube with sphere caps and different radii at both ends, or
14+
equivalently the convex hull of two spheres with possibly different
15+
centers and radii).
16+
- New level set constructor tools::createLevelSetTubeComplex creates a grid
17+
containing a narrow-band level set representation of a tube complex (a
18+
collection of capsules or tapered capsules defined by endpoint coordinates
19+
and segment indices).
20+
- New level set constructor tools::createLevelSetDilatedMesh creates a grid
21+
containing a narrow-band level set representation of a dilated surface
22+
mesh (dilated by a radius in all directions).
23+
- New class tools::ConvexVoxelizer, used by the above methods, which can be
24+
inherited to implement a convex level set constructor.
25+
- Introduced anisotropic surfacing tools in points/PointRasterizeSDF.h and
26+
principal component analysis (PCA) methods in points/PrincipalComponentAnalysis.h.
27+
The latter tool analyses point neighborhoods and computes affine
28+
transformations representing elliptical distributions. The prior tool
29+
takes rotational and stretch point attributes (optionally computed from
30+
the prior PCA methods) and generates anisotropic surfaces.
31+
32+
Improvements:
33+
- Significantly improved the performance of all LeafNode ValueIterators,
34+
up to 5x on some platforms and up to 10x when delay loading is enabled.
35+
Construction of a ValueIterator from a leaf node now requests the leaf
36+
buffers ahead of iteration to avoid potentially expensive API calls.
37+
- Improved the performance of PointRasterizeSDF.h tools with larger radii
38+
with better bound computation approximations.
39+
- Significant performance improvement to delay loaded files - the warning
40+
logic which checks the underlying mapped file for the last modified time
41+
has been removed, resulting in performance gains upwards of 10x when
42+
loading in node data buffers. Note that the check that was removed is
43+
entirely redundant on Windows and would only print a warning on other
44+
system.
45+
[Contributed by jjtParadox]
46+
- Added OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION and OPENVDB_HAS_MEMBER_FUNCTION
47+
macros to help determine the presence and compatibility of interface
48+
member functions at compile time.
49+
- Added OPENVDB_ASSUME macros to mimic builtin assume and C++23 assume
50+
attributes.
51+
- Improved read and write of PLY files with vdb_tool so they support Vec3d
52+
and 64 bit attributes. Changed vdb_tool version number from 10.6.1 to
53+
10.7.0.
54+
55+
API Changes:
56+
- Mat3 and Mat4 functions have been marked [[nodiscard]] where it may be
57+
confusing if they are operating in place or returning a result, in
58+
particular tranpose, invert, adjoint, and timesDiagonal.
59+
- Re-worked the API in PointRasterizeSDF.h with the addition of anisotropic
60+
surfacing kernels. The new API exposes more concise free functions which
61+
take structs of parameters. The old API remains supported but is
62+
deprecated.
63+
- Deprecated providing a filter or interrupter as arguments to
64+
points::rasterize. These can instead be implemented on user transfer
65+
schemes.
66+
- Transfer schemes provided to points::rasterize can now optionally
67+
implement a rasterizePoints callback that takes a range of points per
68+
voxel.
69+
70+
Fixes:
71+
- Fixed a bug in points::rasterizeSpheres and points::rasterizeSmoothSpheres
72+
which could cause sections of the generated surface to incorrectly be
73+
marked as negative interior values.
74+
- Fixed a bug in points::rasterizeSmoothSpheres which could result in
75+
incomplete surface reconstruction with significantly larger search
76+
distances.
77+
- Fixed some precision issues in various Matrix methods.
78+
- Fixed bugs in vdb_tool that prevented build with newer namespaces in
79+
nanovdb.
80+
81+
OpenVDB AX:
82+
Improvements:
83+
- Added support for LLVM versions greater than 15. Upgraded CI to test with
84+
LLVM versions 16, 17, 18, 19 and 20.
85+
- As of this release, LLVM 15 is the minimum required version for OpenVDB
86+
AX. Note that there is an issue with LLVM 17 symbols which makes it
87+
incompatible with the OpenVDB Python plugin. AS such, LLVM version 18 and
88+
greater are the recommended LLVM versions to use, with LLVM 18 being the
89+
new future minimum version.
90+
- Significant performance improvement to the compilation of AX kernels when
91+
using LLVM 18 and greater.
92+
- Significant backend refactoring to AX IR generation to support newer
93+
versions of LLVM. In particular, parts of the codegen::Function and
94+
codegen::FunctionBuilder API require new usage from LLVM 16 due to
95+
the LLVM opaque pointer changes. If you're not using the OpenVDB AX
96+
Function codegen API then no client changes should be necessary.
97+
- Migrated OpenVDB AX unit tests from cppunit to gtest
98+
[Contributed by Tim Straubinger]
99+
100+
Fixes:
101+
- Fixed a case of undefined behaviour when explicitly casting variables to
102+
the same type as their storage type e.g:
103+
double a; double b = double(a);
104+
- Fixed an AX compiler error which would produce invalid IR when using 64bit
105+
integer variables for matrix array offsetting e.g:
106+
int64 a = 0; mat4f b = 1; float c = b[a,a];
107+
108+
NanoVDB:
109+
- Added nanovdb::openToIndexVDB, which can convert an OpenVDB grid into a
110+
NanoVDB IndexGrid.
111+
- Added new options "--index" and "--onIndex" to the command-line tool
112+
nanovdb_convert so it can produce IndexGrids.
113+
- Fixed memory leak in DeviceBuffer.
114+
- Added constructor for DeviceBuffer from an existing HostBuffer.
115+
- Added VoxelBlockManager, an acceleration structure for sequential access
116+
and stencil ops over active voxels.
117+
- Added helper functions for kernel launches with shared memory.
118+
- Added support for CUDA 13.0.
119+
- Fix warnings and compilation errors for GCC and Clang.
120+
- Fixed inconsistent usage of util::cuda::mallocAsync/freeAsync that
121+
affected vGPUs.
122+
- Added support for custom memory resources in PointsToGrid.
123+
- Fixed race condition in split/mergeGridHandles.
124+
- Fixed offset bug in nanovdb::tools::cuda::IndexToGrid related to non-POD
125+
build types.
126+
[Contributed by Andreas Henne]
127+
128+
Houdini:
129+
- Define OP_InputIdx and OP_OutputIdx for Houdini 21.0 compatibility
130+
- Add Houdini 21 style camera interface to support LOP cameras
131+
- Include env flag for avoiding stream writing (was backported to 19.5)
5132

6133

7134
Version 12.0.1 - April 3, 2025
8135

9136
OpenVDB:
10137
New features:
11-
- Added read and write support for OFF (Object File Format) files to vdb_tool
138+
- Added read and write support for OFF (Object File Format) files to
139+
vdb_tool
12140

13141
Build:
14-
- Fixed a build issue with vdb_render on Windows with newer versions of glew not including glu.h by default
15-
- Fixed issues with newer versions of clang refusing to accept older ::template syntax
142+
- Fixed a build issue with vdb_render on Windows with newer versions of
143+
glew not including glu.h by default
144+
- Fixed issues with newer versions of clang refusing to accept older
145+
::template syntax
16146

17147
NanoVDB:
18148
New features:
19149
- Added support for multiple GPUs to DeviceBuffer
20150
- Added a UnifiedBuffer class that wraps CUDA unified memory
21151
- Added example for multiGPU sparse convolution
22152
- Added CUDA utility functions for device queries
23-
- Added functions to independently stop and compute the elapsed time for timer classes
153+
- Added functions to independently stop and compute the elapsed time for
154+
timer classes
24155

25156
Improvements:
26-
- Replaced CUB's CachingDeviceAllocator with the default asynchronous stream ordered allocator in PointsToGrid for improved performance
157+
- Replaced CUB's CachingDeviceAllocator with the default asynchronous
158+
stream ordered allocator in PointsToGrid for improved performance
27159

28160
Bug fix:
29161
- Map is now properly transposed when converting NanoVDB to OpenVDB.

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ endif()
5353
###### Version
5454

5555
set(OpenVDB_MAJOR_VERSION 12)
56-
set(OpenVDB_MINOR_VERSION 0)
57-
set(OpenVDB_PATCH_VERSION 2)
56+
set(OpenVDB_MINOR_VERSION 1)
57+
set(OpenVDB_PATCH_VERSION 0)
5858
set(OpenVDB_VERSION "${OpenVDB_MAJOR_VERSION}.${OpenVDB_MINOR_VERSION}.${OpenVDB_PATCH_VERSION}")
5959

6060
project(OpenVDB LANGUAGES CXX VERSION ${OpenVDB_VERSION})

doc/changes.txt

Lines changed: 133 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,140 @@
22

33
@page changes Release Notes
44

5-
@htmlonly <a name="v12_0_2_changes"></a>@endhtmlonly
5+
@htmlonly <a name="v12_1_0_changes"></a>@endhtmlonly
66
@par
7-
<B>Version 12.0.2</B> - <I>In development</I>
7+
<B>Version 12.1.0</B> - <I>August 8, 2025</I>
8+
9+
@par
10+
OpenVDB:
11+
- New features:
12+
- New level set constructor tools::createLevelSetCapsule creates a grid
13+
containing a narrow-band level set representation of a capsule (tube
14+
with constant radius and sphere caps).
15+
- New level set constructor tools::createLevelSetTaperedCapsule creates a
16+
grid containing a narrow-band level set representation of a tapered
17+
capsule (tube with sphere caps and different radii at both ends, or
18+
equivalently the convex hull of two spheres with possibly different
19+
centers and radii).
20+
- New level set constructor tools::createLevelSetTubeComplex creates a grid
21+
containing a narrow-band level set representation of a tube complex (a
22+
collection of capsules or tapered capsules defined by endpoint coordinates
23+
and segment indices).
24+
- New level set constructor tools::createLevelSetDilatedMesh creates a grid
25+
containing a narrow-band level set representation of a dilated surface
26+
mesh (dilated by a radius in all directions).
27+
- New class tools::ConvexVoxelizer, used by the above methods, which can be
28+
inherited to implement a convex level set constructor.
29+
- Introduced anisotropic surfacing tools in points/PointRasterizeSDF.h and
30+
principal component analysis (PCA) methods in points/PrincipalComponentAnalysis.h.
31+
The latter tool analyses point neighborhoods and computes affine
32+
transformations representing elliptical distributions. The prior tool
33+
takes rotational and stretch point attributes (optionally computed from
34+
the prior PCA methods) and generates anisotropic surfaces.
35+
36+
- Improvements:
37+
- Significantly improved the performance of all LeafNode ValueIterators,
38+
up to 5x on some platforms and up to 10x when delay loading is enabled.
39+
Construction of a ValueIterator from a leaf node now requests the leaf
40+
buffers ahead of iteration to avoid potentially expensive API calls.
41+
- Improved the performance of PointRasterizeSDF.h tools with larger radii
42+
with better bound computation approximations.
43+
- Significant performance improvement to delay loaded files - the warning
44+
logic which checks the underlying mapped file for the last modified time
45+
has been removed, resulting in performance gains upwards of 10x when
46+
loading in node data buffers. Note that the check that was removed is
47+
entirely redundant on Windows and would only print a warning on other
48+
system.
49+
[Contributed by jjtParadox]
50+
- Added OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION and OPENVDB_HAS_MEMBER_FUNCTION
51+
macros to help determine the presence and compatibility of interface
52+
member functions at compile time.
53+
- Added OPENVDB_ASSUME macros to mimic builtin assume and C++23 assume
54+
attributes.
55+
- Improved read and write of PLY files with vdb_tool so they support Vec3d
56+
and 64 bit attributes. Changed vdb_tool version number from 10.6.1 to
57+
10.7.0.
58+
59+
- API Changes:
60+
- Mat3 and Mat4 functions have been marked [[nodiscard]] where it may be
61+
confusing if they are operating in place or returning a result, in
62+
particular tranpose, invert, adjoint, and timesDiagonal.
63+
- Re-worked the API in PointRasterizeSDF.h with the addition of anisotropic
64+
surfacing kernels. The new API exposes more concise free functions which
65+
take structs of parameters. The old API remains supported but is
66+
deprecated.
67+
- Deprecated providing a filter or interrupter as arguments to
68+
points::rasterize. These can instead be implemented on user transfer
69+
schemes.
70+
- Transfer schemes provided to points::rasterize can now optionally
71+
implement a rasterizePoints callback that takes a range of points per
72+
voxel.
73+
74+
- Fixes:
75+
- Fixed a bug in points::rasterizeSpheres and points::rasterizeSmoothSpheres
76+
which could cause sections of the generated surface to incorrectly be
77+
marked as negative interior values.
78+
- Fixed a bug in points::rasterizeSmoothSpheres which could result in
79+
incomplete surface reconstruction with significantly larger search
80+
distances.
81+
- Fixed some precision issues in various Matrix methods.
82+
- Fixed bugs in vdb_tool that prevented build with newer namespaces in
83+
nanovdb.
84+
85+
@par
86+
OpenVDB AX:
87+
- Improvements:
88+
- Added support for LLVM versions greater than 15. Upgraded CI to test with
89+
LLVM versions 16, 17, 18, 19 and 20.
90+
- As of this release, LLVM 15 is the minimum required version for OpenVDB
91+
AX. Note that there is an issue with LLVM 17 symbols which makes it
92+
incompatible with the OpenVDB Python plugin. AS such, LLVM version 18 and
93+
greater are the recommended LLVM versions to use, with LLVM 18 being the
94+
new future minimum version.
95+
- Significant performance improvement to the compilation of AX kernels when
96+
using LLVM 18 and greater.
97+
- Significant backend refactoring to AX IR generation to support newer
98+
versions of LLVM. In particular, parts of the codegen::Function and
99+
codegen::FunctionBuilder API require new usage from LLVM 16 due to
100+
the LLVM opaque pointer changes. If you're not using the OpenVDB AX
101+
Function codegen API then no client changes should be necessary.
102+
- Migrated OpenVDB AX unit tests from cppunit to gtest
103+
[Contributed by Tim Straubinger]
104+
105+
- Fixes:
106+
- Fixed a case of undefined behaviour when explicitly casting variables to
107+
the same type as their storage type e.g:
108+
double a; double b = double(a);
109+
- Fixed an AX compiler error which would produce invalid IR when using 64bit
110+
integer variables for matrix array offsetting e.g:
111+
int64 a = 0; mat4f b = 1; float c = b[a,a];
112+
113+
@par
114+
NanoVDB:
115+
- Added nanovdb::openToIndexVDB, which can convert an OpenVDB grid into a
116+
NanoVDB IndexGrid.
117+
- Added new options "--index" and "--onIndex" to the command-line tool
118+
nanovdb_convert so it can produce IndexGrids.
119+
- Fixed memory leak in DeviceBuffer.
120+
- Added constructor for DeviceBuffer from an existing HostBuffer.
121+
- Added VoxelBlockManager, an acceleration structure for sequential access
122+
and stencil ops over active voxels.
123+
- Added helper functions for kernel launches with shared memory.
124+
- Added support for CUDA 13.0.
125+
- Fix warnings and compilation errors for GCC and Clang.
126+
- Fixed inconsistent usage of util::cuda::mallocAsync/freeAsync that
127+
affected vGPUs.
128+
- Added support for custom memory resources in PointsToGrid.
129+
- Fixed race condition in split/mergeGridHandles.
130+
- Fixed offset bug in nanovdb::tools::cuda::IndexToGrid related to non-POD
131+
build types.
132+
[Contributed by Andreas Henne]
133+
134+
@par
135+
Houdini:
136+
- Define OP_InputIdx and OP_OutputIdx for Houdini 21.0 compatibility
137+
- Add Houdini 21 style camera interface to support LOP cameras
138+
- Include env flag for avoiding stream writing (was backported to 19.5)
8139

9140

10141
@htmlonly <a name="v12_0_1_changes"></a>@endhtmlonly

openvdb/openvdb/tools/impl/ConvexVoxelizer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ class ConvexVoxelizer
881881
Op(TreeT &tree) : mDelete(false), mTree(&tree) {}
882882
Op(const Op& other, tbb::split) : mDelete(true), mTree(new TreeT(other.mTree->background())) {}
883883
~Op() { if (mDelete) delete mTree; }
884-
void operator()(RangeT &r) { for (auto i=r.begin(); i!=r.end(); ++i) this->merge(*i);}
884+
void operator()(const RangeT &r) { for (auto i=r.begin(); i!=r.end(); ++i) this->merge(*i);}
885885
void join(Op &other) { this->merge(*(other.mTree)); }
886886
void merge(TreeT &tree) { mTree->merge(tree, MERGE_ACTIVE_STATES); }
887887
} op( getTree() );

pendingchanges/ax.txt

Lines changed: 0 additions & 26 deletions
This file was deleted.

pendingchanges/delayloadperf.txt

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)