Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2021-10-19 16:39:10 +0300
committerHans Goudey <h.goudey@me.com>2021-10-19 16:39:10 +0300
commit219058c213d5c9efce3f44216f6513edc93b5536 (patch)
tree26b76ae133b36d41c9a90d43eaa29ebf2b943c5a /source/blender/blenloader
parentcd36f59027042ff0f2ad53e98088428a4c0c5e38 (diff)
Geometry Nodes: Remove implicit realizing and conversion
This commit removes the implicit conversion from points to a mesh that used to happen before the next modifier. It also removes the implicit realizing of instances that happened before another modifier. Now we have specific nodes for both of these operations, the implicit conversions make less sense, and implicit instance realizing has already been removed in other nodes. This adds another geometry nodes modifier before modifiers that would have realized instances implicitly before. Currently adding another data-block during versioning after linking means that an assert needs to be changed. That should be made unnecessary by T92333. Differential Revision: https://developer.blender.org/D12722
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/versioning_300.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 035642a561a..4c6b70982a4 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -55,6 +55,7 @@
#include "BKE_idprop.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
+#include "BKE_modifier.h"
#include "BKE_node.h"
#include "RNA_access.h"
@@ -539,6 +540,54 @@ static void version_geometry_nodes_add_realize_instance_nodes(bNodeTree *ntree)
}
}
+/**
+ * The geometry nodes modifier used to realize instances for the next modifier implicitly. Now it
+ * is done with the realize instances node. It also used to convert meshes to point clouds
+ * automatically, which is also now done with a specific node.
+ */
+static bNodeTree *add_realize_node_tree(Main *bmain)
+{
+ bNodeTree *node_tree = ntreeAddTree(bmain, "Realize Instances 2.93 Legacy", "GeometryNodeTree");
+
+ ntreeAddSocketInterface(node_tree, SOCK_IN, "NodeSocketGeometry", "Geometry");
+ ntreeAddSocketInterface(node_tree, SOCK_OUT, "NodeSocketGeometry", "Geometry");
+
+ bNode *group_input = nodeAddStaticNode(NULL, node_tree, NODE_GROUP_INPUT);
+ group_input->locx = -400.0f;
+ bNode *group_output = nodeAddStaticNode(NULL, node_tree, NODE_GROUP_OUTPUT);
+ group_output->locx = 500.0f;
+ group_output->flag |= NODE_DO_OUTPUT;
+
+ bNode *join = nodeAddStaticNode(NULL, node_tree, GEO_NODE_JOIN_GEOMETRY);
+ join->locx = group_output->locx - 175.0f;
+ join->locy = group_output->locy;
+ bNode *conv = nodeAddStaticNode(NULL, node_tree, GEO_NODE_POINTS_TO_VERTICES);
+ conv->locx = join->locx - 175.0f;
+ conv->locy = join->locy - 70.0;
+ bNode *separate = nodeAddStaticNode(NULL, node_tree, GEO_NODE_SEPARATE_COMPONENTS);
+ separate->locx = join->locx - 350.0f;
+ separate->locy = join->locy + 50.0f;
+ bNode *realize = nodeAddStaticNode(NULL, node_tree, GEO_NODE_REALIZE_INSTANCES);
+ realize->locx = separate->locx - 200.0f;
+ realize->locy = join->locy;
+
+ nodeAddLink(node_tree, group_input, group_input->outputs.first, realize, realize->inputs.first);
+ nodeAddLink(node_tree, realize, realize->outputs.first, separate, separate->inputs.first);
+ nodeAddLink(node_tree, conv, conv->outputs.first, join, join->inputs.first);
+ nodeAddLink(node_tree, separate, BLI_findlink(&separate->outputs, 3), join, join->inputs.first);
+ nodeAddLink(node_tree, separate, BLI_findlink(&separate->outputs, 1), conv, conv->inputs.first);
+ nodeAddLink(node_tree, separate, BLI_findlink(&separate->outputs, 2), join, join->inputs.first);
+ nodeAddLink(node_tree, separate, separate->outputs.first, join, join->inputs.first);
+ nodeAddLink(node_tree, join, join->outputs.first, group_output, group_output->inputs.first);
+
+ LISTBASE_FOREACH (bNode *, node, &node_tree->nodes) {
+ nodeSetSelected(node, false);
+ }
+
+ ntreeUpdateTree(bmain, node_tree);
+ return node_tree;
+}
+
void do_versions_after_linking_300(Main *bmain, ReportList *UNUSED(reports))
{
if (MAIN_VERSION_ATLEAST(bmain, 300, 0) && !MAIN_VERSION_ATLEAST(bmain, 300, 1)) {
@@ -672,6 +721,38 @@ void do_versions_after_linking_300(Main *bmain, ReportList *UNUSED(reports))
}
}
+ if (!MAIN_VERSION_ATLEAST(bmain, 300, 35)) {
+ /* Add a new modifier to realize instances from previous modifiers.
+ * Previously that was done automatically by geometry nodes. */
+ bNodeTree *realize_instances_node_tree = NULL;
+ LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
+ LISTBASE_FOREACH_MUTABLE (ModifierData *, md, &ob->modifiers) {
+ if (md->type != eModifierType_Nodes) {
+ continue;
+ }
+ if (md->next == NULL) {
+ break;
+ }
+ if (md->next->type == eModifierType_Nodes) {
+ continue;
+ }
+ NodesModifierData *nmd = (NodesModifierData *)md;
+ if (nmd->node_group == NULL) {
+ continue;
+ }
+
+ NodesModifierData *new_nmd = (NodesModifierData *)BKE_modifier_new(eModifierType_Nodes);
+ STRNCPY(new_nmd->modifier.name, "Realize Instances 2.93 Legacy");
+ BKE_modifier_unique_name(&ob->modifiers, &new_nmd->modifier);
+ BLI_insertlinkafter(&ob->modifiers, md, new_nmd);
+ if (realize_instances_node_tree == NULL) {
+ realize_instances_node_tree = add_realize_node_tree(bmain);
+ }
+ new_nmd->node_group = realize_instances_node_tree;
+ }
+ }
+ }
+
/**
* Versioning code until next subversion bump goes here.
*