UE4 HDR输出内容适配最佳实践初探

李文磊
UE4支持输出HDR内容到HDR平台和硬件,提供更高亮度,对比,更多细节和色彩的画面,效果非常亮丽和真实。个人做了一些初步实践,有一些体会和想法,这里分享给大家,供参考和讨论。
初衷是想搞清楚一些问题
  • UE的内容是否需要根据HDR输出做特别的调整适配?(因为这关系工作流,效果,兼容性)
  • 什么样的内容才能在HDR设备上有好的效果?如何调整?

其实引出一系列相关问题:HDR设备显示特性是什么?基于SDR设备制作的内容播放在HDR设备上效果如何?专门的HDR内容播放在HDR设备上效果又如何?差别在哪里?


于是我拿现成的项目先感性地比较下【以下全为屏幕拍摄,内容来自UE免费资源(ArcViz Interior)】,图A是UE4普通SDR(标准动态范围)输出方式输出到SDR设备屏摄,我把它作为基准。
接下来不做任何调整把同样的内容以HDR输出方式,输出到HDR显示器上,并开启HDR设备支持,流程如下:
  • UE4的HDR输出流程具体参考文档,这里不多阐述了。但补充几点容易忽视处(小坑):
    • 项目DefaultEngine.ini需要加入
      [/Script/Engine.RendererSettings]
      r.allowhdr=1
    • Windows环境下一定要跑起来(Standalone,非编辑器内),全屏(Console command: fullscreen,或者Alt+Enter快捷键);
    • 根据硬件注意选择输出的ColorGamut( r.HDR.Display.ColorGamut),否则偏色
得到图A HDR
对比观察,相较基准A,整体泛白,失去反差,高光部失去亮度,虽然多了细节,但变灰,不够明亮(窗外);这和最初的效果差别较大,效果不满意。
于是我对内容做了一些调整(通过Color Grading,文章后面有具体阐述),在编辑器里SDR显示环境下(图B)对比很强,高光大量过曝。口味过重,不急,我们的目标是在HDR下显示。
同样方式把此内容输出到HDR显示,效果如下图B HDR; 这和最初的效果(图A)已经比较接近了。不过由于HDR输出显示,在实际观察环境下高光亮度极大,高对比,并仍保持细节和整体对比,这里无法通过屏幕拍摄表现;
总结
  SDR输出,关闭设备HDR支持 HDR输出,开启设备HDR支持
