-
-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature - Adds Dual Kawase Blur filter. (#10)
* Adds Interpolated Dual Kawase blur filter, allowing for very high blur radius with extremely efficient computation. * Improved handling of UI changes between blur algorithms.
- Loading branch information
1 parent
05e6635
commit ea2af49
Showing
9 changed files
with
509 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
uniform float4x4 ViewProj; | ||
uniform texture2d image; | ||
uniform float2 texel_step; | ||
|
||
sampler_state textureSampler{ | ||
Filter = Linear; | ||
AddressU = Clamp; | ||
AddressV = Clamp; | ||
MinLOD = 0; | ||
MaxLOD = 0; | ||
}; | ||
|
||
struct VertData { | ||
float4 pos : POSITION; | ||
float2 uv : TEXCOORD0; | ||
}; | ||
|
||
VertData mainTransform(VertData v_in) | ||
{ | ||
v_in.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj); | ||
return v_in; | ||
} | ||
|
||
float4 mainImage(VertData v_in) : TARGET | ||
{ | ||
// Downsample filter as defined here: | ||
// https://blog.en.uwa4d.com/2022/09/06/screen-post-processing-effects-chapter-5-dual-blur-and-its-implementation/ | ||
float4 col = image.Sample(textureSampler, v_in.uv); | ||
float4 col_dn_rt = image.Sample(textureSampler, v_in.uv + 0.5f*texel_step); | ||
float4 col_dn_lt = image.Sample(textureSampler, v_in.uv + 0.5f*float2(-texel_step.x, texel_step.y)); | ||
float4 col_up_rt = image.Sample(textureSampler, v_in.uv + 0.5f*float2(texel_step.x, -texel_step.y)); | ||
float4 col_up_lt = image.Sample(textureSampler, v_in.uv - 0.5f*texel_step); | ||
|
||
return (4.0*col + col_dn_rt + col_dn_lt + col_up_rt + col_up_lt)/8.0; | ||
} | ||
|
||
technique Draw | ||
{ | ||
pass | ||
{ | ||
vertex_shader = mainTransform(v_in); | ||
pixel_shader = mainImage(v_in); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
uniform float4x4 ViewProj; | ||
uniform texture2d image; | ||
uniform float2 texel_step; | ||
|
||
sampler_state textureSampler{ | ||
Filter = Linear; | ||
AddressU = Clamp; | ||
AddressV = Clamp; | ||
MinLOD = 0; | ||
MaxLOD = 0; | ||
}; | ||
|
||
struct VertData { | ||
float4 pos : POSITION; | ||
float2 uv : TEXCOORD0; | ||
}; | ||
|
||
VertData mainTransform(VertData v_in) | ||
{ | ||
v_in.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj); | ||
return v_in; | ||
} | ||
|
||
float4 mainImage(VertData v_in) : TARGET | ||
{ | ||
// Upsample filter as defined here: | ||
// https://blog.en.uwa4d.com/2022/09/06/screen-post-processing-effects-chapter-5-dual-blur-and-its-implementation/ | ||
float4 col_dn = image.Sample(textureSampler, v_in.uv + float2(0.0f, texel_step.y)); | ||
float4 col_up = image.Sample(textureSampler, v_in.uv + float2(0.0f, -texel_step.y)); | ||
float4 col_rt = image.Sample(textureSampler, v_in.uv + float2( texel_step.x, 0.0f)); | ||
float4 col_lt = image.Sample(textureSampler, v_in.uv + float2(-texel_step.x, 0.0f)); | ||
float4 col_dn_rt = image.Sample(textureSampler, v_in.uv + 0.5f*texel_step) * 2.0f; | ||
float4 col_dn_lt = image.Sample(textureSampler, v_in.uv + 0.5f*float2(-texel_step.x, texel_step.y)) * 2.0f; | ||
float4 col_up_rt = image.Sample(textureSampler, v_in.uv + 0.5f*float2( texel_step.x, -texel_step.y)) * 2.0f; | ||
float4 col_up_lt = image.Sample(textureSampler, v_in.uv - 0.5f*texel_step) * 2.0f; | ||
|
||
return (col_dn + col_up + col_rt + col_lt + col_dn_rt + col_dn_lt + col_up_rt + col_up_lt)/12.0f; | ||
} | ||
|
||
technique Draw | ||
{ | ||
pass | ||
{ | ||
vertex_shader = mainTransform(v_in); | ||
pixel_shader = mainImage(v_in); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
uniform float4x4 ViewProj; | ||
uniform texture2d image; | ||
uniform texture2d image2; | ||
|
||
uniform float ratio; | ||
|
||
sampler_state textureSampler{ | ||
Filter = Linear; | ||
AddressU = Clamp; | ||
AddressV = Clamp; | ||
MinLOD = 0; | ||
MaxLOD = 0; | ||
}; | ||
|
||
struct VertData { | ||
float4 pos : POSITION; | ||
float2 uv : TEXCOORD0; | ||
}; | ||
|
||
VertData mainTransform(VertData v_in) | ||
{ | ||
v_in.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj); | ||
return v_in; | ||
} | ||
|
||
float4 mainImage(VertData v_in) : TARGET | ||
{ | ||
// 1. Sample incoming pixel | ||
float4 c1 = image.Sample(textureSampler, v_in.uv); | ||
float4 c2 = image2.Sample(textureSampler, v_in.uv); | ||
return lerp(c1, c2, float4(ratio, ratio, ratio, ratio)); | ||
} | ||
|
||
technique Draw | ||
{ | ||
pass | ||
{ | ||
vertex_shader = mainTransform(v_in); | ||
pixel_shader = mainImage(v_in); | ||
} | ||
} |
Oops, something went wrong.