[Bf-blender-cvs] [24cc552cf48] master: Geometry Nodes: Material Index, Set Material

Johnny Matthews noreply at git.blender.org
Wed Oct 13 15:41:45 CEST 2021


Commit: 24cc552cf48694b5ed07d885c0cc69220cbbe34b
Author: Johnny Matthews
Date:   Wed Oct 13 08:39:54 2021 -0500
Branches: master
https://developer.blender.org/rB24cc552cf48694b5ed07d885c0cc69220cbbe34b

Geometry Nodes: Material Index, Set Material

Add Get/Set Nodes for Material Index
Rename Assign Material to Set Material

Differential Revision: https://developer.blender.org/D12837

===================================================================

M	release/scripts/startup/nodeitems_builtins.py
M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.cc
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/nodes/CMakeLists.txt
M	source/blender/nodes/NOD_geometry.h
M	source/blender/nodes/NOD_static_types.h
A	source/blender/nodes/geometry/nodes/node_geo_input_material_index.cc
R087	source/blender/nodes/geometry/nodes/node_geo_material_assign.cc	source/blender/nodes/geometry/nodes/node_geo_set_material.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_material_index.cc

===================================================================

diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index f63e41b0c28..40afcc69bd2 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -180,6 +180,29 @@ def geometry_input_node_items(context):
     yield NodeItem("GeometryNodeInputPosition")
     yield NodeItem("GeometryNodeInputRadius")
 
+# Custom Menu for Material Node Input Nodes
+def geometry_material_node_items(context):
+    if context is None:
+        return
+    space = context.space_data
+    if not space:
+        return
+    if not space.edit_tree:
+        return
+
+    if geometry_nodes_legacy_poll(context):
+        yield NodeItem("GeometryNodeLegacyMaterialAssign")
+        yield NodeItem("GeometryNodeLegacySelectByMaterial")
+        yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+
+    yield NodeItem("GeometryNodeMaterialReplace")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeInputMaterialIndex")
+    yield NodeItem("GeometryNodeMaterialSelection")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeSetMaterial")
+    yield NodeItem("GeometryNodeSetMaterialIndex")
+
 # Custom Menu for Geometry Node Curves
 def point_node_items(context):
     if context is None:
@@ -662,14 +685,7 @@ geometry_node_categories = [
         NodeItem("GeometryNodeRealizeInstances"),
     ]),
     GeometryNodeCategory("GEO_INPUT", "Input", items=geometry_input_node_items),
