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

@ -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:")

@ -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);

@ -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;

@ -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;
};

@ -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;
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);
}

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

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

@ -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