[Bf-blender-cvs] [8100721dab8] temp-deform-curves-with-surface: support translation

Jacques Lucke noreply at git.blender.org
Wed Jun 22 17:31:06 CEST 2022


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. @@



More information about the Bf-blender-cvs mailing list