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)

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

Reply via email to