[Bf-blender-cvs] [7103c6ef3b2] blender-v2.79a-release: Depsgraph: Fix relations for metaballs

Sergey Sharybin noreply at git.blender.org
Mon Jan 8 15:16:08 CET 2018


Commit: 7103c6ef3b26eb8a14889923e6429f2ebba0fbc2
Author: Sergey Sharybin
Date:   Mon Nov 13 14:43:08 2017 +0100
Branches: blender-v2.79a-release
https://developer.blender.org/rB7103c6ef3b26eb8a14889923e6429f2ebba0fbc2

Depsgraph: Fix relations for metaballs

Initially spotted and investigated by Dalai and Germano.

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 7a1ec96e983..dfd43a4dd2e 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -820,11 +820,11 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob)
 		case OB_MBALL:
 		{
 			Object *mom = BKE_mball_basis_find(scene, ob);
-
-			/* Motherball - mom depends on children! */
+			/* NOTE: Only the motherball gets evaluated, it's children are
+			 * having empty placeholders for the correct relations being built.
+			 */
 			if (mom == ob) {
 				/* metaball evaluation operations */
-				/* NOTE: only the motherball gets evaluated! */
 				op_node = add_operation_node(obdata,
 				                             DEG_NODE_TYPE_GEOMETRY,
 				                             function_bind(BKE_mball_eval_geometry,
@@ -832,6 +832,12 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob)
 				                                           (MetaBall *)obdata),
 				                             DEG_OPCODE_PLACEHOLDER,
 				                             "Geometry Eval");
+			} else {
+				op_node = add_operation_node(obdata,
+				                             DEG_NODE_TYPE_GEOMETRY,
+				                             NULL,
+				                             DEG_OPCODE_PLACEHOLDER,
+				                             "Geometry Eval");
 				op_node->set_as_entry();
 			}
 			break;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 9e1ffcaa20f..37c473f53be 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1501,14 +1501,19 @@ void DepsgraphRelationBuilder::build_obdata_geom(Main *bmain, Scene *scene, Obje
 		case OB_MBALL:
 		{
 			Object *mom = BKE_mball_basis_find(scene, ob);
-
+			ComponentKey mom_geom_key(&mom->id, DEG_NODE_TYPE_GEOMETRY);
 			/* motherball - mom depends on children! */
-			if (mom != ob) {
-				/* non-motherball -> cannot be directly evaluated! */
-				ComponentKey mom_key(&mom->id, DEG_NODE_TYPE_GEOMETRY);
+			if (mom == ob) {
+				ComponentKey mom_transform_key(&mom->id,
+				                               DEG_NODE_TYPE_TRANSFORM);
+				add_relation(mom_transform_key,
+				             mom_geom_key,
+				             "Metaball Motherball Transform -> Geometry");
+			}
+			else if (mom != ob) {
 				ComponentKey transform_key(&ob->id, DEG_NODE_TYPE_TRANSFORM);
-				add_relation(geom_key, mom_key, "Metaball Motherball");
-				add_relation(transform_key, mom_key, "Metaball Motherball");
+				add_relation(geom_key, mom_geom_key, "Metaball Motherball");
+				add_relation(transform_key, mom_geom_key, "Metaball Motherball");
 			}
 			break;
 		}



More information about the Bf-blender-cvs mailing list