5.4 后处理效果:Bloom、色调映射与FXAA


5.4 后处理效果:Bloom、色调映射与FXAA

本节摘要:后处理把整帧渲染结果当纹理再加工,是电影感的化装间。本节解剖一条完整的后处理链——亮度提取、高斯模糊(Bloom 主体)、叠加、色调映射,讲清两遍渲染骨架如何扩展成多级链、Ping-Pong 缓冲怎么复用、色调映射为什么是终点站,以及 FXAA 与 MSAA 两种抗锯齿路线的取舍。HDR 渲染到泛光全链在掌握之内。

化装间的入场规则

后处理的入场券只有一张:3.3 节的两遍闭环。第一遍把场景渲进纹理,第二遍不再直接上屏,而是画一个铺满屏幕的四边形,用专门的着色器采样这张纹理做加工。加工可以串很多道——每道消费上一道的产出、产出下一道的素材,这就是后处理链。链上每一站都是一个 FBO 纹理加一个全屏四边形着色器,结构完全同构。

两条入场规则决定链的生死。其一,中转站必须保持 HDR 精度:场景渲进浮点格式的纹理(亮度可以超过 1),所有加工在浮点域完成,最后一站才压回屏幕能显示的 0 到 1——中途用普通 RGBA 纹理中转,高亮度信息早就被截断,Bloom 就没了燃料。其二,终点必须是色调映射:HDR 值到 0 到 1 的压缩方式就是画面风格的化学配方,映射曲线决定了高光滚降的「胶片感」。

图 5-4 后处理链:从 HDR 场景到屏幕的四级流水

图 5-4 后处理链:从 HDR 场景到屏幕的四级流水

Bloom 的实现要点

Bloom(泛光)的观感来自三件事的乘积:HDR 场景里真实的高亮度、阈值筛选的软硬、模糊的半径与层次。工程要点三个。软阈值:阈值处用 smoothstep 平滑过渡(4.1 节那三行函数的实战),硬阈值会在亮度临界物体边缘生出跳动。可分离模糊:二维高斯模糊拆成水平一遍加垂直一遍,计算量从半径平方降到两倍线性——这个拆法是卷积可分离性的应用,所有后处理模糊都用它。降采样模糊:把亮度图缩到四分之一分辨率再模糊(mipmap 或一次缩小渲染),带宽省十六倍、模糊半径等效放大四倍,再逐级升采样叠加,得到有层次的辉光而不是均匀的雾。

色调映射:终点站的权力

链上所有效果都在 HDR 域酝酿,屏幕只认 0 到 1。压缩方式不是简单截断——截断把所有高光压成同一片死白。色调映射用一条曲线决定「亮的部分怎么变暗、暗的部分怎么抬亮」:指数型的滚降让高光柔和衰减(胶片质感),肩部缓、趾部陡的曲线保留阴影细节但对比锐利(写实向)。常用公式就两三个变体,选一条当项目标配,配合曝光参数(整体亮度旋钮)形成项目的视觉签名。色彩分级在映射之后(或在映射中做饱和度补偿),顺序错了分级会随曝光漂移。

抗锯齿:两条路线的账单

几何边缘的锯齿在光栅化(2.2 节质心规则)就埋下:像素要么归属要么不归属,边界就是台阶。两条路线的账:MSAA(多重采样)在光栅化阶段对每个像素采多个子样本的覆盖与深度,几何边缘平滑得干净利落——但只管几何边缘,着色器仍然每像素只跑一次,且纹理带宽、显存有额外成本,与延迟渲染(深度预处理)兼容性差。FXAA(后处理抗锯齿)在后处理链上加一站:分析局部对比度找边、沿边方向模糊——便宜、通用、兼容一切管线,代价是对高对比细节(细线、文字)偶尔误伤。后处理时代的主流选择是 FXAA 起步,需要更高质量再上时间性抗锯齿(用上一帧的历史信息,进阶路标)。

⚠️ 常见坑:MSAA 与自定义 FBO 的组合。默认帧缓冲开 MSAA 窗口库替你管了;自己搭的 FBO 要手动造多重采样纹理、渲染完再「解析」成普通纹理才能进后处理链。忘了解析步骤,画面花屏或黑屏。工程顺序建议:先把后处理链跑通(无 MSAA),再决定要不要为几何质量加这条复杂度。

一个完整的链配置过程

把机制落成可跑的配置,按顺序核对七件套。第一件,场景渲进 HDR 浮点纹理(附件格式选 RGBA16F 或 RGBA32F,视精度需求与带宽预算取舍,16F 足够绝大多数场景)。第二件,亮度提取 pass:读 HDR 纹理、按软阈值输出一张只有亮部的纹理(阈值参数从 1.0 起调,场景整体偏暗降到 0.8 上下)。第三件,降采样 pass:把亮度图缩到四分之一尺寸(渲到一张小 FBO)。第四件,模糊 pass 两连:先水平后垂直,各是一次全屏绘制、着色器里九次采样加权和。第五件,叠加 pass:原始 HDR 加模糊图按强度系数混合。第六件,色调映射 pass:压回默认帧缓冲,曝光参数与映射曲线在这站生效。第七件,FXAA 插在色调映射之后或与之合并——注意 FXAA 的输入最好是最终显示图像(LDR 域),放在 HDR 域效果打折。

调参的顺序纪律:先定曝光(整体亮度对不对),再定阈值(什么算「亮部」),再定模糊强度与尺寸(辉光的半径感),最后动映射曲线(风格的化学配方)。顺序乱了会互相污染——曝光没定就调阈值,阈值等于在漂移的地基上砌墙。

常见症状速查

症状 第一嫌疑 第二嫌疑
完全没有辉光 亮度阈值过高 中转纹理不是浮点格式
辉光是硬边色块 阈值是硬切而非 smoothstep 模糊 pass 根本没执行
画面整体偏灰过曝 没做色调映射直接截断 曝光参数过高
高光一片死白 映射曲线滚降太平 HDR 中转被 RGBA8 截断
文字细线发糊 FXAA 误伤高频细节 FXAA 放在了升采样之后

💡 关键直觉:后处理链的调试入口是「逐站断链」——把中间纹理直接画到屏幕上看内容。亮度图该是一片黑底亮点、模糊图该是雾状光斑、叠加图该已有渗光。哪一站内容不对,病灶就在哪一站,比对着色器代码发呆快十倍。

本节要点回顾

  • 两遍闭环扩展成链:每站=全屏四边形+采样着色器,同构积木随便插
  • 中转必须 HDR:浮点纹理保高光燃料,普通 RGBA 中转=提前截断
  • Bloom 三要点:软阈值、可分离模糊、降采样出层次
  • 色调映射是终点站:HDR 压缩曲线=画面风格的化学配方,映射后分级
  • Ping-Pong 两块纹理跑全链:轮流读写,别同时读写同一张
  • FXAA 便宜通用,MSAA 干净但贵且挑管线:从 FXAA 起步的性价比路线

效果栈四层到此解剖完毕:光、影、材质、整帧化装。但每加一层,帧预算就薄一分——下一章解剖台五把镜头转向开销本身:绘制调用的数量级压缩、显存带宽的精打细算、GPU 通用计算的引入,AZDO 把驱动开销逼近零的工程学。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U