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; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs