Update REMDER (Dx9)
This commit is contained in:
46
FLARDATA/Shader/bloomUpsample.fs
Normal file
46
FLARDATA/Shader/bloomUpsample.fs
Normal file
@@ -0,0 +1,46 @@
|
||||
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
|
||||
//If you use the supplied shader files you may not modify them unless you state in them what you changed
|
||||
//and also mention the source or who the author is.
|
||||
//
|
||||
//PBR bloom upsample shader for FLAR by Schmackbolzen based on code from https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
|
||||
//The only bug fix is using different filter radii for each direction since the texture is not square
|
||||
|
||||
#version 330
|
||||
uniform sampler2D srcTexture;
|
||||
uniform float filterRadiusX;
|
||||
uniform float filterRadiusY;
|
||||
|
||||
in vec2 texCoord;
|
||||
layout (location = 0) out vec3 upsample;
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = filterRadiusX;
|
||||
float y = filterRadiusY;
|
||||
|
||||
// Take 9 samples around current texel:
|
||||
// a - b - c
|
||||
// d - e - f
|
||||
// g - h - i
|
||||
// === ('e' is the current texel) ===
|
||||
vec3 a = texture(srcTexture, vec2(texCoord.x - x, texCoord.y + y)).rgb;
|
||||
vec3 b = texture(srcTexture, vec2(texCoord.x, texCoord.y + y)).rgb;
|
||||
vec3 c = texture(srcTexture, vec2(texCoord.x + x, texCoord.y + y)).rgb;
|
||||
|
||||
vec3 d = texture(srcTexture, vec2(texCoord.x - x, texCoord.y)).rgb;
|
||||
vec3 e = texture(srcTexture, vec2(texCoord.x, texCoord.y)).rgb;
|
||||
vec3 f = texture(srcTexture, vec2(texCoord.x + x, texCoord.y)).rgb;
|
||||
|
||||
vec3 g = texture(srcTexture, vec2(texCoord.x - x, texCoord.y - y)).rgb;
|
||||
vec3 h = texture(srcTexture, vec2(texCoord.x, texCoord.y - y)).rgb;
|
||||
vec3 i = texture(srcTexture, vec2(texCoord.x + x, texCoord.y - y)).rgb;
|
||||
|
||||
// Apply weighted distribution, by using a 3x3 tent filter:
|
||||
// 1 | 1 2 1 |
|
||||
// -- * | 2 4 2 |
|
||||
// 16 | 1 2 1 |
|
||||
upsample = e*4.0;
|
||||
upsample += (b+d+f+h)*2.0;
|
||||
upsample += (a+c+g+i);
|
||||
upsample *= 1.0 / 16.0;
|
||||
}
|
||||
Reference in New Issue
Block a user