forked from AcademySoftwareFoundation/openvdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
2860 lines (2664 loc) · 151 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 8.1.1 - In development
Improvements:
- 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.
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.
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.
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://academysoftwarefoundation.github.io/openvdb/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)
off the iso-surface of a scalar (fog) volume.
- Added tools::sdfToExt which extends an arbitrary field (e.g. velocity)
off the iso-surface of a signed distance field.
- Added tools::fogToSdfAndExt which computes a signed distance and extends
an arbitrary field (e.g. velocity) off the iso-surface of a signed
distance field.
- Added tools::fogToSdfAndExt which re-normalizes a signed distance and
extends an arbitrary field (e.g. velocity) off the iso-surface of a
signed distance field.
- Added tools::dilateSdf which dilates a signed distance field.
- Added tools::maskSdf which extends an existing signed distance into a
user-defined mask.
- Added Grid::isTreeUnique() to tell if the tree is shared with another
grid.
- Added PointDataLeafNode::stealAttributeSet() and
AttributeSet::removeAttribute() for releasing ownership of attribute
data.
- Added AttributeSet::Descriptor::groupIndexCollision() for detecting
group index collisions when attempting to merge two Descriptors.
- Added RootNode::childCount(), InternalNode::childCount() and
LeafNode::childCount() to count the number of immediate child nodes that
exist below the current node.
Improvements:
- Added GroupWriteHandle::setUnsafe() for faster performance when the group
array is known to be in-core and non-uniform.
- Add support for default value metadata when creating AttributeArrays or
appending to an AttributeSet.
- Added new group inspection methods to the AttributeSet::Descriptor.
- Introduced a StringMetaCache class for convenient string attribute
metadata lookup and performed some minor optimizations.
- Removed redundant floor in points::floatingPointToFixedPoint.
- Add gitignore to repository root.
- Removed some logic for compilers older than Visual Studio 2019.
- Add a new Houdini ABI test binary.
- Fixed an indexing typo in tools::Filter. [Contributed by Yuanming Hu]
- Removed redundant null pointer checks. [Contributed by Kuba Roth]
- Added support for vdb_view on Windows. Requires GLEW.
- Removed support for GLFW 2.
- vdb_view now uses OPENVDB_LOG_FATAL when catching exceptions.
- vdb_view, vdb_print and vdb_render now use std::terminate() when catching
an unknown exception.
- Removed Boost::thread as a dependency of vdb_view in favour of
std::thread.
- Removed usage of boost/integer.hpp and boost/math/constants/constants.hpp,
the latter in favour of new openvdb math constants for pi
- Removed usage of boost/mpl/*.hpp methods in favour of new template
meta-programming methods on the openvdb::TypeList struct. This now
supports get, front, back, contains, index, unique, popback, popfront
and range removal of types.
- Changed the tree::NodeChain implementation to use an openvdb::TypeList
rather than a boost::mpl::vector and updated all usage of tree::NodeChain
accordingly.
Bug fixes:
- Fixed a bug where grids with no active values might return true when the
method evalActiveVoxelBoundingBox is called. The correct behavior is to
only return true if the grid contains any active values.
- Fixed a sign propagation bug in tools::traceExteriorBoundaries() used by
tools::meshToVolume(). This could cause values to not be propagated across
node boundaries, leading to voxels incorrectly being marked as inside the
isosurface. [Contributed by Tristan Barback]
- Fixed a rotation order bug in tools::local_util::decompose()
that caused it to fail to decompose some matrices.
- Fixed a bug where math::Quat::inverse() was not marked as const.
[Contributed by Michael Tao]
- Fixed a bug in the unit test for util::CpuTimer on Windows by using a
more accurate sleep implementation.
- Fixed a bug where the requested uniform value of an AttributeArray was
not being applied on attribute creation if the default attribute value
was not the default value for that value type.
- Fixed a compiler error when using C++17 by changing std::unexpected() to
std::terminate().
[Contributed by Mark Sisson]
API changes:
- Removed a number of deprecated point methods.
- points::StringIndexType is now deprecated, use Index instead.
- PointPartitioner::voxelOffsets() now returns a std::unique_ptr instead of
a boost::scoped_array.
- Renamed AttributeSet::Descriptor::nextUnusedGroupOffset() to
AttributeSet::Descriptor::unusedGroupOffset() to allow for providing an
optional group offset hint.
Houdini:
- Platonic SOP is now verbified.
- Extend all SOP references to support VDB Points.
- Combine SOP will not error in flatten-all mode if second has no grids.
- Changed the label (but not the opname) of Resize Narrow Band SOP to match
the corresponding native Houdini SOP. The new label is Activate SDF.
- Fixed a bug by using GEO_Detail::getBBox() instead of
GEO_Detail::computeQuickBounds() as the latter was incorrectly using the
point of the VDB when computing bounding box. SOPs affected include Clip,
Fill, Points Group, Rasterize Points, Read, Remove Divergence.
[Contributed by Kuba Roth]
- OpenVDB from Polygons SOP now always displays the vector UI, as otherwise
it might be stuck hidden if the input hasn't cooked.
- OpenVDB from Polygons and OpenVDB from Particles SOPs no longer require
input geometry to have been cooked to offer a choice of attributes,
the user may now also type in a value.
Build:
- Improved the CMake build for the OpenVDB Houdini library on Windows.
[Reported by Ian Woodward]
- Remove some logic for compilers older than Visual Studio 2019.
- Fixed a bug in the CMake FindIlmBase/OpenEXR modules which could cause
compilers on UNIX systems to fail to find stdlib.h if IlmBase/OpenEXR
headers were installed to /usr/include.
- CMake now checks the minimum supported MSVC compiler for Windows.
- CMake now only requires a CXX compiler.
- Improved the Windows README instructions and various MSVC warnings.
- Remove CMake warning when using GLFW 3.2+ on Debian.
- Various fixes to unary minus on unsigned compiler warnings.
- The defines _CRT_NONSTDC_NO_WARNINGS and _CRT_SECURE_NO_WARNINGS are now
enabled by default with MSVC.
- New CMake option OPENVDB_BUILD_PYTHON_UNITTESTS to disable or enable
the python module tests and fixed the required environment for them on
Windows. The python interpreter is no longer required by default if the
tests are disabled.
- Improved the CMake user messages when locating python and numpy.
- The python module extension is now .pyd on Windows.
- Fixed some build issues with the Houdini plugin on Windows.
- Standardized the library components install paths for the OpenVDB
Houdini shared library.
- Added a USE_PKGCONFIG option to CMake to optionally disable use of
pkg-config. [Contributed by Kartik Shrivastava]
- Standardized the dependency search paths in FindPackage modules using
GNU install paths.
- Added better library type detection of dependencies through FindPackage
modules on UNIX.
- Added missing TBB, OpenEXR and IlmBase defines for static builds on
Windows through the relevant FindPackage modules.
- Improved the logic in FindOpenVDB for static builds.
- Fixed a compiler warning on Apple Clang 11.0 where the AttributeArray
move constructor was being implicitly deleted despite being marked
default.
- Added an option BLOSC_USE_EXTERNAL_SOURCES to FindBlosc to include blosc
dependencies as interface libraries.
- Added a root CMake option USE_STATIC_DEPENDENCIES to force CMake to
only locate static libraries on UNIX. On Windows, if enabled, located
libraries are assumed to be static.
- Added support for CMAKE_MSVC_RUNTIME_LIBRARY for compilers that target
the MSVC ABI. Requires CMake 3.15 or greater.
- Fixed an issue where OPENVDB_OPENEXR_STATICLIB was not being defined and
OPENEXR_DLL was being defined when linking against static builds of
OpenEXR/IlmBase on Windows.
- Improved the behaviour of boost implicit linking with the
Boost::disable_autolinking target.
- Added support for importing pyopenvdb and openvdb_houdini through the
FindOpenVDB CMake module
- Removed the OPENVDB_2_ABI_COMPATIBLE and OPENVDB_3_ABI_COMPATIBLE macros.
- Fixed a few GCC compiler warnings by adding override keywords.
[Contributed by Edward Lam]
- jemalloc/tbbmalloc are no longer linked into library artifacts of the
OpenVDB CMake build. The CONCURRENT_MALLOC CMake option now only applies
to the executables.
- Introduced a new OpenVDB::openvdb_je interface target through the
FindOpenVDB CMake module which adds Jemalloc as a link time dependency.
- CMake build fix for the vdb_render binary on Windows when building
statically and using OpenEXR 2.5
Version 7.0.0 - December 6, 2019
Some changes in this release (see "ABI changes" below) alter
the grid ABI so that it is incompatible with earlier versions
of the OpenVDB library, such as the ones built into Houdini
up to and including Houdini 18.0. To preserve ABI compatibility,
when compiling OpenVDB or any dependent code define the macro
OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 5 for
Houdini 17.0 and 17.5 and 6 for Houdini 18.0.
As of this release, a C++14 compiler is required and the oldest
supported Houdini version is 17.0.
New features:
- LevelSetMeasure can now compute multiple types of curvatures (averge and total
Gaussian and mean curvature) as well as Euler characteristic and genus of
level set surfaces.
- Most stencil classes now have an intersection method that detcts the axial
directions of zero-crossings (as oppose to the existing boolean intersection test).
- The CurvatureStencil can now compute Gaussian and principal
curvatures (in addition to mean curvature).
- Added Tree::nodeCount, which counts the number and type of nodes
in a tree very efficiently.
- Added new RootNode::addChild() and InternalNode::addChild() methods to
allow the insertion of child nodes directly.
Improvements:
- The minimum ABI for OpenVDB is now always enforced through CMake
separately from other minimum dependency version variables.
- Added support for CMake 3.12 compatible Xxx_ROOT variables.
- Replaced the CMake USE_SYSTEM_LIBRARY_PATHS option with
DISABLE_CMAKE_SEARCH_PATHS and removed the hard coded list of
SYSTEM_LIBRARY_PATHS in favor of using CMake's default search procedure.
SYSTEM_LIBRARY_PATHS can still be used as a global list of paths for all
dependency searches.
- Improvements to OpenVDB's CMake module setup order in regards to CMake
policy, minimum version and project calls.
- Replaced occurrences of boost::scoped_array with std::unique_ptr.
- Added an OPENVDB_SIMD option to CMake to optionally define SSE4.2 and
AVX compiler flags, this is switched off by default.
- Made various small changes to improve Visual Studio compatiblity and
deprecate some logic for compilers older than Visual Studio 2017.
- Standardized CMake install locations using GNUInstallDirs. Importantly,
this changes the default library installation folder from lib to lib64
on some 64-bit systems, or to lib/multiarch-tuple on Debian
[Contributed by David Aguilar]
- Added SIMD intrinsics to a few common NodeMask methods.
[Contributed by Konstantin]
Bug fixes:
- Fixed a bug in FindJemalloc.cmake where paths were not being handled
correctly.
- Fixed a Windows build issue in openvdb_render.
- Fixed a non deterministic threading bug in tools::meshToVolume() during
polygon voxelization which could result in different distance values.
ABI changes:
- OpFactory destructor is now virtual as of ABI=7
- Added new virtual methods for copying const grids and replacing
the metadata and/or the transform - GridBase::copyGridReplacingMetadata,
GridBase::copyGridReplacingTransform and
GridBase::copyGridReplacingMetadataAndTransform.
- AttributeArray copy constructor is now thread-safe.
API changes:
- VolumeToMesh::pointList() and VolumeToMesh::polygonPoolList() now return
a std::unique_ptr instead of a boost::scoped_array.
- AttributeArray::copyUncompressed() is now deprecated.
Python:
- Removed the requirement of CMake 3.14 for NumPy usage.
- Added support for Boost versions 1.65 and later when building
the Python module with NumPy support through CMake.
- Improved CMake Python3 support.
- The Python Module is now disabled by default in CMake.
Houdini:
- Fixed a bug in the Points Convert SOP during conversion from
Houdini geometry to OpenVDB Points, where point group information
could end up corrupted or cause a crash with non-contiguous
point offsets (mesh inputs).
- Threaded the population of point group memberships during conversion
from Houdini geometry to OpenVDB Points
- Added logic to the Rasterize Points SOP to suppress the output of
non-finite attribute values due to subnormal input densities.
- Introduced a position compression option to the Scatter SOP for VDB
Points and default to 16-bit fixed point.
Version 6.2.1 - September 30, 2019
Bug fixes:
- Fixed a crash that arose from an inadvertent ABI change of an I/O class
with the 6.2.0 release. The crash occured when attempting to write out
a point data grid using an I/O routine from a different version of
OpenVDB than the one with which the grid was authored and when
one of those OpenVDB versions was 6.2.0.
Version 6.2.0 - September 18, 2019
New features:
- Added tools::FindActiveValues, which counts the active values
in a tree that intersect a given bounding box.
- Added io::DelayedLoadMetadata, which stores mask offsets and compression
sizes on write to accelerate delayed load reading.
Improvements:
- LeafNode::modifyValue() and LeafNode::modifyValueAndActiveState()
now modify voxel values in place for improved performance.
- Added math::isInfinite() and math::isNan() to resolve Visual Studio
compatibility issues with integer types.
- Made minor performance improvements to moving and filtering VDB points.
- Improved performance related to a mutex contention when appending
multiple AttributeArrays in parallel through various point operations.
- Significantly improved the performance of createLevelSetSphere()
using threading.
- Improved directory and file path lookups of some CMake commands in
the root CMakeLists.txt
[Reported by Daniel Elliott]
- Improved CMake support for GLFW versions 3.1 and later.
- FindOpenVDB.cmake now correctly propagates CXX version requirements.
- Added CMake support for linking against Jemalloc and TBB malloc
and enabled Jemalloc by default for Linux and non-Maya builds
and TBB malloc for all other builds.
- Added a USE_COLORED_OUTPUT option to CMake to display compiler output
in color.
- Added an OPENVDB_CODE_COVERAGE option to CMake.
- CMake now automatically detects and configures the CXX11 ABI requirement
for Houdini builds.
- CMake now issues deprecation warnings for 2017 VFX Reference Platform
version dependencies. In particular, C++11-only compilers are now
deprecated; OpenVDB 7.0 will require a C++14-compatible compiler.
Bug fixes:
- Replaced std::vector with std::deque as the underlying container
for util::PagedArray, to address a rare crash when reading
from multiple threads while writing from another thread.
- Fixed a bug that could cause an empty CoordBBox to report nonzero volume.
- Fixed a bug in tools::computeScalarPotential() that could produce
a corrupt result due to invalid memory access.
[Reported by Edwin Braun]
- Partially reverted tools::ClosestSurfacePoint's distance calculations
to their pre-OpenVDB 5.0 behavior to address a bug in the
fillWithSpheres() tool that caused generated spheres to sometimes
extend outside the target volume.
- CMake now correctly sets rpaths for the unit test binary.
- Addressed a Valgrind warning by allocating the AttributeArray registry
using a Meyers singleton.
[Contributed by Autodesk]
ABI changes:
- ABI versions 3 and older are now deprecated, and support for them will be
removed in a future release. Until then, define the macro
OPENVDB_USE_DEPRECATED_ABI (or set the CMake OPENVDB_USE_DEPRECATED_ABI
option to ON) to suppress deprecation messages when compiling OpenVDB or
dependent code.
API changes:
- Changed points::RandomLeafFilter::LeafMap from a std::map to
a std::unordered_map.
- Removed the TableT template argument from util::PagedArray.
The table type is now hardcoded to std::deque.
- The minimum supported version of GLFW is now 3.1.
Python:
- CMake now always produces a .so for the Python module on Unix
and Linux platforms.
- Fixed a compile-time error when building the Python module for Python 3.
[Reported by yurivict]
Houdini:
- OpenVDB SOPs are now displayed in an ASWF sub-menu of the VDB tab menu.
- Added API documentation and examples.
- Added openvdb_houdini::GEOvdbApply(), which invokes a functor
on a VDB primitive if the resolved grid type is a member of
a given type list.
- Fixed a regression in the Fill SOP that caused it to modify VDBs
in the input detail.
- The Combine SOP no longer crashes in Copy B mode when the destination
is not a VDB.
- Added a houdini_utils::OpFactory::addSpareData() method
and addOperatorSpareData() and getOperatorSpareData() functions
to manage spare data associated with operator types.
- Added an opsparedata HScript command and hou.NodeType.spareData()
and hou.NodeType.spareDataDict() methods to retrieve spare data
associated with operator types.
- Added a pythonrc.py startup script to set the tab menu visibility
of nodes and their native Houdini equivalents, based on an
OPENVDB_OPHIDE_POLICY environment variable.
- Added a houdini_utils::OpFactory::setInvisible() method to hide nodes
from tab menus.
- Added an OpenVDBOpFactory::setNativeName() method to pair OpenVDB nodes
with their native Houdini equivalents.
- Added a houdini_utils::OpPolicy::getTabSubMenuPath() method to allow
OpPolicy subclasses to provide their own tab sub-menu path.
- OpenVDB nodes now override OP_Operator::getVersion() to return
a version string of the form "vdb6.2.0 houdini18.0.222".
Version 6.1.0 - May 8, 2019
As of this release, the oldest supported Houdini version is 16.5.
New features:
- Added new QuatTraits, MatTraits and ValueTraits type traits to complement
VecTraits and added an IsSpecializationOf helper metafunction.
- Added support for Vec4s, Vec4d and Vec4i metadata.
- Added a generic TypeList class.
- Added GridBase::apply(), which invokes a functor on a grid
if the resolved grid type is a member of a given type list.
- Added util::printTime(), which outputs nicely formatted time information.
- Added a std::hash<Coord> template specialization.
- Added CoordBBox::moveMin() and CoordBBox::moveMax() to move a CoordBBox.
Improvements:
- util::CpuTimer now makes use of util::printTime() for nicer output,
and its API has been improved.
- Significantly improved the performance of point data grid string
attribute generation.
- AttributeArray::copy() and the copy assignment operator for
AttributeArrays are now thread-safe.
- The command-line tools (vdb_print, etc.) now include the library
ABI version in their -version output.
- Further improved the responsiveness of the mesh to volume converter
to interrupt requests.
- The CMake build system has been significantly improved to support a
wider range of build options and use cases. This includes better
dependency handling and status reporting, find module installation for
external use, more robust handling of different platform configurations
and the introduction of dependency and build documentation.
Bug fixes:
- Fixed a bug in tools::clip() that caused some grid metadata
to be discarded.
- Added a check to points::setGroup to compare the maximum index of the
provided PointIndexTree to the size of the membership vector.
- Fixed a race condition introduced in ABI 6 when moving points
in point data grids, due to non-const access to an AttributArray
triggering a copy-on-write.
- Fixed a bug that caused the mesh to volume converter to consume
unlimited memory when it encountered NaNs in vertex positions.
- Fixed a rounding error bug in point conversion when using
single-precision floating-point.
- Addressed some type conversion issues and other issues reported by GCC 6.
- Fixed a crash in tools::extractActiveVoxelSegmentMasks() when the first
leaf node had no active voxels.
[Reported by Rick Hankins]
- Fixed a bug in tools::segmentActiveVoxels() and tools::segmentSDF() where
inactive leaf nodes were only pruned when there was more than one segment.
- Fixed a crash in point moving when using group filters.
- Fixed a bug where the stride of existing attributes was being ignored
during copy-construction of an AttributeSet.
- Fixed a bug that caused AttributeArray equality operators to fail for
attributes with non-constant strides.
API changes:
- Moved the CopyConstness metafunction from TreeIterator.h to Types.h.
Houdini:
- The Points Convert SOP now reports NaN Positions as warnings when
converting from Houdini Points to VDB Points.
- Fixed a bug where the Points Convert SOP was incorrectly ignoring
point attributes with the same name as an existing point group.
- The Transform SOP now supports frustum transforms by applying the
transformation to the internal affine map.
- Changed the labels (but not the opnames) of several SOPs to match
the corresponding native Houdini SOPs. The new labels are
Morph SDF, Project Non-Divergent, Rebuild SDF, Renormalize SDF,
Reshape SDF, Segment by Connectivity, Smooth SDF, Topology to SDF,
and Visualize Tree.
- Added a houdini_utils::OpPolicy::getFirstName() method to allow
OpPolicy subclasses to provide their own first name scheme.
- Added a houdini_utils::OpPolicy::getLabelName() method to allow
OpPolicy subclasses to provide their own label naming scheme
for tab menus.
- Added type lists for sets of commonly used grid types, including
ScalarGridTypes, Vec3GridTypes, AllGridTypes, etc.
- The Vector Merge SOP now copies metadata from the representative
scalar grid.
- Deprecated SOP_NodeVDB::duplicateSourceStealable(),
houdini_utils::getNodeChain() and houdini_utils::OP_EvalScope.
Python:
- Added limited support for point data grids, comprising I/O and
metadata functionality for now.
- Added support for Mat4s and Mat4d metadata, in the form of nested
Python lists (e.g., [[1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]]).
Version 6.0.0 - December 18, 2018
Some changes in this release (see "ABI changes" below) alter
the grid ABI so that it is incompatible with earlier versions
of the OpenVDB library, such as the ones built into Houdini
up to and including Houdini 17. To preserve ABI compatibility,
when compiling OpenVDB or any dependent code define the macro
OPENVDB_ABI_VERSION_NUMBER=N, where, for example, N is 3 for
Houdini 15, 15.5 and 16, 4 for Houdini 16.5 and 5 for Houdini 17.0
New features:
- Added support to the ParticlesToLevelSet tool for fast rasterization
of particles into boolean mask grids.
- Added convenience functions particlesToSdf(), particleTrailsToSdf(),
particlesToMask() and particleTrailsToMask() for common particle
rasterization use cases.
- Added batch copying of AttributeArray values that significantly
outperforms the older method that relied on a virtual function.
Improvements:
- Improved the responsiveness of the mesh to volume converter to interrupt
requests.
- Attempts to use a partially deserialized AttributeArray now errors.
- Updated point deletion to use faster batch copying for ABI=6+.
- Methods relating to in-memory Blosc compression for AttributeArrays now
do nothing and have been marked deprecated resulting in memory savings
for ABI=6+.
Bug fixes:
- Fixed various signed/unsigned casting issues to resolve compiler warnings
when moving points in point data grids.
ABI changes:
- Added new virtual functions to AttributeArray.
- Changed the order and size of member variables in AttributeArray
and TypedAttributeArray.
API changes:
- Removed a number of methods that were deprecated in version 5.0.0 or
earlier.
- Removed the experimental ValueAccessor::newSetValue method.
- Deprecated AttributeArray methods relating to in-memory
Blosc compression.
Houdini:
- The Convert and To Polygons SOPs now correctly transfer vertex
attributes when the output is a polygon soup.
- Added an option to the Visualize SOP to display leaf nodes as points.
- Renamed the Visualize SOP's "leafmode", "internalmode", "tilemode"
and "voxelmode" parameters to "leafstyle", "internalstyle", etc.
and converted them from ordinal to string-valued.
- Made various improvements to viewport rendering of point data grids.
- Added a ParmFactory::setInvisible() method to allow parameters
to be marked as hidden. This is useful for multi-parms,
whose child parameters cannot be made obsolete.
- Removed the option to use in-memory Blosc compression from the Points
Convert SOP as this feature has now been deprecated.
- Made various small changes for Houdini 17 compatibility.
Version 5.2.0 - August 13, 2018
New features:
- Added tools to advect points stored in point data grids
through velocity fields.
[Contributed by Dan Bailey]
- For point data grids, voxel data can now be prefetched independently
of position or other attributes.
[Contributed by Dan Bailey]
- Added tools to sample voxel values onto points stored in
point data grids.
[Contributed by Double Negative]
Improvements:
- The UniformPointScatter tool now generates points in "points per volume"
mode even when the product of the density and the voxel volume is less
than one, and the point count now varies continuously with the density.
- Added a min/max sphere count argument to the fillWithSpheres() tool.
(The previous version, now deprecated, supported only a maximum
sphere count.)
- Added a method to tools::LevelSetTracker to enable and disable
trimming of voxels outside the narrow band.
Previously, trimming was always enabled, which caused dense SDFs
to be converted to narrow-band level sets.
- Added state() methods to point data index filters to improve
optimization opportunities.
[Contributed by Dan Bailey]
- Added active and inactive value mask point data index filters.
[Contributed by Dan Bailey]
- Replaced include/exclude group list parameters with filter functors
in various point data functions.
[Contributed by Dan Bailey]
- Refactored and simplified the point count API.
[Contributed by Dan Bailey]
- Computing cumulative per-leaf point offsets is now parallelized.
[Contributed by Dan Bailey]
- Made various small changes for Visual Studio 2017 compatibility.
[Contributed by Edward Lam]
Bug fixes:
- Fixed a bug that could cause an infinite loop when iterating over
an empty root node.
- Fixed namespace-related bugs in math::Tuple::isZero() and
math::Mat::isZero() that led to compile-time errors.
- Fixed type conversion bugs in the vector-to-vector math::rotation()
function that made it impossible for it to return a single-precision
rotation matrix, and modified the function to accept Vec3 arguments
of any value type.
- Fixed a bug in the mesh to volume converter that made it uninterruptible
in certain cases even though an interrupter was provided.
[Reported by Doug Epps]
Houdini:
- Added an option to the From Particles SOP to output an
interior mask grid.
- Added options to the Metadata SOP to set the grid name
and to propagate metadata to primitive attributes and vice-versa.
- Modified GU_PrimVDB::convertVolumesToVDBs() to set the output VDBs'
grid names to the names of the volume primitives.
- Added an option to the Offset Level Set, Renormalize Level Set,
Smooth Level Set, and Resize Narrow Band SOPs to enable and disable
trimming of voxels outside the narrow band.
Previously, trimming was always enabled, which caused dense SDFs
to be converted to narrow-band level sets.
- Fixed a bug in the Resample SOP that prevented it from reading
a reference VDB from the second input.
- Added an option to the Scatter SOP to scatter points only on
an isosurface of a signed distance field.
- The Scatter SOP now generates points in Point Density mode even when
the product of the density and the voxel volume is less than one,
and the point count now varies continuously with the density.
- Added a minimum sphere count option to the To Spheres SOP.
- Added enable/disable toggles to the To Spheres SOP's minimum and maximum
radius parameters and eliminated the world space radius parameters.
The remaining minimum and maximum parameters, formerly the voxel space