add compute shader to auto calculate screen exposure, add SSBO impl
This commit is contained in:
26
Editor/assets/shaders/Histogram.glsl
Normal file
26
Editor/assets/shaders/Histogram.glsl
Normal file
@ -0,0 +1,26 @@
|
||||
#type compute
|
||||
#version 460 core
|
||||
layout(local_size_x = 16, local_size_y = 16) in;
|
||||
|
||||
layout(binding = 0) uniform sampler2D u_SceneColor;
|
||||
layout(binding = 1, std430) buffer Histogram {
|
||||
uint bins[64];
|
||||
};
|
||||
|
||||
uniform float u_LogMin;
|
||||
uniform float u_LogMax;
|
||||
|
||||
void main() {
|
||||
ivec2 texel = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = textureSize(u_SceneColor, 0);
|
||||
if (texel.x >= size.x || texel.y >= size.y) return;
|
||||
|
||||
vec3 color = texelFetch(u_SceneColor, texel, 0).rgb;
|
||||
float lum = max(dot(color, vec3(0.2126, 0.7152, 0.0722)), 0.0001);
|
||||
float logLum = log2(lum);
|
||||
|
||||
float invLogRange = 1.0 / (u_LogMax - u_LogMin);
|
||||
float t = (logLum - u_LogMin) * invLogRange;
|
||||
int bin = int(clamp(t * 64.0, 0.0, 63.0));
|
||||
atomicAdd(bins[bin], 1u);
|
||||
}
|
||||
Reference in New Issue
Block a user