Cycles / Sampling UI:

* Add a "Total Samples" info at the bottom of the panel.
This makes understanding the Non-Progressive integrator easier, as it displays how many samples are used for the different ray types. 

* Rename Squared Samples to Square samples, to indicate that the action is not already done. The new Total Samples info should make this easier to understand now as well. Also added back for Progressive integrator, for consistency. 

Screenshot:
http://www.pasteall.org/pic/show.php?id=57980
This commit is contained in:
Thomas Dinges 2013-08-22 19:57:56 +00:00
parent da7af1e271
commit fc9d4bdf73
7 changed files with 60 additions and 21 deletions

@ -67,7 +67,7 @@ class AddPresetSampling(AddPresetBase, Operator):
"cycles.subsurface_samples", "cycles.subsurface_samples",
"cycles.no_caustics", "cycles.no_caustics",
"cycles.blur_glossy", "cycles.blur_glossy",
"cycles.squared_samples", "cycles.use_square_samples",
"cycles.progressive" "cycles.progressive"
] ]

@ -128,8 +128,8 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
description="Use progressive sampling of lighting", description="Use progressive sampling of lighting",
default=True, default=True,
) )
cls.squared_samples = BoolProperty( cls.use_square_samples = BoolProperty(
name="Squared Samples", name="Square Samples",
description="Square sampling values for easier artist control", description="Square sampling values for easier artist control",
default=False, default=False,
) )

@ -48,6 +48,43 @@ class CyclesButtonsPanel():
return rd.engine == 'CYCLES' return rd.engine == 'CYCLES'
def draw_samples_info(layout, cscene):
# Calculate sample values
if cscene.progressive:
aa = cscene.samples
if cscene.use_square_samples:
aa = aa*aa
else:
aa = cscene.aa_samples
d = cscene.diffuse_samples
g = cscene.glossy_samples
t = cscene.transmission_samples
ao = cscene.ao_samples
ml = cscene.mesh_light_samples
sss = cscene.subsurface_samples
if cscene.use_square_samples:
aa = aa*aa
d = d*d
g = g*g
t = t*t
ao = ao*ao
ml = ml*ml
sss = sss*sss
# Draw interface
col = layout.column(align=True)
col.scale_y = 0.6
col.label("Total Samples:")
col.separator()
if cscene.progressive:
col.label("%s AA" % aa)
else:
col.label("%s AA, %s Diffuse, %s Glossy, %s Transmission" % (aa, d*aa, g*aa, t*aa))
col.separator()
col.label("%s AO, %s Mesh Light, %s Subsurface" % (ao*aa, ml*aa, sss*aa))
class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel): class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
bl_label = "Sampling" bl_label = "Sampling"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
@ -66,9 +103,7 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
row = layout.row() row = layout.row()
row.prop(cscene, "progressive") row.prop(cscene, "progressive")
row.prop(cscene, "use_square_samples")
if not cscene.progressive:
row.prop(cscene, "squared_samples")
split = layout.split() split = layout.split()
@ -108,6 +143,8 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
layout.row().prop(cscene, "use_layer_samples") layout.row().prop(cscene, "use_layer_samples")
break break
draw_samples_info(layout, cscene)
class CyclesRender_PT_light_paths(CyclesButtonsPanel, Panel): class CyclesRender_PT_light_paths(CyclesButtonsPanel, Panel):
bl_label = "Light Paths" bl_label = "Light Paths"

