Commit: 3349f25502e76ce456c28b9b8f503da566909259
Author: Clément Foucault
Date:   Sun Oct 1 02:19:10 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB3349f25502e76ce456c28b9b8f503da566909259

Eevee : Add a setting for the number of indirect light bounce.

This is used to tweak the overall spread of the lighting. It is a per 
renderlayer setting.

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

M       release/scripts/startup/bl_ui/properties_render.py
M       release/scripts/startup/bl_ui/properties_render_layer.py
M       source/blender/draw/engines/eevee/eevee_engine.c
M       source/blender/draw/engines/eevee/eevee_lightprobes.c
M       source/blender/draw/engines/eevee/eevee_private.h
M       source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_render.py 
b/release/scripts/startup/bl_ui/properties_render.py
index a1fd0b74514..91cc8e9a8a2 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -754,6 +754,24 @@ class RENDER_PT_eevee_antialiasing(RenderButtonsPanel, 
Panel):
         col.prop(props, "taa_samples")
 
 
+class RENDER_PT_eevee_global_illumination(RenderButtonsPanel, Panel):
+    bl_label = "Global Illumination"
+    COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        props = scene.layer_properties['BLENDER_EEVEE']
+
+        col = layout.column()
+        col.prop(props, "gi_diffuse_bounces")
+
+
 classes = (
     RENDER_MT_presets,
     RENDER_MT_ffmpeg_presets,
@@ -777,6 +795,7 @@ classes = (
     RENDER_PT_eevee_postprocess_settings,
     RENDER_PT_eevee_shadows,
     RENDER_PT_eevee_antialiasing,
+    RENDER_PT_eevee_global_illumination,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py 
b/release/scripts/startup/bl_ui/properties_render_layer.py
index 08d7d1f4320..69f39ada3b2 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -333,6 +333,26 @@ class 
RENDERLAYER_PT_eevee_antialiasing(RenderLayerButtonsPanel, Panel):
         col.template_override_property(layer_props, scene_props, "taa_samples")
 
 
+class RENDERLAYER_PT_eevee_global_illumination(RenderLayerButtonsPanel, Panel):
+    bl_label = "Global Illumination"
+    COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        scene_props = scene.layer_properties['BLENDER_EEVEE']
+        layer = bpy.context.render_layer
+        layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+        col = layout.column()
+        col.template_override_property(layer_props, scene_props, 
"gi_diffuse_bounces")
+
+
 classes = (
     RENDERLAYER_UL_renderlayers,
     RENDERLAYER_PT_layers,
@@ -345,6 +365,7 @@ classes = (
     RENDERLAYER_PT_eevee_volumetric,
     RENDERLAYER_PT_eevee_shadows,
     RENDERLAYER_PT_eevee_antialiasing,
+    RENDERLAYER_PT_eevee_global_illumination,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c 
b/source/blender/draw/engines/eevee/eevee_engine.c
index cbc0c059c87..4c92b031c1e 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -311,6 +311,8 @@ static void EEVEE_scene_layer_settings_create(RenderEngine 
*UNUSED(engine), IDPr
                   props->type == IDP_GROUP &&
                   props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
 
+       BKE_collection_engine_property_add_int(props, "gi_diffuse_bounces", 3);
+
        BKE_collection_engine_property_add_bool(props, "taa_enable", true);
        BKE_collection_engine_property_add_int(props, "taa_samples", 8);
 
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c 
b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 6c449a71261..924e83805b6 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -166,6 +166,10 @@ static void planar_pool_ensure_alloc(EEVEE_Data *vedata, 
int num_planar_ref)
 
 void EEVEE_lightprobes_init(EEVEE_SceneLayerData *sldata, EEVEE_Data 
*UNUSED(vedata))
 {
+       const DRWContextState *draw_ctx = DRW_context_state_get();
+       SceneLayer *scene_layer = draw_ctx->scene_layer;
+       IDProperty *props = BKE_scene_layer_engine_evaluated_get(scene_layer, 
COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
        /* Shaders */
        if (!e_data.probe_filter_glossy_sh) {
                char *shader_str = NULL;
@@ -276,6 +280,11 @@ void EEVEE_lightprobes_init(EEVEE_SceneLayerData *sldata, 
EEVEE_Data *UNUSED(ved
                sldata->planar_ubo = 
DRW_uniformbuffer_create(sizeof(EEVEE_PlanarReflection) * MAX_PLANAR, NULL);
        }
 
+       int prop_bounce_num = 
BKE_collection_engine_property_value_get_int(props, "gi_diffuse_bounces");
+       /* Update all probes if number of bounces mismatch. */
+       e_data.update_world = (sldata->probes->num_bounce != prop_bounce_num);
+       sldata->probes->num_bounce = prop_bounce_num;
+
        /* Setup Render Target Cubemap */
 
        /* We do this detach / attach dance to not generate an invalid 
framebuffer (mixed cubemap / 2D map) */
@@ -340,7 +349,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *veda
                float *col = ts.colorBackground;
                if (wo) {
                        col = &wo->horr;
-                       e_data.update_world = (wo->update_flag != 0);
+                       e_data.update_world |= (wo->update_flag != 0);
                        wo->update_flag = 0;
 
                        if (wo->use_nodes && wo->nodetree) {
@@ -1303,8 +1312,7 @@ void EEVEE_lightprobes_refresh(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *vedata)
 
                /* Reflection probes depend on diffuse lighting thus on 
irradiance grid,
                 * so update them first. */
-               const int max_bounce = 3;
-               while (pinfo->updated_bounce < max_bounce) {
+               while (pinfo->updated_bounce < pinfo->num_bounce) {
                        pinfo->num_render_grid = pinfo->num_grid;
 
                        for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i 
< MAX_GRID); i++) {
@@ -1391,7 +1399,7 @@ skip_rendering:
                                        }
 #if 0
                                        printf("Updated Grid %d : cell %d / %d, 
bounce %d / %d\n",
-                                               i, ped->updated_cells, 
ped->num_cell, pinfo->updated_bounce + 1, max_bounce);
+                                               i, ped->updated_cells, 
ped->num_cell, pinfo->updated_bounce + 1, pinfo->num_bounce);
 #endif
                                        /* Only do one probe per frame */
                                        DRW_viewport_request_redraw();
@@ -1405,7 +1413,7 @@ skip_rendering:
                        pinfo->updated_bounce++;
                        pinfo->num_render_grid = pinfo->num_grid;
 
-                       if (pinfo->updated_bounce < max_bounce) {
+                       if (pinfo->updated_bounce < pinfo->num_bounce) {
                                /* Retag all grids to update for next bounce */
                                for (int i = 1; (ob = 
pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) {
                                        EEVEE_LightProbeEngineData *ped = 
EEVEE_lightprobe_data_get(ob);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h 
b/source/blender/draw/engines/eevee/eevee_private.h
index 85838898b9b..dad37f8e11e 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -319,6 +319,7 @@ typedef struct EEVEE_LightProbesInfo {
        int num_planar, cache_num_planar;
        int update_flag;
        int updated_bounce;
+       int num_bounce;
        int grid_initialized;
        /* Actual number of probes that have datas. */
        int num_render_cube;
diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index 84ff0d5a7ea..49ca2101e34 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2574,6 +2574,7 @@ RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(shadow_size)
 RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(shadow_high_bitdepth)
 RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(taa_enable)
 RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(taa_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(gi_diffuse_bounces)
 
 /* object engine */
 RNA_LAYER_MODE_OBJECT_GET_SET_BOOL(show_wire)
@@ -6180,6 +6181,16 @@ static void 
rna_def_scene_layer_engine_settings_eevee(BlenderRNA *brna)
 
        /* see RNA_LAYER_ENGINE_GET_SET macro */
 
+       /* Indirect Lighting */
+       prop = RNA_def_property(srna, "gi_diffuse_bounces", PROP_INT, 
PROP_NONE);
+       RNA_def_property_int_funcs(prop, 
"rna_LayerEngineSettings_Eevee_gi_diffuse_bounces_get",
+                                      
"rna_LayerEngineSettings_Eevee_gi_diffuse_bounces_set", NULL);
+       RNA_def_property_ui_text(prop, "Bounces", "Number of time the light is 
reinjected inside light grids, "
+                                                 "0 disable indirect diffuse 
light");
+       RNA_def_property_range(prop, 0, INT_MAX);
+       RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+       RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, 
"rna_SceneLayerEngineSettings_update");
+
        /* Temporal Anti-Aliasing */
        prop = RNA_def_property(srna, "taa_enable", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_funcs(prop, 
"rna_LayerEngineSettings_Eevee_taa_enable_get",

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to