diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc index 0d9937de184..804be1b191f 100644 --- a/source/blender/editors/space_node/drawnode.cc +++ b/source/blender/editors/space_node/drawnode.cc @@ -1564,7 +1564,7 @@ static void std_node_socket_interface_draw(ID *id, const bNodeTree *node_tree = reinterpret_cast(id); if (interface_socket->flag & NODE_INTERFACE_SOCKET_INPUT && node_tree->type == NTREE_GEOMETRY) { - if (ELEM(type, SOCK_INT, SOCK_VECTOR)) { + if (ELEM(type, SOCK_INT, SOCK_VECTOR, SOCK_MATRIX)) { uiItemR(col, &ptr, "default_input", DEFAULT_FLAGS, nullptr, ICON_NONE); } } diff --git a/source/blender/makesdna/DNA_node_tree_interface_types.h b/source/blender/makesdna/DNA_node_tree_interface_types.h index 8f947ec1373..3d9793f7062 100644 --- a/source/blender/makesdna/DNA_node_tree_interface_types.h +++ b/source/blender/makesdna/DNA_node_tree_interface_types.h @@ -134,6 +134,7 @@ typedef enum GeometryNodeDefaultInputType { GEO_NODE_DEFAULT_FIELD_INPUT_ID_INDEX_FIELD = 2, GEO_NODE_DEFAULT_FIELD_INPUT_NORMAL_FIELD = 3, GEO_NODE_DEFAULT_FIELD_INPUT_POSITION_FIELD = 4, + GEO_NODE_DEFAULT_FIELD_INPUT_INSTANCE_TRANSFORM_FIELD = 5, } GeometryNodeDefaultInputType; typedef struct bNodeTreeInterfacePanel { diff --git a/source/blender/makesrna/intern/rna_node_tree_interface.cc b/source/blender/makesrna/intern/rna_node_tree_interface.cc index 161a4fc7fe9..d3f8b9bafef 100644 --- a/source/blender/makesrna/intern/rna_node_tree_interface.cc +++ b/source/blender/makesrna/intern/rna_node_tree_interface.cc @@ -447,6 +447,15 @@ static const EnumPropertyItem *rna_NodeTreeInterfaceSocket_default_input_itemf( N_("The position from the context")}; RNA_enum_item_add(&items, &items_count, &position); } + else if (type->type == SOCK_MATRIX) { + const EnumPropertyItem instance_transform{ + GEO_NODE_DEFAULT_FIELD_INPUT_INSTANCE_TRANSFORM_FIELD, + "INSTANCE_TRANSFORM", + 0, + N_("Instance Transform"), + N_("Transformation of each instance from the geometry context")}; + RNA_enum_item_add(&items, &items_count, &instance_transform); + } } RNA_enum_item_end(&items, &items_count); diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc index 50f84125345..c4870c5cc4e 100644 --- a/source/blender/nodes/intern/node_common.cc +++ b/source/blender/nodes/intern/node_common.cc @@ -451,6 +451,11 @@ static void set_default_input_field(const bNodeTreeInterfaceSocket &input, Socke decl.hide_value = true; } } + else if (decl.socket_type == SOCK_MATRIX) { + decl.implicit_input_fn = std::make_unique( + implicit_field_inputs::instance_transform); + decl.hide_value = true; + } } void node_group_declare(NodeDeclarationBuilder &b)