From 20e0d912d3ca9b4731330b650182e941d0d1d4a2 Mon Sep 17 00:00:00 2001 From: Efty Sifakis Date: Mon, 31 Aug 2026 12:18:19 -0500 Subject: [PATCH] tools: fix wrong voxel offset in MeshToVolume checkNeighbours The mask[6] branch (i+1, j, k-1) checked data[pos + DIM*DIM], duplicating the mask[0] (i+1, j, k) offset instead of accounting for the k-1 step, unlike the analogous edge-neighbor branches immediately below it. Signed-off-by: Efty Sifakis --- openvdb/openvdb/tools/MeshToVolume.h | 2 +- pendingchanges/meshtovolumecheckneighboursoffset.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 pendingchanges/meshtovolumecheckneighboursoffset.txt diff --git a/openvdb/openvdb/tools/MeshToVolume.h b/openvdb/openvdb/tools/MeshToVolume.h index 2aac956e75..669ed621d7 100644 --- a/openvdb/openvdb/tools/MeshToVolume.h +++ b/openvdb/openvdb/tools/MeshToVolume.h @@ -1645,7 +1645,7 @@ checkNeighbours(const Index pos, const typename LeafNodeType::ValueType * data, // i + 1, j, k if (mask[0] && Compare::check(data[pos + NodeT::DIM * NodeT::DIM])) return true; // i+1, j, k-1 - if (mask[6] && Compare::check(data[pos + NodeT::DIM * NodeT::DIM])) return true; + if (mask[6] && Compare::check(data[pos + NodeT::DIM * NodeT::DIM - 1])) return true; // i-1, j, k-1 if (mask[7] && Compare::check(data[pos - NodeT::DIM * NodeT::DIM - 1])) return true; // i+1, j, k+1 diff --git a/pendingchanges/meshtovolumecheckneighboursoffset.txt b/pendingchanges/meshtovolumecheckneighboursoffset.txt new file mode 100644 index 0000000000..a98a68a26f --- /dev/null +++ b/pendingchanges/meshtovolumecheckneighboursoffset.txt @@ -0,0 +1,5 @@ +OpenVDB: + Bug Fixes: + - Fixed an incorrect voxel offset in MeshToVolume.h's checkNeighbours() that caused the + (i+1, j, k-1) edge-adjacent neighbor to be checked at the wrong location, duplicating + the (i+1, j, k) neighbor instead.