-    GeometryNodeCategory("GEO_MATERIAL", "Material", items=[
-        NodeItem("GeometryNodeLegacyMaterialAssign", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacySelectByMaterial", poll=geometry_nodes_legacy_poll),
-
-        NodeItem("GeometryNodeMaterialAssign"),
-        NodeItem("GeometryNodeMaterialSelection"),
-        NodeItem("GeometryNodeMaterialReplace"),
-    ]),
+    GeometryNodeCategory("GEO_MATERIAL", "Material", items=geometry_material_node_items),
     GeometryNodeCategory("GEO_MESH", "Mesh", items=mesh_node_items),
     GeometryNodeCategory("GEO_PRIMITIVES_MESH", "Mesh Primitives", items=[
         NodeItem("GeometryNodeMeshCircle"),
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 81cf1ed180f..026b6574374 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1494,7 +1494,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_INPUT_NORMAL 1079
 #define GEO_NODE_ATTRIBUTE_CAPTURE 1080
 #define GEO_NODE_MATERIAL_SELECTION 1081
-#define GEO_NODE_MATERIAL_ASSIGN 1082
+#define GEO_NODE_SET_MATERIAL 1082
 #define GEO_NODE_REALIZE_INSTANCES 1083
 #define GEO_NODE_ATTRIBUTE_STATISTIC 1084
 #define GEO_NODE_CURVE_SAMPLE 1085
@@ -1530,6 +1530,8 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_SET_SPLINE_RESOLUTION 1115
 #define GEO_NODE_SET_SPLINE_CYCLIC 1116
 #define GEO_NODE_SET_POINT_RADIUS 1117
+#define GEO_NODE_INPUT_MATERIAL_INDEX 1118
+#define GEO_NODE_SET_MATERIAL_INDEX 1119
 
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 3e577bc29a3..46022b4f4c1 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5772,6 +5772,7 @@ static void registerGeometryNodes()
   register_node_type_geo_input_curve_tilt();
   register_node_type_geo_input_index();
   register_node_type_geo_input_material();
+  register_node_type_geo_input_material_index();
   register_node_type_geo_input_normal();
   register_node_type_geo_input_position();
   register_node_type_geo_input_radius();
@@ -5783,7 +5784,6 @@ static void registerGeometryNodes()
   register_node_type_geo_instance_on_points();
   register_node_type_geo_is_viewport();
   register_node_type_geo_join_geometry();
-  register_node_type_geo_material_assign();
   register_node_type_geo_material_replace();
   register_node_type_geo_material_selection();
   register_node_type_geo_mesh_primitive_circle();
@@ -5815,6 +5815,8 @@ static void registerGeometryNodes()
   register_node_type_geo_set_curve_handles();
   register_node_type_geo_set_curve_radius();
   register_node_type_geo_set_curve_tilt();
+  register_node_type_geo_set_material();
+  register_node_type_geo_set_material_index();
   register_node_type_geo_set_point_radius();
   register_node_type_geo_set_position();
   register_node_type_geo_set_shade_smooth();
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 617cd8b6c58..db2bb73108b 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -1746,5 +1746,20 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
    */
   {
     /* Keep this block, even when empty. */
+    LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
+      if (ntree->type != NTREE_GEOMETRY) {
+        continue;
+      }
+      LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+        if (node->type != GEO_NODE_SET_MATERIAL) {
+          continue;
+        }
+        if (strstr(node->idname, "SetMaterial")) {
+          /* Make sure we haven't changed this idname already. */
+          continue;
+        }
+        strcpy(node->idname, "GeometryNodeSetMaterial");
+      }
+    }
   }
 }
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index f22b890b243..aad61113e4c 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -224,6 +224,7 @@ set(SRC
   geometry/nodes/node_geo_input_curve_tilt.cc  
   geometry/nodes/node_geo_input_index.cc
   geometry/nodes/node_geo_input_material.cc
+  geometry/nodes/node_geo_input_material_index.cc
   geometry/nodes/node_geo_input_normal.cc
   geometry/nodes/node_geo_input_position.cc
   geometry/nodes/node_geo_input_radius.cc
@@ -235,7 +236,6 @@ set(SRC
   geometry/nodes/node_geo_instance_on_points.cc
   geometry/nodes/node_geo_is_viewport.cc
   geometry/nodes/node_geo_join_geometry.cc
-  geometry/nodes/node_geo_material_assign.cc
   geometry/nodes/node_geo_material_replace.cc
   geometry/nodes/node_geo_material_selection.cc
   geometry/nodes/node_geo_mesh_primitive_circle.cc
@@ -258,6 +258,8 @@ set(SRC
   geometry/nodes/node_geo_set_curve_handles.cc
   geometry/nodes/node_geo_set_curve_radius.cc
   geometry/nodes/node_geo_set_curve_tilt.cc  
+  geometry/nodes/node_geo_set_material.cc
+  geometry/nodes/node_geo_set_material_index.cc
   geometry/nodes/node_geo_set_point_radius.cc
   geometry/nodes/node_geo_set_position.cc
   geometry/nodes/node_geo_set_shade_smooth.cc
diff --git a/source/blender/nodes/NOD_geometry.h b/source/blender/nodes/NOD_geometry.h
index 2d409d6d80b..50142eeb559 100644
--- a/source/blender/nodes/NOD_geometry.h
+++ b/source/blender/nodes/NOD_geometry.h
@@ -92,6 +92,7 @@ void register_node_type_geo_input_curve_handles(void);
 void register_node_type_geo_input_curve_tilt(void);
 void register_node_type_geo_input_index(void);
 void register_node_type_geo_input_material(void);
+void register_node_type_geo_input_material_index(void);
 void register_node_type_geo_input_normal(void);
 void register_node_type_geo_input_position(void);
 void register_node_type_geo_input_radius(void);
@@ -103,7 +104,6 @@ void register_node_type_geo_input_tangent(void);
 void register_node_type_geo_instance_on_points(void);
 void register_node_type_geo_is_viewport(void);
 void register_node_type_geo_join_geometry(void);
-void register_node_type_geo_material_assign(void);
 void register_node_type_geo_material_replace(void);
 void register_node_type_geo_material_selection(void);
 void register_node_type_geo_mesh_primitive_circle(void);
@@ -136,6 +136,8 @@ void register_node_type_geo_separate_geometry(void);
 void register_node_type_geo_set_curve_handles(void);
 void register_node_type_geo_set_curve_radius(void);
 void register_node_type_geo_set_curve_tilt(void);
+void register_node_type_geo_set_material(void);
+void register_node_type_geo_set_material_index(void);
 void register_node_type_geo_set_point_radius(void);
 void register_node_type_geo_set_position(void);
 void register_node_type_geo_set_shade_smooth(void);
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index d4cc7b42292..30807073e06 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -352,6 +352,7 @@ DefNode(GeometryNode, GEO_NODE_INPUT_CURVE_HANDLES, 0, "INPUT_CURVE_HANDLES", In
 DefNode(GeometryNode, GEO_NODE_INPUT_CURVE_TILT, 0, "INPUT_CURVE_TILT", InputCurveTilt, "Curve Tilt", "")
 DefNode(GeometryNode, GEO_NODE_INPUT_INDEX, 0, "INDEX", InputIndex, "Index", "")
 DefNode(GeometryNode, GEO_NODE_INPUT_MATERIAL, def_geo_input_material, "INPUT_MATERIAL", InputMaterial, "Material", "")
+DefNode(GeometryNode, GEO_NODE_INPUT_MATERIAL_INDEX, 0, "INPUT_MATERIAL_INDEX", InputMaterialIndex, "Material Index", "")
 DefNode(GeometryNode, GEO_NODE_INPUT_NORMAL, 0, "INPUT_NORMAL", InputNormal, "Normal", "")
 DefNode(GeometryNode, GEO_NODE_INPUT_POSITION, 0, "POSITION", InputPosition, "Position", "")
 DefNode(GeometryNode, GEO_NODE_INPUT_RADIUS, 0, "INPUT_RADIUS", InputRadius, "Radius", "")
@@ -363,7 +364,6 @@ DefNode(GeometryNode, GEO_NODE_INPUT_TANGENT, 0, "INPUT_TANGENT", InputTangent,
 DefNode(GeometryNode, GEO_NODE_INSTANCE_ON_POINTS, 0, "INSTANCE_ON_POINTS", InstanceOnPoints, "Instance on Points", "")
 DefNode(GeometryNode, GEO_NODE_IS_VIEWPORT, 0, "IS_VIEWPORT", IsViewport, "Is Viewport", "")
 DefNode(GeometryNode, GEO_NODE_JOIN_GEOMETRY, 0, "JOIN_GEOMETRY", JoinGeometry, "Join Geometry", "")
-DefNode(GeometryNode, GEO_NODE_MATERIAL_ASSIGN, 0, "MATERIAL_ASSIGN", MaterialAssign, "Assign Material", "")
 DefNode(GeometryNode, GEO_NODE_MATERIAL_REPLACE, 0, "MATERIAL_REPLACE", MaterialReplace, "Replace Material", "")
 DefNode(GeometryNode, GEO_NODE_MATERIAL_SELECTION, 0, "MATERIAL_SELECTION", MaterialSelection, "Material Selection", "")
 DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIV

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list