[Bf-blender-cvs] [3349f25502e] blender2.8: Eevee : Add a setting for the number of indirect light bounce.

Clément Foucault noreply at git.blender.org
Sun Oct 1 02:19:16 CEST 2017


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",



More information about the Bf-blender-cvs mailing list