[Bf-blender-cvs] [63f70ef14d8] blender2.8: Eevee: Bloom: Add Clamp setting

Clément Foucault noreply at git.blender.org
Sat Aug 19 02:40:31 CEST 2017


Commit: 63f70ef14d8ab364d3cbbe2a329bcd555685219a
Author: Clément Foucault
Date:   Sat Aug 19 02:39:16 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB63f70ef14d8ab364d3cbbe2a329bcd555685219a

Eevee: Bloom: Add Clamp setting

It's purpose is to limit the amount of light that spread across the screen.

Not entierly sure if it's very usefull, but it sure help to avoid to drown the screen in bloom.

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

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_effects.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
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 5ef1424ca0f..ab44cfa29f4 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -680,6 +680,7 @@ class RENDER_PT_eevee_postprocess_settings(RenderButtonsPanel, Panel):
         col.prop(props, "bloom_knee")
         col.prop(props, "bloom_radius")
         col.prop(props, "bloom_intensity")
+        col.prop(props, "bloom_clamp")
 
 
 class RENDER_PT_eevee_volumetric(RenderButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 06598db2650..d1e823b2f18 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -215,6 +215,7 @@ class RENDERLAYER_PT_eevee_postprocess_settings(RenderLayerButtonsPanel, Panel):
         col.template_override_property(layer_props, scene_props, "bloom_knee")
         col.template_override_property(layer_props, scene_props, "bloom_radius")
         col.template_override_property(layer_props, scene_props, "bloom_intensity")
+        col.template_override_property(layer_props, scene_props, "bloom_clamp")
 
 
 class RENDERLAYER_PT_eevee_volumetric(RenderLayerButtonsPanel, Panel):
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 45b0d16b2e1..bd4f15dabab 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -367,6 +367,7 @@ void EEVEE_effects_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata)
 		float knee = BKE_collection_engine_property_value_get_float(props, "bloom_knee");
 		float intensity = BKE_collection_engine_property_value_get_float(props, "bloom_intensity");
 		float radius = BKE_collection_engine_property_value_get_float(props, "bloom_radius");
+		effects->bloom_clamp = BKE_collection_engine_property_value_get_float(props, "bloom_clamp");
 
 		/* determine the iteration count */
 		const float minDim = (float)MIN2(blitsize[0], blitsize[1]);
@@ -1047,6 +1048,7 @@ void EEVEE_effects_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata)
 		eevee_create_bloom_pass("Bloom Upsample", effects, e_data.bloom_upsample_sh[use_highres], &psl->bloom_upsample, true);
 		grp = eevee_create_bloom_pass("Bloom Blit", effects, e_data.bloom_blit_sh[use_antiflicker], &psl->bloom_blit, false);
 		DRW_shgroup_uniform_vec4(grp, "curveThreshold", effects->bloom_curve_threshold, 1);
+		DRW_shgroup_uniform_float(grp, "clampIntensity", &effects->bloom_clamp, 1);
 		grp = eevee_create_bloom_pass("Bloom Resolve", effects, e_data.bloom_resolve_sh[use_highres], &psl->bloom_resolve, true);
 		DRW_shgroup_uniform_float(grp, "bloomIntensity", &effects->bloom_intensity, 1);
 	}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 4ff36816b7c..822d63d5786 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -302,6 +302,7 @@ static void EEVEE_scene_layer_settings_create(RenderEngine *UNUSED(engine), IDPr
 	BKE_collection_engine_property_add_float(props, "bloom_knee", 0.5f);
 	BKE_collection_engine_property_add_float(props, "bloom_intensity", 0.8f);
 	BKE_collection_engine_property_add_float(props, "bloom_radius", 6.5f);
+	BKE_collection_engine_property_add_float(props, "bloom_clamp", 1.0f);
 
 	BKE_collection_engine_property_add_bool(props, "motion_blur_enable", false);
 	BKE_collection_engine_property_add_int(props, "motion_blur_samples", 8);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 280ebcbb1aa..f079f2884e6 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -370,6 +370,7 @@ typedef struct EEVEE_EffectsInfo {
 	float blit_texel_size[2];
 	float downsamp_texel_size[MAX_BLOOM_STEP][2];
 	float bloom_intensity;
+	float bloom_clamp;
 	float bloom_sample_scale;
 	float bloom_curve_threshold[4];
 	float unf_source_texel_size[2];
diff --git a/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
index 5bb9607d33c..9aab9ae7b4f 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
@@ -31,6 +31,7 @@ uniform vec2 sourceBufferTexelSize;
 
 /* Step Blit */
 uniform vec4 curveThreshold;
+uniform float clampIntensity;
 
 /* Step Upsample */
 uniform sampler2D baseBuffer; /* Previous accumulation buffer */
@@ -161,7 +162,11 @@ vec4 step_blit(void)
 	rq = curveThreshold.z * rq * rq;
 
 	/* Combine and apply the brightness response curve. */
-	m *= max(rq, br - curveThreshold.w) / max(br, 1e-5);
+	m *= max(rq, br - curveThreshold.w) / max(1e-5, br);
+
+	/* Clamp pixel intensity */
+	br = max(1e-5, brightness(m));
+	m *= 1.0 - max(0.0, br - clampIntensity) / br;
 
 	return vec4(m, 1.0);
 }
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index acccb9593bf..d7f3d914131 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6477,6 +6477,15 @@ static void rna_def_scene_layer_engine_settings_eevee(BlenderRNA *brna)
 	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
 	RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_SceneLayerEngineSettings_update");
 
+	prop = RNA_def_property(srna, "bloom_clamp", PROP_FLOAT, PROP_FACTOR);
+	RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_clamp_get",
+	                             "rna_LayerEngineSettings_Eevee_bloom_clamp_set", NULL);
+	RNA_def_property_ui_text(prop, "Clamp", "Maximum intensity a bloom pixel can have");
+	RNA_def_property_range(prop, 0.0f, 1000.0f);
+	RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+	RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_SceneLayerEngineSettings_update");
+
 	prop = RNA_def_property(srna, "bloom_intensity", PROP_FLOAT, PROP_UNSIGNED);
 	RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_intensity_get",
 	                             "rna_LayerEngineSettings_Eevee_bloom_intensity_set", NULL);



More information about the Bf-blender-cvs mailing list