[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58424] trunk/blender/intern/cycles/ blender: Cycles / Sampling UI:

Thomas Dinges blender at dingto.org
Sat Jul 20 00:51:49 CEST 2013


Revision: 58424
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58424
Author:   dingto
Date:     2013-07-19 22:51:48 +0000 (Fri, 19 Jul 2013)
Log Message:
-----------
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! 

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/properties.py
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/blender/blender_object.cpp
    trunk/blender/intern/cycles/blender/blender_sync.cpp

Modified: trunk/blender/intern/cycles/blender/addon/properties.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/properties.py	2013-07-19 22:37:40 UTC (rev 58423)
+++ trunk/blender/intern/cycles/blender/addon/properties.py	2013-07-19 22:51:48 UTC (rev 58424)
@@ -150,6 +150,11 @@
                 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",

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2013-07-19 22:37:40 UTC (rev 58423)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2013-07-19 22:51:48 UTC (rev 58424)
@@ -84,6 +84,8 @@
             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")

Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_object.cpp	2013-07-19 22:37:40 UTC (rev 58423)
+++ trunk/blender/intern/cycles/blender/blender_object.cpp	2013-07-19 22:51:48 UTC (rev 58424)
@@ -154,10 +154,16 @@
 	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 @@
 	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 @@
 			{
 				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);

Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp	2013-07-19 22:37:40 UTC (rev 58423)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp	2013-07-19 22:51:48 UTC (rev 58424)
@@ -191,14 +191,33 @@
 	}
 #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 @@
 			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 @@
 	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;
 		}




More information about the Bf-blender-cvs mailing list