diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-06-24 06:24:59 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-06-24 06:24:59 +0300 |
commit | 28ff238c45a211a5b4d81f968860e71701080e2a (patch) | |
tree | 1292a8e392140e7bc5578de8fbc04493dde8b3cf /source/blender/draw/engines/eevee | |
parent | bff98ce3f72e9ddad35c4753ed7dd2177336be4e (diff) |
Eevee: Planar reflection: Fix normal deformation for background pixels.
Now it matches world cubemap perfectly.
Diffstat (limited to 'source/blender/draw/engines/eevee')
5 files changed, 8 insertions, 1 deletions
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); } |