Geometry Nodes: SDF Volume nodes milestone 1 Adds initial support for SDF volume creation and manipulation. `SDF volume` is Blender's name of an OpenVDB grid of type Level Set. See the discussion about naming in #91668. The new nodes are: - Mesh to SDF Volume: Converts a mesh to an SDF Volume - Points to SDF Volume: Converts points to an SDF Volume - Mean Filter SDF Volume: Applies a Mean Filter to an SDF - Offset SDF Volume: Applies an offset to an SDF - SDF Volume Sphere: Creates an SDF Volume in the shape of a sphere For now an experimental option `New Volume Nodes` needs to be enabled in Blender preferences for the nodes to be visible. See the current work plan for Volume Nodes in #103248. Pull Request: blender/blender#105090
61 lines
1.9 KiB
C++
61 lines
1.9 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#include "BLI_function_ref.hh"
|
|
#include "BLI_math_matrix_types.hh"
|
|
#include "BLI_string_ref.hh"
|
|
|
|
#include "DNA_mesh_types.h"
|
|
#include "DNA_meshdata_types.h"
|
|
#include "DNA_modifier_types.h"
|
|
|
|
#pragma once
|
|
|
|
struct Volume;
|
|
struct VolumeGrid;
|
|
struct Depsgraph;
|
|
|
|
/** \file
|
|
* \ingroup geo
|
|
*/
|
|
|
|
namespace blender::geometry {
|
|
|
|
struct MeshToVolumeResolution {
|
|
MeshToVolumeModifierResolutionMode mode;
|
|
union {
|
|
float voxel_size;
|
|
float voxel_amount;
|
|
} settings;
|
|
};
|
|
|
|
#ifdef WITH_OPENVDB
|
|
|
|
/**
|
|
* \param bounds_fn: Return the bounds of the mesh positions,
|
|
* used for deciding the voxel size in "Amount" mode.
|
|
*/
|
|
float volume_compute_voxel_size(const Depsgraph *depsgraph,
|
|
FunctionRef<void(float3 &r_min, float3 &r_max)> bounds_fn,
|
|
MeshToVolumeResolution resolution,
|
|
float exterior_band_width,
|
|
const float4x4 &transform);
|
|
/**
|
|
* Add a new fog VolumeGrid to the Volume by converting the supplied mesh.
|
|
*/
|
|
VolumeGrid *fog_volume_grid_add_from_mesh(Volume *volume,
|
|
StringRefNull name,
|
|
const Mesh *mesh,
|
|
const float4x4 &mesh_to_volume_space_transform,
|
|
float voxel_size,
|
|
bool fill_volume,
|
|
float exterior_band_width,
|
|
float interior_band_width,
|
|
float density);
|
|
/**
|
|
* Add a new SDF VolumeGrid to the Volume by converting the supplied mesh.
|
|
*/
|
|
VolumeGrid *sdf_volume_grid_add_from_mesh(
|
|
Volume *volume, StringRefNull name, const Mesh &mesh, float voxel_size, float half_band_width);
|
|
#endif
|
|
} // namespace blender::geometry
|