内容 (图A)基准 (图A HDR)灰白,高光“变暗”,失去对比
内容(调整后提高动态范围 (图B)高光和暗部失去细节,对比极高 (图B HDR)高亮,高对比,层次丰富
(图C)最后再贴张HDR输出,但关闭了HDR设备支持的效果,即HDR输出内容在非HDR设备上的显示效果。平时一般无此需求,主要为说明因为HDR输出不支持Tone Curve,明度及色彩反差极大,高光细节丢失;这种效果也可以在编辑器内关闭Tone Curve模拟。

进一步色板测试(屏摄);使用高动态内容观察在SDR及HDR设备上的表现:
0-8亮度范围灰阶在SDR上的表现,可以看到虽然经过Tone Curve,但灰阶大于1至8的部分基本已经失去层次 Image 0-8亮度范围灰阶在HDR上的表现,可以看到灰阶大于1至8的部分也能很好的展示层次。
Image 1
因为屏摄的关系,无法表现真实亮度,导致HDR和SDR看上去Gamma有很大差别;下图是模拟SDR相较于HDR真实应该有的亮度和Gamma效果
Image 2
从以上对比得出以下初步结论
  • 经过HDR适配后的内容在HDR显示设备上效果亮丽真实,视觉冲击极强
  • HDR设备有更大亮度,动态范围;比普通显示器高光宽容度大3-4档(注:与具体对比设备应有关联性)
  • SDR内容不做调整直接输出HDR显示,0-1的部分亮度和gamma表现上和SDR下效果其实基本一致,但这远未充分利用足HDR设备的极限亮度;但当画面有超过1的亮度时SDR和HDR表现截然不同,SDR下失去层次,对比强烈;HDR下由于有更高的亮度层次依然丰富,SDR下无法呈现的高光细节层次被拉回,画面整体感官上反而给人对比降低,变得晦暗的感受
注:不同设备的最高亮度显示能力有差别,这影响内容需要多大的动态范围,以及r.HDR.Display.OutputDevice输出设备参数的选择。除了查询硬件手册外,我也参考使用了HDR视频检测硬件显示能力
回到一开始提出的几个问题
?是否需要针对HDR设备输出对内容有专门的调整适配

YES!从以上实际对比看为达到最佳效果是有必要的。

?那什么样的内容才能在HDR上有好的效果

SDR下0-1的亮度可以表现出细节层次,超出1,高光部分会逐渐损失细节,经过Tonemapping映射柔化,即使不是很高的动态范围也能给人眼高反差的感官体验。但在HDR下超出1的高光部分细节层次还可以很好呈现,这反而让动态不那么高的高光部变得晦暗,相对SDR的感官体验缺乏对比。因此对策就是要提高动态范围,实践告诉我提高动态范围绝对不是直接提高曝光即可,这样完全破坏了原始画面的整体亮度。而是需要保持曝光灰阶Gamma情况下提升亮部,让极值向右延伸至远大于1,在源头上提供给HDR设备足够的动态范围。

要提多少亮度,实践中最高可达到8-16(23-24)亮度内都可以表现出细节层次(实测2000 nit设备标准下)。除了艺术家肉眼感觉把握外,也可以利用一些UE自带工具:

  • 比如参考曝光计算后的SceneColor的值(Pixel Inspector工具中Pre Exposure×SceneColor的值,如下图);Final Color无法超过1,因此无法把握高光部分具体能到多亮;直接查看SceneColor也不能如实体现最终亮度,因为还要考虑曝光;可以打开Apply Pre-exposure before writing to the scene color(项目设置),计算这个乘积值来估计Final Color 超过1部分最终的亮度。

下图利用Pixel Inspector测量某高光部,结果显示虽然Final Color为1,但SceneColor×Pre Exposure为7.5(59.65×0.125)左右,这种亮度范围在SDR上是没有层次的,但在HDR上可以表现高亮度细节

Image 3

  • 另外还可以使用HDR Visualization工具帮助判断高光是否够亮。如下图,红框内的白色竖条代表当前最终设定的曝光EV值,以它为界左边的一条指数曲线代表是从黑到白的亮度变化;背后高低柱状代表各个明度的像素及其数量。因此在白色竖线右侧的像素(红框内)是SDR下已经过爆的像素。从这个图我们可以检查有多少级的过曝像素,比如这里大概有3级左右的像素过曝。这三级过爆像素可以在HDR下显示高亮层次细节,体现HDR的特征优势。这些“过爆”像素不在于多,而在于有。

Image 4

同样方式检查SDR内容(0-1渐变,未做过高光提升);只有极少数像素过曝,并且过曝级别少,这种内容在SDR下显示OK,但在HDR输出及设备上会表现晦暗,缺乏对比。

Image 5

  • 也可以自定义一个后期材质来可视化过爆的像素。后期材质可以利用Eye Adaption材质节点计算出Pre Exposure后的SceneColor亮度。如下场景中1-8亮度像素被可视化颜色标记出。
    7

注:以上不代表HDR内容最高亮度只能到8-16,这个亮度范围是有能力显示层次的极致,但实践中需要高于这个值以表达过爆和辉光等美术需要的视觉效果
 

?如何提高这3-4档高光亮度

传统摄影中真实世界自然光线拍摄出来的内容在普通显示设备(SDR)上往往光比过强,需要通过各种手段柔和降低光比(补光,降低镜头内光源亮度等)。反之SDR观看环境下觉得合适的光比在HDR下会显得太弱。因此为创建HDR内容的时候可以更加接近真实光比创建环境,在已有SDR的内容基础上主要是向右延展高光部动态范围,提高亮部的亮度,另外适当增加反差;我尝试了以下几种方式:

  • 利用后期Color Grading提升Hightlight,这也是目前尝试下来最简单,效果也不错的方案。Gain参数相当于增加曝光,但我们并不需要整体增加,而是向右仅延展高光动态范围,因此可以利用Hightlight Gain参数: Highlight Gain 8(3档),HighlightMin 0,确保高光提升柔顺平滑,Shadows Gain 0.55;Midtones Gain 0.88,暗部和中灰亮度对比基本保持。(注:Shadow Gain和MidTones Gain甚至Gamma等非必需,可根据需要少许调整)注意Gain不会对以上提到的工具测量结果有影响。
    另外注意在Tonemapping之后的一些PP效果要单独处理,因为它们不会受到Color Grading影响,比如
    • Tone Curve相关PP参数调整都不起效(PP细节里Film下的参数,比如Slope, Toe等)
    • LUT(Look up table)基于SDR工作于Tonemapping之后,在HDR输出下不起效。使用Color Grading替代
    • 如果有使用After Tonemapping的后期材质,材质效果不受Tonemapping及Color Grading影响,需要对后期材质本身效果针对HDR输出做单独适配处理。
    • Grain(噪点)效果可能会更明显,需要微调
  • UI当然也不会受到PP影响,不做任何处理HDR输出显示不够亮丽,通透,可以通过材质提升高光部亮度的方式增加反差和动态范围。

此处仅作参考:关闭r.HDR.UI.CompositeMode 0;UI材质处理如下图;

Image 6

  • 利用后期材质提升亮部,这些可以通过对SceneColor在Before Tonemapping的PP材质里进行一系列自定义映射计算实现。尝试下来此种方式更加自由些,但可能没有内置的Color Grading来的优化和方便,加上Color Grading效果不错,我做了些初步的实践,没有进一步深入。
  • 非后期方案。后期很难自然的延伸高光亮度,作为一种整体调整方法往往会影响到1以下的灰阶亮度或者Gamma,要不就是高光过度不柔和(HighlightMin 0.95);提高3D对象的高光亮度,是最符合物理的方法,也是效果最佳,就是上面黄字提到的以更加接近真实光比创建内容,但考虑到多平台,静态光等有一定繁琐性和局限性:
    • 自发光材质亮部的亮度提升;高亮部纹理需要维持细节层次,尤其是HDRI;
    • 光源亮度提升,模拟真实世界光源,高亮,强衰减;有一定光源面积,这会表现在高光以及反射中。
?如何在HDR下表现低反差内容

本身需要低反差的内容:比如高调,低调,朦胧,晦暗,阴沉等气氛环境,HDR输出的时候目标是需要保持这种气氛,但同时让人感受到高动态微妙地存在。通过后期方式整体调整需要小心。中灰以下的低反差气氛,比如晦暗,阴沉的低调环境可以少许加强对比;中灰以上的高调低反差气氛要小心不要过分利用Color Grading调高高光亮度,太过亮丽,可能破坏柔美气氛情感的表达。但无论如何在局部通过调整自发光材质(镜头内光源),灯光光源亮度(包括反射源)来达成体现HDR的目的是没错的,让观众通过极小面积的高光点,自发光,反射等感受到高动态的存在,但同时保持低调低反差环境的整体明度反差及气氛

最后还有个体会,初期目标主要是尽量匹配SDR下的效果同时发挥HDR的特性。但在实践中因为HDR设备上高亮度和宽容度完全匹配甚至接近都是不可能做到的。HDR显示高亮高对比接近真实世界的感官体验,实践中带来不少惊喜。我的意思是SDR的表现其实限制了艺术家的发挥,匹配SDR整体效果的尝试可以作为一个起点,但不应该是目标,超越SDR达到其独特的感官体验才是努力的方向。对此还未有能力做更多的探索,希望今后有机会可以有进一步的更新。

    立即获取虚幻引擎!

    获取全球最开放、最先进的创作工具。 
    虚幻引擎包罗万象,并提供完整的源代码访问权限,开箱即用,诚意十足。