GameTech/URP 渲染实战

案例 9.10HDR 截断 vs 色调映射入门

目标:同一个强光场景(太阳强度 4.5、自发光强度 5),对比不做色调映射、Neutral、ACES 三种输出。

图 9-27左:不做色调映射,超过 1 的数值被直接截断,红球亮面、自发光方块成了没有层次的色块;中:Neutral;右:ACES,高光被压缩、对比和饱和度被重新分配。

配图脚本里只多了两行:打开相机后处理,并在全局 Volume 里加入 Tonemapping 组件(完整代码见 Ch09/Editor/Ch09Shots.cs 的 Hdr 方法):

var t = s.Post().Add<Tonemapping>();     // 打开相机后处理,返回全局 Volume 的 Profile
t.mode.Override(TonemappingMode.ACES);   // 中间那张用 TonemappingMode.Neutral

左图的红球亮面只剩一种颜色,方块被截成了单一的浅黄,信息已经丢失,后面无论怎么调色都找不回来。色调映射之后,亮部层次被保留,但整体变暗、变灰——实际项目中通常还要配合曝光(Post Exposure)一起调。本书的配图默认关闭后处理,目的是让你看到 Shader 的原始输出;做产品时,PBR 材质必须在开启色调映射的环境下检查,否则会把“截断造成的过曝”误判为“材质太亮”。各种色调映射算法的细节见第 27 章。