Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Renderer|FX: Improved bloom shader quality
The shader now uses more samples per pixel, allowing a smoother end
result. The default value of 'rend-bloom-dispersion' was changed
to 1.0.
  • Loading branch information
skyjake committed Mar 30, 2014
1 parent 9bcdab7 commit ba33c2a
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 22 deletions.
28 changes: 18 additions & 10 deletions doomsday/client/data/renderer.pack/shaders/bloom-horizontal.fsh
Expand Up @@ -5,17 +5,25 @@ uniform highp vec2 uBlurStep;

varying highp vec2 vUV;

void main(void) {
void main(void)
{
highp vec4 sum = vec4(0.0);
sum += texture2D(uTex, vec2(vUV.s - 4.0 * uBlurStep.s, vUV.t)) * 0.05;
sum += texture2D(uTex, vec2(vUV.s - 3.0 * uBlurStep.s, vUV.t)) * 0.09;
sum += texture2D(uTex, vec2(vUV.s - 2.0 * uBlurStep.s, vUV.t)) * 0.123;
sum += texture2D(uTex, vec2(vUV.s - uBlurStep.s, vUV.t)) * 0.154;
sum += texture2D(uTex, vUV) * 0.165;
sum += texture2D(uTex, vec2(vUV.s + uBlurStep.s, vUV.t)) * 0.154;
sum += texture2D(uTex, vec2(vUV.s + 2.0 * uBlurStep.s, vUV.t)) * 0.123;
sum += texture2D(uTex, vec2(vUV.s + 3.0 * uBlurStep.s, vUV.t)) * 0.09;
sum += texture2D(uTex, vec2(vUV.s + 4.0 * uBlurStep.s, vUV.t)) * 0.05;

sum += texture2D(uTex, vec2(vUV.s - 7.0 * uBlurStep.s, vUV.t)) * 0.0249;
sum += texture2D(uTex, vec2(vUV.s - 6.0 * uBlurStep.s, vUV.t)) * 0.0367;
sum += texture2D(uTex, vec2(vUV.s - 5.0 * uBlurStep.s, vUV.t)) * 0.0498;
sum += texture2D(uTex, vec2(vUV.s - 4.0 * uBlurStep.s, vUV.t)) * 0.0660;
sum += texture2D(uTex, vec2(vUV.s - 3.0 * uBlurStep.s, vUV.t)) * 0.0803;
sum += texture2D(uTex, vec2(vUV.s - 2.0 * uBlurStep.s, vUV.t)) * 0.0915;
sum += texture2D(uTex, vec2(vUV.s - uBlurStep.s, vUV.t)) * 0.0996;
sum += texture2D(uTex, vUV) * 0.1027;
sum += texture2D(uTex, vec2(vUV.s + uBlurStep.s, vUV.t)) * 0.0996;
sum += texture2D(uTex, vec2(vUV.s + 2.0 * uBlurStep.s, vUV.t)) * 0.0915;
sum += texture2D(uTex, vec2(vUV.s + 3.0 * uBlurStep.s, vUV.t)) * 0.0803;
sum += texture2D(uTex, vec2(vUV.s + 4.0 * uBlurStep.s, vUV.t)) * 0.0660;
sum += texture2D(uTex, vec2(vUV.s + 5.0 * uBlurStep.s, vUV.t)) * 0.0498;
sum += texture2D(uTex, vec2(vUV.s + 6.0 * uBlurStep.s, vUV.t)) * 0.0367;
sum += texture2D(uTex, vec2(vUV.s + 7.0 * uBlurStep.s, vUV.t)) * 0.0249;

// Apply a threshold that gets rid of dark, non-luminous pixels.
highp float intens = max(sum.r, max(sum.g, sum.b));
Expand Down
29 changes: 19 additions & 10 deletions doomsday/client/data/renderer.pack/shaders/bloom-vertical.fsh
Expand Up @@ -3,16 +3,25 @@ uniform highp vec2 uBlurStep;

varying highp vec2 vUV;

void main(void) {
void main(void)
{
highp vec4 sum = vec4(0.0);
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 4.0 * uBlurStep.t)) * 0.05;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 3.0 * uBlurStep.t)) * 0.09;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 2.0 * uBlurStep.t)) * 0.123;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - uBlurStep.t )) * 0.154;
sum += texture2D(uTex, vUV) * 0.165;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + uBlurStep.t )) * 0.154;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 2.0 * uBlurStep.t)) * 0.123;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 3.0 * uBlurStep.t)) * 0.09;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 4.0 * uBlurStep.t)) * 0.05;

sum += texture2D(uTex, vec2(vUV.s, vUV.t - 7.0 * uBlurStep.t)) * 0.0249;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 6.0 * uBlurStep.t)) * 0.0367;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 5.0 * uBlurStep.t)) * 0.0498;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 4.0 * uBlurStep.t)) * 0.0660;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 3.0 * uBlurStep.t)) * 0.0803;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - 2.0 * uBlurStep.t)) * 0.0915;
sum += texture2D(uTex, vec2(vUV.s, vUV.t - uBlurStep.t )) * 0.0996;
sum += texture2D(uTex, vUV) * 0.1027;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + uBlurStep.t )) * 0.0996;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 2.0 * uBlurStep.t)) * 0.0915;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 3.0 * uBlurStep.t)) * 0.0803;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 4.0 * uBlurStep.t)) * 0.0660;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 5.0 * uBlurStep.t)) * 0.0498;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 6.0 * uBlurStep.t)) * 0.0367;
sum += texture2D(uTex, vec2(vUV.s, vUV.t + 7.0 * uBlurStep.t)) * 0.0249;

gl_FragColor = sum;
}
2 changes: 1 addition & 1 deletion doomsday/client/src/render/fx/bloom.cpp
Expand Up @@ -30,7 +30,7 @@ namespace fx {
static int bloomEnabled = true;
static float bloomIntensity = .65f;
static float bloomThreshold = .35f;
static float bloomDispersion = 1.75f;
static float bloomDispersion = 1;
static int bloomComplexity = 1;

DENG2_PIMPL(Bloom)
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/rendersystem.cpp
Expand Up @@ -160,7 +160,7 @@ DENG2_PIMPL(RenderSystem)
.define(SReg::IntCVar, "rend-bloom", 1)
.define(SReg::FloatCVar, "rend-bloom-intensity", .65f)
.define(SReg::FloatCVar, "rend-bloom-threshold", .35f)
.define(SReg::FloatCVar, "rend-bloom-dispersion", 1.75f)
.define(SReg::FloatCVar, "rend-bloom-dispersion", 1)

.define(SReg::IntCVar, "rend-fakeradio", 1)
.define(SReg::FloatCVar, "rend-fakeradio-darkness", 1.2f)
Expand Down

0 comments on commit ba33c2a

Please sign in to comment.