#version 450 // Bloom 提取:从 HDR 颜色图中滤出超过阈值的部分(软阈值,保留超出比例)。 // 全屏 pass 通用 push(16B):param0 = 亮度阈值(HDR 域,1.0 = 仅高光溢出)。 layout(location = 0) in vec2 fragUV; layout(location = 0) out vec4 outColor; layout(set = 0, binding = 0) uniform sampler2D hdrImage; layout(push_constant) uniform PushConstants { float exposure; // 未用(程序级统一布局) float threshold; // param0 float _pad0; float _pad1; } pc; void main() { vec3 c = texture(hdrImage, fragUV).rgb; float l = max(c.r, max(c.g, c.b)); // 软阈值:只保留超出 threshold 的能量比例,避免硬切产生的块状边缘 float k = max(l - pc.threshold, 0.0) / max(l, 1e-4); outColor = vec4(c * k, 1.0); }