Commit: c8c64d4081f7649bdc2b2dab98415db88ccda07e Author: Hans Goudey Date: Wed Aug 11 09:20:10 2021 -0500 Branches: geometry-nodes-level-set-nodes https://developer.blender.org/rBc8c64d4081f7649bdc2b2dab98415db88ccda07e
Make sure non-procedural volumes are loaded, add debug timers =================================================================== M source/blender/modifiers/intern/MOD_mesh_to_volume.cc M source/blender/nodes/geometry/nodes/node_geo_level_set_boolean.cc M source/blender/nodes/geometry/nodes/node_geo_level_set_filter.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_to_level_set.cc M source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc M source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc =================================================================== diff --git a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc index c9030f1969d..774249a794a 100644 --- a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc +++ b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc @@ -49,6 +49,7 @@ #include "BLI_float4x4.hh" #include "BLI_index_range.hh" #include "BLI_span.hh" +#include "BLI_timeit.hh" #include "RNA_access.h" @@ -222,6 +223,9 @@ static Volume *mesh_to_volume(ModifierData *md, if (mesh == nullptr) { return input_volume; } + + SCOPED_TIMER(__func__); + BKE_mesh_wrapper_ensure_mdata(mesh); const float4x4 mesh_to_own_object_space_transform = float4x4(ctx->object->imat) * diff --git a/source/blender/nodes/geometry/nodes/node_geo_level_set_boolean.cc b/source/blender/nodes/geometry/nodes/node_geo_level_set_boolean.cc index 8fe5ce2baa0..4ca59d691c5 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_level_set_boolean.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_level_set_boolean.cc @@ -25,6 +25,8 @@ #include "UI_interface.h" #include "UI_resources.h" +#include "DEG_depsgraph_query.h" + #include "node_geometry_util.hh" static bNodeSocketTemplate geo_node_level_set_boolean_in[] = { @@ -134,6 +136,8 @@ static void geo_node_level_set_boolean_exec(GeoNodeExecParams params) *(const NodeGeometryLevelSetBoolean *)params.node().storage; const GeometryNodeBooleanOperation operation = (GeometryNodeBooleanOperation)storage.operation; + SCOPED_TIMER(__func__); + Volume *volume_a = geometry_set_a.get_volume_for_write(); const Volume *volume_b = geometry_set_b.get_volume_for_read(); if (volume_a == nullptr || volume_b == nullptr) { @@ -141,6 +145,10 @@ static void geo_node_level_set_boolean_exec(GeoNodeExecParams params) return; } + const Main *bmain = DEG_get_bmain(params.depsgraph()); + BKE_volume_load(volume_a, bmain); + BKE_volume_load(volume_b, bmain); + level_set_boolean(*volume_a, *volume_b, operation, params); #else params.error_message_add(NodeWarningType::Error, diff --git a/source/blender/nodes/geometry/nodes/node_geo_level_set_filter.cc b/source/blender/nodes/geometry/nodes/node_geo_level_set_filter.cc index 535d023636c..9740b1d3ac9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_level_set_filter.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_level_set_filter.cc @@ -21,12 +21,11 @@ #include "BKE_volume.h" -#include "DNA_mesh_types.h" -#include "DNA_meshdata_types.h" - #include "UI_interface.h" #include "UI_resources.h" +#include "DEG_depsgraph_query.h" + #include "node_geometry_util.hh" static bNodeSocketTemplate geo_node_level_set_filter_in[] = { @@ -149,6 +148,9 @@ static void geo_node_level_set_filter_exec(GeoNodeExecParams params) return; } + const Main *bmain = DEG_get_bmain(params.depsgraph()); + BKE_volume_load(volume, bmain); + const NodeGeometryLevelSetFilter &data = *(const NodeGeometryLevelSetFilter *)params.node().storage; const GeometryNodeFilterOperation operation = (GeometryNodeFilterOperation)data.operation; diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_to_level_set.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_to_level_set.cc index 17930904791..dbf7d8e7434 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_to_level_set.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_to_level_set.cc @@ -94,9 +94,12 @@ static openvdb::FloatGrid::Ptr meshes_to_level_set_grid( // openvdb::math::Transform::Ptr transform = openvdb::math::Transform::createLinearTransform( // voxel_size); - openvdb::FloatGrid::Ptr grid = openvdb::tools::meshToLevelSet<openvdb::FloatGrid>( - {}, positions, triangles, 1.0f); - grid->transform().postScale(voxel_size); + openvdb::FloatGrid::Ptr grid; + { + SCOPED_TIMER(" mesh_to_level_set_only_openvdb"); + grid = openvdb::tools::meshToLevelSet<openvdb::FloatGrid>({}, positions, triangles); + grid->transform().postScale(voxel_size); + } return grid; } @@ -121,6 +124,8 @@ static void geo_node_mesh_to_level_set_exec(GeoNodeExecParams params) { GeometrySet geometry_set = params.extract_input<GeometrySet>("Mesh"); + SCOPED_TIMER(__func__); + Vector<GeometryInstanceGroup> set_groups; bke::geometry_set_gather_instances(geometry_set, set_groups); if (set_groups.is_empty()) { @@ -136,6 +141,11 @@ static void geo_node_mesh_to_level_set_exec(GeoNodeExecParams params) } } + if (set_groups.is_empty()) { + params.set_output("Level Set", GeometrySet()); + return; + } + GeometrySet geometry_set_out; #ifdef WITH_OPENVDB const float voxel_size = params.get_input<float>("Voxel Size"); diff --git a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc index 91e268392dc..e920efffb27 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc @@ -30,7 +30,6 @@ static bNodeSocketTemplate geo_node_points_to_volume_in[] = { {SOCK_GEOMETRY, N_("Geometry")}, - {SOCK_FLOAT, N_("Density"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, FLT_MAX}, {SOCK_FLOAT, N_("Voxel Size"), 0.3f, 0.0f, 0.0f, 0.0f, 0.01f, FLT_MAX, PROP_DISTANCE}, {SOCK_FLOAT, N_("Voxel Amount"), 64.0f, 0.0f, 0.0f, 0.0f, 0.0f, FLT_MAX}, {SOCK_STRING, N_("Radius")}, @@ -112,8 +111,7 @@ struct ParticleList { } // namespace static openvdb::FloatGrid::Ptr generate_volume_from_points(const Span<float3> positions, - const Span<float> radii, - const float density) + const Span<float> radii) { /* Create a new grid that will be filled. #ParticlesToLevelSet requires the background value to * be positive. It will be set to zero later on. */ @@ -128,15 +126,6 @@ static openvdb::FloatGrid::Ptr generate_volume_from_points(const Span<float3> po op.rasterizeSpheres(particles); op.finalize(); - /* Convert the level set to a fog volume. This also sets the background value to zero. Inside the - * fog there will be a density of 1. */ - openvdb::tools::sdfToFogVolume(*new_grid); - - /* Take the desired density into account. */ - openvdb::tools::foreach (new_grid->beginValueOn(), - [&](const openvdb::FloatGrid::ValueOnIter &iter) { - iter.modifyValue([&](float &value) { value *= density; }); - }); return new_grid; } @@ -233,9 +222,8 @@ static void initialize_volume_component_from_points(const GeometrySet &geometry_ openvdb::FloatGrid::Ptr density_grid = openvdb::gridPtrCast<openvdb::FloatGrid>( BKE_volume_grid_openvdb_for_write(volume, c_density_grid)); - const float density = params.get_input<float>("Density"); convert_to_grid_index_space(voxel_size, positions, radii); - openvdb::FloatGrid::Ptr new_grid = generate_volume_from_points(positions, radii, density); + openvdb::FloatGrid::Ptr new_grid = generate_volume_from_points(positions, radii); /* This merge is cheap, because the #density_grid is empty. */ density_grid->merge(*new_grid); density_grid->transform().postScale(voxel_size); @@ -267,7 +255,7 @@ void register_node_type_geo_points_to_volume() static bNodeType ntype; geo_node_type_base( - &ntype, GEO_NODE_POINTS_TO_VOLUME, "Points to Volume", NODE_CLASS_GEOMETRY, 0); + &ntype, GEO_NODE_POINTS_TO_VOLUME, "Points to Level Set", NODE_CLASS_GEOMETRY, 0); node_type_socket_templates(&ntype, geo_node_points_to_volume_in, geo_node_points_to_volume_out); node_type_storage(&ntype, "NodeGeometryPointsToVolume", diff --git a/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc index 4c1151bf6c2..25be548c035 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc @@ -94,6 +94,8 @@ static void create_mesh_from_volume(GeometrySet &geometry_set_in, return; } + SCOPED_TIMER(__func__); + const NodeGeometryVolumeToMesh &storage = *(const NodeGeometryVolumeToMesh *)params.node().storage; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs