[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