[Bf-blender-cvs] [211f08d] master: Cycles: Direct multi light sampling in the Branched Path Integrator is optional now. Disabling this can improve performance, when we need a lot of AA Samples anyway, to clear up the render.

Thomas Dinges noreply at git.blender.org
Sat Mar 15 17:38:06 CET 2014


Commit: 211f08d89bb48312a426fe969e0d967cf637b66c
Author: Thomas Dinges
Date:   Sat Mar 15 17:36:44 2014 +0100
https://developer.blender.org/rB211f08d89bb48312a426fe969e0d967cf637b66c

Cycles: Direct multi light sampling in the Branched Path Integrator is optional now.
Disabling this can improve performance, when we need a lot of AA Samples anyway, to clear up the render.

Simple example .blend: http://www.pasteall.org/blend/27582

Differential Revision: https://developer.blender.org/D392

===================================================================

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/kernel/kernel_path.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/integrator.cpp
M	intern/cycles/render/integrator.h

===================================================================

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 875f9d3..1d56824 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -252,10 +252,17 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
                 items=enum_use_layer_samples,
                 default='USE',
                 )
+
+        cls.sample_all_lights_direct = BoolProperty(
+                name="Sample All Direct Lights",
+                description="Sample all lights (for direct samples), rather than randomly picking one",
+                default=True,
+                )
+
         cls.sample_all_lights_indirect = BoolProperty(
-                name="Sample All Lights",
+                name="Sample All Indirect Lights",
                 description="Sample all lights (for indirect samples), rather than randomly picking one",
-                default=False,
+                default=True,
                 )
 
         cls.no_caustics = BoolProperty(
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 7f0a22d..70368c2 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -134,6 +134,7 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
             sub.prop(cscene, "aa_samples", text="Render")
             sub.prop(cscene, "preview_aa_samples", text="Preview")
             sub.separator()
+            sub.prop(cscene, "sample_all_lights_direct")
             sub.prop(cscene, "sample_all_lights_indirect")
 
             col = split.column()
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 202eff4..1f5e32a 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -197,7 +197,8 @@ void BlenderSync::sync_integrator()
 #endif
 
 	integrator->method = (Integrator::Method)get_enum(cscene, "progressive");
-	
+
+	integrator->sample_all_lights_direct = get_boolean(cscene, "sample_all_lights_direct");
 	integrator->sample_all_lights_indirect = get_boolean(cscene, "sample_all_lights_indirect");
 
 	int diffuse_samples = get_int(cscene, "diffuse_samples");
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index 000b241..81b61a5 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -957,7 +957,8 @@ ccl_device_noinline void kernel_branched_path_integrate_lighting(KernelGlobals *
 	PathState *state, PathRadiance *L, ccl_global float *buffer)
 {
 #ifdef __EMISSION__
-	kernel_branched_path_integrate_direct_lighting(kg, rng, sd, state, throughput, num_samples_adjust, L, true);
+	bool all = kernel_data.integrator.sample_all_lights_direct;
+	kernel_branched_path_integrate_direct_lighting(kg, rng, sd, state, throughput, num_samples_adjust, L, all);
 #endif
 
 	for(int i = 0; i< sd->num_closure; i++) {
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 551c2dd..512e7ab 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -836,8 +836,9 @@ typedef struct KernelIntegrator {
 	int ao_samples;
 	int mesh_light_samples;
 	int subsurface_samples;
+	int sample_all_lights_direct;
 	int sample_all_lights_indirect;
-	
+
 	/* mis */
 	int use_lamp_mis;
 
@@ -850,7 +851,6 @@ typedef struct KernelIntegrator {
 	int volume_max_steps;
 	float volume_step_size;
 	int volume_samples;
-	int pad1;
 } KernelIntegrator;
 
 typedef struct KernelBVH {
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp
index 849157d..c81e7e3 100644
--- a/intern/cycles/render/integrator.cpp
+++ b/intern/cycles/render/integrator.cpp
@@ -130,6 +130,7 @@ void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene
 	kintegrator->mesh_light_samples = mesh_light_samples;
 	kintegrator->subsurface_samples = subsurface_samples;
 	kintegrator->volume_samples = volume_samples;
+	kintegrator->sample_all_lights_direct = sample_all_lights_direct;
 	kintegrator->sample_all_lights_indirect = sample_all_lights_indirect;
 
 	kintegrator->sampling_pattern = sampling_pattern;
@@ -199,6 +200,7 @@ bool Integrator::modified(const Integrator& integrator)
 		volume_samples == integrator.volume_samples &&
 		motion_blur == integrator.motion_blur &&
 		sampling_pattern == integrator.sampling_pattern &&
+		sample_all_lights_direct == integrator.sample_all_lights_direct &&
 		sample_all_lights_indirect == integrator.sample_all_lights_indirect);
 }
 
diff --git a/intern/cycles/render/integrator.h b/intern/cycles/render/integrator.h
index 587968d..2570b13 100644
--- a/intern/cycles/render/integrator.h
+++ b/intern/cycles/render/integrator.h
@@ -63,6 +63,7 @@ public:
 	int mesh_light_samples;
 	int subsurface_samples;
 	int volume_samples;
+	bool sample_all_lights_direct;
 	bool sample_all_lights_indirect;
 
 	enum Method {




More information about the Bf-blender-cvs mailing list