1. Tone Mapping 基础概念

各位同学好,我是这门课的主讲。今天咱们从最基础的问题聊起——到底什么是 Tone Mapping?

我刚开始接触图像处理时,对这个概念也是一头雾水。说白了,Tone Mapping 就是把一张高动态范围(HDR)图像,映射到低动态范围(SDR)显示设备上的技术。你想想看,现实世界的光照范围从星光到太阳,跨度超过 10 个数量级,而我们的显示器只能显示大约 2 个数量级。这中间的差距,就得靠 Tone Mapping 来填。

HDR 与 SDR 的区别

先看一张对比表,这样更直观:

特性 HDR(高动态范围) SDR(标准动态范围)
亮度范围 0.0001 ~ 100,000 cd/m² 0.1 ~ 100 cd/m²
位深 10~16 bit(浮点) 8 bit(整数)
色彩空间 Rec.2020 / ACES Rec.709 / sRGB
存储格式 EXR、HDR、RAW JPEG、PNG、BMP
典型场景 真实世界、CG 渲染 普通照片、网页图片

我在项目中遇到过不少同学,觉得 HDR 就是「更亮」的意思。其实不对。HDR 的核心是「保留了更宽的亮度范围」,从最暗到最亮的细节都在。而 SDR 只能保留其中一小段,亮部或暗部必然被裁切。

关键区别一句话:HDR 记录的是场景的物理亮度,SDR 记录的是人眼感知的映射结果。

为什么需要 Tone Mapping

好,问题来了——既然 HDR 这么好,为什么我们不直接用 HDR 显示器?

原因有两个:

  1. 硬件限制——目前绝大多数显示器、手机屏幕、投影仪仍然是 SDR 设备。你拍了一张 HDR 照片,直接显示出来,亮部一片白,暗部一片黑,根本没法看。
  2. 人眼适应机制——人眼本身就是一个「动态 Tone Mapping 系统」。瞳孔、视网膜、视觉皮层协同工作,让我们在不同光照下都能看清细节。但显示器不会自动适应环境光,它需要算法来模拟这个过程。

我记得有一次做游戏引擎的渲染管线调试,美术同学给了一张 HDR 环境贴图,直接丢到屏幕上,整个场景过曝得像核爆现场。嗯,那时候我就意识到——没有 Tone Mapping,HDR 数据就是一堆没法用的数字。

我的经验:调试 Tone Mapping 参数时,永远不要只看显示器上的效果。最好同时看直方图和伪彩色图,否则你很容易被视觉错觉骗过去。

常见应用场景

Tone Mapping 不是某个小众领域的冷门技术。你每天都会用到它,只是没意识到:

  • 手机拍照——现在的旗舰手机都支持 HDR 拍摄,拍完立刻做 Tone Mapping 转成 SDR 预览图。我测试过某款机型,它的 Tone Mapping 参数调得偏亮,导致暗部噪点被放大,后来他们更新了固件才修好。
  • 游戏渲染——几乎所有 3A 游戏都在用 HDR 渲染管线。从《最后生还者》到《赛博朋克 2077》,Tone Mapping 直接决定了画面是「电影级」还是「塑料感」。
  • 影视后期——调色师在 DaVinci Resolve 里处理 RAW 素材时,第一步就是选 Tone Mapping 曲线。不同的曲线会改变画面的对比度、饱和度和暗部细节。
  • 自动驾驶——车载摄像头拍到的 HDR 场景(比如隧道出口),必须实时做 Tone Mapping 才能让目标检测算法正常工作。我曾经帮一个团队调过这类参数,发现默认的 Reinhard 算法在强逆光下会丢失行人轮廓,换成自适应曝光才解决。

避坑提醒:不要以为 Tone Mapping 只是「调亮度」。它会影响色相、饱和度、局部对比度,甚至引入光晕伪影。我曾经在一个项目里用了过强的局部 Tone Mapping,结果天空出现了「水波纹」状的色带,排查了两天才找到原因。

Tone Mapping 的核心逻辑

为了让你更直观地理解,我画了一张流程图:

Tone Mapping 核心流程 Tone Mapping 核心流程 HDR 输入图像 全局 Tone Mapping 局部 Tone Mapping(可选) 色彩校正 / 饱和度调整 SDR 输出图像 输入特性 浮点数据 宽动态范围 线性或 Log 编码 输出特性 8 bit 整数 有限动态范围 Gamma 编码 常见算法 Reinhard / Filmic ACES / 自适应曝光 局部 Tone Mapping

这张图展示了 Tone Mapping 的基本流程。HDR 数据进来后,先做全局映射(把整体亮度压到 SDR 范围),然后根据需求决定是否做局部映射(保留暗部/亮部细节),最后做色彩校正,输出 SDR 图像。

你可能会问:「为什么局部映射是可选的?」

因为局部映射计算量大,而且容易引入伪影。我个人的习惯是:如果场景的亮度分布比较均匀,只用全局映射就够了。只有在逆光、夜景、室内外混合光照这些极端场景下,才启用局部映射。

本章小结

这一章我们聊了三个核心问题:

  • 什么是 Tone Mapping——HDR 到 SDR 的亮度压缩过程
  • HDR 与 SDR 的区别——亮度范围、位深、色彩空间的差异
  • 为什么需要它——硬件限制 + 人眼适应机制

从下一章开始,我们会深入具体的映射算法。你会看到 Reinhard、Filmic、ACES 这些名字,也会亲手调参数,感受它们对画面的影响。

嗯,今天就到这里。记住一句话:Tone Mapping 不是「调亮度」,而是「在有限范围内,尽可能还原真实世界的视觉信息」。