[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