|
| 1 | +Minutes from 156th OpenVDB TSC meeting, November 29th, 2022 |
| 2 | + |
| 3 | +Attendees: *Jeff* L., *Andre* P, *Dan* B., *Ken* M., *Nick* A. |
| 4 | + |
| 5 | +Additional Attendees: Tomas Skrivan (SideFX), Greg Hurst (United Therapeutics), |
| 6 | +Sebastian Gaida, Robin Rowe |
| 7 | + |
| 8 | +Regrets: *Rich* J. |
| 9 | + |
| 10 | +Agenda: |
| 11 | + |
| 12 | +1) Confirm quorum |
| 13 | +2) Secretary |
| 14 | +3) Unitialized Point Flags in VolumeToMesh (PR1523) |
| 15 | +4) NanoVDB Static Asserts (PR1522) |
| 16 | +5) Hollow Mesh (PR1525) |
| 17 | +6) Next meeting |
| 18 | + |
| 19 | +------------ |
| 20 | + |
| 21 | +1) Confirm quorum |
| 22 | + |
| 23 | +Quorum is present. |
| 24 | + |
| 25 | +2) Secretary |
| 26 | + |
| 27 | +Secretary is Dan Bailey. |
| 28 | + |
| 29 | +3) Unitialized Point Flags in VolumeToMesh (PR1523) |
| 30 | + |
| 31 | +Jeff has tracked down a bug where point flags can be uninitialized in the |
| 32 | +VolumeToMesh tool as a result of changing one of the arrays into std::array |
| 33 | +recently. |
| 34 | + |
| 35 | +Nick has reviewed and offers to do a 10.0.1 bugfix release for this issue. |
| 36 | + |
| 37 | +4) NanoVDB Static Asserts (PR1522) |
| 38 | + |
| 39 | +Jeff wants to switch on the NanoVDB static asserts as there are compiler |
| 40 | +warnings when using Clang15 due to the nullptr checks. |
| 41 | + |
| 42 | +5) Hollow Mesh (PR1525) |
| 43 | + |
| 44 | +Tomas Skrivan from SideFX presents a proposed new hollow mesh addition to VDB. |
| 45 | +This is to try and resolve issues arising from converting a level set volume to |
| 46 | +a mesh using the VolumeToMesh tool. Specifically, any internal structure can be |
| 47 | +erased by the signed flood fill. One application where this has been shown to |
| 48 | +be a problem is bubbles inside a water surface. |
| 49 | + |
| 50 | +This is particularly noticeable in the Houdini VDB integration as there are a |
| 51 | +lot of places where an implicit rebuild is performed resulting in internal |
| 52 | +structure being silently eliminated due to the volume->mesh->volume |
| 53 | +conversion. |
| 54 | + |
| 55 | +This feature introduces a new oracle to the VolumeToMesh tool so as to be able |
| 56 | +to provide different ways to deduce the correct sign. An example provided in |
| 57 | +the implementation is simply checking the sign of the original input volume. |
| 58 | + |
| 59 | +One of the big questions is what the default behavior should be and whether this |
| 60 | +needs to be an opt-in improvement or not. Jeff thinks this should be considered |
| 61 | +a bug and the behavior changed to address this issue. Ken mentions that |
| 62 | +sometimes users rely on the current behavior to intentionally clean up internal |
| 63 | +structure. Question of default is more one for SideFX to make the final call |
| 64 | +on. |
| 65 | + |
| 66 | +The new SideFX implementation uses winding numbers functionality which is |
| 67 | +currently unreleased until the next major Houdini release. An earlier version |
| 68 | +of the code has been released as open-source and shared through a Siggraph |
| 69 | +presentation. Means that there is functionality available in Houdini that is |
| 70 | +not available in the native VDB library. A generic winding numbers |
| 71 | +implementation would be a welcome addition to VDB, but shouldn't hold up |
| 72 | +getting this feature in. |
| 73 | + |
| 74 | +In terms of performance, this feature lies somewhere in the range of a few |
| 75 | +percent up to 20-30% decrease in performance when enabled depending on the |
| 76 | +exact situation. Tomas shows a number of cases where this new algorithm does a |
| 77 | +better job than the current algorithm. Question from Greg about whether it |
| 78 | +resolves an earlier question he had about incorrect results when trying to |
| 79 | +resolve a thin tube of a few voxels wide that intersects a box. Tomas |
| 80 | +demonstrates that it is a significant improvement on the existing algorithm for |
| 81 | +this case. Extending the existing algorthm to consider a larger stencil pattern |
| 82 | +of 26 neighbors instead of 6 neighbours would also be expected to improve |
| 83 | +results at greater computational cost. |
| 84 | + |
| 85 | +Remaining aspect to resolve is how to expose this in the API. The use of an |
| 86 | +oracle in the existing proposal means that explicit template instantiation |
| 87 | +cannot be used. Given the complexity and instantiation cost of the current |
| 88 | +algorithm, this is a concern. Worth checking if using a std::function argument |
| 89 | +instead of a template argument would significantly affect the performance, |
| 90 | +particularly for the case where the oracle is being checked only once every |
| 91 | +tile. A std::function argument would allow the use of explicit template |
| 92 | +instantiation once more, another option is to refactor the method so that |
| 93 | +portions of the algorithm could still be explicitly instantiated. |
| 94 | + |
| 95 | +CI checks are failing due to issues with explicit template instantiation. This |
| 96 | +implementation is also missing unit tests currently. All in favor of working |
| 97 | +towards resolving these issues so that this very worthwhile improvement can be |
| 98 | +included in OpenVDB. |
| 99 | + |
| 100 | +6) Next meeting |
| 101 | + |
| 102 | +Next meeting is on December 6th, 2022. 2pm-3pm EDT (GMT-4). |
0 commit comments