Cycles: add render layer use environment option to disable world lighting on

individual render layers.
This commit is contained in:
Brecht Van Lommel
2012-04-13 12:58:12 +00:00
parent 11d24cb58f
commit 88a261c13b
8 changed files with 29 additions and 2 deletions

View File

@@ -181,6 +181,8 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
col.label(text="Material:") col.label(text="Material:")
col.prop(rl, "material_override", text="") col.prop(rl, "material_override", text="")
col.prop(rl, "use_sky", "Use Environment")
col = split.column() col = split.column()
col.prop(rl, "layers", text="Layer") col.prop(rl, "layers", text="Layer")
col.label(text="Mask Layers:") col.label(text="Mask Layers:")

View File

@@ -728,6 +728,7 @@ void BlenderSync::sync_world()
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
background->transparent = get_boolean(cscene, "film_transparent"); background->transparent = get_boolean(cscene, "film_transparent");
background->use = render_layer.use_background;
if(background->modified(prevbackground)) if(background->modified(prevbackground))
background->tag_update(scene); background->tag_update(scene);

View File

@@ -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.layer = render_layer.scene_layer;
render_layer.holdout_layer = 0; render_layer.holdout_layer = 0;
render_layer.material_override = PointerRNA_NULL; render_layer.material_override = PointerRNA_NULL;
render_layer.use_background = true;
return; 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.holdout_layer = get_layer(b_rlay->layers_zmask());
render_layer.layer |= render_layer.holdout_layer; render_layer.layer |= render_layer.holdout_layer;
render_layer.material_override = b_rlay->material_override(); render_layer.material_override = b_rlay->material_override();
render_layer.use_background = b_rlay->use_sky();
} }
first_layer = false; first_layer = false;

View File

@@ -107,7 +107,8 @@ private:
struct RenderLayerInfo { struct RenderLayerInfo {
RenderLayerInfo() RenderLayerInfo()
: scene_layer(0), layer(0), holdout_layer(0), : scene_layer(0), layer(0), holdout_layer(0),
material_override(PointerRNA_NULL) material_override(PointerRNA_NULL),
use_background(true)
{} {}
string name; string name;
@@ -115,6 +116,7 @@ private:
uint layer; uint layer;
uint holdout_layer; uint holdout_layer;
BL::Material material_override; BL::Material material_override;
bool use_background;
} render_layer; } render_layer;
}; };

View File

@@ -35,6 +35,8 @@ Background::Background()
ao_factor = 0.0f; ao_factor = 0.0f;
ao_distance = FLT_MAX; ao_distance = FLT_MAX;
use = true;
transparent = false; transparent = false;
need_update = true; need_update = true;
} }
@@ -57,7 +59,10 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene
kbackground->ao_distance = ao_distance; kbackground->ao_distance = ao_distance;
kbackground->transparent = transparent; kbackground->transparent = transparent;
if(use)
kbackground->shader = scene->shader_manager->get_shader_id(scene->default_background); 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; need_update = false;
} }
@@ -69,6 +74,7 @@ void Background::device_free(Device *device, DeviceScene *dscene)
bool Background::modified(const Background& background) bool Background::modified(const Background& background)
{ {
return !(transparent == background.transparent && return !(transparent == background.transparent &&
use == background.use &&
ao_factor == background.ao_factor && ao_factor == background.ao_factor &&
ao_distance == background.ao_distance); ao_distance == background.ao_distance);
} }

View File

@@ -32,6 +32,8 @@ public:
float ao_factor; float ao_factor;
float ao_distance; float ao_distance;
bool use;
bool transparent; bool transparent;
bool need_update; bool need_update;

View File

@@ -158,6 +158,7 @@ public:
int default_light; int default_light;
int default_background; int default_background;
int default_holdout; int default_holdout;
int default_empty;
/* device */ /* device */
Device *device; Device *device;

View File

@@ -272,6 +272,17 @@ void ShaderManager::add_default(Scene *scene)
scene->shaders.push_back(shader); scene->shaders.push_back(shader);
scene->default_holdout = scene->shaders.size() - 1; 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 CCL_NAMESPACE_END