Commit: 8100721dab8ad2c66762dad7332b359b3ae26210 Author: Jacques Lucke Date: Wed Jun 22 12:40:40 2022 +0200 Branches: temp-deform-curves-with-surface https://developer.blender.org/rB8100721dab8ad2c66762dad7332b359b3ae26210
support translation =================================================================== M release/scripts/startup/nodeitems_builtins.py M source/blender/blenkernel/BKE_node.h M source/blender/blenkernel/intern/node.cc M source/blender/nodes/NOD_geometry.h M source/blender/nodes/NOD_static_types.h M source/blender/nodes/geometry/CMakeLists.txt D source/blender/nodes/geometry/nodes/node_geo_deform_curves_with_surface.cc A source/blender/nodes/geometry/nodes/node_geo_sample_mesh_deformation.cc =================================================================== diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index f4acc71a6da..1187927a9e8 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -80,7 +80,6 @@ def curve_node_items(context): yield NodeItem("GeometryNodeSampleCurve") yield NodeItem("GeometryNodeSubdivideCurve") yield NodeItem("GeometryNodeTrimCurve") - yield NodeItem("GeometryNodeDeformCurvesWithSurface") yield NodeItemCustom(draw=lambda self, layout, context: layout.separator()) yield NodeItem("GeometryNodeInputCurveHandlePositions") yield NodeItem("GeometryNodeInputTangent") @@ -114,6 +113,7 @@ def mesh_node_items(context): yield NodeItem("GeometryNodeMeshBoolean") yield NodeItem("GeometryNodeMeshToCurve") yield NodeItem("GeometryNodeMeshToPoints") + yield NodeItem("GeometryNodeSampleMeshDeformation") yield NodeItem("GeometryNodeSplitEdges") yield NodeItem("GeometryNodeSubdivideMesh") yield NodeItem("GeometryNodeSubdivisionSurface") diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 5917f9b88d7..e6bea7b23fe 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -1496,7 +1496,7 @@ struct TexResult; #define GEO_NODE_INPUT_INSTANCE_ROTATION 1159 #define GEO_NODE_INPUT_INSTANCE_SCALE 1160 #define GEO_NODE_VOLUME_CUBE 1161 -#define GEO_NODE_DEFORM_CURVES_WITH_SURFACE 1162 +#define GEO_NODE_SAMPLE_MESH_DEFORMATION 1162 /** \} */ diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index d4d14ca45be..7b7ad3fe4b4 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -4749,7 +4749,6 @@ static void registerGeometryNodes() register_node_type_geo_curve_to_mesh(); register_node_type_geo_curve_to_points(); register_node_type_geo_curve_trim(); - register_node_type_geo_deform_curves_with_surface(); register_node_type_geo_delete_geometry(); register_node_type_geo_duplicate_elements(); register_node_type_geo_distribute_points_on_faces(); @@ -4812,6 +4811,7 @@ static void registerGeometryNodes() register_node_type_geo_realize_instances(); register_node_type_geo_remove_attribute(); register_node_type_geo_rotate_instances(); + register_node_type_geo_sample_mesh_deformation(); register_node_type_geo_scale_elements(); register_node_type_geo_scale_instances(); register_node_type_geo_separate_components(); diff --git a/source/blender/nodes/NOD_geometry.h b/source/blender/nodes/NOD_geometry.h index b9da2b17319..f0856e3b44a 100644 --- a/source/blender/nodes/NOD_geometry.h +++ b/source/blender/nodes/NOD_geometry.h @@ -47,7 +47,6 @@ void register_node_type_geo_curve_subdivide(void); void register_node_type_geo_curve_to_mesh(void); void register_node_type_geo_curve_to_points(void); void register_node_type_geo_curve_trim(void); -void register_node_type_geo_deform_curves_with_surface(void); void register_node_type_geo_delete_geometry(void); void register_node_type_geo_duplicate_elements(void); void register_node_type_geo_distribute_points_on_faces(void); @@ -110,6 +109,7 @@ void register_node_type_geo_raycast(void); void register_node_type_geo_realize_instances(void); void register_node_type_geo_remove_attribute(void); void register_node_type_geo_rotate_instances(void); +void register_node_type_geo_sample_mesh_deformation(void); void register_node_type_geo_scale_elements(void); void register_node_type_geo_scale_instances(void); void register_node_type_geo_select_by_handle_type(void); diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 54336ac65d0..ac78b75fe99 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -399,7 +399,7 @@ DefNode(GeometryNode, GEO_NODE_TRIM_CURVE, def_geo_curve_trim, "TRIM_CURVE", Tri DefNode(GeometryNode, GEO_NODE_VIEWER, def_geo_viewer, "VIEWER", Viewer, "Viewer", "") DefNode(GeometryNode, GEO_NODE_VOLUME_CUBE, 0, "VOLUME_CUBE", VolumeCube, "Volume Cube", "") DefNode(GeometryNode, GEO_NODE_VOLUME_TO_MESH, def_geo_volume_to_mesh, "VOLUME_TO_MESH", VolumeToMesh, "Volume to Mesh", "") -DefNode(GeometryNode, GEO_NODE_DEFORM_CURVES_WITH_SURFACE, 0, "DEFORM_CURVES_WITH_SURFACE", DeformCurvesWithSurface, "Deform Curves with Surface", "") +DefNode(GeometryNode, GEO_NODE_SAMPLE_MESH_DEFORMATION, 0, "SAMPLE_MESH_DEFORMATION", SampleMeshDeformation, "Sample Mesh Deformation", "") /* undefine macros */ #undef DefNode diff --git a/source/blender/nodes/geometry/CMakeLists.txt b/source/blender/nodes/geometry/CMakeLists.txt index fba13db0a49..02db28fd9d2 100644 --- a/source/blender/nodes/geometry/CMakeLists.txt +++ b/source/blender/nodes/geometry/CMakeLists.txt @@ -57,7 +57,6 @@ set(SRC nodes/node_geo_curve_to_mesh.cc nodes/node_geo_curve_to_points.cc nodes/node_geo_curve_trim.cc - nodes/node_geo_deform_curves_with_surface.cc nodes/node_geo_delete_geometry.cc nodes/node_geo_distribute_points_on_faces.cc nodes/node_geo_dual_mesh.cc @@ -120,6 +119,7 @@ set(SRC nodes/node_geo_realize_instances.cc nodes/node_geo_remove_attribute.cc nodes/node_geo_rotate_instances.cc + nodes/node_geo_sample_mesh_deformation.cc nodes/node_geo_scale_elements.cc nodes/node_geo_scale_instances.cc nodes/node_geo_separate_components.cc diff --git a/source/blender/nodes/geometry/nodes/node_geo_deform_curves_with_surface.cc b/source/blender/nodes/geometry/nodes/node_geo_deform_curves_with_surface.cc deleted file mode 100644 index b3c7ec8fb9c..00000000000 --- a/source/blender/nodes/geometry/nodes/node_geo_deform_curves_with_surface.cc +++ /dev/null @@ -1,168 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ - -#include "BKE_curves.hh" -#include "BKE_mesh_runtime.h" -#include "BKE_spline.hh" - -#include "BLI_task.hh" - -#include "UI_interface.h" -#include "UI_resources.h" - -#include "DNA_mesh_types.h" -#include "DNA_meshdata_types.h" - -#include "NOD_socket_search_link.hh" - -#include "node_geometry_util.hh" - -namespace blender::nodes::node_geo_deform_curves_with_surface_cc { - -using blender::attribute_math::mix2; - -NODE_STORAGE_FUNCS(NodeGeometryCurveTrim) - -static void node_declare(NodeDeclarationBuilder &b) -{ - b.add_input<decl::Geometry>(N_("Curves")).supported_type(GEO_COMPONENT_TYPE_CURVE); - b.add_input<decl::Geometry>(N_("Mesh")).supported_type(GEO_COMPONENT_TYPE_MESH); - b.add_input<decl::Vector>(N_("Rest Position")).hide_value().supports_field(); - b.add_output<decl::Geometry>(N_("Curves")); -} - -static void node_layout(uiLayout *UNUSED(layout), bContext *UNUSED(C), PointerRNA *UNUSED(ptr)) -{ -} - -static void node_init(bNodeTree *UNUSED(tree), bNode *UNUSED(node)) -{ -} - -static void node_update(bNodeTree *UNUSED(ntree), bNode *UNUSED(node)) -{ -} - -static void deform_curves(const MeshComponent &mesh_component, - const Span<float3> rest_positions, - CurveComponent &curves_component) -{ - bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap( - curves_component.get_for_write()->geometry); - - const MutableSpan<float3> positions = curves.positions_for_write(); - const VArray<int> surface_triangle_indices_varray = curves.surface_triangle_indices(); - if (surface_triangle_indices_varray.is_single() && - surface_triangle_indices_varray.get_internal_single() < 0) { - return; - } - const VArray_Span<int> surface_triangle_indices{surface_triangle_indices_varray}; - const Span<float2> surface_triangle_coordinates = curves.surface_triangle_coords(); - if (surface_triangle_coordinates.is_empty()) { - return; - } - - const Mesh &mesh = *mesh_component.get_for_read(); - const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh), - BKE_mesh_runtime_looptri_len(&mesh)}; - - threading::parallel_for(curves.curves_range(), 512, [&](const IndexRange curves_range) { - for (const int curve_i : curves_range) { - const int looptri_i = surface_triangle_indices[curve_i]; - if (looptri_i < 0 || looptri_i >= looptris.size()) { - continue; - } - const IndexRange points = curves.points_for_curve(curve_i); - const int root_point_i = points[0]; - - const float3 bary_coord = bke::curves::decode_surface_bary_coord( - surface_triangle_coordinates[curve_i]); - const MLoopTri &looptri = looptris[looptri_i]; - const int v0 = mesh.mloop[looptri.tri[0]].v; - const int v1 = mesh.mloop[looptri.tri[1]].v; - const int v2 = mesh.mloop[looptri.tri[2]].v; - - const float3 &rest_v0 = rest_positions[v0]; - const float3 &rest_v1 = rest_positions[v1]; - const float3 &rest_v2 = rest_positions[v2]; - - const float3 &deformed_v0 = mesh.mvert[v0].co; - const float3 &deformed_v1 = mesh.mvert[v1].co; - const float3 &deformed_v2 = mesh.mvert[v2].co; - - float3 old_normal; - normal_tri_v3(old_normal, rest_v0, rest_v1, rest_v2); - float3 new_normal; - normal_tri_v3(new_normal, deformed_v0, deformed_v1, deformed_v2); - - /* TODO: Take tangend axis into account as well. */ - float rotation_mat[3][3]; - rotation_between_vecs_to_mat3(rotation_mat, old_normal, new_normal); - - const float3 old_curve_root = positions[root_point_i]; - const float3 old_surface_pos = attribute_math::mix3(bary_coord, rest_v0, rest_v1, rest_v2); - const float3 new_surface_pos = attribute_math::mix3( - bary_coord, deformed_v0, deformed_v1, deformed_v2); - const float3 root_pos_diff = new_surface_pos - old_surface_pos; - - for (const int point_i : points) { - const float3 old_pos = positions[point_i]; - const float3 old_relative_pos = old_pos - old_surface_pos; - float3 new_relative_pos = old_relative_pos; - mul_m3_v3(rotation_mat, new_relative_pos); - const float3 new_pos = new_surface_pos + new_relative_pos; - positions[point_i] = new_pos; - } - } - }); - - curves.tag_positions_changed(); -} - -static void n @@ Diff output truncated at 10240 characters. @@ _______________________________________________ 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