Cycles: when render layers have per layer number of samples set, the Sampling

panel now has an option to specify how to use them. There's three options:

* Use: render layer samples override scene samples
* Bounded: bound render layer samples by scene samples
* Ignore: ignore render layer sample settings
This commit is contained in:
Brecht Van Lommel 2013-04-16 16:18:14 +00:00
parent c1276960e8
commit c9fc3874d6
5 changed files with 36 additions and 6 deletions

@ -108,6 +108,12 @@ enum_tile_order = (
('BOTTOM_TO_TOP', "Bottom to Top", "Render from bottom to top"), ('BOTTOM_TO_TOP', "Bottom to Top", "Render from bottom to top"),
) )
enum_use_layer_samples = (
('USE', "Use", "Per render layer number of samples override scene samples"),
('BOUNDED', "Bounded", "Bound per render layer number of samples by global samples"),
('IGNORE', "Ignore", "Ignore per render layer number of samples"),
)
class CyclesRenderSettings(bpy.types.PropertyGroup): class CyclesRenderSettings(bpy.types.PropertyGroup):
@classmethod @classmethod
@ -213,6 +219,13 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
default=1, default=1,
) )
cls.use_layer_samples = EnumProperty(
name="Layer Samples",
description="How to use per render layer sample settings",
items=enum_use_layer_samples,
default='USE',
)
cls.no_caustics = BoolProperty( cls.no_caustics = BoolProperty(
name="No Caustics", name="No Caustics",
description="Leave out caustics, resulting in a darker image with less noise", description="Leave out caustics, resulting in a darker image with less noise",

@ -85,6 +85,12 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
sub.prop(cscene, "mesh_light_samples", text="Mesh Light") sub.prop(cscene, "mesh_light_samples", text="Mesh Light")
sub.prop(cscene, "subsurface_samples", text="Subsurface") sub.prop(cscene, "subsurface_samples", text="Subsurface")
for rl in scene.render.layers:
if rl.samples > 0:
layout.separator()
layout.row().prop(cscene, "use_layer_samples")
break
class CyclesRender_PT_light_paths(CyclesButtonsPanel, Panel): class CyclesRender_PT_light_paths(CyclesButtonsPanel, Panel):
bl_label = "Light Paths" bl_label = "Light Paths"

@ -362,9 +362,14 @@ void BlenderSession::render()
/* update scene */ /* update scene */
sync->sync_data(b_v3d, b_engine.camera_override(), b_rlay_name.c_str()); sync->sync_data(b_v3d, b_engine.camera_override(), b_rlay_name.c_str());
/* update session */ /* update number of samples per layer */
int samples = sync->get_layer_samples(); int samples = sync->get_layer_samples();
session->reset(buffer_params, (samples == 0)? session_params.samples: samples); bool bound_samples = sync->get_layer_bound_samples();
if(samples != 0 && (!bound_samples || (samples < session_params.samples)))
session->reset(buffer_params, samples);
else
session->reset(buffer_params, session_params.samples);
/* render */ /* render */
session->start(); session->start();

@ -224,12 +224,11 @@ void BlenderSync::sync_film()
void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
{ {
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
string layername; string layername;
/* 3d view */ /* 3d view */
if(b_v3d) { if(b_v3d) {
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
if(RNA_boolean_get(&cscene, "preview_active_layer")) { if(RNA_boolean_get(&cscene, "preview_active_layer")) {
BL::RenderLayers layers(b_scene.render().ptr); BL::RenderLayers layers(b_scene.render().ptr);
layername = layers.active().name(); layername = layers.active().name();
@ -245,6 +244,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
render_layer.use_background = true; render_layer.use_background = true;
render_layer.use_viewport_visibility = true; render_layer.use_viewport_visibility = true;
render_layer.samples = 0; render_layer.samples = 0;
render_layer.bound_samples = false;
return; return;
} }
} }
@ -252,6 +252,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
/* render layer */ /* render layer */
BL::RenderSettings r = b_scene.render(); BL::RenderSettings r = b_scene.render();
BL::RenderSettings::layers_iterator b_rlay; BL::RenderSettings::layers_iterator b_rlay;
int use_layer_samples = RNA_enum_get(&cscene, "use_layer_samples");
bool first_layer = true; bool first_layer = true;
for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) { for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) {
@ -271,7 +272,10 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
render_layer.use_background = b_rlay->use_sky(); render_layer.use_background = b_rlay->use_sky();
render_layer.use_viewport_visibility = false; render_layer.use_viewport_visibility = false;
render_layer.use_localview = false; render_layer.use_localview = false;
render_layer.samples = b_rlay->samples();
render_layer.bound_samples = (use_layer_samples == 1);
if(use_layer_samples != 2)
render_layer.samples = b_rlay->samples();
} }
first_layer = false; first_layer = false;

@ -59,6 +59,7 @@ public:
void sync_camera(BL::RenderSettings b_render, BL::Object b_override, int width, int height); void sync_camera(BL::RenderSettings b_render, BL::Object b_override, int width, int height);
void sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height); void sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height);
int get_layer_samples() { return render_layer.samples; } int get_layer_samples() { return render_layer.samples; }
int get_layer_bound_samples() { return render_layer.bound_samples; }
/* get parameters */ /* get parameters */
static SceneParams get_scene_params(BL::Scene b_scene, bool background); static SceneParams get_scene_params(BL::Scene b_scene, bool background);
@ -124,7 +125,7 @@ private:
material_override(PointerRNA_NULL), material_override(PointerRNA_NULL),
use_background(true), use_background(true),
use_viewport_visibility(false), use_viewport_visibility(false),
samples(0) samples(0), bound_samples(false)
{} {}
string name; string name;
@ -137,6 +138,7 @@ private:
bool use_viewport_visibility; bool use_viewport_visibility;
bool use_localview; bool use_localview;
int samples; int samples;
bool bound_samples;
} render_layer; } render_layer;
Progress &progress; Progress &progress;