Blender V4.3
volume_grid_resample.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifdef WITH_OPENVDB
6
7# include "BKE_volume_grid.hh"
8
10
11# include <openvdb/openvdb.h>
12# include <openvdb/tools/GridTransformer.h>
13
14namespace blender::geometry {
15
16openvdb::FloatGrid &resample_sdf_grid_if_necessary(bke::VolumeGrid<float> &volume_grid,
17 bke::VolumeTreeAccessToken &tree_token,
18 const openvdb::math::Transform &transform,
19 std::shared_ptr<openvdb::FloatGrid> &storage)
20{
21 const openvdb::FloatGrid &grid = volume_grid.grid(tree_token);
22 if (grid.transform() == transform) {
23 return volume_grid.grid_for_write(tree_token);
24 }
25
26 storage = openvdb::FloatGrid::create();
27 storage->setTransform(transform.copy());
28
29 /* TODO: Using #doResampleToMatch when the transform is affine and non-scaled may be faster. */
30 openvdb::tools::resampleToMatch<openvdb::tools::BoxSampler>(grid, *storage);
31 openvdb::tools::pruneLevelSet(storage->tree());
32
33 return *storage;
34}
35
36} // namespace blender::geometry
37
38#endif