GLSL 效果示例
Bloom 辉光:只让超过阈值的亮部扩散
对照原图、亮部提取和最终合成,普通白色区域无需全部发光。
在线示例
修改右侧代码,左侧预览会实时更新。
观察什么
对照原图、亮部提取和最终合成,普通白色区域无需全部发光。
实现原理
先提取亮点,再模糊,最后加回原图。教学缓冲采用 RGBA8,演示阈值和扩散流程,不代表 HDR 辉光管线。
找到控制效果的代码
c=texture2D(u_texture,uv).rgb+texture2D(u_blur,uv).rgb*(.5+u_parameter*2.);
最终 Fragment 把 u_texture 与 u_blur 合成,u_bright 则先去掉较暗颜色。把 Fragment 中的 .5+u_parameter*2. 换成 0.,可完全隐藏辉光;再在预览下方选择 u_bright,查看保留下来的亮部。
动手修改
在 u_bright 标签,把 smoothstep(.4,.7,l) 改为 smoothstep(.7,.9,l)。能通过亮部提取的颜色会减少,因此即使合成强度相同,最终辉光也会更集中于亮区。
调试与成本
u_blur 每像素采样 81 次,最终着色器则各读取一次原图和模糊图。把 u_blur 中的 .004 采样间距改为 .008,同样的采样点会分得更开,光晕扩大但采样次数不增加。