forked from AcademySoftwareFoundation/openvdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
3446 lines (3189 loc) · 179 KB
/
CHANGES
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 11.0.1 - In development
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.
[Contributed by Greg Hurst]
- 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
AX code from the python module.
Bug Fixes:
- Fixed a bug where ax::run() would crash if it could not parse a single
statement.
ABI changes:
- Added transient data to the RootNode, InternalNode, and LeafNode.
API changes:
- DynamicNodeManager can now set one grain size for threading across leaf nodes
and another for threading across non-leaf nodes.
- StringGrid and StringTrees are deprecated.
- The NullInterrupter is now a virtual base class to help reduce
compile-time instantiation cost.
Houdini:
- Fix crash in VDB Combine in Copy B mode if the second input has
more VDBs than the first.
- VDB Vector Merge SOP is now VDB Vector From Scalar SOP to distinguish
it from the VDB Merge SOP. It keeps the same internal name so this
is merely a label change.
- Add option to pass in OPENVDB_DSO_NAMES to CMake to configure which
Houdini DSOs are compiled.
- VDB Activate SOP now has an option for the expansion pattern to use
for dilation.
- The label for Voxels to Expand is now Expand Voxels to match Houdini.
- Fix bug to allow VDB LOD SOPs to be chained together.
- SOP Extrapolate supports dilation in one direction and extending a field
in one (domain) direction.
- The default OpenVDB ABI is now 8 for Houdini versions > 18.5.
- VDB Visualize Tree SOP is now multi-threaded and provides slicing and
color remapping.
- A new HoudiniInterrupter has been added that derives from the
NullInterrupter and the Interrupter is now deprecated. All the SOPs have
been updated to use the new HoudiniInterrupter.
- Add a sanitizer in SOP OpenVDB Extrapolate when expanding a narrow-band
level-set with a dilation value of 0, which will result in no operation.
Build:
- Added support for TBB 2021.
- Enabled the OPENVDB_FUTURE_DEPRECATION variable by default to warn on
upcoming deprecations.
- Introduced a OPENVDB_DOXYGEN_INTERNAL CMake variable which is ON by
default and removes the majority of internal namespaces from the
generated doxygen.
- Improved the doxygen deprecation listings, folder layouts and fixes
issues when using later versions of doxygen.
- Build fixes for MinGW on Windows.
[Contributed by Brecht Sanders]
- Added support for OpenEXR 3.
[Contributed by Cary Phillips]
- Added an OPENVDB_NAMESPACE_SUFFIX CMake string option which provides
the ability to customise the VDB namespace.
- The Python Module now appends the base directory defined by
Python_SITELIB to the default install path (typically dist-packages
or site-packages).
[Contributed by Ignacio Vizzo]
- As of this release, VFX Reference Platform 2019 is no longer supported.
CMake now issues deprecation warnings for 2020 VFX Reference Platform
version dependencies.
- Build fixes for OpenVDB AX with C++17 and greater.
- Bumped the new blosc version future minimum to 1.17.0.
- OpenEXR is now optional for vdb_render. It can be enabled with
-DUSE_EXR=ON.
Version 8.2.0 - November 24, 2021
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]
- Minor performance improvements to dilation calls in fast sweeping
algorithms.
- Add support for dilation in one direction and extending a field in one
direction in fast sweeping algorithms.
API changes:
- DynamicNodeManager can now set one grain size for threading across leaf nodes
and another for threading across non-leaf nodes.
Houdini:
- Fix crash in VDB Combine in Copy B mode if the second input has
more VDBs than the first.
- VDB Vector Merge SOP is now VDB Vector From Scalar SOP to distinguish
it from the VDB Merge SOP. It keeps the same internal name so this
is merely a label change.
- Add option to pass in OPENVDB_DSO_NAMES to CMake to configure which
Houdini DSOs are compiled.
- VDB Activate SOP now has an option for the expansion pattern to use
for dilation.
- The label for Voxels to Expand is now Expand Voxels to match Houdini.
- Fix bug to allow VDB LOD SOPs to be chained together.
- SOP Extrapolate supports dilation in one direction and extending a field
in one (domain) direction.
- The default OpenVDB ABI is now 8 for Houdini versions > 18.5.
- VDB Visualize Tree SOP is now multi-threaded and provides slicing and
color remapping.
- Add a sanitizer in SOP OpenVDB Extrapolate when expanding a narrow-band
level-set with a dilation value of 0, which will result in no operation.
Build:
- Added support for TBB 2021.
- Enabled the OPENVDB_FUTURE_DEPRECATION variable by default to warn on
upcoming deprecations.
- Introduced a OPENVDB_DOXYGEN_INTERNAL CMake variable which is ON by
default and removes the majority of internal namespaces from the
generated doxygen.
- Improved the doxygen deprecation listings, folder layouts and fixes
issues when using later versions of doxygen.
- Build fixes for MinGW on Windows.
[Contributed by Brecht Sanders]
- Added support for OpenEXR 3.
[Contributed by Cary Phillips]
- Added an OPENVDB_NAMESPACE_SUFFIX CMake string option which provides
the ability to customise the VDB namespace.
- The Python Module now appends the base directory defined by
Python_SITELIB to the default install path (typically dist-packages
or site-packages).
[Contributed by Ignacio Vizzo]
Version 8.1.0 - June 11, 2021
As of this release, support for grid ABI=5 has been removed.
New features:
- Added tools::erodeActiveValues() to match the existing
tools::dilateActiveValues(). New erosion tools support all tile policies
and edge/vertex neighbor patterns.
- Added support for automatic filtering of active tiles in tools::Filter
by setting tools::Filter::setProcessTiles. Active tiles are densified
on demand, only when necessary.
- Added tools::visitNodesDepthFirst and tools::DepthFirstNodeVisitor which
visit nodes in a tree or sub-tree in single-threaded depth-first order.
- Significant performance improvements to AX volume kernels, primarily due
to improved vectorization. Performance scales depending on the available
host CPU instruction set and scalability of the AX kernel. Trivial
assignments profile upwards of 3x faster on AVX.
- Introduced Active Tile Streaming for volumes kernels. AX can now
dynamically expand and collapse active nodes at all levels of a VDB tree
on demand, switching on or off by checking the spatial access pattern of
AX programs.
- Added tools::countActiveVoxels() for multi-threaded counting of active
voxels, optionally by bounding box. The Tree::activeVoxelCount() method
now uses this implementation.
- Added tools::memUsage() for multi-threaded counting of bytes of memory
used. The Tree::memUsage() method now uses this implementation.
Improvements:
- Significant performance improvements to large dilations with
tools::dilateActiveValues(). Performance gains will improve relative to
increases in the inputs size and dilation scheme.
- Added an optional argument to Tree::topologyUnion() which preserves
active tiles on the destination tree should they overlap leaf nodes
from the source tree.
- Reduced the time spent in the hot path of openvdb::initialize() and
openvdb::uninitialize() by leveraging atomics with double-checked locks.
[Contributed by Ben FrantzDale].
- Extended tree::DynamicNodeManager to allow for use with a const tree.
- Replace tbb::mutex with std::mutex and tbb::atomic with std::atomic as
these have now been removed in TBB 2021.
[Contributed by Ben FrantzDale].
- Significant performance improvements to tools::activate and
tools::deactivate through use of the DynamicNodeManager to parallelize
tile processing.
- Added degree() and radians() AX helper functions for converting radians
to degrees and vice versa, respectively.
- Added adjoint(), cofactor() and inverse() AX matrix functions.
- Added sort(), argsort(), isfinite(), isinf() and isnan() AX utility and
math functions.
- Added Vec4 argument support to normalize() AX function.
- Removed unused int16 AX modulo function signatures.
- Refactored the backend AX representation of strings with SSO support and
heap allocation.
- Added new methods on the VolumeExecutable to control active tile
streaming and node execution levels
- The deletepoint() AX function is now natively supported by the
PointExecutable
- Added tools::SumMergeOp that uses a parallel breadth-first algorithm to
accelerate summing grids.
- vdb_view: Fixed a bug which wouldn't reset the camera speed on focus
- vdb_view: Improved the drawing of PointDataGrids
- vdb_view: Improved the exception handling of BufferObjects and added
support for drawing an array without index values
Bug Fixes:
- Fix a memory leak in AttributeArray when delayed-loading is disabled.
- Fixed a crash in OpenVDB AX when declaring arrays with non-scalar
elements (unsupported) i.e. {"foo", 1, 2}, {1, {1,2}, 3} etc.
- Fixed a bug in OpenVDB AX which would cause an error when multiplying a
vec3 by a mat4.
- In OpenVDB AX, improved the error message produced when attempting to use
a matrix literal (i.e. {1,2,3...}) in a binary expression (this is
invalid but would previously print out bad IR).
- Fixed a non-deterministic failure in the TestStreamCompression unit test.
- Use copy-by-reference for the operator in a DynamicNodeManager to fix a
performance regression.
- tools::deactivate now also works with a MaskTree.
- Fixed a memory leak in the OpenVDB AX parser
- Fixed an occurrence of undefined behavior in the OpenVDB AX visitor
- Fixed some memory leaks in the OpenVDB and OpenVDB AX unit tests
- Fixed a bug in AX which could cause string allocations in loops to overflow
the stack
- Fixed a bug where the ValueOff iterator for the AX VolumeExecutable could
remove child branches of a VDB tree.
- Fixed a crash in the AX Houdini SOP with an empty PointDataGrid input.
- Fixed all cases where PointIndex and PointData aliases were used instead
of a templated type. [Reported by Karl Marrett]
- Fixed a crash when calling openvdb::points::pointOffsets with an empty
PointDataGrid input.
- Add missing 8-bit and 16-bit attribute type registration.
API changes:
- Restructured the internals of Morphology.h and moved tools::activate()
and tools::deactivate() to a new header, Activate.h.
- Deprecated tools::dilateVoxels() and tools::erodeVoxels() in favour of
new morphology methods.
- The openvdb::tools::Film class no longer has a saveExr method in
any build configuration. Sample code for saving exrs from this
object can be found in the command line render tool.
- Added ability to run tools::activate and tools::deactivate
single-threaded.
Houdini:
- Updated the VDB Activate SOP and others to use the multi-threaded
implementation for voxel dilation, providing a significant performance
increase.
- Introduced the VDB AX SOP which provides an interface for running
OpenVDB AX code in Houdini on VDB grids.
- Updated the VDB Smooth SOP to support the filtering of active tiles.
- Fixed a parameter warning in VDB AX SOP.
- Transfer Surface Attributes in Convert VDB SOP could use uninitialized
memory.
- VDB Activate SOP now uses the multi-threaded tools::deactivate for much
faster performance.
- Improved the formatting and updated the OpenVDB AX SOPs help card.
- The AX SOP utilizes the new Active Tile Streaming feature for Volumes.
Grids will only be densified in areas where unique values are created.
- VDB Activate SOP dilation will affect tiles, changing its behavior
from previous versions, but producing a more expected result.
- VDB Activate SOP has a world space dilation option.
- Introduced the VDB Merge SOP that merges multiple grids in parallel and
is faster and more convenient to use than the VDB Combine SOP.
- Fix a bug where the VDB Rebuild SDF was not preserving metadata from the
input grid.
- Fix a bug in VDB Resample SOP where input transform was not being used for
voxel size and voxel scale transform modes.
- Added Extrapolate SOP, which wraps the tools leveraging the Fast Sweeping
algorithm (tools::dilateSdf, tools::maskSdf, tools::fogToSdf,
tools::sdfToSdf, tools::sdfToExt, tools::fogToExt, tools::sdfToSdfAndExt,
tools::fogToSdfAndExt).
Build:
- Dependency on OpenEXR's Half implementation has been removed from the
core library by naturalizing the implementation into openvdb::math.
This is fully bitwise compatible, but may require switching Half
references to math::Half. The USE_IMATH_HALF build configuration can
be used to switch back to OpenEXR based half.
- Blosc, Log4cplus, IlmBase, OpenEXR and TBB find modules now configure
release and debug library variants.
[Reported by Matthew Cong]
- Fixed an issue where FindBlosc wouldn't add zstd as a dep in non static
builds BLOSC_USE_EXTERNAL_SOURCES.
- Fixed Log4cplus interface language and missing interface libraries on
Win32.
- Removed Jemalloc and Tbbmalloc logic from the core library builds.
- The variable CMAKE_MSVC_RUNTIME_LIBRARY is no longer set by the OpenVDB
CMake. If CMAKE_MSVC_RUNTIME_LIBRARY is not explicitly provided, OpenVDB
configures the static library with /MT(d) and the dynamic library
with /MD(d).
[Reported by Jérémie Dumas]
- Added support for ABI=9 and a CMake option OPENVDB_USE_FUTURE_ABI_9 to
use it without errors.
- The value of CONCURRENT_MALLOC is now respected when building the vdb_ax
command line binary.
- Added an option OPENVDB_ENABLE_UNINSTALL to allow the toggling of the
uninstall build target.
[Contributed by Jérémie Dumas]
- Improved the behavior of locating static zlib libraries when
USE_STATIC_DEPENDENCIES is enabled.
- Fixed an issue where extra hboost libraries could not be found when
building against Houdini 18.5 on Windows.
- Build fixes to OpenVDB AX for LLVM 12.
- Re-introduced the OPENVDB_DEPRECATED macro with an additional option that
takes a message. Added support to disable deprecations throughout
OpenVDB by defining OPENVDB_NO_DEPRECATION_WARNINGS
- Added an optional OPENVDB_TESTS variable to easily build a subset of the
unit tests.
- Fixed various incorrect RPATH directory paths in CMake (introduced in
8.0.1)
[Contributed by Ignacio Vizzo].
- Removed some unnecessary CMake for vdb_view
- The Windows defines NOMINMAX and _USE_MATH_DEFINES are now provided in
Platform.h.
- Moved the logic from PlatformConfig.h into Platform.h.
- The version.h header is now an auto generated header (version.h.in)
populated by CMake. The OpenVDB Version and ABI defines are computed
from the installation settings. Importantly, the value of
OPENVDB_ABI_VERSION_NUMBER now always matches the version used at build
time.
- Added OPENVDB_USE_HALF, OPENVDB_USE_BLOSC and OPENVDB_USE_ZLIB as
publicly available defines in version.h. These will be defined depending
on the settings used to build OpenVDB.
Version 8.0.1 - February 5, 2021
Bug fixes:
- Fixed a bug in the new CSG intersection merge algorithm where data
outside of the intersection region was not being removed.
Build:
- Fixed various incorrect RPATH directory paths in CMake
- Dropped the minimum boost requirement back to 1.61.
- Documentation installed by the doc target is now installed to the
share/doc/OpenVDB prefix
Houdini:
- VDB Combine SOP no longer attempts to invoke SDF CSG operations on
bool grids because unary negation is undefined on bools in the
template expansion.
Version 8.0.0 - December 23, 2020
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:
https://www.openvdb.org/documentation/openvdbax.html
New features:
- Added tools::anyActiveVoxels and tools::anyActiveTiles that check
if respectively active voxels or tiles in a tree intersect a given
CoordBBox.
- Added tools::activeTiles that returns a vector containing all the active
tiles in a tree that intersects a given CoordBBox.
Improvements:
- Made LeafManager class non-virtual.
Bug fixes:
- Fixed a determinism bug in NodeManager when using non-thread-safe
functor members.
- Fix GridTransformer construction to use correct rotate-scale-translate
order when recomposing matrix components.
[Contributed by Tom Cnops].
- OpenVDB AX: Fixed a potential code generation crash in binary, ternary
or comma operators when errors occurred in first operand.
ABI changes:
- Grid::isTreeUnique() is now virtual as of ABI=8 so that it can be
accessed from the GridBase.
- Private method RootNode::getChildCount() has been removed as of ABI=8.
- Mark map classes and functions as final for ABI=8 where beneficial to
allow devirtualization optimization.
- As of ABI 8, Vector, Matrix and Quaternion types now satisfy the Trivial
Type requirement. Their empty constructors and copy constructors have
been removed (and are left to the compiler to define).
- As of ABI 8, removed an unnecessary specialization of NodeUnion and
CopyTraits from NodeUnion.h. Replaced std::is_pod usage with
std::is_trivially_copyable which allows more types to benefit from the
union storage.
- As of ABI 8, PointDataGrids use the union NodeUnion specialization,
reducing the memory footprint of their topology by 50%.
API changes:
- Removed a number of deprecated point, volume and AX methods.
Houdini:
- VDB to Spheres SOP doesn't reset the radius when in worldspace mode.
VDB Write likewise should not reset the compression values.
Build:
- As of this release, VFX Reference Platform 2018 is no longer supported.
CMake now issues deprecation warnings for 2019 VFX Reference Platform
version dependencies, with the exception that OpenEXR/IlmBase 2.2 is
still supported.
- Added a missing header include to resolve an undefined size_t build error
on GCC10.
- Improved the python module's linkage with the CMake 3.15 Python::Module
target. Explicitly linking with the Development target could result in
crashes, particularly on macOS.
[Reported by Alexander Hagen]
- Removed OPENVDB_DEPRECATED macro in favor of C++14 [[deprecated]]
attribute.
Version 7.2.3 - March 16, 2021
Bug fixes:
- Use copy-by-reference for the operator in a DynamicNodeManager to fix a
performance regression.
Version 7.2.2 - February 4, 2021
Bug fixes:
- Fixed a bug in the new CSG intersection merge algorithm where data
outside of the intersection region was not being removed.
- Fix GridTransformer construction to use correct rotate-scale-translate
order when recomposing matrix components.
[Contributed by Tom Cnops].
Houdini:
- VDB Combine SOP no longer attempts to invoke SDF CSG operations on
bool grids because unary negation is undefined on bools in the
template expansion.
- VDB to Spheres SOP doesn't reset the radius when in worldspace mode.
VDB Write likewise should not reset the compression values.
Version 7.2.1 - December 23, 2020
Bug fixes:
- Fixed a determinism bug in NodeManager when using non-thread-safe
functor members.
Build:
- Added a missing header include to resolve an undefined size_t build error
on GCC10.
Version 7.2.0 - December 9, 2020
New features:
- Added tree::DynamicNodeManager that lazily caches the nodes at each
level of the tree to allow for efficient threading of topology-changing
top-down workflows.
- Added tools::CsgUnionOp, tools::CsgIntersectionOp and
tools::CsgDifferenceOp that use a parallel breadth-first algorithm to
accelerate CSG union, intersection and difference operations.
- Added tools::TreeToMerge which provides methods to steal or deep-copy
from a tree based on the tag dispatch class used in its construction.
- Pre-release of OpenVDB AX, an open source C++ library that provides a
powerful and easy way of interacting with OpenVDB volume and point data.
Improvements:
- util::CpuTimer now uses C++11 chrono instead of TBB.
- Threaded the construction of LeafManager and NodeManager linear arrays.
- tools::csgUnion, tools::csgIntersection and tools::csgDifference now use
the new parallel breadth-first algorithms for much faster performance.
- Extended tree::NodeManager to allow for use with a const tree.
- Added math::Abs, math::cwiseAdd, math::cwiseLessThan and
math::cwiseGreaterThan methods for Matrix types. Matrix grids can now be
instantiated.
Houdini:
- Fixed a bug in the OpenVDB Points Convert SOP where the auto voxel
transform was ignoring the contents of packed geometry.
- Fixed a bug in the OpenVDB Points Convert SOP where points representing
packed geometry were also being converted.
- Fixed a bug where a Houdini SOP's verb would not be correctly associated
with the corresponding node if the node's internal name was changed.
- Fixed bug where OpenVDB Convert SOP could revert the name attribute.
Bug fixes:
- Fixed a bug which could cause recursive compile time instantiations of
TypeList objects, manifesting in longer compile times.
- Deprecated util::PagedArray::push_back due to a race condition. Instead
use util::PagedArray::ValueBuffer::push_back which is faster and thread-safe.
- Fixed various cases of undefined behavior in some LevelSetUtil methods
[Reported by fkemmler]
API changes:
- Deprecated tree::LeafManager::getNodes. This method is no longer used when
constructing a NodeManager from a LeafManager.
- Deprecated Tree::visitActiveBBox, Tree::visit and Tree::visit2 methods in
favor of using a tree::DynamicNodeManager.
- Removed tools::CsgVisitorBase, tools::CsgVisitorUnion,
tools::CsgVisitorIntersection and tools::CsgVisitorDifference. The CSG
tools now use the parallel breath-first algorithms.
- Moved openvdb::TypeList from Types.h into its own header TypeList.h
Build:
- Removed the Makefiles.
- Re-organised the repository layout such that each independent library
is able to be configured against an existing installation of OpenVDB
without ambiguous include paths.
- Upgraded CMake minimum version support to 3.12.
- Removed OPENVDB_STATIC_SPECIALIZATION macro which is no longer required.
- Fixed various compiler warnings for GCC 9.1.
- Moved to CMake doxygen commands and removed the doxygen-config files for
doxygen documentation.
- Added USE_ZLIB compiler flag that enables zlib compression and defaults
to on.
- Added the OPENVDB_STATICLIB define to all static builds to fix builds on
Windows which use the multithread/DLL-specific version of the CRT.
[Reported by Tobias Rittig]
- Core library unit tests use GoogleTest instead of CppUnit.
Version 7.1.0 - August 13, 2020
As of this release, support for grid ABI=4 has been removed.
New features:
- Added a novel parallel sparse FastSweeping class that outperforms our
existing techniques for computing signed distance fields in addition to
supporting velocity extension.
- Added tools::fogToSdf which converts a scalar (fog) volume into a signed
distance field.
- Added tools::sdfToSdf which re-normalizes a signed distance field;
- Added tools::fogToExt which extends an arbitrary field (e.g. velocity)