古墓丽影10中HDR的运用

《古墓丽影:崛起》PC版中的画面给玩家留下深刻印象。2016年6月,晶体动力的老搭档,也是负责《古墓丽影:崛起》PC版制作的 Nixxes 工作室和 NVIDIA 的制作人共同讲述了如何在《崛起》中贯彻 HDR。讲述者分别是来自 Nixxes 的 Jeroen Soethoudt 和 Jurjen Katsman ,以及来自 NVIDIA 的 Holger Gruen。原文发表于 NVIDIA 博客,下文为古墓丽影中文站根据博客内容编译而成。

《古墓丽影:崛起》中HDR的运用

很多游戏都达到了 HDR,也就是高动态范围(higher dynamic range)渲染,但这些年来,色调映射都降到 SDR,也就是标准动态范围(standard dynamic range)。在对图像输出提出更高要求的今天,HDR 对于色调映射的要求也水涨船高,因为 SDR 已经无法满足需求。

NVIDIA 与 Nixxes 以及晶体动力共同协作,将真正的 HDR 运用到《古墓丽影:崛起》中,使画面细节达到史无前例的水准。

进入古墓

《古墓丽影:崛起》将我们带进一个壮美而危险的环境中展开史诗般的探险,去解开永生的秘密。下面这张游戏动画截图,呈现了 HDR 所能发挥的潜能。

 
《古墓丽影:崛起》中HDR的运用

游戏的高质量动画,是吸引 NVIDIA 的一大魅力。此外,对游戏大量截图的分析发现,游戏早期的色调映射数据给 HDR 提供了非常理想的动态范围。游戏引擎能够达到真实和现实水平的照明,以及达到相对现实的亮度值,而不是用光源亮度或 SDR 光照效果投机取巧。此外,大幅度提升 HDR 真实性的一大关键要素,就是基于物理的内容和光照模型(PBR),而经过改进的 HDR 备用引擎技术,因为大量使用了 PBR,也为真正的 HDR 的支持提供了很大的便利。我们所发现的这一切,都让我们相信,《古墓丽影:崛起》能够以真正的 HDR 营造出更高质量的沉浸式游戏体验。

NVIDIA 能够为游戏开发者提供用于处理 HDR 显示的应用编程接口(API)以及集成电影化 ACES(Academy Color Encoding System,美国电影艺术和科学学院的学院颜色编码系统)色调映射的 C++/着色器源码,帮助开发者在游戏中实现 HDR,并节省开发成本。

要在游戏中实现最佳的 HDR,需要满足一些先决条件,例如确保引擎渲染支持 PBR,色调映射后从着色器中移除所有的饱和操作,在色调映射执行前最好移除所有后期特效等等。以《古墓丽影:崛起》为例,在满足先决条件后,我们通过以下步骤实现游戏中的 HDR:

切换到 HDR 模式

将游戏切换到 HDR 模式后,NvAPI 才能得以运行。它提供的功能包括:

  • 查询一个画面中的 HDR 性能;
  • 激活 HDR 输出,并为 HDR 输出配置 HDR 显示效果。

晶体动力/Nixxes 的经验表明,查明你的显示是否真正切换到了 HDR 模式并那么不容易。为了确认 HDR 模式开启,需要在游戏的色调映射着色器中添加一个特殊的调试模式,下面的截图就是调试模式下的一个例子,整体颜色显示都不正确,因为调试模式将每隔一条水平带上全部的颜色要素设置为 1.0。此时,如果没有切换到 HDR 模式,这些水平带将是不可见的,因为所有高于 1.0 数值的颜色都将成为 SDR 模式下的白色。因此,如果你在屏幕上看到这些水平带,那就意味着 HDR 已经开启。否则,显示模式很可能仍然错误地停留在了 SDR 模式。

 
《古墓丽影:崛起》中HDR的运用

