[Bf-blender-cvs] [28ff238c45a] blender2.8: Eevee: Planar reflection: Fix normal deformation for background pixels.

Clément Foucault noreply at git.blender.org
Sat Jun 24 05:13:14 CEST 2017


Commit: 28ff238c45a211a5b4d81f968860e71701080e2a
Author: Clément Foucault
Date:   Sat Jun 24 05:24:59 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB28ff238c45a211a5b4d81f968860e71701080e2a

Eevee: Planar reflection: Fix normal deformation for background pixels.

Now it matches world cubemap perfectly.

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

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_materials.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
M	source/blender/gpu/shaders/gpu_shader_material.glsl

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

diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 394e284c63b..c024eb609b3 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -60,6 +60,7 @@ static void EEVEE_engine_init(void *ved)
 		/* Alloc transient pointers */
 		stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
 	}
+	stl->g_data->background_alpha = 1.0f;
 
 	EEVEE_materials_init();
 	EEVEE_lights_init(sldata);
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 37f28140f91..8ec603030c5 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -1024,6 +1024,7 @@ static void render_scene_to_planar(
 	GPUTexture *tmp_minmaxz = stl->g_data->minmaxz;
 	txl->planar_pool = e_data.planar_pool_placeholder;
 	stl->g_data->minmaxz = e_data.planar_minmaxz;
+	stl->g_data->background_alpha = FLT_MAX; /* Alpha is distance for planar reflections. */
 
 	DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
 	DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
@@ -1057,6 +1058,7 @@ static void render_scene_to_planar(
 	/* Restore */
 	txl->planar_pool = tmp_planar_pool;
 	stl->g_data->minmaxz = tmp_minmaxz;
+	stl->g_data->background_alpha = 1.0;
 	DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
 	DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
 	DRW_viewport_matrix_override_unset(DRW_MAT_VIEW);
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 035766de911..6126aab1014 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -480,6 +480,7 @@ void EEVEE_materials_cache_init(EEVEE_Data *vedata)
 				grp = DRW_shgroup_material_create(gpumat, psl->background_pass);
 
 				if (grp) {
+					DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
 					DRW_shgroup_call_add(grp, geom, NULL);
 				}
 				else {
@@ -494,6 +495,7 @@ void EEVEE_materials_cache_init(EEVEE_Data *vedata)
 		if (grp == NULL) {
 			grp = DRW_shgroup_create(e_data.default_background, psl->background_pass);
 			DRW_shgroup_uniform_vec3(grp, "color", col, 1);
+			DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
 			DRW_shgroup_call_add(grp, geom, NULL);
 		}
 	}
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 0d620fcf8fb..a1abb6c71e2 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -397,6 +397,7 @@ typedef struct EEVEE_PrivateData {
 	struct GHash *material_hash;
 	struct GHash *hair_material_hash;
 	struct GPUTexture *minmaxz;
+	float background_alpha; /* TODO find a better place for this. */
 } EEVEE_PrivateData; /* Transient data */
 
 /* eevee_data.c */
diff --git a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
index 075ee22dc6f..90af87756f0 100644
--- a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
@@ -1,8 +1,9 @@
 
+uniform float backgroundAlpha;
 uniform vec3 color;
 
 out vec4 FragColor;
 
 void main() {
-	FragColor = vec4(color, 1.0);
+	FragColor = vec4(color, backgroundAlpha);
 }
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index bc4bfc6f281..28a94f8d78d 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -3855,9 +3855,11 @@ void node_output_material(vec4 surface, vec4 volume, float displacement, out vec
 	result = surface;
 }
 
+uniform float backgroundAlpha;
+
 void node_output_world(vec4 surface, vec4 volume, out vec4 result)
 {
-	result = vec4(surface.rgb, 1.0);
+	result = vec4(surface.rgb, backgroundAlpha);
 }
 
 void convert_metallic_to_specular(vec4 basecol, float metallic, float specular_fac, out vec4 diffuse, out vec4 f0)




More information about the Bf-blender-cvs mailing list