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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs