Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Dinges <blender@dingto.org>2013-07-20 02:51:48 +0400
committerThomas Dinges <blender@dingto.org>2013-07-20 02:51:48 +0400
commitd336ae8992435a000e5dfe8d6d24a0cf13a5c40a (patch)
tree03cdf0837908fd39d459b7b3377fe22b27e6e995 /intern/cycles/blender
parent3cd53aff090b14cd050c931badf8856e903aad01 (diff)
Cycles / Sampling UI:
* Add a "Squared Samples" option to the UI, to use squared values for ease of use. This can make it easier from an artist point of view, to weak settings. With this enabled, all Sample values will be squared. So 10 Samples become 100 Samples. For the Non-Progressive integrator: 4 AA Samples * 5 Diffuse Samples would become 16 AA Samples * 25 Diffuse = 400 in total. Patch by Matt Heimlich, with some minor edits by myself. Thanks!
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/addon/properties.py5
-rw-r--r--intern/cycles/blender/addon/ui.py2
-rw-r--r--intern/cycles/blender/blender_object.cpp16
-rw-r--r--intern/cycles/blender/blender_sync.cpp60
4 files changed, 69 insertions, 14 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index ca49ffccd2a..eba94604a88 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -150,6 +150,11 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
description="Use progressive sampling of lighting",
default=True,
)
+ cls.squared_samples = BoolProperty(
+ name="Squared Samples",
+ description="Square sampling values for easier artist control",
+ default=False,
+ )
cls.samples = IntProperty(
name="Samples",
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 8d129aa821c..d862a00f006 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -84,6 +84,8 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
sub.prop(cscene, "ao_samples", text="AO")
sub.prop(cscene, "mesh_light_samples", text="Mesh Light")
sub.prop(cscene, "subsurface_samples", text="Subsurface")
+
+ layout.prop(cscene, "squared_samples")
if cscene.feature_set == 'EXPERIMENTAL' and (device_type == 'NONE' or cscene.device == 'CPU'):
layout.row().prop(cscene, "sampling_pattern", text="Pattern")
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index d1e3d64d572..b2235c36af0 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -154,10 +154,16 @@ void BlenderSync::sync_light(BL::Object b_parent, int persistent_id[OBJECT_PERSI
light->shader = used_shaders[0];
/* shadow */
+ PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
PointerRNA clamp = RNA_pointer_get(&b_lamp.ptr, "cycles");
light->cast_shadow = get_boolean(clamp, "cast_shadow");
light->use_mis = get_boolean(clamp, "use_multiple_importance_sampling");
- light->samples = get_int(clamp, "samples");
+
+ int samples = get_int(clamp, "samples");
+ if(get_boolean(cscene, "squared_samples"))
+ light->samples = samples * samples;
+ else
+ light->samples = samples;
/* visibility */
uint visibility = object_ray_visibility(b_ob);
@@ -174,6 +180,7 @@ void BlenderSync::sync_background_light()
BL::World b_world = b_scene.world();
if(b_world) {
+ PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
PointerRNA cworld = RNA_pointer_get(&b_world.ptr, "cycles");
bool sample_as_light = get_boolean(cworld, "sample_as_light");
@@ -188,8 +195,13 @@ void BlenderSync::sync_background_light()
{
light->type = LIGHT_BACKGROUND;
light->map_resolution = get_int(cworld, "sample_map_resolution");
- light->samples = get_int(cworld, "samples");
light->shader = scene->default_background;
+
+ int samples = get_int(cworld, "samples");
+ if(get_boolean(cscene, "squared_samples"))
+ light->samples = samples * samples;
+ else
+ light->samples = samples;
light->tag_update(scene);
light_map.set_recalc(b_world);
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index e9e39e485f5..10a17b7abc3 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -191,14 +191,33 @@ void BlenderSync::sync_integrator()
}
#endif
- integrator->diffuse_samples = get_int(cscene, "diffuse_samples");
- integrator->glossy_samples = get_int(cscene, "glossy_samples");
- integrator->transmission_samples = get_int(cscene, "transmission_samples");
- integrator->ao_samples = get_int(cscene, "ao_samples");
- integrator->mesh_light_samples = get_int(cscene, "mesh_light_samples");
- integrator->subsurface_samples = get_int(cscene, "subsurface_samples");
integrator->progressive = get_boolean(cscene, "progressive");
+ int diffuse_samples = get_int(cscene, "diffuse_samples");
+ int glossy_samples = get_int(cscene, "glossy_samples");
+ int transmission_samples = get_int(cscene, "transmission_samples");
+ int ao_samples = get_int(cscene, "ao_samples");
+ int mesh_light_samples = get_int(cscene, "mesh_light_samples");
+ int subsurface_samples = get_int(cscene, "subsurface_samples");
+
+ if(get_boolean(cscene, "squared_samples")) {
+ integrator->diffuse_samples = diffuse_samples * diffuse_samples;
+ integrator->glossy_samples = glossy_samples * glossy_samples;
+ integrator->transmission_samples = transmission_samples * transmission_samples;
+ integrator->ao_samples = ao_samples * ao_samples;
+ integrator->mesh_light_samples = mesh_light_samples * mesh_light_samples;
+ integrator->subsurface_samples = subsurface_samples * subsurface_samples;
+ }
+ else {
+ integrator->diffuse_samples = diffuse_samples;
+ integrator->glossy_samples = glossy_samples;
+ integrator->transmission_samples = transmission_samples;
+ integrator->ao_samples = ao_samples;
+ integrator->mesh_light_samples = mesh_light_samples;
+ integrator->subsurface_samples = subsurface_samples;
+ }
+
+
if(experimental)
integrator->sampling_pattern = (SamplingPattern)RNA_enum_get(&cscene, "sampling_pattern");
@@ -300,8 +319,13 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
render_layer.use_localview = false;
render_layer.bound_samples = (use_layer_samples == 1);
- if(use_layer_samples != 2)
- render_layer.samples = b_rlay->samples();
+ if(use_layer_samples != 2) {
+ int samples = b_rlay->samples();
+ if(get_boolean(cscene, "squared_samples"))
+ render_layer.samples = samples * samples;
+ else
+ render_layer.samples = samples;
+ }
}
first_layer = false;
@@ -385,22 +409,34 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::Use
params.background = background;
/* samples */
+ int samples = get_int(cscene, "samples");
+ int aa_samples = get_int(cscene, "aa_samples");
+ int preview_samples = get_int(cscene, "preview_samples");
+ int preview_aa_samples = get_int(cscene, "preview_aa_samples");
+
+ if(get_boolean(cscene, "squared_samples")) {
+ samples = samples * samples;
+ aa_samples = aa_samples * aa_samples;
+ preview_samples = preview_samples * preview_samples;
+ preview_aa_samples = preview_aa_samples * preview_aa_samples;
+ }
+
if(get_boolean(cscene, "progressive") == 0 && params.device.type == DEVICE_CPU) {
if(background) {
- params.samples = get_int(cscene, "aa_samples");
+ params.samples = aa_samples;
}
else {
- params.samples = get_int(cscene, "preview_aa_samples");
+ params.samples = preview_aa_samples;
if(params.samples == 0)
params.samples = 65536;
}
}
else {
if(background) {
- params.samples = get_int(cscene, "samples");
+ params.samples = samples;
}
else {
- params.samples = get_int(cscene, "preview_samples");
+ params.samples = preview_samples;
if(params.samples == 0)
params.samples = 65536;
}