[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52052] trunk/blender/intern/cycles: Fix #33131: more useful cycles behavior for layers that are both marked excluded

Brecht Van Lommel brechtvanlommel at pandora.be
Sat Nov 10 00:28:55 CET 2012


Revision: 52052
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52052
Author:   blendix
Date:     2012-11-09 23:28:51 +0000 (Fri, 09 Nov 2012)
Log Message:
-----------
Fix #33131: more useful cycles behavior for layers that are both marked excluded
and as mask layer. Now it will still use the mask, and have no further influence
rather than just being excluded entirely.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_object.cpp
    trunk/blender/intern/cycles/blender/blender_sync.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/intern/cycles/render/light.cpp

Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_object.cpp	2012-11-09 22:08:51 UTC (rev 52051)
+++ trunk/blender/intern/cycles/blender/blender_object.cpp	2012-11-09 23:28:51 UTC (rev 52052)
@@ -253,6 +253,7 @@
 	if(use_holdout != object->use_holdout) {
 		object->use_holdout = use_holdout;
 		scene->object_manager->tag_update(scene);
+		object_updated = true;
 	}
 
 	/* object sync
@@ -278,6 +279,10 @@
 			object->random_id ^= hash_int(hash_string(b_parent.name().c_str()));
 		}
 
+		/* make holdout objects on excluded layer invisible for non-camera rays */
+		if(use_holdout && (layer_flag & render_layer.exclude_layer))
+			object->visibility &= ~(PATH_RAY_ALL - PATH_RAY_CAMERA);
+
 		/* camera flag is not actually used, instead is tested
 		 * against render layer flags */
 		if(object->visibility & PATH_RAY_CAMERA) {

Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp	2012-11-09 22:08:51 UTC (rev 52051)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp	2012-11-09 23:28:51 UTC (rev 52052)
@@ -241,6 +241,7 @@
 			render_layer.use_localview = (b_v3d.local_view() ? true : false);
 			render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view(), render_layer.use_localview);
 			render_layer.layer = render_layer.scene_layer;
+			render_layer.exclude_layer = 0;
 			render_layer.holdout_layer = 0;
 			render_layer.material_override = PointerRNA_NULL;
 			render_layer.use_background = true;
@@ -258,10 +259,16 @@
 	for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) {
 		if((!layer && first_layer) || (layer && b_rlay->name() == layer)) {
 			render_layer.name = b_rlay->name();
-			render_layer.scene_layer = get_layer(b_scene.layers()) & ~get_layer(b_rlay->layers_exclude());
+
+			render_layer.holdout_layer = get_layer(b_rlay->layers_zmask());
+			render_layer.exclude_layer = get_layer(b_rlay->layers_exclude());
+
+			render_layer.scene_layer = get_layer(b_scene.layers()) & ~render_layer.exclude_layer;
+			render_layer.scene_layer |= render_layer.exclude_layer & render_layer.holdout_layer;
+
 			render_layer.layer = get_layer(b_rlay->layers());
-			render_layer.holdout_layer = get_layer(b_rlay->layers_zmask());
 			render_layer.layer |= render_layer.holdout_layer;
+
 			render_layer.material_override = b_rlay->material_override();
 			render_layer.use_background = b_rlay->use_sky();
 			render_layer.use_viewport_visibility = false;

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h	2012-11-09 22:08:51 UTC (rev 52051)
+++ trunk/blender/intern/cycles/blender/blender_sync.h	2012-11-09 23:28:51 UTC (rev 52052)
@@ -116,7 +116,8 @@
 
 	struct RenderLayerInfo {
 		RenderLayerInfo()
-		: scene_layer(0), layer(0), holdout_layer(0),
+		: scene_layer(0), layer(0),
+		  holdout_layer(0), exclude_layer(0),
 		  material_override(PointerRNA_NULL),
 		  use_background(true),
 		  use_viewport_visibility(false),
@@ -127,6 +128,7 @@
 		uint scene_layer;
 		uint layer;
 		uint holdout_layer;
+		uint exclude_layer;
 		BL::Material material_override;
 		bool use_background;
 		bool use_viewport_visibility;

Modified: trunk/blender/intern/cycles/render/light.cpp
===================================================================
--- trunk/blender/intern/cycles/render/light.cpp	2012-11-09 22:08:51 UTC (rev 52051)
+++ trunk/blender/intern/cycles/render/light.cpp	2012-11-09 23:28:51 UTC (rev 52052)
@@ -147,6 +147,10 @@
 		Mesh *mesh = object->mesh;
 		bool have_emission = false;
 
+		/* skip if we are not visible for BSDFs */
+		if(!(object->visibility & (PATH_RAY_DIFFUSE|PATH_RAY_GLOSSY|PATH_RAY_TRANSMIT)))
+			continue;
+
 		/* skip if we have no emission shaders */
 		foreach(uint sindex, mesh->used_shaders) {
 			Shader *shader = scene->shaders[sindex];
@@ -183,6 +187,10 @@
 		Mesh *mesh = object->mesh;
 		bool have_emission = false;
 
+		/* skip if we are not visible for BSDFs */
+		if(!(object->visibility & (PATH_RAY_DIFFUSE|PATH_RAY_GLOSSY|PATH_RAY_TRANSMIT)))
+			continue;
+
 		/* skip if we have no emission shaders */
 		foreach(uint sindex, mesh->used_shaders) {
 			Shader *shader = scene->shaders[sindex];




More information about the Bf-blender-cvs mailing list