diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-10-01 03:19:10 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-10-01 03:19:10 +0300 |
commit | 3349f25502e76ce456c28b9b8f503da566909259 (patch) | |
tree | 3ae87649f5e5e73ebd18b0f9acaba6be05d48275 | |
parent | b03aa6afce2ed442b7fc135bac4a1c7088ae6f17 (diff) |
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.
-rw-r--r-- | release/scripts/startup/bl_ui/properties_render.py | 19 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_render_layer.py | 21 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_lightprobes.c | 18 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_private.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_scene.c | 11 |
6 files changed, 67 insertions, 5 deletions
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", |