高动态范围 (HDR) 技术能够产生比标准动态范围 (SDR) 图像更高的亮度动态范围的图像,可以对颜色和亮度进行逼真的描绘。
在标准渲染中,像素的红色、绿色和蓝色值均使用一个 0 到 1 范围内的 8 位值进行存储,其中 0 表示零强度,1 表示显示设备的最大强度。这一有限的数值范围无法准确反映我们在现实生活中对光的感知方式,并且当存在非常亮或非常暗的元素时,会导致图像不真实。
在 HDR 渲染中,像素值使用浮点数进行存储。这种情况下允许更大范围的值,可以更准确地表示人眼感知颜色和亮度的方式。
在 Unity 中,可以将 HDR 图像用于内部渲染计算。此功能称为 HDR 渲染。启用 HDR 渲染后,Unity 会将场景渲染到 HDR 图像缓冲区,并使用该 HDR 图像执行渲染操作,例如后期处理效果。这意味着使用实际值执行计算,因此可能会产生更逼真的效果。
在某些兼容平台上,Unity 支持将该 HDR 图像发送到显示设备。此功能称为 HDR 输出。
使用 HDR 的优点
使用 HDR 的缺点
渲染管线 | HDR 渲染 | HDR 输出 |
---|---|---|
内置渲染管线 | 是 在 Inspector 中或使用 Camera.allowHDR API 来启用每个摄像机的 HDR 渲染。 在 Graphics 设置窗口中为每个层启用 HDR 渲染并配置 HDR 缓冲区的格式。 |
是,仅在某些游戏主机平台上 有关更多详细信息,请参阅特定于平台的文档。 |
通用渲染管线 (URP) | 是 在 Inspector 中或使用 Camera.allowHDR API 来启用每个摄像机的 HDR 渲染。 使用通用渲染管线资源 (Universal Render Pipeline Asset) 为所有摄像机启用 HDR 渲染。 |
正在研究中 开发团队正在研究如何实现此功能。尚无计划的发布日期。 |
高清渲染管线 (HDRP) | 是 默认情况下,所有摄像机都启用 HDR 渲染。无法禁用。 |
正在研究中 开发团队正在研究如何实现此功能。尚无计划的发布日期。 |
色调映射是指将颜色值从一个范围映射到另一个范围的过程。使用 HDR 时,必须使用色调映射来转换 HDR 图像缓冲区中的颜色,以使这些值位于显示设备可以处理的范围内。如果不使用色调映射,则可能会丢失图像中的许多细节和颜色信息,尤其是在非常明亮的区域。
将 HDR 渲染与 SDR 输出结合使用时,必须使用色调映射将 HDR 图像缓冲区转换为 SDR 图像以进行显示。Unity 提供了可以执行此操作的色调映射后期处理效果:Post-Processing Stack V2 包、URP 集成后期处理解决方案和 HDRP 集成后期处理解决方案均包含色调映射效果。
有关在支持的游戏主机平台上将 HDR 渲染与 HDR 输出结合使用的信息,请参阅特定于平台的文档。
在前向渲染路径中,仅当摄像机上设置了后期处理效果时摄像机才支持 HDR。这是出于性能考虑的原因。如果摄像机没有后期处理效果,则场景将直接渲染到不支持 HDR 的后缓冲区。
在延迟着色渲染路径中,为摄像机启用 HDR 时,光照缓冲区也被指定为浮点缓冲区。这样可减少光照缓冲区中的条带。