From 88a261c13b8ac203e2a7ea936cd8b277b8a07c9f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 13 Apr 2012 12:58:12 +0000 Subject: Cycles: add render layer use environment option to disable world lighting on individual render layers. --- intern/cycles/blender/addon/ui.py | 2 ++ intern/cycles/blender/blender_shader.cpp | 1 + intern/cycles/blender/blender_sync.cpp | 2 ++ intern/cycles/blender/blender_sync.h | 4 +++- intern/cycles/render/background.cpp | 8 +++++++- intern/cycles/render/background.h | 2 ++ intern/cycles/render/scene.h | 1 + intern/cycles/render/shader.cpp | 11 +++++++++++ 8 files changed, 29 insertions(+), 2 deletions(-) (limited to 'intern') diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 47aba845ba3..4a8b639b390 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -181,6 +181,8 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel): col.label(text="Material:") col.prop(rl, "material_override", text="") + col.prop(rl, "use_sky", "Use Environment") + col = split.column() col.prop(rl, "layers", text="Layer") col.label(text="Mask Layers:") diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index 74d41208287..52d97753db3 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -728,6 +728,7 @@ void BlenderSync::sync_world() PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); background->transparent = get_boolean(cscene, "film_transparent"); + background->use = render_layer.use_background; if(background->modified(prevbackground)) background->tag_update(scene); diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 066e5b776b8..5a286298774 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -207,6 +207,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) render_layer.layer = render_layer.scene_layer; render_layer.holdout_layer = 0; render_layer.material_override = PointerRNA_NULL; + render_layer.use_background = true; return; } } @@ -224,6 +225,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) 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(); } first_layer = false; diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index bfb530c9f99..db26f304d84 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -107,7 +107,8 @@ private: struct RenderLayerInfo { RenderLayerInfo() : scene_layer(0), layer(0), holdout_layer(0), - material_override(PointerRNA_NULL) + material_override(PointerRNA_NULL), + use_background(true) {} string name; @@ -115,6 +116,7 @@ private: uint layer; uint holdout_layer; BL::Material material_override; + bool use_background; } render_layer; }; diff --git a/intern/cycles/render/background.cpp b/intern/cycles/render/background.cpp index 919bd83f195..76d26dd34b5 100644 --- a/intern/cycles/render/background.cpp +++ b/intern/cycles/render/background.cpp @@ -35,6 +35,8 @@ Background::Background() ao_factor = 0.0f; ao_distance = FLT_MAX; + use = true; + transparent = false; need_update = true; } @@ -57,7 +59,10 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene kbackground->ao_distance = ao_distance; kbackground->transparent = transparent; - kbackground->shader = scene->shader_manager->get_shader_id(scene->default_background); + if(use) + kbackground->shader = scene->shader_manager->get_shader_id(scene->default_background); + else + kbackground->shader = scene->shader_manager->get_shader_id(scene->default_empty); need_update = false; } @@ -69,6 +74,7 @@ void Background::device_free(Device *device, DeviceScene *dscene) bool Background::modified(const Background& background) { return !(transparent == background.transparent && + use == background.use && ao_factor == background.ao_factor && ao_distance == background.ao_distance); } diff --git a/intern/cycles/render/background.h b/intern/cycles/render/background.h index 40dacd9d6b1..3c1cd3915e5 100644 --- a/intern/cycles/render/background.h +++ b/intern/cycles/render/background.h @@ -32,6 +32,8 @@ public: float ao_factor; float ao_distance; + bool use; + bool transparent; bool need_update; diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h index 0a4f0ef5d95..af4301b1cd9 100644 --- a/intern/cycles/render/scene.h +++ b/intern/cycles/render/scene.h @@ -158,6 +158,7 @@ public: int default_light; int default_background; int default_holdout; + int default_empty; /* device */ Device *device; diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 2afa1dd5037..c1f7b3518d2 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -272,6 +272,17 @@ void ShaderManager::add_default(Scene *scene) scene->shaders.push_back(shader); scene->default_holdout = scene->shaders.size() - 1; } + + /* default empty */ + { + graph = new ShaderGraph(); + + shader = new Shader(); + shader->name = "default_empty"; + shader->graph = graph; + scene->shaders.push_back(shader); + scene->default_empty = scene->shaders.size() - 1; + } } CCL_NAMESPACE_END -- cgit v1.2.3