diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-05-29 13:38:19 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-05-29 17:22:53 +0300 |
commit | d5889f57ae06d21312f3a82bcefe17cc660aef49 (patch) | |
tree | d7b00abacf85e9acc7e64386b4d8333d1d318eaf /source | |
parent | 8f670dd855b1d81fcf619b3b94ba4bfaf51e896d (diff) |
EEVEE: LookDev fadeout to the world horizon color
Diffstat (limited to 'source')
5 files changed, 13 insertions, 10 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index c7a2951a670..a45d69794f3 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -417,7 +417,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat float *col = ts.colorBackground; /* LookDev */ - EEVEE_lookdev_cache_init(vedata, &grp, e_data.probe_default_studiolight_sh, psl->probe_background, pinfo); + EEVEE_lookdev_cache_init(vedata, &grp, e_data.probe_default_studiolight_sh, psl->probe_background, wo, pinfo); /* END */ if (!grp && wo) { col = &wo->horr; diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c index 80d3ff711af..1060fb00800 100644 --- a/source/blender/draw/engines/eevee/eevee_lookdev.c +++ b/source/blender/draw/engines/eevee/eevee_lookdev.c @@ -28,10 +28,11 @@ #include "BKE_studiolight.h" #include "DNA_screen_types.h" +#include "DNA_world_types.h" #include "eevee_private.h" -void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, EEVEE_LightProbesInfo *pinfo) +void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, World *world, EEVEE_LightProbesInfo *pinfo) { EEVEE_StorageList *stl = vedata->stl; const DRWContextState *draw_ctx = DRW_context_state_get(); @@ -50,6 +51,7 @@ void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShad axis_angle_to_mat3_single(stl->g_data->studiolight_matrix, 'Z', v3d->shading.studiolight_rot_z); DRW_shgroup_uniform_mat3(*grp, "StudioLightMatrix", stl->g_data->studiolight_matrix); + DRW_shgroup_uniform_vec3(*grp, "color", &world->horr, 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_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c index cbbb1d6f6b1..32bd6f23d84 100644 --- a/source/blender/draw/engines/eevee/eevee_materials.c +++ b/source/blender/draw/engines/eevee/eevee_materials.c @@ -923,7 +923,7 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) float *col = ts.colorBackground; /* LookDev */ - EEVEE_lookdev_cache_init(vedata, &grp, e_data.default_studiolight_background, psl->background_pass, NULL); + EEVEE_lookdev_cache_init(vedata, &grp, e_data.default_studiolight_background, psl->background_pass, wo, NULL); /* END */ if (!grp && wo) { diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index d57f6464ec1..6b2e2ebfdcb 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -942,7 +942,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct R void EEVEE_render_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer); /** eevee_lookdev.c */ -void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, EEVEE_LightProbesInfo *pinfo); +void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, struct World *world, EEVEE_LightProbesInfo *pinfo); void EEVEE_lookdev_draw_background(EEVEE_Data *vedata); /* Shadow Matrix */ 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 9a1616648eb..386f3d68bf8 100644 --- a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl @@ -9,9 +9,8 @@ uniform mat3 StudioLightMatrix; uniform sampler2D image; uniform float studioLightFadeout = 0.0; in vec3 viewPosition; -#else -uniform vec3 color; #endif +uniform vec3 color; out vec4 FragColor; @@ -49,11 +48,13 @@ void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color void main() { #ifdef LOOKDEV vec3 worldvec; - vec4 color; + vec4 background_color; background_transform_to_world(viewPosition, worldvec); - node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image, color); - color *= (1.0 - studioLightFadeout); + node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image, background_color); + background_color.rgb = mix(background_color.rgb, color, studioLightFadeout); +#else + vec3 background_color = color; #endif - FragColor = vec4(clamp(color.rgb, vec3(0.0), vec3(1e10)), backgroundAlpha); + FragColor = vec4(clamp(background_color.rgb, vec3(0.0), vec3(1e10)), backgroundAlpha); } |