From e206ee496f1edf202ffd0be527c197a223908ffa Mon Sep 17 00:00:00 2001 From: turanszkij Date: Fri, 10 Apr 2020 22:46:56 +0100 Subject: [PATCH] added masked background blur image effect --- WickedEngine/WickedEngine_SHADERS.vcxproj | 6 ++++++ WickedEngine/WickedEngine_SHADERS.vcxproj.filters | 6 ++++++ WickedEngine/imagePS_backgroundblur_masked.hlsl | 11 +++++++++++ .../imagePS_backgroundblur_masked_bicubic.hlsl | 11 +++++++++++ WickedEngine/wiImage.cpp | 12 +++++++++++- WickedEngine/wiVersion.cpp | 2 +- 6 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 WickedEngine/imagePS_backgroundblur_masked.hlsl create mode 100644 WickedEngine/imagePS_backgroundblur_masked_bicubic.hlsl diff --git a/WickedEngine/WickedEngine_SHADERS.vcxproj b/WickedEngine/WickedEngine_SHADERS.vcxproj index a4e9cedf0..92ff70ac5 100644 --- a/WickedEngine/WickedEngine_SHADERS.vcxproj +++ b/WickedEngine/WickedEngine_SHADERS.vcxproj @@ -409,6 +409,12 @@ Pixel + + Pixel + + + Pixel + Pixel 5.0 diff --git a/WickedEngine/WickedEngine_SHADERS.vcxproj.filters b/WickedEngine/WickedEngine_SHADERS.vcxproj.filters index 70a225e46..e6e1bc874 100644 --- a/WickedEngine/WickedEngine_SHADERS.vcxproj.filters +++ b/WickedEngine/WickedEngine_SHADERS.vcxproj.filters @@ -966,6 +966,12 @@ CS + + PS + + + PS + diff --git a/WickedEngine/imagePS_backgroundblur_masked.hlsl b/WickedEngine/imagePS_backgroundblur_masked.hlsl new file mode 100644 index 000000000..92177e57c --- /dev/null +++ b/WickedEngine/imagePS_backgroundblur_masked.hlsl @@ -0,0 +1,11 @@ +#include "imageHF.hlsli" + +float4 main(VertextoPixel input) : SV_TARGET +{ + float4 color = texture_base.SampleLevel(Sampler, input.uv0, xMipLevel) * xColor; + float3 background = texture_background.SampleLevel(Sampler, (input.uv_screen.xy * float2(0.5f, -0.5f) + 0.5f) / input.uv_screen.w, xMipLevel_Background).rgb; + float4 mask = texture_mask.SampleLevel(Sampler, input.uv1, xMipLevel); + color *= mask; + + return float4(lerp(background, color.rgb, color.a), mask.a); +} diff --git a/WickedEngine/imagePS_backgroundblur_masked_bicubic.hlsl b/WickedEngine/imagePS_backgroundblur_masked_bicubic.hlsl new file mode 100644 index 000000000..a7db7d95a --- /dev/null +++ b/WickedEngine/imagePS_backgroundblur_masked_bicubic.hlsl @@ -0,0 +1,11 @@ +#include "imageHF.hlsli" + +float4 main(VertextoPixel input) : SV_TARGET +{ + float4 color = SampleTextureCatmullRom(texture_base, input.uv0, xMipLevel) * xColor; + float3 background = texture_background.SampleLevel(Sampler, (input.uv_screen.xy * float2(0.5f, -0.5f) + 0.5f) / input.uv_screen.w, xMipLevel_Background).rgb; + float4 mask = texture_mask.SampleLevel(Sampler, input.uv1, xMipLevel); + color *= mask; + + return float4(lerp(background, color.rgb, color.a), mask.a); +} diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index 963cd3ee4..18ec21307 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -22,6 +22,7 @@ namespace wiImage IMAGE_SHADER_SEPARATENORMALMAP, IMAGE_SHADER_MASKED, IMAGE_SHADER_BACKGROUNDBLUR, + IMAGE_SHADER_BACKGROUNDBLUR_MASKED, IMAGE_SHADER_FULLSCREEN, IMAGE_SHADER_COUNT }; @@ -212,7 +213,14 @@ namespace wiImage { if (Mask) { - targetShader = IMAGE_SHADER_MASKED; + if (background_blur) + { + targetShader = IMAGE_SHADER_BACKGROUNDBLUR_MASKED; + } + else + { + targetShader = IMAGE_SHADER_MASKED; + } } else { @@ -251,11 +259,13 @@ namespace wiImage wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_SIMPLE], "imagePS_separatenormalmap.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_SIMPLE], "imagePS_masked.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_BACKGROUNDBLUR][IMAGE_SAMPLING_SIMPLE], "imagePS_backgroundblur.cso"); + wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_BACKGROUNDBLUR_MASKED][IMAGE_SAMPLING_SIMPLE], "imagePS_backgroundblur_masked.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_SIMPLE], "screenPS.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_BICUBIC], "imagePS_bicubic.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_BICUBIC], "imagePS_separatenormalmap_bicubic.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_BICUBIC], "imagePS_masked_bicubic.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_BACKGROUNDBLUR][IMAGE_SAMPLING_BICUBIC], "imagePS_backgroundblur_bicubic.cso"); + wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_BACKGROUNDBLUR_MASKED][IMAGE_SAMPLING_BICUBIC], "imagePS_backgroundblur_masked_bicubic.cso"); wiRenderer::LoadShader(PS, imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_BICUBIC], "screenPS_bicubic.cso"); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 4c6542165..fd2192c15 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 39; // minor bug fixes, alterations, refactors, updates - const int revision = 47; + const int revision = 48; long GetVersion()