[Bf-blender-cvs] [3a47fb764cd] blender2.8: Depsgraph / Render / Collection: Tag groups for rendering

Dalai Felinto noreply at git.blender.org
Fri Dec 15 11:59:21 CET 2017


Commit: 3a47fb764cdc4731aa3c386cffb08f5146018c4b
Author: Dalai Felinto
Date:   Fri Dec 15 08:33:25 2017 -0200
Branches: blender2.8
https://developer.blender.org/rB3a47fb764cdc4731aa3c386cffb08f5146018c4b

Depsgraph / Render / Collection: Tag groups for rendering

We need to tag groups before and after rendering, so the group collections
viewport and render visibility are taken into account.

Note: This is a workaround, that will be removed once the render engine have
its own depsgraph, instead of re-using the viewport depsgraph.

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

M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 7fdaf38a9ff..999e0f7f70e 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -37,6 +37,7 @@
 #include <errno.h>
 
 #include "DNA_anim_types.h"
+#include "DNA_group_types.h"
 #include "DNA_image_types.h"
 #include "DNA_node_types.h"
 #include "DNA_object_types.h"
@@ -2113,6 +2114,31 @@ static void tag_dependend_objects_for_render(Scene *scene, int UNUSED(renderlay)
 }
 #endif
 
+#define DEPSGRAPH_WORKAROUND_GROUP_HACK
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+/**
+ * Make sure the COLLECTION_VIEWPORT / COLLECTION_RENDER is considered
+ * for the collections visibility.
+ *
+ * This won't be needed anymore once we have depsgraph per render engine.
+ */
+static void tag_groups_for_render(Render *re)
+{
+	for (Group *group = re->main->group.first; group; group = group->id.next) {
+		DEG_id_tag_update(&group->id, 0);
+	}
+
+#ifdef WITH_FREESTYLE
+	if (re->freestyle_bmain) {
+		for (Group *group = re->freestyle_bmain->group.first; group; group = group->id.next) {
+			DEG_id_tag_update(&group->id, 0);
+		}
+	}
+#endif
+}
+#endif
+
 static void tag_scenes_for_render(Render *re)
 {
 	bNode *node;
@@ -2196,6 +2222,10 @@ static void ntree_render_scenes(Render *re)
 	if (re->scene->nodetree == NULL) return;
 	
 	tag_scenes_for_render(re);
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+	tag_groups_for_render(re);
+#endif
 	
 	/* now foreach render-result node tagged we do a full render */
 	/* results are stored in a way compisitor will find it */
@@ -2413,6 +2443,10 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree)
 			}
 		}
 		
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+		tag_groups_for_render(re);
+#endif
+
 		/* composite */
 		if (ntree) {
 			ntreeCompositTagRender(re->scene);
@@ -2564,6 +2598,11 @@ void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree)
 #ifdef WITH_FREESTYLE
 	free_all_freestyle_renders();
 #endif
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+	/* Restore their visibility based on the viewport visibility flags. */
+	tag_groups_for_render(re);
+#endif
 }
 
 /* returns fully composited render-result on given time step (in RenderData) */
@@ -2662,6 +2701,11 @@ static void do_render_composite_fields_blur_3d(Render *re)
 	free_all_freestyle_renders();
 #endif
 
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+	/* Restore their visibility based on the viewport visibility flags. */
+	tag_groups_for_render(re);
+#endif
+
 	/* weak... the display callback wants an active renderlayer pointer... */
 	if (re->result != NULL) {
 		re->result->renlay = render_get_active_layer(re, re->result);
@@ -3223,6 +3267,11 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
 	/* check all scenes involved */
 	tag_scenes_for_render(re);
 
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+	/* Update group collections visibility. */
+	tag_groups_for_render(re);
+#endif
+
 	/*
 	 * Disabled completely for now,
 	 * can be later set as render profile option



More information about the Bf-blender-cvs mailing list