在 HDR 模式下显示一张不包含任何 HDR 内容的 SDR 图像时,HDR 往往倾向于加强 SDR 图像的亮度,使它看起来更为明亮,更引人注目。因此,在 HDR 模式下,如果你在显示器上并排对比一张 SDR 图像和一张 HDR 图像,SDR 图像看起来会非常晦暗。为了让对比更有意义,我们需要增强低动态范围(LDR)图像的亮度,以模拟 SDR 图像的显示。

一旦能够确保 HDR 模式开启,就轮到对色调映射着色器的优化,以确保在延伸的亮度范围中获得最佳的用户体验。通常,游戏开发者倾向于使用基于 Reinhard 模型的色调映射算法来处理 SDR 范围内的映射,而《古墓丽影:崛起》也是如此。

下面,我们来谈谈如何集成电影化 ACES 色调映射器。

集成电影化 ACES 色调映射器

NVIDIA 所提供的 C++/着色器源码能够用于设立 ACES 色调映射器着色器常数,这样就很容易增强游戏对一系列 ACES 色调映射曲线的支持。所要作的仅仅是运用现有的 C++ 类设置常量缓冲数据,然后导入 ACES 色调映射器着色器。下图呈现的就是色调映射函数,横轴为输入颜色/亮度,纵轴为输出亮度,以流明标示。

 
《古墓丽影:崛起》中HDR的运用

显而易见的是,在生成的图像中,相比游戏原先使用的 Reinhard 模型的色调映射器生成的图像,ACES 一千流明色调映射器带来很大的不同,它所产生的图像给画面暗处带来更生动的色彩。

然而画面仍然偏暗,无法展示游戏场景的亮度变化。这就要求将自动曝光数据引入游戏中初始的 Reinhard 色调映射器。下面就来谈谈如何做到这一点。

ACES 色调映射器中引入自动曝光数据

实际上,所需要的工作并不多,只需将游戏运用的自动曝光关联后,再在 ACES 色调映射器中导入颜色数据。为此,ACES 着色器需要进行修改,在自动曝光上,让它能做到原始色调映射器所做的一切。

我们还希望比对 SDR 和 HDR,因此,我们在调式时使用了分屏模式。下面这组截图,展示的是 HDR(左)和 SDR(右)的对比,呈现了两种模式的显著不同。

 
《古墓丽影:崛起》中HDR的运用
 
《古墓丽影:崛起》中HDR的运用
 
《古墓丽影:崛起》中HDR的运用

就跟很多游戏一样,《崛起》使用了 3D LUT 调色法,用于在色调映射后执行颜色分级和校正。让我们来谈谈如何执行这一步。

颜色分级

我们需要决定如何通过3D纹理寻址来处理游戏颜色分级,因为色彩通道能够创建1.0以上的 HDR 值,这样,初始插值表也就无法再继续使用。

我们首先尝试外推 SDR 颜色分级 LUT 所产生的,需转化入 HDR 空间的色彩和亮度变化。但很不幸,一些 HDR 的颜色产生大幅度的意料之外的变化,因此这个方案被废弃了。于是,我们结合了斜纹,强化对比度,饱和函数等,以实现希望的外观效果。

请注意,总体而言,LUT 仍然能够和 HDR 共同运作,但初始 LUT 是为色调映射后的 SDR 设计的。若在色调映射前使用这一功能,可以让你修正目标的独立颜色。

后记

可以看到,在游戏中加入对 HDR 的支持并不困难,并且 NVIDIA 将会以 NvAPI 以及 ACES 色调映射器源码提供技术支持。

最后,感谢 Jurjen Katsman 和 Jeroen Soethoudt 的帮助,也向20年来的经典游戏人物劳拉致敬。

ACES(Academy Color Encoding System,学院颜色编码系统)由 2015 美国电影艺术和科学学院(Academy of Motion Picture Arts and Sciences,简称 A.M.P.A.S.)版权所有,所有权利保留。