[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56096] trunk/blender/intern/cycles/ blender: Cycles: when render layers have per layer number of samples set, the Sampling

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Apr 16 18:18:14 CEST 2013


Revision: 56096
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56096
Author:   blendix
Date:     2013-04-16 16:18:14 +0000 (Tue, 16 Apr 2013)
Log Message:
-----------
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

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

Modified: trunk/blender/intern/cycles/blender/addon/properties.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/properties.py	2013-04-16 15:59:02 UTC (rev 56095)
+++ trunk/blender/intern/cycles/blender/addon/properties.py	2013-04-16 16:18:14 UTC (rev 56096)
@@ -108,7 +108,13 @@
     ('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):
     @classmethod
     def register(cls):
@@ -213,6 +219,13 @@
                 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(
                 name="No Caustics",
                 description="Leave out caustics, resulting in a darker image with less noise",

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2013-04-16 15:59:02 UTC (rev 56095)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2013-04-16 16:18:14 UTC (rev 56096)
@@ -85,7 +85,13 @@
             sub.prop(cscene, "mesh_light_samples", text="Mesh Light")
             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):
     bl_label = "Light Paths"
     bl_options = {'DEFAULT_CLOSED'}

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2013-04-16 15:59:02 UTC (rev 56095)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2013-04-16 16:18:14 UTC (rev 56096)
@@ -362,10 +362,15 @@
 		/* update scene */
 		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();
-		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 */
 		session->start();
 		session->wait();

Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp	2013-04-16 15:59:02 UTC (rev 56095)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp	2013-04-16 16:18:14 UTC (rev 56096)
@@ -224,12 +224,11 @@
 
 void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
 {
+	PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
 	string layername;
 
 	/* 3d view */
 	if(b_v3d) {
-		PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
-
 		if(RNA_boolean_get(&cscene, "preview_active_layer")) {
 			BL::RenderLayers layers(b_scene.render().ptr);
 			layername = layers.active().name();
@@ -245,6 +244,7 @@
 			render_layer.use_background = true;
 			render_layer.use_viewport_visibility = true;
 			render_layer.samples = 0;
+			render_layer.bound_samples = false;
 			return;
 		}
 	}
@@ -252,6 +252,7 @@
 	/* render layer */
 	BL::RenderSettings r = b_scene.render();
 	BL::RenderSettings::layers_iterator b_rlay;
+	int use_layer_samples = RNA_enum_get(&cscene, "use_layer_samples");
 	bool first_layer = true;
 
 	for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) {
@@ -271,7 +272,10 @@
 			render_layer.use_background = b_rlay->use_sky();
 			render_layer.use_viewport_visibility = 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;

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h	2013-04-16 15:59:02 UTC (rev 56095)
+++ trunk/blender/intern/cycles/blender/blender_sync.h	2013-04-16 16:18:14 UTC (rev 56096)
@@ -59,6 +59,7 @@
 	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);
 	int get_layer_samples() { return render_layer.samples; }
+	int get_layer_bound_samples() { return render_layer.bound_samples; }
 
 	/* get parameters */
 	static SceneParams get_scene_params(BL::Scene b_scene, bool background);
@@ -124,7 +125,7 @@
 		  material_override(PointerRNA_NULL),
 		  use_background(true),
 		  use_viewport_visibility(false),
-		  samples(0)
+		  samples(0), bound_samples(false)
 		{}
 
 		string name;
@@ -137,6 +138,7 @@
 		bool use_viewport_visibility;
 		bool use_localview;
 		int samples;
+		bool bound_samples;
 	} render_layer;
 
 	Progress &progress;




More information about the Bf-blender-cvs mailing list