[Bf-blender-cvs] [a3826bf41c6] gsoc-2018-many-light-sampling: Cycles: Added a checkbox in Blender's GUI to turn on/off the new light sampling method.

Erik Englesson noreply at git.blender.org
Fri Jun 8 15:23:44 CEST 2018


Commit: a3826bf41c6a4de9486a0c60c5c3b67587cd2e5f
Author: Erik Englesson
Date:   Thu Jun 7 11:10:55 2018 +0200
Branches: gsoc-2018-many-light-sampling
https://developer.blender.org/rBa3826bf41c6a4de9486a0c60c5c3b67587cd2e5f

Cycles: Added a checkbox in Blender's GUI to turn
on/off the new light sampling method.

The checkbox can be found at the bottom of the sampling
section in the Render tab. The method is not used by
default.

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

M	intern/cycles/blender/addon/presets.py
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_types.h
M	intern/cycles/render/integrator.h
M	intern/cycles/render/light.cpp

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

diff --git a/intern/cycles/blender/addon/presets.py b/intern/cycles/blender/addon/presets.py
index 17efb00abdb..ca9edd0c600 100644
--- a/intern/cycles/blender/addon/presets.py
+++ b/intern/cycles/blender/addon/presets.py
@@ -68,6 +68,7 @@ class AddPresetSampling(AddPresetBase, Operator):
         "cycles.subsurface_samples",
         "cycles.volume_samples",
         "cycles.use_square_samples",
+        "cycles.use_light_bvh",
         "cycles.progressive",
         "cycles.seed",
         "cycles.sample_clamp_direct",
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 8dbd80f3747..e9edb47bba6 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -183,6 +183,12 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
                 default=False,
                 )
 
+        cls.use_light_bvh = BoolProperty(
+                name="Light BVH",
+                description="Samples many lights more efficiently",
+                default=False,
+                )
+
         cls.samples = IntProperty(
                 name="Samples",
                 description="Number of samples to render for each pixel",
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 707f8756f6f..55e7086d814 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -211,6 +211,10 @@ class CYCLES_RENDER_PT_sampling(CyclesButtonsPanel, Panel):
                 layout.row().prop(cscene, "use_layer_samples")
                 break
 
+        row = layout.row(align=True)
+        row.label(text="Experimental:")
+        row.prop(cscene, "use_light_bvh", text="Light BVH")
+
         draw_samples_info(layout, context)
 
 
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 283aa5600fd..49acba9304d 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -281,6 +281,7 @@ void BlenderSync::sync_integrator()
 	                                                  Integrator::NUM_METHODS,
 	                                                  Integrator::PATH);
 
+	integrator->use_light_bvh = get_boolean(cscene, "use_light_bvh");
 	integrator->sample_all_lights_direct = get_boolean(cscene, "sample_all_lights_direct");
 	integrator->sample_all_lights_indirect = get_boolean(cscene, "sample_all_lights_indirect");
 	integrator->light_sampling_threshold = get_float(cscene, "light_sampling_threshold");
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 72fbf7be557..554f20dd7a7 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -1300,6 +1300,7 @@ static_assert_align(KernelBackground, 16);
 
 typedef struct KernelIntegrator {
 	/* emission */
+	int use_light_bvh;
 	int use_direct_light;
 	int use_ambient_occlusion;
 	int num_distribution;
@@ -1368,6 +1369,7 @@ typedef struct KernelIntegrator {
 	int start_sample;
 
 	int max_closures;
+	int pad1,pad2,pad3;
 } KernelIntegrator;
 static_assert_align(KernelIntegrator, 16);
 
diff --git a/intern/cycles/render/integrator.h b/intern/cycles/render/integrator.h
index 3cb430d72b4..786fa277c9f 100644
--- a/intern/cycles/render/integrator.h
+++ b/intern/cycles/render/integrator.h
@@ -68,6 +68,7 @@ public:
 	bool sample_all_lights_direct;
 	bool sample_all_lights_indirect;
 	float light_sampling_threshold;
+	bool use_light_bvh;
 
 	enum Method {
 		BRANCHED_PATH = 0,
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 178469974aa..d590472f92f 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -698,6 +698,7 @@ void LightManager::device_update_tree_distribution(Device *, DeviceScene *dscene
 
     /* update device */
     KernelIntegrator *kintegrator = &dscene->data.integrator;
+    kintegrator->use_light_bvh = true;
     KernelFilm *kfilm = &dscene->data.film;
     kintegrator->use_direct_light = (totarea > 0.0f);
 
@@ -1131,9 +1132,6 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce
 	if(!need_update)
 		return;
 
-	// TODO(englesson): Integrate this properly with GUI
-	bool useMLS = true;
-
 	VLOG(1) << "Total " << scene->lights.size() << " lights.";
 
 	device_free(device, dscene);
@@ -1146,7 +1144,7 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce
 	if(progress.get_cancel()) return;
 
 
-	if(useMLS) {
+	if(scene->integrator->use_light_bvh) {
 		device_update_tree_distribution(device, dscene, scene, progress);
 	} else {
 		device_update_distribution(device, dscene, scene, progress);



More information about the Bf-blender-cvs mailing list