Jarvis, Optimise my shit
This commit is contained in:
parent
d1abde919d
commit
9424b29d0a
50 changed files with 1469 additions and 1232 deletions
|
|
@ -1,72 +1,42 @@
|
|||
#version 450
|
||||
|
||||
layout(constant_id = 0) const int USE_AA = 0;
|
||||
|
||||
const float GAMMA_CONST = 0.4545;
|
||||
const float SPAN_MAX = 8.0;
|
||||
const float REDUCE_MIN = 1.0/128.0;
|
||||
const float REDUCE_MUL = 1.0/32.0;
|
||||
|
||||
layout(location = 0) in vec2 inTextCoord;
|
||||
layout(location = 0) out vec4 outFragColor;
|
||||
layout(location = 1) out vec4 outBloomColour;
|
||||
|
||||
layout(set = 0, binding = 0) uniform sampler2DMS inputTexture;
|
||||
layout(set = 0, binding = 1) uniform sampler2D bloomImage;
|
||||
|
||||
layout(set = 1, binding = 0) uniform ScreenSize{
|
||||
vec2 size;
|
||||
} screenSize;
|
||||
layout(push_constant) uniform PassConfig {
|
||||
int horizontal;
|
||||
float GAMMA_CONST;
|
||||
float Exposure;
|
||||
float blur_radius;
|
||||
vec2 bloomSize;
|
||||
} config;
|
||||
|
||||
vec4 gamma(vec4 color){
|
||||
return color = vec4(pow(color.rgb,vec3(GAMMA_CONST)),color.a);
|
||||
}
|
||||
vec3 HDR(float Gamma, float Exposure, sampler2D Texture, vec2 TexCoords){
|
||||
vec3 hdrColor = texture(Texture, TexCoords).rgb;
|
||||
vec3 mapped = vec3(1.0) - exp(-hdrColor * Exposure);
|
||||
mapped = pow(mapped, vec3(1.0 / Gamma));
|
||||
return mapped;
|
||||
}
|
||||
vec4 msaa(int sampleCount, sampler2DMS textureIn,vec2 TextCoord){
|
||||
ivec2 pixelCoords = ivec2(TextCoord * textureSize(textureIn));
|
||||
vec4 msaa(int sampleCount, sampler2DMS textureIn, vec2 TextCoord) {
|
||||
ivec2 size = textureSize(textureIn);
|
||||
ivec2 pixelCoords = clamp(ivec2(TextCoord * vec2(size)), ivec2(0), size - 1);
|
||||
vec4 colorSum = vec4(0.0);
|
||||
|
||||
for(int i = 0; i < sampleCount; ++i) {
|
||||
vec4 sampleColor = texelFetch(textureIn, pixelCoords, i);
|
||||
colorSum += sampleColor;
|
||||
}
|
||||
for (int i = 0; i < sampleCount; i++) colorSum += texelFetch(textureIn, pixelCoords, i);
|
||||
return colorSum / float(sampleCount);
|
||||
}
|
||||
|
||||
void main(){
|
||||
ivec2 pixelCoords = ivec2(inTextCoord * textureSize(inputTexture));
|
||||
vec3 bloomAt(ivec2 pixel, ivec2 size) {
|
||||
return texelFetch(bloomImage, clamp(pixel, ivec2(0), size - 1), 0).rgb;
|
||||
}
|
||||
|
||||
outFragColor = texelFetch(inputTexture, pixelCoords, 0);
|
||||
vec3 upsampleBloom(vec2 uv) {
|
||||
ivec2 size = textureSize(bloomImage, 0);
|
||||
vec2 pixel = uv * vec2(size) - 0.5;
|
||||
ivec2 base = ivec2(floor(pixel));
|
||||
vec2 blend = fract(pixel);
|
||||
return mix(mix(bloomAt(base, size), bloomAt(base + ivec2(1, 0), size), blend.x),
|
||||
mix(bloomAt(base + ivec2(0, 1), size), bloomAt(base + ivec2(1, 1), size), blend.x), blend.y);
|
||||
}
|
||||
|
||||
if(USE_AA == 0){
|
||||
outFragColor = texelFetch(inputTexture,pixelCoords,0);
|
||||
}
|
||||
if(USE_AA == 1){
|
||||
outFragColor = texelFetch(inputTexture,pixelCoords,0);
|
||||
}
|
||||
if(USE_AA == 2){
|
||||
outFragColor = msaa(2,inputTexture,inTextCoord);
|
||||
}
|
||||
if(USE_AA == 3){
|
||||
outFragColor = msaa(4,inputTexture,inTextCoord);
|
||||
}
|
||||
if(USE_AA == 4){
|
||||
outFragColor = msaa(8,inputTexture,inTextCoord);
|
||||
}
|
||||
|
||||
vec3 color = outFragColor.rgb;
|
||||
|
||||
float brightness = dot(color, vec3(0.2126, 0.7152, 0.0722));
|
||||
|
||||
float threshold = 1.0;
|
||||
float softKnee = 0.5;
|
||||
|
||||
float contribution = max(brightness - threshold, 0.0);
|
||||
contribution = contribution / max(contribution + softKnee, 0.0001);
|
||||
|
||||
outBloomColour = vec4(color * contribution, 1.0);
|
||||
}
|
||||
void main() {
|
||||
vec4 sceneColor = msaa(textureSamples(inputTexture), inputTexture, inTextCoord);
|
||||
vec3 hdrColour = max(sceneColor.rgb + upsampleBloom(inTextCoord), vec3(0.0));
|
||||
vec3 result = vec3(1.0) - exp(-hdrColour * config.Exposure);
|
||||
outFragColor = vec4(pow(result, vec3(1.0 / config.GAMMA_CONST)), sceneColor.a);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue