forked from AcademySoftwareFoundation/openvdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
3255 lines (3021 loc) · 170 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 10.0.2 - In development
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
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)
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.