forked from AcademySoftwareFoundation/openvdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
2296 lines (2149 loc) · 122 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 7.0.1 - In Development
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.
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
radii, are now used in both world unit and voxel unit modes.
- Added transform and rotation order options to the Transform SOP.
- Added support to the Advect Points SOP for advecting points stored
in point data grids.
[Contributed by Dan Bailey]
- Added support to the Sample Points SOP for sampling onto points
stored in point data grids.
[Contributed by Double Negative]
Version 5.1.0 - April 10, 2018
New features:
- Added an option to points::deleteFromGroups() to delete the groups
as well as the points.
[Contributed by Nick Avramoussis]
- Added a header_test Makefile target that checks library header files
for dependencies on missing or indirectly included headers.
[Contributed by Dan Bailey]
- Added support for Mat3s and Mat3d point data typed attributes.
[Contributed by Dan Bailey]
Improvements:
- Added per-test timings to vdb_test to help in identifying
performance regressions.
- zeroVal() now returns a zero matrix instead of an identity matrix
for Mat4s and Mat4d, and it is now also defined (and returns
a zero matrix) for Mat3s and Mat3d.
Python:
- Fixed a bug introduced in version 3.2.0 that caused boolean and integer
values added to a grid's metadata to be stored as floating-point values.
Houdini:
- Added options to the Clip SOP to expand or shrink the clipping region
and, when clipping to a camera frustum, to set the near and far
clipping planes.
- Added output grid naming options to the Points Convert SOP.
- Added a Keep Original Geometry toggle to the Points Convert SOP
and improved the efficiency of point unpacking.
[Contributed by Dan Bailey]
- Added an option to the Points Delete SOP to delete point groups.
[Contributed by Nick Avramoussis]
- Fixed a rare crash when extracting points from a point data primitive.
[Contributed by Jeff Lait]
- Added a SOP_NodeVDB::evalStdString() method that facilitates
string parameter evaluation in expressions, e.g.,
matchGroup(*gdp, evalStdString("group", time)).
- Removed the deprecated openvdb_houdini::validateGeometry() function.
Use convertGeometry() instead.
- Added a SOP_NodeVDB::matchGroup() overload that eliminates the need
to const_cast the GU_Detail.
[Contributed by Jeff Lait]
- Grid transforms are now more aggressively simplified, making it
less likely to produce nonuniform voxels erroneously.
[Contributed by Jeff Lait]
- Fixed a bug when copying and pasting a Create SOP that could cause
the Voxel Size toggle to change state.
- Added a houdini_utils::OpFactory::setVerb() method to register
compilable SOPs.
- Made SOP_NodeVDB::cookMySop() final (that is, non-overridable)
to facilitate the implementation of compilable SOPs.
Override SOP_NodeVDB::cookVDBSop() instead. (In most cases,
it suffices to rename cookMySop to cookVDBSop.)
- Renamed some parameters on the following SOPs to match the equivalent
native Houdini nodes: Advect, Advect Points, Analysis, Combine, Filter,
Fracture, From Particles, From Polygons, Morph Level Set,
Occlusion Mask, Offset Level Set, Points Group, Resample,
Resize Narrow Band, Smooth Level Set, Topology To Level Set,
Vector Merge, and Visualize.
- Added SOP_VDBCacheOptions, a convenience base class for compilable SOPs.
[Contributed by Jeff Lait]
- Converted most SOPs into compilable SOPs.
Version 5.0.0 - November 6, 2017
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 16. 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 and 4 for Houdini 16.5.
New features:
- Added a getLibraryAbiVersionString() function, which returns a
string such as "5.0.0abi3".
- Added a WeakPtr type alias for ABI compatibility.
- Metadata fields of unregistered types are no longer discarded after
being read from a .vdb file, and although their values are not printable,
they can be written back to disk.
- Added a DESTDIR_LIB_DIR Makefile variable for Linux multiarch support.
[Contributed by Mathieu Malaterre]
- Added tools to create potential flow fields, as described in the
2017 SIGGRAPH OpenVDB course.
[Contributed by Double Negative]
- Added tools to create mask grids from point data grids and to compute
point counts.
[Contributed by Dan Bailey]
- Added tools to scatter OpenVDB points randomly throughout a volume.
[Contributed by Nick Avramoussis]
Improvements:
- Significantly improved the performance of point data grid group filters.
[Contributed by Double Negative]
Bug fixes:
- Fixed bugs in tools::ClosestSurfacePoint's distance calculations
that caused searches to produce incorrect results.
- Fixed a locking issue that affected multithreaded access to
PointDataLeafNodes when delayed loading was in effect.
[Contributed by Dan Bailey]
ABI changes:
- Made tree::InternalNode's destructor non-virtual.
- The fix for a delayed-loading race condition in the LeafBuffer class
that was only partially rolled out in the previous release is now
enabled on all platforms.
- Replaced a points::AttributeArray bit flag with an atomic integer
to address a threading issue during delayed loading.
[Contributed by Dan Bailey]
- Deprecated the OPENVDB_2_ABI_COMPATIBLE and OPENVDB_3_ABI_COMPATIBLE
macros in favor of a new OPENVDB_ABI_VERSION_NUMBER macro.
The new macro defaults to the library major version number but can be
set at compile time to an earlier version number to disable ABI changes
since that version. (Older ABIs will not be supported indefinitely,
however.) For example, compile OpenVDB and any dependent code
with "-DOPENVDB_ABI_VERSION_NUMBER=4" to use the 4.x ABI.
API changes:
- Replaced tools::ClosestSurfacePoint::initialize() with
tools::ClosestSurfacePoint::create(), which returns a newly-allocated
and properly initialized object.
- Removed methods that were deprecated in version 4.0.0 or earlier,
including io::File::readGridPartial(), points::initialize(),
points::uninitialize() and util::PagedArray::pop_back().
- Deprecated IllegalValueException in favor of ValueError.
- Changed the naming scheme for the library namespace from
openvdb::vX_Y_Z to openvdb::vX_YabiN, where X, Y, Z and N are
the major, minor, patch and ABI version numbers, respectively.
The abiN suffix is added only when the library is built using
an older ABI version.
Python:
- Reimplemented NumPy support for Boost 1.65 compatibility.
Houdini:
- Fixed bugs that caused the Ray SOP's closest surface point searches
to produce incorrect results.
- Changed the VdbPrimCIterator::FilterFunc type from boost::function
to std::function.
- Changed the houdini_utils::OpPolicyPtr type from boost:shared_ptr
to std::shared_ptr.
- Debug-level log messages generated by OpenVDB are no longer forwarded
to Houdini's error manager.
- Fixed a bug in the Read SOP that made it impossible to select among
grids of the same name in a file.
- Added houdini_utils::ParmFactory::setAttrChoiceList(), a convenience
method for the creation of menus of attributes.
- Added a Potential Flow SOP.
[Contributed by Double Negative]
- Added point data grid support to the Scatter SOP.
[Contributed by Nick Avramoussis]
- Added mask and point count output options to the Points Convert SOP.
[Contributed by Dan Bailey]
Version 4.0.2 - July 28, 2017
New features:
- Added tools::compActiveLeafVoxels(), which composites active
voxel values from a source tree into a destination tree.
It is threaded and faster than existing tools that merge trees,
however it operates only on leaf nodes.
- Added a vdb_test -f option that reads a list of tests to be run
from a text file.
- Added functions for deleting points from point data grids based on
group membership.
[Contributed by Double Negative]
- Enabled display of point data grids in vdb_view.
[Contributed by Nick Avramoussis]
- Added a view mode indicator to vdb_view.
- Added isFinite(), isInfinite(), isNan(), and isZero() methods
to math::Mat and added isZero() to math::Tuple.
- Added tools::interiorMask(), which constructs a boolean mask grid
from the active voxels of an input grid or, if the input grid is
a level set, from the interior voxels of the level set.
- Added begin() and end() iterator methods (and related methods)
to math::CoordBBox, so that it can be used in range-based for loops.
- tools::clip() now accepts either a box, a mask grid or a camera frustum
as the clipping region. The latter is new in this version.
Improvements:
- Moved the isFinite(), isInfinite() and isNan() methods from
math::Vec3 et al. to math::Tuple.
Bug fixes:
- Fixed a delayed-loading race condition that could result in crashes.
[Reported by Dan Bailey]
To preserve ABI compatibility, this fix is currently enabled only
on platforms for which the alignment of a tbb::atomic<uint32_t>
is the same as for a uint32_t. On other platforms, warnings will
be logged during OpenVDB initialization, and it is recommended
to disable delayed loading in that case (for example, by defining
the environment variable OPENVDB_DISABLE_DELAYED_LOAD).
- Fixed a delayed-loading memory leak in the PointDataLeafNode.
[Contributed by Double Negative]
- Changed the random number seeding mechanism for .vdb file UUIDs
to avoid duplicate IDs.
[Reported by Jason Lefley]
- Fixed an off-by-one bug in the resampler that produced grid patterns
of missing interior voxels for scale factors greater than one.
Houdini:
- As of Houdini 16.0.549, houdini_utils::OpFactory can generate help cards
for operators automatically. New OpFactory::setDocumentation() and
ParmFactory::setDocumentation() methods allow one to add custom
help text in wiki markup format.
- Added help cards for all SOPs. Houdini 16.0.578 or later is required.
[Contributed by Dan Bailey and SideFX]
- The Extended Operator Info window in Houdini 16 now renders correctly
for OpenVDB SOPs, instead of displaying a Python stack trace.
[Contributed by Dan Bailey]
- Added a Points Delete SOP for deleting points from point data grids
based on group membership.
[Contributed by Double Negative]
- Added a Mantra VRAY procedural and a delayed load SHOP for rendering
point data grids. Houdini 16 is required.
[Contributed by Double Negative]
- Replaced the Combine SOP's "A/B Pairs" and "Flatten" toggles with
a menu of collation options that include flattening only A grids
and flattening groups of A grids independently.
- Added a slider to the Remove Divergence SOP to set the error tolerance
for the pressure solver.
- Added value type conversion options (for VDB output) to the Convert SOP.
- Added a Densify SOP that replaces active tiles with leaf voxels.
- Fixed a bug in the Rasterize Points SOP that capped density values
to one instead of to the particles' densities.
- The Convert and To Polygons SOPs now accept grids of any type
as surface masks, not just level set or SDF grids.
- Added an option to the Clip SOP to clip to a camera frustum.
Version 4.0.1 - March 8, 2017
New features:
- Added functions to util/logging.h to simplify configuration of the
logging system (via command-line arguments, in particular).
- Added LeafManager::activeLeafVoxelCount(), a faster, threaded
alternative to Tree::activeLeafVoxelCount().
- Added a -shuffle option that causes vdb_test to run unit tests
in random order, which can help to identify unintended dependencies
between tests.
- Added vdb_lod, a command-line tool to generate volume mipmaps
for level-of-detail effects.
- Added methods to compute the median value of active, inactive or all
voxels in leaf nodes.
Improvements:
- Added a Metadata::str() specialization for StringMetadata that
eliminates the overhead of writing to a string stream.
- Made various minor improvements to util::PagedArray.
- Added an install_lib build target to the Makefile.
[Contributed by Double Negative]
- Added documentation and Cookbook examples for OpenVDB Points.
[Contributed by Double Negative]
- Registration of OpenVDB Points grid and attribute types is now handled
in openvdb::initialize(), and openvdb::points::initialize() and
openvdb::points::uninitialize() are therefore deprecated.
- Extended multi-pass I/O to handle a variable number of passes
per leaf node.
[Contributed by Double Negative]
- Addressed a name conflict between macros in util/NodeMasks.h
and symbols in the Eigen library.
[Reported by Trevor Thomson]
Bug fixes:
- tools::fillWithSpheres() and tools::ClosestSurfacePoint now correctly
handle isosurfaces outside the input volume's narrow band.
- tools::MultiResGrid now supports all standard grid types, including
BoolGrid and MaskGrid.
- LeafNode::fill() now correctly clips the fill region to the node's
bounding box.
- Grid::denseFill() no longer densifies all existing active tiles,
and it now correctly handles both active and inactive fill values.
- Fixed a bug that caused tools::copyToDense() to only partially populate
the output array when delayed loading was in effect.
[Reported by Stuart Levy]
- Fixed an issue with duplicate registration of PointDataGrid
attribute types.
[Reported by SideFX]
- Fixed an uninitialized memory bug in tools::meshToVolume().
[Reported by SideFX]
- Fixed a thread race condition in math::QuantizedUnitVec that could
cause it to produce incorrect results.
[Contributed by Jeff Lait]
- Fixed a dangling pointer bug in tools::ParticleAtlas.
[Contributed by SideFX]
- Grid operators (divergence, gradient, etc.) now produce correct results
even for grids with active tile values.
- Fixed a bug when writing an out-of-core points::AttributeArray
that could cause corruption of the metadata associated with the array.
[Contributed by Double Negative]
Python:
- Added functions getLoggingLevel(), setLoggingLevel(), and
setProgramName(), to allow configuration of the logging system.
Houdini:
- Fixed a crash in the Ray SOP when the user selected an isosurface
outside the target volume's narrow band.
- The LOD SOP now supports all standard grid types, including
boolean grids.
- Added houdini_utils::ParmFactory::setGroupChoiceList(), a convenience
method for the creation of menus of primitive groups.
- Made various small changes for Houdini 16 compatibility.
[Contributed by SideFX]
- The Create SOP now supports matching the new grids' transform,
voxel size, and topology to a reference grid. If the topology is
being matched, it can optionally be resampled to a different voxel size.
- Added some support for point data grids to the Clip,
Topology To Level Set and Visualize SOPs.
[Contributed by Double Negative]
- Compression is no longer enabled by default in the Points Convert SOP
for normals and colors, because they are not guaranteed to have a
[0, 1] range.
[Contributed by Double Negative]
- Added a 16-bit truncation compression option to the Points Convert SOP.
[Contributed by Double Negative]
- Fixed a build issue with the GR_PrimVDBPoints render hook plugin
that could cause hython to report a DSO error.
[Reported by Double Negative]
- Added an install_lib build target to the Makefile.
- Rewrote the Remove Divergence SOP to actually remove divergence from
vector fields on collocated grids, and added support for stationary
and moving obstacles and an option to output a pressure field.
- The Analysis SOP now produces correct results for grids with active
tile values.
- Added a sparse/dense toggle to the Fill SOP.
- Added openvdb_houdini::startLogForwarding(), stopLogForwarding()
and isLogForwarding(), which control the forwarding of log messages
to Houdini's error manager. Forwarding of library warnings and
error messages is now enabled by default for SOPs when OpenVDB
is built with log4cplus.
Version 4.0.0 - November 15, 2016
Highlights:
- Incorporated Double Negative's OpenVDB Points library.
See https://github.com/dneg/openvdb_points_dev for details.
- Introduced some C++11 constructs. A C++11-compatible compiler
is now required.
- Blosc-compressed .vdb files are now as much as 20% smaller.
- Vector-valued grids are now constructed and destroyed much faster.
This change and other 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 in Houdini 15, 15.5 and 16.
To disable these changes and preserve ABI compatibility, define
the macro OPENVDB_3_ABI_COMPATIBLE when compiling OpenVDB
or any code that depends on OpenVDB.
New features:
- Added an option to the point scattering tools to specify how far
each point may be displaced from the center of its host voxel or tile.
- Added a toggle to tools::clip() to invert the clipping mask.
- Custom leaf node implementations may now optimize their file layout
by inheriting from io::MultiPass. Voxel data for grids with such
leaf nodes will be written and read in multiple passes, allowing
blocks of related data to be stored contiguously.
[Contributed by Double Negative]
- Added Tree::unallocatedLeafCount(), which returns the number of leaf
nodes with unallocated data buffers (typically due to delayed loading).
Improvements:
- Vector-valued grids are now constructed and destroyed much faster.
- Changed math::Coord's data representation to facilitate C++11
uniform initialization.
- Delayed loading from io::Files is now faster due to the use of seeks
instead of reads.
[Contributed by Double Negative]
- Made many small changes to address type conversion and other warnings
reported by newer compilers, including Clang 3.8.
- Improved Blosc compression ratios and write times by increasing
the block size.
[Contributed by Dan Bailey]
Bug fixes:
- Fixed a bug that caused topology operations (union, intersection
and difference) on MaskGrids to sometimes produce incorrect results.
(MaskGrids are used internally in a number of tools.)
- Changed GridBase::copyGrid() and Grid::copy() to close
const-correctness holes.
- tools::fillWithSpheres() now returns an empty list of spheres
instead of crashing when the user selects an isosurface that lies
outside the bounding volume's narrow band.
- Fixed a null pointer dereference when copying grids that were loaded
with io::File::readGridPartial().
[Reported by Nick Avramoussis]
ABI changes:
- Added a NodeUnion template specialization for non-POD value types
that significantly expedites construction and destruction
of vector-valued grids.
- Changed math::Coord's internal data representation.
- Replaced occurrences of boost::shared_ptr with std::shared_ptr.
- Changed GridBase::copyGrid() and Grid::copy() to close
const-correctness holes.
- Added virtual function Tree::unallocatedLeafCount().
API changes:
- Introduced some C++11 constructs. A C++11-compatible compiler
is now required.
- Added a parameter to the point scattering tools to control the
displacement of each point from the center of its host voxel or tile.
The default behavior, as before, is to allow each point to be placed
(randomly) anywhere within its voxel or tile.
- Renamed LeafManager::getPreFixSum() to LeafManager::getPrefixSum().
- Made LeafNode::Buffer a top-level class and renamed it to LeafBuffer.
[Contributed by Double Negative]
- Deprecated io::File::readGridPartial() in favor of delayed loading.
- tools::ClosestSurfacePoint::initialize() now returns a boolean
indicating whether initialization was successful.
- Dropped the CopyPolicy enum and added GridBase::copyGridWithNewTree()
and Grid::copyWithNewTree() in order to close const-correctness holes
that allowed newly-constructed, non-const grids to share their trees
with existing const grids. (Where that behavior is still required,
use a ConstPtrCast.)
Python:
- Fixed a build issue with Python 3 and NumPy.
[Contributed by Jonathan Scruggs]
Houdini:
- Certain changes in this release (see "ABI changes" above) alter
the grid ABI so that it is incompatible with earlier versions of the
OpenVDB library, such as the ones built into Houdini 15, 15.5 and 16.
To disable these changes and preserve ABI compatibility, define
the macro OPENVDB_3_ABI_COMPATIBLE when compiling OpenVDB
or any code that depends on OpenVDB.
- Introduced some C++11 constructs that are incompatible with
versions of Houdini older than 15.0.
- Fixed a bug in the Rasterize Points SOP that caused vector-valued
attributes to be transferred as scalars.
[Contributed by Double Negative]
- Added a toggle to the Clip SOP to invert the clipping mask.
- Added a slider to the Scatter SOP to specify how far each point
may be displaced from the center of its host voxel or tile.
Version 3.2.0 - August 10, 2016
Highlights:
- New features: tool to produce and store a sequences of progressively
lower resolution grids (mipmaps), an acceleration structure for fast
range and nearest-neighbor searches on particles, arbitrary volume
and level set specific segmentation tools, a new binary mask grid
type and an efficient point to level set conversion scheme.
- Optimizations: Faster volume to mesh conversion and threaded grid
destruction, morphological dilation, csg operations and fracture tool.
- New Houdini nodes: Segment, LOD and Topology To Level Set.
New features:
- Added tools::MultiResGrid a tool to produce and store a sequences
of progressively lower resolution grids (mipmaps).
- Added tools::ParticleAtlas an acceleration structure for fast range
and nearest-neighbor searches on particles, points with radius.
- Added tools::segmentActiveVoxels(), which operates on grids of arbitrary
type and separates connected components of a grid's active voxels into
distinct grids or trees.
- Added tools::segmentSDF(), which separates disjoint signed-distance-field
surfaces into distinct grids or trees.
- Added tools::extractActiveVoxelSegmentMasks(), which constructs a mask
for each connected component of a grid's active voxels.
- Added threaded level-set CSG tools csgUnionCopy(), csgIntersectionCopy()
and csgDifferenceCopy(), which, unlike the existing CSG tools, produce
new grids rather than modifying their input grids. These new tools are
faster and use less memory than the existing tools (if only because the
input grids never need to be deep-copied).
- Added a threaded dilateActiveValues() tool with tile value support.
- Added tools::PointsToMask, which activates voxels that intersect
points from a given list.
- Added a new MaskGrid type that uses a single bit-field to represent both
voxel values and states for the leafnode to reduce memory usage.
- Added tools::topologyToLevelSet(), which generates a level set from the
implicit boundary between active and inactive voxels in an input grid
of arbitrary type.
- Added tools::LevelSetPlatonic a new tool that produces narrow-band
level sets of the five Platonic solids.
- Added tools::extractIsosurfaceMask() which masks voxels that intersect
the implicit surface defined by the given isovalue.
- Added tree::LeafManager::getPreFixSum() for user-managed external buffers.
- Added tools::Dense::print().
- Added the math::CoordBBox::Iterator class to conveniently iterate over
coordinates covered a CoordBBox.
- Added bit-wise operations, a component-wise constructor, and a
getCornerPoints() method to the CoordBBox class.
- Added a new LeafManager constructor to create the structure from an
existing array of leafnodes.
- Added the templated math::MinMax class to compute the extrema of
arbitrary value types.
- Added sparseFill and denseFill methods to the Grid, Tree and RootNode classes.
Improvements:
- Complete overhaul of the VolumeToMesh tool brings significant performance
improvements and enhanced region masking, tile support and bool volume
surfacing.
- Improved the performance, parallel scaling and memory usage,
of tools::LevelSetFracture and updated to use the new segmentSDF scheme.
- Improved the performance of tools::LevelSetAdvection by up to five times.
- Improved the performance of Tree::voxelizeActiveTiles by means of
multithreading.
- Improved the performance of tools::meshToVolume(), particularly for
large narrow-band widths and for signed distance fields with dense
interior regions.
- Threaded the Tree destructor and the Tree::clear() method.
- Added a parameter to tools::signedFloodFill() and to
tools::signedFloodFillWithValues() to constrain the flood fill
to specific levels of the tree.
- Added active tile count to Tree::print.
- Improved the API of tools::Dense with non-const access methods.
- Added LeafManager::reduce and similar methods to NodeManager.
[Contributed by Brett Tully]
- Improved constructors of math::Mat3 and math::Mat4.
- Added math::Mat3::cofactor().
- Added math::Mat3::setRows, math::Mat4::setRows,
math::Mat3::setColumns Mat3::setColumns, and
math::Mat4::setColumns.
- Added util::NodeMask::isConstant method for faster bit processing.
- For better robustness, tools::Prune now uses the median of voxel values
when replacing voxels with a tile.
- Added a toggle to tools::PointPartitioner to select between
cell-centered and node-centered transforms.
Bug fixes:
- Fixed a bug in tools::LevelSetAdvection that could cause
non-deterministic behavior.
[Reported by Jeff Lait]
- Fixed a bug that allowed for unexpected implicit conversion
between grids of different value types.
- Fixed a bug whereby the origins of leaf nodes with value type bool
were ignored during equality comparisons.
- tools::GridTransformer now correctly handles affine transforms with
shear and/or reflection.
- Fixed a bug in tools::meshToVolume() that could produce
incorrect distances for large narrow-band widths.
- Fixed a bug in tools::meshToVolume() that produced different results on
machines with different core counts.
- Fixed a threading bug in tools::compReplace() that could cause crashes.
- Resolved a floating-point exception in math::QuantizedUnitVec::pack()
caused by calling the method with a zero-length vector.
[Contributed by Rick Hankins]
- Fixed a potential threading bug in io::Queue.
[Contributed by Josip Sumecki]
- Fixed a possible division-by-zero bug in openvdb/tools/LevelSetAdvect.h.
[Contributed by Rick Hankins]
- Corrected the outer product method to not return the transpose result.
[Contributed by Gergely Klar]
- Fixed a memory overallocation issue in tools::VolumeAdvect.
- Fix bug in tools::VolumeToMesh failing to clear its state when exiting
early.