@ -158,7 +158,7 @@ void BlenderSync::sync_light(BL::Object b_parent, int persistent_id[OBJECT_PERSI
light->use_mis = get_boolean(clamp, "use_multiple_importance_sampling"); light->use_mis = get_boolean(clamp, "use_multiple_importance_sampling");
int samples = get_int(clamp, "samples"); int samples = get_int(clamp, "samples");
if(get_boolean(cscene, "squared_samples")) if(get_boolean(cscene, "use_square_samples"))
light->samples = samples * samples; light->samples = samples * samples;
else else
light->samples = samples; light->samples = samples;
@ -196,7 +196,7 @@ void BlenderSync::sync_background_light()
light->shader = scene->default_background; light->shader = scene->default_background;
int samples = get_int(cworld, "samples"); int samples = get_int(cworld, "samples");
if(get_boolean(cscene, "squared_samples")) if(get_boolean(cscene, "use_square_samples"))
light->samples = samples * samples; light->samples = samples * samples;
else else
light->samples = samples; light->samples = samples;

@ -198,7 +198,7 @@ void BlenderSync::sync_integrator()
int mesh_light_samples = get_int(cscene, "mesh_light_samples"); int mesh_light_samples = get_int(cscene, "mesh_light_samples");
int subsurface_samples = get_int(cscene, "subsurface_samples"); int subsurface_samples = get_int(cscene, "subsurface_samples");
if(get_boolean(cscene, "squared_samples")) { if(get_boolean(cscene, "use_square_samples")) {
integrator->diffuse_samples = diffuse_samples * diffuse_samples; integrator->diffuse_samples = diffuse_samples * diffuse_samples;
integrator->glossy_samples = glossy_samples * glossy_samples; integrator->glossy_samples = glossy_samples * glossy_samples;
integrator->transmission_samples = transmission_samples * transmission_samples; integrator->transmission_samples = transmission_samples * transmission_samples;
@ -319,7 +319,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
render_layer.bound_samples = (use_layer_samples == 1); render_layer.bound_samples = (use_layer_samples == 1);
if(use_layer_samples != 2) { if(use_layer_samples != 2) {
int samples = b_rlay->samples(); int samples = b_rlay->samples();
if(get_boolean(cscene, "squared_samples") && !(get_boolean(cscene, "progressive"))) if(get_boolean(cscene, "use_square_samples"))
render_layer.samples = samples * samples; render_layer.samples = samples * samples;
else else
render_layer.samples = samples; render_layer.samples = samples;
@ -412,10 +412,12 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::Use
int preview_samples = get_int(cscene, "preview_samples"); int preview_samples = get_int(cscene, "preview_samples");
int preview_aa_samples = get_int(cscene, "preview_aa_samples"); int preview_aa_samples = get_int(cscene, "preview_aa_samples");
/* Squared samples for Non-Progressive only */ if(get_boolean(cscene, "use_square_samples")) {
if(get_boolean(cscene, "squared_samples")) {
aa_samples = aa_samples * aa_samples; aa_samples = aa_samples * aa_samples;
preview_aa_samples = preview_aa_samples * preview_aa_samples; preview_aa_samples = preview_aa_samples * preview_aa_samples;
samples = samples * samples;
preview_samples = preview_samples * preview_samples;
} }
if(get_boolean(cscene, "progressive") == 0) { if(get_boolean(cscene, "progressive") == 0) {

@ -1,13 +1,13 @@
import bpy import bpy
cycles = bpy.context.scene.cycles cycles = bpy.context.scene.cycles
cycles.squared_samples = True cycles.use_square_samples = True
# Progressive # Progressive
cycles.samples = 500 cycles.samples = 24
cycles.preview_samples = 100 cycles.preview_samples = 12
# Non-Progressive (squared) # Non-Progressive
cycles.aa_samples = 8 cycles.aa_samples = 8
cycles.preview_aa_samples = 4 cycles.preview_aa_samples = 4

@ -1,13 +1,13 @@
import bpy import bpy
cycles = bpy.context.scene.cycles cycles = bpy.context.scene.cycles
cycles.squared_samples = True cycles.use_square_samples = True
# Progressive # Progressive
cycles.samples = 100 cycles.samples = 12
cycles.preview_samples = 10 cycles.preview_samples = 6
# Non-Progressive (squared) # Non-Progressive
cycles.aa_samples = 4 cycles.aa_samples = 4
cycles.preview_aa_samples = 2 cycles.preview_aa_samples = 2