forked from AcademySoftwareFoundation/openvdb
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathCHANGES
More file actions
3964 lines (3651 loc) · 204 KB
/
Copy pathCHANGES
File metadata and controls
3964 lines (3651 loc) · 204 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
OpenVDB Version History
=======================
Version 13.0.0 - November 3, 2025
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 11 for
Houdini 20.5 and 12 for Houdini 21.0.
Support for reading .vdb files written prior to VDB 1.0 has been removed.
To read older .vdb files, please use VDB 12.x or older and re-write them,
so that they use the newer file format and can be read in VDB 13+.
Highlights:
- OpenVDB now includes in-memory support for Half Grids and the file format
has been extended to add I/O serialization for half grids. More work is
planned on adapting algorithms when using Half Grids for better performance
and improved precision.
- NanoVDB is no longer limited to static applications, such as rendering, but
can increasingly be applied to problems that involve dynamic topology, such
as level set tracking, grid building, morphology operations and merging of
grids. This is due to the fact that we keep adding more and more tools to
NanoVDB that facilitates tree modification. However, unlike OpenVDB, these
operations generate new NanoVDB grids (as oppose to in-palace modifications
in OpenVDB), yet are typically much faster since they are performed on the
GPU. Many of these exciting new features are the foundation of fVDB.
OpenVDB:
New features:
- Added native registration of HalfGrid type.
- Added customization of the output transformation attribute for
points::pca(). Can be output as a quaternion or as a combined affine
transform with the scale/stretch ommitted.
- Added support for input quaternions attributes and affine
transformations (that include scale) in points::rasterizeSdf() for
ellipsoidal rasterizations.
API Changes:
- Added LeafBuffer::storage() for direct const access to the raw data
buffer when using the bool LeafNode.
- Removed Grid::evalMinMax(), use tools::minMax for superior threaded
performance.
- Removed points::rasterize() that took a custom filter and interrupter.
- Removed LeafNode<bool, ...>() TopologyCopy constructor in favor of using
explicit mask/buffer constructors.
- Removed ValueAccessor NodeT0, NodeT1, NodeT2 aliases, use NodeTypeAtLevel
instead.
- Add InternalNode::setValueMaskUnsafe() to write a value mask directly.
- LegacyFrustum and RootNodeMask have been removed. These classes were only
used for reading old .vdb files, which is no longer supported.
- io::writeCompressedValues() now takes a const ValueT* source buffer for
improved const-correctness.
Bug Fixes:
- Fix a bug in the LevelSetRayIntersector class where two of the methods
were incorrectly adjusting the time even when an intersection was not
found.
- Fixed an assertion in math::Quat where a vector length check was using
too small a tolerance.
- Fixed a bug in the unit tests where detecting if assertions were enabled
was using NDEBUG rather than OpenVDB assertions.
Build:
- Removed the unnecessary USE_NUMPY build option for the OpenVDB Python
module. All functions which take numpy arrays are now always generated
(numpy is not required at compile time for this support).
- Bumped minimum supported CMake version to 3.24, and new future minimum
to 4.0.0.
- Bumped minimum supported OpenEXR and Imath versions to 3.2, and new
future minimum to 3.3.
- Bumped minimum supported Boost version to 1.82, and new future minimum
to 1.85.
- Bumped minimum supported Python version to 3.11
- Bumped minimum supported Log4cplus version to 2.0
- Bumped minimum supported Houdini version to 20.5
- Bumped minimum supported GLFW version to 3.3
- Bumped future minimum for TBB to 2021 (oneapi).
- Bumped future minimum for nanobind to 2.5.0.
OpenVDB AX:
New:
- Added support for LLVM 21.
NanoVDB:
Highlights:
- NanoVDB is no longer limited to static applications, such as rendering,
but can increasingly be applied to problems that involve dynamic
topology, such as level set tracking, grid building, morphology
operations and merging of grids. This is due to the fact that we keep
adding more and more tools to NanoVDB that facilitates tree modification.
However, unlike OpenVDB, these operations generate new NanoVDB grids (as
oppose to in-palace modifications in OpenVDB), yet are typically much
faster since they are performed on the GPU. Many of these exciting new
features are the foundation of fVDB.
New features:
- Added nanovdb/tools/cuda/DilateGrid.cuh, which performs topology dilation
on the GPU.
- Added nanovdb/tools/cuda/MergeGrids.cuh, which merges the topology of two
grids on the GPU.
- Added nanovdb/tools/cuda/CoarsenGrid.cuh, which performs topological
coarsening of grids on the GPU.
- Added nanovdb/tools/cuda/RefineGrid.cuh, which performs topological
refinement of grids on the GPU.
- Added nanovdb/tools/cuda/PruneGrid.cuh, which prunes the topology of a
grid using a sidecar mask on the GPU.
- Added nanovdb/util/cuda/Injection.cuh, which facilitates sidecar data
copying - on the GPU - in the overlap of two grids with different
topology.
- Added Mat classes and other math types to NanoVDB.
- Major rewrite of nanovdb::NanoToOpenVDB, which now allows
nanovdb::IndexGrids and blind (or sidecar) data to be converted into an
openvdb grid.
- Added support for LevelSet, FogVolume, and Staggered grid semantics.
Added toGridClass and toSemantic to map Grid Blind data semantic to Grid
class and vice versa.
Improvements:
- Improvements to mGPU grid building and introduction of a separate test
executable for mGPU tests
- Added stand-alone function nanovdb::writeUncompressedGrid that allows
nanovdb::IndexGrids and blind (or sidecar) data to be written directly to
a stream.
- nanovdb_print now (optionally) prints the blind data count per grid.
- Extended nanovdb::GridBlindDataSemantic with nanovdb::GridClass types to
support conversion between IndexGrid and regular grids.
- Improvements and bugfixes to PNanoVDB.
API Changes:
- Removed nanovdb::ValueIndexMask and nanovdb::ValueOnIndexMask since they
are no longer used by fVDB (or elsewhere).
- NanoVDB version is now 32.9.0, so the ABI of the grid is preserved but
not the API. However, the API changes are very minor!
Bug Fixes:
- Several fixes for compiler warnings.
- Fixed error in nanovdb/io/IO.h related to missing throws.
Houdini:
- Remove support for openvdb_houdini::Interrupter, use
openvdb_houdini::HoudiniInterrupter instead.
- Remove input-stealing via duplicateSourceStealable(), SideFX have since
introduced verbification and compiled SOPs to provide zero-copy node
evaluation.
Version 12.1.1 - September 30, 2025
OpenVDB AX:
Fixes:
- Fixed an issue which was causing host specific optimization passes to be
omitted when using LLVM 16 and higher.
Houdini:
- Fixed a compilation issue with the OpenVDB Activate SOP with Houdini 21
[Reported by @callen128]
Version 12.1.0 - August 8, 2025
OpenVDB:
New features:
- New level set constructor tools::createLevelSetCapsule creates a grid
containing a narrow-band level set representation of a capsule (tube
with constant radius and sphere caps).
- New level set constructor tools::createLevelSetTaperedCapsule creates a
grid containing a narrow-band level set representation of a tapered
capsule (tube with sphere caps and different radii at both ends, or
equivalently the convex hull of two spheres with possibly different
centers and radii).
- New level set constructor tools::createLevelSetTubeComplex creates a grid
containing a narrow-band level set representation of a tube complex (a
collection of capsules or tapered capsules defined by endpoint coordinates
and segment indices).
- New level set constructor tools::createLevelSetDilatedMesh creates a grid
containing a narrow-band level set representation of a dilated surface
mesh (dilated by a radius in all directions).
- New class tools::ConvexVoxelizer, used by the above methods, which can be
inherited to implement a convex level set constructor.
- Introduced anisotropic surfacing tools in points/PointRasterizeSDF.h and
principal component analysis (PCA) methods in points/PrincipalComponentAnalysis.h.
The latter tool analyses point neighborhoods and computes affine
transformations representing elliptical distributions. The prior tool
takes rotational and stretch point attributes (optionally computed from
the prior PCA methods) and generates anisotropic surfaces.
Improvements:
- Significantly improved the performance of all LeafNode ValueIterators,
up to 5x on some platforms and up to 10x when delay loading is enabled.
Construction of a ValueIterator from a leaf node now requests the leaf
buffers ahead of iteration to avoid potentially expensive API calls.
- Improved the performance of PointRasterizeSDF.h tools with larger radii
with better bound computation approximations.
- Significant performance improvement to delay loaded files - the warning
logic which checks the underlying mapped file for the last modified time
has been removed, resulting in performance gains upwards of 10x when
loading in node data buffers. Note that the check that was removed is
entirely redundant on Windows and would only print a warning on other
system.
[Contributed by jjtParadox]
- Added OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION and OPENVDB_HAS_MEMBER_FUNCTION
macros to help determine the presence and compatibility of interface
member functions at compile time.
- Added OPENVDB_ASSUME macros to mimic builtin assume and C++23 assume
attributes.
- Improved read and write of PLY files with vdb_tool so they support Vec3d
and 64 bit attributes. Changed vdb_tool version number from 10.6.1 to
10.7.0.
API Changes:
- Mat3 and Mat4 functions have been marked [[nodiscard]] where it may be
confusing if they are operating in place or returning a result, in
particular tranpose, invert, adjoint, and timesDiagonal.
- Re-worked the API in PointRasterizeSDF.h with the addition of anisotropic
surfacing kernels. The new API exposes more concise free functions which
take structs of parameters. The old API remains supported but is
deprecated.
- Deprecated providing a filter or interrupter as arguments to
points::rasterize. These can instead be implemented on user transfer
schemes.
- Transfer schemes provided to points::rasterize can now optionally
implement a rasterizePoints callback that takes a range of points per
voxel.
Fixes:
- Fixed a bug in points::rasterizeSpheres and points::rasterizeSmoothSpheres
which could cause sections of the generated surface to incorrectly be
marked as negative interior values.
- Fixed a bug in points::rasterizeSmoothSpheres which could result in
incomplete surface reconstruction with significantly larger search
distances.
- Fixed some precision issues in various Matrix methods.
- Fixed bugs in vdb_tool that prevented build with newer namespaces in
nanovdb.
OpenVDB AX:
Improvements:
- Added support for LLVM versions greater than 15. Upgraded CI to test with
LLVM versions 16, 17, 18, 19 and 20.
- As of this release, LLVM 15 is the minimum required version for OpenVDB
AX. Note that there is an issue with LLVM 17 symbols which makes it
incompatible with the OpenVDB Python plugin. AS such, LLVM version 18 and
greater are the recommended LLVM versions to use, with LLVM 18 being the
new future minimum version.
- Significant performance improvement to the compilation of AX kernels when
using LLVM 18 and greater.
- Significant backend refactoring to AX IR generation to support newer
versions of LLVM. In particular, parts of the codegen::Function and
codegen::FunctionBuilder API require new usage from LLVM 16 due to
the LLVM opaque pointer changes. If you're not using the OpenVDB AX
Function codegen API then no client changes should be necessary.
- Migrated OpenVDB AX unit tests from cppunit to gtest
[Contributed by Tim Straubinger]
Fixes:
- Fixed a case of undefined behaviour when explicitly casting variables to
the same type as their storage type e.g:
double a; double b = double(a);
- Fixed an AX compiler error which would produce invalid IR when using 64bit
integer variables for matrix array offsetting e.g:
int64 a = 0; mat4f b = 1; float c = b[a,a];
NanoVDB:
- Added nanovdb::openToIndexVDB, which can convert an OpenVDB grid into a
NanoVDB IndexGrid.
- Added new options "--index" and "--onIndex" to the command-line tool
nanovdb_convert so it can produce IndexGrids.
- Fixed memory leak in DeviceBuffer.
- Added constructor for DeviceBuffer from an existing HostBuffer.
- Added VoxelBlockManager, an acceleration structure for sequential access
and stencil ops over active voxels.
- Added helper functions for kernel launches with shared memory.
- Added support for CUDA 13.0.
- Fix warnings and compilation errors for GCC and Clang.
- Fixed inconsistent usage of util::cuda::mallocAsync/freeAsync that
affected vGPUs.
- Added support for custom memory resources in PointsToGrid.
- Fixed race condition in split/mergeGridHandles.
- Fixed offset bug in nanovdb::tools::cuda::IndexToGrid related to non-POD
build types.
[Contributed by Andreas Henne]
Houdini:
- Define OP_InputIdx and OP_OutputIdx for Houdini 21.0 compatibility
- Add Houdini 21 style camera interface to support LOP cameras
- Include env flag for avoiding stream writing (was backported to 19.5)
Version 12.0.1 - April 3, 2025
OpenVDB:
New features:
- Added read and write support for OFF (Object File Format) files to
vdb_tool
Build:
- Fixed a build issue with vdb_render on Windows with newer versions of
glew not including glu.h by default
- Fixed issues with newer versions of clang refusing to accept older
::template syntax
NanoVDB:
New features:
- Added support for multiple GPUs to DeviceBuffer
- Added a UnifiedBuffer class that wraps CUDA unified memory
- Added example for multiGPU sparse convolution
- Added CUDA utility functions for device queries
- Added functions to independently stop and compute the elapsed time for
timer classes
Improvements:
- Replaced CUB's CachingDeviceAllocator with the default asynchronous
stream ordered allocator in PointsToGrid for improved performance
Bug fix:
- Map is now properly transposed when converting NanoVDB to OpenVDB.
- Fixed ostream specializations being hidden within the nanovdb namespace
- Fixed a call to a non-existent method in GridBuild.h
Version 12.0.0 - October 31, 2024
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:
New features:
- Added fillet() method in tools::LevelSetFilter to round off concave edges
to create smoother transition between surfaces.
Improvements:
- Added openvdb::assertAbort to replace cassert and a
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).
- Removed last traces of Boost when OPENVDB_USE_DELAYED_LOADING is OFF
[Reported by Brian McKinnon]
- RootNode code cleanup to eliminate redundant key conversion and
to create map values in-place.
- Add RootNode::deleteChildOrTile() to delete a child or tile of
the root node.
- ValueAccessors are now defined and created in the Tree class
instead of in the Grid class so that custom Tree implementations
may define and create their own ValueAccessors if desired.
- Added support for PDAL to vdb_tool [Contributed by Tom Matterson]
- LeafManager and NodeManager now use Index64 for leaf counts internally.
- Added RootNode::probeChild() const.
- Added RootNode::probeChild() and RootNode::probeConstChild().
- Added RootNode::probe() and RootNode::probeConst() to query key presence,
child node, value and active state.
- Added InternalNode::probeChild() const.
- Added InternalNode::probeChild() and probeChildConst() with coord access
and optionally value and active state.
- Added InternalNode::probeChild() and probeChildConst() with index access
and optionally value and active state.
- Added InternalNode::isValueOff(), LeafNode::isValueOff(),
LeafNodeBool::isValueOff(), LeafNodeMask::isValueOff().
- Added LeafNodeMask::probeValue(Index,val), LeafNodeBool::probeValue(Index,val).
- Added RootNode::getValueUnsafe(), RootNode::getChildUnsafe(),
RootNode::getConstChildUnsafe().
- Added InternalNode::getValueUnsafe(), InternalNode::getChildUnsafe(),
InternalNode::getConstChildUnsafe().
- Added InternalNode::setActiveStateUnsafe(), InternalNode::setValueOnlyUnsafe(),
InternalNode::setValueOnUnsafe(), InternalNode::setValueOffUnsafe().
- Added InternalNode::setChildUnsafe(), InternalNode::resetChildUnsafe(),
InternalNode::stealChildUnsafe(), InternalNode::deleteChildUnsafe().
- For LeafNode, LeafNodeBool and LeafNodeMask - added
LeafNode::getValueUnsafe(), LeafNode::setActiveStateunsafe(),
LeafNode::setValueOnlyUnsafe(), LeafNode::setValueOnUnsafe(),
LeafNode::setValueOffUnsafe().
ABI changes:
- Tree::leafCount(), Tree::unallocatedLeafCount(),
Tree::nonLeafCount() and Tree::nodeCount() now use Index64 in their
return types instead of Index32.
API Changes:
- RootNode::tileCount(), RootNode::activeTileCount() and
RootNode::inactiveTileCount() are now public.
- RootNode::hasKey() and RootNode::coordToKey() are now public.
- RootNode::leafCount(), RootNode::nonLeafCount() and RootNode::nodeCount()
now use Index64 instead of Index32. The Index32 variant is deprecated.
- InternalNode::leafCount(), InternalNode::nonLeafCount() and
InternalNode::nodeCount() now use Index64 instead of Index32. The Index32
variant is deprecated.
- LeafNode::leafCount() and LeafNode::nonLeafCount() now use Index64 instead
of Index32. The Index32 variant is deprecated.
Bug Fixes:
- Fix potential crash reading corrupt .vdb files with invalid
blosc or zip chunks.
[Fix thanks to Matthias Ueberheide]
- Fix a bug in RootNode::setOrigin() where the origin was updated
before the error was thrown potentially leaving the root in an
invalid state.
- Fixed a thread sanitizer issue which could cause undefined
behaviour in VolumeToSpheres::fillWithSpheres
[Reported by Jérémie Dumas]
- Fixed an occurance of undefined behaviour in tools::activate
(though this would typically not have manifested with any
unintended behaviour)
NanoVDB:
Bug fix:
- nanovdb::readGrids works with raw grid buffer.
Improvements:
- Restructure files location and namespace to be more align with
OpenVDB. The namespaces touched by the restructuring are: io,
cuda, util, tools, and math.
- Add two scripts updateFiles.sh and updateFiles.py to update the
files using NanoVDB. The script updateFiles.py works on both
Windows and Linux. For a more complete list of changes, see API
Changes (details).
- cuda::PointsToGrid supports target density.
- Add support for NanoVDB Grid of type UInt8.
- Add ability to use externally managed CUDA buffer.
- Add create methods for CudaDeviceBuffer and exceptions.
- Improve GridValidator logic, e.g. include check for grid count.
- Add operator > and >= for class Coord according to lexicographical order.
- Add toCodec to convert string to Codec enumeration type.
- Add nanovdb::strlen<GridType>().
- Add strncpy util.
- Add NANOVDB_DISABLE_SYNC_CUDA_MALLOC that maps cudaMallocAsync
and cudaFreeAsync to cudaMalloc and cudaFree respectively.
- Add guard to UINT64_C.
- Remove use of cudaMallocAsync in PointsToGrid.cuh.
- Align PNanoVDB blind metadata to NanoVDB.
API Changes:
- Change mapToGridType to toGridType.
- Change mapToMagic to toMagic.
- Change CpuTimer.h to Timer.h.
API Changes (details):
- These APIs are now under the math namespace: Ray, DDA, HDDA,
Vec3, Vec4, BBox, ZeroCrossing, TreeMarcher, PointTreeMarcher,
BoxStencil, CurvatureStencil, GradStencil, WenoStencil, AlignUp,
Min, Max, Abs, Clamp, Sqrt, Sign, Maximum, Delta, RoundDown, pi,
isApproxZero, Round, createSampler, SampleFromVoxels.
- These APIs are now under the tools namespace: createNanoGrid,
StatsMode, createLevelSetSphere, createFogVolumeSphere,
createFogVolumeSphere, createFogVolumeSphere,
createFogVolumeTorus, createLevelSetBox, CreateNanoGrid,
updateGridStats, evalChecksum, validateChecksum, checkGrid,
Extrema.
- These APIs are now under the util namespace: is_floating_point,
findLowestOn, findHighestOn, Range, streq, strcpy, strcat,
empty, Split, invoke, forEach, reduce, prefixSum, is_same,
is_specialization, PtrAdd, PtrDiff.
- Move nanovdb::build to nanovdb::tools::build.
- Rename nanovdb::BBoxR to nanovdb::Vec3dBBox.
- Rename nanovdb::BBox<nanovdb::Vec3d> to nanovdb::Vec3dBbox.
- Move nanovdb::cudaCreateNodeManager to nanovdb::cuda::createNodeManager.
- Move and rename nanovdb::cudaVoxelsToGrid to nanovdb::cuda::voxelsToGrid.
- Move and rename nanovdb::cudaPointsToGrid to nanovdb::cuda::pointsToGrid.
- Move nanovdb::DitherLUT to nanovdb::math::DitherLUT.
- Move and rename nanovdb::PackedRGBA8 to nanovdb::math::Rgba8.
- Move nanovdb::Rgba8 to nanovdb::math::Rgba8.
- Move and rename nanovdb::CpuTimer to nanovdb::util::Timer.
- Move nanovdb::GpuTimer to nanovdb::util::cuda::Timer.
- Move and rename nanovdb::CountOn to nanovdb::util::countOn.
- Move util/GridHandle.h to GridHandle.h.
- Move util/BuildGrid.h to tools/GridBuilder.h.
- Move util/GridBuilder.h to tools/GridBuilder.h.
- Move util/IO.h to io/IO.h.
- Move util/CSampleFromVoxels.h to math/CSampleFromVoxels.h.
- Move util/DitherLUT.h to math/DitherLUT.h.
- Move util/HDDA.h to math/HDDA.h.
- Move util/Ray.h to math/Ray.h.
- Move util/SampleFromVoxels.h to math/SampleFromVoxels.h.
- Move util/Stencils.h to nanovdb/math/Stencils.h.
- Move util/CreateNanoGrid.h to tools/CreateNanoGrid.h.
- Move and rename util/Primitives.h to tools/CreatePrimitives.h.
- Move util/GridChecksum.h to tools/GridChecksum.h.
- Move util/GridStats.h to tools/GridStats.h.
- Move util/GridChecksum.h to tools/GridChecksum.h.
- Move util/GridValidator.h to tools/GridValidator.h.
- Move util/NanoToOpenVDB.h to tools/NanoToOpenVDB.h.
- Move util/cuda/CudaGridChecksum.cuh to tools/cuda/CudaGridChecksum.cuh.
- Move util/cuda/CudaGridStats.cuh to tools/cuda/CudaGridStats.cuh.
- Move util/cuda/CudaGridValidator.cuh to tools/cuda/CudaGridValidator.cuh.
- Move util/cuda/CudaIndexToGrid.cuh to tools/cuda/CudaIndexToGrid.cuh.
- Move and rename util/cuda/CudaPointsToGrid.cuh to tools/cuda/PointsToGrid.cuh.
- Move util/cuda/CudaSignedFloodFill.cuh to tools/cuda/CudaSignedFloodFill.cuh.
- Move and rename util/cuda/CudaDeviceBuffer.h to cuda/DeviceBuffer.h.
- Move and rename util/cuda/CudaGridHandle.cuh to cuda/GridHandle.cuh.
- Move and rename util/cuda/CudaUtils.h to util/cuda/Util.h.
- Move and consolidate util/cuda/GpuTimer.h to util/cuda/Timer.h.
Houdini:
- When OPENVDB_ENABLE_RPATH is ON, the location of
libopenvdb_houdini is now added to the rpath of all Houdini
dsos.
Python:
- OpenVDB Python bindings are now implemented using nanobind
instead of pybind11
- The OpenVDB Python module has been changed from pyopenvdb to openvdb
- Added Python bindings for NanoVDB
Build:
- Fixed an issue with OpenVDB AX's CMake on Windows where the
static and shared library targets would have the same name
[Reported by Nicholas Yue]
- USE_EXPLICIT_INSTANTIATION is now disabled on Windows by default
due to OOM linker issues.
- Jemalloc is now the preferred allocator of choice on all
platforms when CONCURRENT_MALLOC is set to Auto.
- Fixed an issue with the Blosc CMake FindPackage for the OpenVDB
Windows static library.
Version 11.0.0 - November 1, 2023
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 9 for
Houdini 19.5 and 10 for Houdini 20.0.
OpenEXR 2 and Python 2 are no longer supported.
OpenVDB:
Improvements:
- Removed use of boost::any in favor of std::any.
[Contributed by Brian McKinnon]
Bug Fixes:
- Fix potential crash reading corrupt .vdb files with invalid
blosc or zip chunks.
[Contributed by Matthias Ueberheide]
NanoVDB:
Highlights:
- Several new tools to generate and modify NanoVDB grids on the GPU.
- New file format that supports streaming of raw grid buffers.
New Features:
- New memory efficient GridClass::IndexGrid that separates values from tree
- 4 new GridTypes (Index, OnIndex, IndexMask, OnIndexMask) used by IndexGrid
- Added createNanoGrid that replaces older conversion methods in GridBuilder.h,
IndexGridBuilder.h and OpenToNanoVDB.h
- Added cudaPointsToGrid that constructs a point device grid from a list of
points.
- Added cudaVoxelsToGrid that constructs a voxel device grid from a list of
voxels.
- Added cuda/CudaUtils.h with several cuda utility functions.
- Added GpuTimer for timing of kernels in a specific cuda stream.
- Added cudaIndexToGrid that converts IndexGrids into regular Grids.
- Added cudaSignedFloodFill that performs signed-flood filling on the GPU.
- Added cudaAddBlindData that adds blind data to an existing grid on the GPU.
- Added cudaGridChecksum that computes checksums of device grids.
- Added cudaGridHandle that handles grids on the GPU.
- Added cudaNodeManager that constructs a NodeManager on the GPU.
- Added build type Points and GridType::PointIndex for point grids.
- Added GridType::Vec3u16 and GridType::Vec3u8 for compressed coordinates.
- Added PrefixSum.h for concurrent computation of prefix sum on the CPU.
API Changes:
- Version 32.6.0 (ABI is unchanged).
- Transition from C++11 to C++17
- Vec3R is deprecated, please use Vec3d instead.
- nanoToOpenVDB now takes the index of a NanoVDB in a GridHandle.
- GridData, InternalData and LeafData are now public.
- GridMetaData can be copied.
- Improvements to GridBuilder.h that allows construction of grids on CPU.
- GridHandle's move c-tor now requires the GridBuffer to contain a valid grid.
- Moved CudaDeviceBuffer.h to cuda/CudaDeviceBuffer.h.
- New API for acceleration of custom random-access with ValueAccessors.
- Added BitFlags class for convenient bit-mask operations.
- Added Vec2/3::min/maxComponentAtomic GPU methods.
- Added BBox::expandAtomic and BBox::intersectAtomic.
- Added Coord::expandAtomic.
- Added Map constructors.
- Added Mask::DenseIterator, Mask::setOnAtomic, and Mask::setOffAtomic.
- InternalNode::ChildIterator is now const-correct.
- Added several new NanoVDB Build Traits.
- Syncing PNanoVDB.h with NanoVDB.h.
Build:
- Support for OpenEXR 2.X has been removed.
- Better support for building with external package configurations
with CMAKE_FIND_PACKAGE_PREFER_CONFIG=ON.
Python:
- Removed Python 2 support.
[Contributed by Matthew Cong]
- Removed explicit bindings for Math types.
[Contributed by Matthew Cong]
- Improved type casting for TypedMetadata.
[Contributed by Matthew Cong]
Version 10.1.0 - October 11, 2023
Highlights:
- OpenVDB Python bindings are now implemented using pybind11 instead of
Boost.Python.
[Contributed by Matthew Cong]
OpenVDB:
New features:
- Added points::replicate() for the replication of PointDataGrid points
and attributes.
Improvements:
- Upgraded OpenVDBs internal half representation to IMath 3.1.6. Brings
conversion support using F16C instructions (if enabled using -mf16c) and
the removal of the exponent lookup table in favor of bit shifting.
- OpenVDBs copy of Half.h is no longer built with an internal lookup table,
but explicitly selects the non-LUT version and disables the creation of
the LUT. This is required to avoid symbol conflicts with different
namespaced OpenVDB builds.
- Removed boost::uuid from Archive, instead std::random_device is used
directly to generate UUID-like objects.
- Moved all cases of file static/global variables which relied on non-trivial
construction into function scopes as static locals. These would previously
initialize themselves on start-up in a non-deterministic, compiler-dictated
order(static-initialization-order-fiasco). This order is now defined by the
program's execution.
- Fixed the constants used in openvdb::math::Coord::hash() and
nanovdb::Coord::hash() to correctly be prime numbers (note that this
changes the result of these methods).
[Contributed by Benedikt Mersch]
- Updated tools::meshToVolume to take two new optional arguments to provide
an interior test oracle and an interior testing method. These allow the
default outside-flood-fill to be replaced if the actual sidedness can be
known.
[Contributed by Tomas Skrivan]
- LevelSetRebuild now includes example code that demonstrates the intended
use of the new meshToVolume interior testing parameters for the
resampling of level sets, where the original grid is used as the true
sign value. However, due to differences between polygonalization and
trilinear interpolation, this behaviour is disabled and exists as a
reference.
- Introduced openvdb::TupleList to wrap std::tuple and provide interface
interop methods with openvdb::TypeList.
- Added OPENVDB_FORCE_INLINE, OPENVDB_LIKELY and OPENVDB_UNLIKELY macros.
- Introduced openvdb::make_index_sequence to solve clang compilations
issues with compiler built-in index_sequence implementations.
API changes:
- Significant infrastructural change to the ValueAccessor header and
implementation. All ValueAccessor specializations have been consolidated
into a single class which supports all possible ValueAccessor configurations
using index_sequences. Backward compatible declarations have been provided.
The new ValueAccessor implementation is marked as final.
- PagedArray iterators no longer derive from std::iterator
(but remains standard compliant).
Bug Fixes:
- Internal counters in tree::RangeIterator were limited to 32bit precision.
They are now extended to size_t.
[Reported by SpaceX]
- Fixed a bug when compiling with -fvisibility=hidden and GCC 11 which
would cause a crash in openvdb::initialize().
- Fixed a bug with LeafManager which wouldn't correctly
initialize its LeafNode array for single level Tree configurations
i.e. RootNode<LeafNode> (bug introduced in 7.2.0).
[Reported by @lanwatch]
- Fixed a bug with LeafNodeBool Topology constructor with designated
on/off values which wouldn't apply them correctly.
[Reported by @hozhaoea]
OpenVDB AX:
Improvements:
- Added support for LLVM 15.
Bug Fixes:
- Fixed a bug in AX on older X86 hardware which could cause a crash when
accessing point attributes with half compression (bug introduced in 9.1.0).
- Fixed an incorrect option in the `vdb_ax` command line tool where the default
optimization level was set to NONE instead of O3 (issue introduced in 10.0.0).
Houdini:
Improvements:
- Added Preserve Holes option to VDB From Polygons that uses the
fast winding oracle to not collapse holes in polygonal geometry.
Bug Fixes:
- Fix a bug in the projection mode of the Advect Points SOP that was causing
a segfault.
Build:
- Fixed a build issue where Boost was not being pulled in when
OPENVDB_USE_DELAYED_LOADING was set to OFF.
- Fixed a build issue with AX on 32-bit platforms.
[Reported by Mathieu Malaterre]
- Fixed a compilation issue with the min() and max() methods on Stencils
in openvdb/math/Stencils.h.
[Reported by Samuel Mauch]
- Fixed a compilation error that would be encountered when attempting to
enable the SSE4.2 or AVX SIMD options on non-x86 based platforms.
- Improved support for compiling with C++20.
[Contributed by Denys Maletskyy and Jérémie Dumas]
- OpenVDB's CMake no longer modifies the BUILD_SHARED_LIBS variable.
[Reported by Maksim Shabunin]
- Fix int-in-bool-context GCC9+ warnings by switching to use constexpr if.
Version 10.0.1 - November 30, 2022
Bug Fixes:
- Fix uninitialized point flags in tools::VolumeToMesh which could result in
non-deterministic results (bug introduced in 10.0.0).
Build:
- Fixed CXX standard requirement for VDB components in FindOpenVDB.cmake
Version 10.0.0 - October 27, 2022
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 8 for
Houdini 19.0 and 9 for Houdini 19.5.
Highlights:
- Introducing OpenVDBLink, which provides a Mathematica interface to
OpenVDB. This link ports over access to various grid containers including
level sets, fog volumes, vector grids, integer grids, Boolean grids,
and mask grids. Construction, modification, combinations, visualisations,
queries, import, export, etc. can be achieved over grids too. Any
Mathematica 3D region that's ConstantRegionQ and BoundedRegionQ can
be represented as a level set grid, providing a more seamless integration
with OpenVDB.
- Introducing a new command-line tool, dubbed vdb_tool, that can combine any
number of the high-level tools available in openvdb/tools. For
instance, it can convert a sequence of polygon meshes and particles to
level sets, perform a large number of operations on these level set
surfaces and export them as adaptive polygon meshes.
OpenVDB:
Improvements:
- Significantly improved the performance of all ValueAccessor methods which
access LeafNode value buffer data. This improvement applies to any type
which is delay load compatible (all default types except for bool and mask
grids) and improves the performance of many OpenVDB tools.
- Improved the performance of volumeToMesh by 10-15%.
ABI changes:
- ABI change to openvdb::RootNode, which now has a new member that defines
the origin of the node. For now this origin is set to a default value of
(0,0,0), but in the near future we will allow for offsets to improve
access performance and reduce the memory footprints.
- Removed deprecated virtual methods from AttributeArray.
API changes:
- Removed PagedArray::push_back().
- Removed Tree visitor methods from Tree, RootNode, InternalNode and
LeafNode classes - visit(), visit2(), visitActiveBBox().
- Removed LeafManager::getNodes().
- Removed tools::dilateVoxels() and tools::erodeVoxels() in favor of
tools::dilateActiveValues() and tools::erodeActiveValues().
- Removed tools::FindActiveValues::any() and
tools::FindActiveValues::none().
- StringGrid and StringTrees have been removed.
Bug Fixes:
- Fixed an issue with tools::topologyToLevelSet which would previously
ignore active tiles in the input topology.
[Reported by Tobias Rittig]
- Fixed a bug with ValueAccessor::addLeaf and ValueAccessor::addTile which
wouldn't add the provided leaf nodes to the underlying tree. This bug did
NOT affect the specialized accessors which are used by the default tree
configuration.
[Contributed by Andrey Zakirov]
- Fixed a bug where ValueAccessor::probeNode<NodeT> and
ValueAccessor:probeConstNode<NodeT> would return a nullptr if the NodeT
type was not explicitly being cached by the accessor but the node existed
in the tree.
- Fixed a bug on Windows where math::Abs could truncate 64bit integer values.
[Contributed by Edward Lam]
- Fixed an occurrence of undefined behaviour with math::floatToInt32 and
math::doubleToInt64.
[Reported by Vojtěch Bubník]
- Fixed bugs in the sum merge that produced incorrect merged grids when
deep-copying the input nodes or when non-zero background grids were being
used.
- Fixed a bug in FastSweeping where voxels/tiles are left with min/max float
values.
- Fixed a bug in math/Tuple.h that prevented compilation with VS2017.
OpenVDB AX:
Improvements:
- Major updates to the command line interface of the vdb_ax binary, exposing
more controls such as tile streaming, value iterator types and attribute
bindings.
OpenVDB Houdini:
New Features:
- Add convex hull activation for VDB Activate SOP (requires 19.5).
Improvements:
- Improved SDF activation to use dynamic node manager.
Bug Fixes:
- Fixed a bug in VDB Visualize SOP where color values that exceed
the range wrap around instead of being clamped.
NanoVDB:
New Features:
- Added nanovdb::IndexGrid that allows for arbitrary voxel values and even
multiple channels to be associated with NanoVDB grids. They are more
flexible and memory efficient than regular grids at a small cost of
random-access performance. IndexGrids are constructed with the new
nanovdb::IndexGridBuilder and accessed with the new
nanovdb::ChannelAccessor.
- Added iterators to all tree node classes for visiting inactive, active, or
all values and child nodes.
- NanoVDB.h now includes standalone implementations of reading and writing
uncompressed nanovdb grids buffers.
- Added Stats::getExtrema, which computes the min/max values of all voxels
in a NanoVDB grid that intersects with a user-defined bounding-box.
- Added nanovdb::Mask::countOn(int) which is essential to the new
nanovdb::IndexGrid.
- Added RootNode::probeChild and InternalNode::probeChild.
Improvements:
- Added a new much improved nanovdb::NodeManager, that is both faster and
more memory efficient, and that works on both the CPU and GPU. Note, it
uses a handle for allocation (just like nanovdb::Grid) and replaces the
old nanovdb::LeafManager which is now deprecated.
- NanoToOpenVDB is extended to work with grids templated on Fp4, Fp8, Fp16,
FpN, bool and ValueMask.
- Renamed RootNode::findTile to RootNode::probeTile and made it public.
- Made Mask::getWord return both a const and non-const reference.
- Improved unit-tests to use explicit 32B alignment (see alignment bug-fix
below).
- PNanoVDB.h (a C99 port of NanoVDB.h) has been updated.
Bug Fixes:
- Fixed a bug in nanovdb::HostBuffer that could produce crashes due to
misaligned CPU memory allocations.
- Fixed bug related to uninitialized memory in nanovdb::Grid which could
confuse CRC32 checksum validation.
- Fixed bugs related to the use of intrinsic functions for fast bit-counting
in nanovdb.
- Fixed a potential security vulnerability in NanoVDB.h related to buffer
overflow exploits.
Build:
- Added OPENVDB_USE_DELAYED_LOAD flag that enables delayed loading and
defaults to on.
- Add a placeholder to inject the specific revision and URL used
to build OpenVDB, useful for 3rd party build scripts to publish
their exact versions.
- Fixed an issue where OPENVDB_AX_DLL was not being defined on shared
library builds of AX, resulting in symbols not being exported.
[Reported by Ray Molenkamp]
- Fixed an issue where setting Tbb_INCLUDE_DIR could cause CMake failures.
- Updated FindTBB.cmake to support newer library ABI suffixing in
TBB 2021.5.
- Updated FindBlosc.cmake to better handle cases where blosc is built with
external sources.
- Resolved LLVM deprecation warnings in AX and added support for LLVM 14.
- On Windows (MSVC), OpenVDB is now built with extra compiler options to
ensure stricter C++ conformance: /permissive- /Zc:throwingNew /Zc:inline.
- On Windows (MSVC), the _USE_MATH_DEFINES macro is no longer defined when
including <openvdb/Platform.h> (or any dependent headers). If you were
relying on this in your own project for M_PI, M_PI_2, etc. you can add
-D_USE_MATH_DEFINES to your own project compiler options. See
https://docs.microsoft.com/en-us/cpp/c-runtime-library/math-constants
for more info.
Version 9.1.0 - June 9, 2022
Bug Fixes:
- Minor fix to move assignment operator in nanovdb/util/HostBuffer.h.
This could potentially be a problem on Windows debug builds (unconfirmed).
- Minor fix to range in openvdb/tools/LevelSetSphere.h. This could result
in data races for multi-threaded execution (unconfirmed)
[Reported by Tommy Hinks]
- Fixed a bug with Tree::combineExtended which wouldn't propagate the
resulting active state when a destination tile overlapped a source child node.
[Reported by @frapit]
- Fix unit tests failures with Blosc versions >= 1.19.0.
- Fixed a regression in ax::run which wouldn't propagate exceptions
- Fixed a bug where ax::ast::parse could return a partially constructed but
invalid AST on failure
- Fixed AX logger exit handling in ax::Compiler::compile and ax::ast::parse
- Fixed an issue which could result in significant compilation times when
instantiating TypeList<>::Unique<>
New features:
- Added support for AMD's HIP API in NanoVDB
[Contributed by Blender Foundation]
- Added bindings mechanism to AX to allow differing data and AX attribute
names (@) in Point and Volume executables.
- Added support for OpenVDB AX on Windows.
- Added tools::memUsageIfLoaded() which returns the memory consumption of
a deserialized VDB tree, useful if delay-loading is enabled.
- Added points::rasterizeSpheres() and points::rasterizeSmoothSpheres()
variants, new kernels and improved performance for OpenVDB points to
surface rasterization.
- Added points::rasterizeTrilinear() for OpenVDB points, fast staggered
or colocated trilinear rasterization for scalar and vector attributes.
- Exposed TypeList declarations in openvdb.h which denote the default set
of types supported by OpenVDB.
- Added points::FrustumRasterizer for efficient rasterization of OpenVDB
points to frustum volumes with optional motion blur.
Improvements:
- Added a --thread [n] argument to the vdb_ax binary.
- Added a --copy-file-metadata option to vdb_ax. This behaviour is now
off by default.
- Added support for multiple input files with the vdb_ax binary using -i.
Positional arguments as input files are deprecated.
- Added tools::minMax() which supports multithreaded evaluation of active
minimum and maximum values. Grid::evalMinMax() has been deprecated.
- Significant performance improvements to AX point kernels, primarily due to
providing AX access to attribute buffers for superior code generation.
- vdb_print now prints both the in-core memory and total memory usage for
VDB grids.
- Improved build support for MinGW
[Contributed by Mehdi Chinoune]
- Added a new foreach method to TypeList for iterating over types without
constructing them.
- Added TypeList::Transform declaration for transforming TypeLists into new
types.
- Moved Grid::apply implementation to TypeList::apply to allow for other
polymorphic types to invoke it.
- Minor updates to NanoVDB to remove compiler warnings.
Build:
- Regenerated AX grammar with Flex 2.6.4 and Bison 3.8.2.
- Improved locating NumPy in CMake when multiple python versions are installed.
- Fixed an issue which could report Python as missing when using CMake 3.18
and later on some systems.
[Reported by Sam James]
- Changed the way boost_python and boost_numpy are located. Both components
must match the major/minor version of python in use. This can be
circumvented by providing Boost_PYTHON_VERSION or
Boost_PYTHON_VERSION_MAJOR.
- Relocated OpenVDB binaries to a new openvdb_cmd root directory.
- FindTBB.cmake now prioritises newer TBB installations.
- Added option to compress PDB data in MSVC debug builds.
Houdini:
- Added Attribute Bindings to AX SOP to allow differently named AX
attributes (@) and target point attributes/volumes.
- Fix race condition in OpenVDB Merge SOP that could cause crashes or
merged VDBs to not be deleted.
- VDB Activate SOP no longer stops at the first non-VDB primitive, but
instead just skips such primitives.
- Added VDB Rasterize Frustum SOP for efficient rasterization of OpenVDB
points into frustum volumes with optional motion blur.
Version 9.0.0 - October 29, 2021
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.
New features:
- Faster build times from support for explicit template instantiation,
which is enabled by default for most of the tools.
- Added support for OpenEXR 3 and TBB 2021.
- Added transient data to the RootNode, InternalNode, and LeafNode.
Improvements:
- Added tools::countActiveLeafVoxels(), tools::countInactiveVoxels(),
tools::countInactiveLeafVoxels() and tools::activeTiles() to perform
multi-threaded counting. The Tree methods now use these implementations.
- Moved from the deprecated TBB task scheduler to TBB arenas. Various
methods now respect the TBB arena state they were invoked from.
- Introduced a new thread/Threading.h header to consolidate calls to
third-party threading methods.
- Minor performance improvements to dilation calls in fast sweeping
algorithms.
- Added hsvtogrb() and rgbtohsv() AX helper functions for converting
hue, saturation and value inputs to RGB values and vice-versa.
- PointDataGrid conversion can now be performed using 32-bit float arrays.
- Improved support for size_t grid types on systems where size_t is a
unique type.
[Contributed by Brecht Van Lommel]
- Add support for dilation in one direction and extending a field in one
direction in fast sweeping algorithms.
- Added PNG support to vdb_render which can be enabled with during CMake
with -DUSE_PNG=ON.
- Explicit template instantiation has been enabled by default for most of
the tools. This pre-compiles template instantiations into the core library
to reduce the time spent compiling code in downstream libraries or
applications.
- Added a python binding for OpenVDB AX which allows you to invoke accelerated