Version: 2022.3
使用线性纹理
HDR 拾色器

高动态范围

高动态范围 (HDR) 技术能够产生比标准动态范围 (SDR) 图像更高的亮度动态范围的图像,可以对颜色和亮度进行逼真的描绘。

HDR 的工作原理

在标准渲染中,像素的红色、绿色和蓝色值均使用一个 0 到 1 范围内的 8 位值进行存储,其中 0 表示零强度,1 表示显示设备的最大强度。这一有限的数值范围无法准确反映我们在现实生活中对光的感知方式,并且当存在非常亮或非常暗的元素时,会导致图像不真实。

在 HDR 渲染中,像素值使用浮点数进行存储。这种情况下允许更大范围的值,可以更准确地表示人眼感知颜色和亮度的方式。

Unity 中的 HDR

在 Unity 中,可以将 HDR 图像用于内部渲染计算。此功能称为 HDR 渲染。启用 HDR 渲染后,Unity 会将场景渲染到 HDR 图像缓冲区,并使用该 HDR 图像执行渲染操作,例如后期处理效果。这意味着使用实际值执行计算,因此可能会产生更逼真的效果。

在某些兼容平台上,Unity 支持将该 HDR 图像发送到显示设备。此功能称为 HDR 输出。

使用 HDR 的优点

  • 在高强度区域不会丢失颜色
  • 更好地支持泛光和发光效果
  • 减少低频光照区域的条带

使用 HDR 的缺点

  • VRAM 使用量增加
  • 色调映射(如果使用)产生额外的计算开销
  • 硬件抗锯齿不兼容 HDR 渲染

渲染管线兼容性

For information about support for HDR Rendering and HDR Output in the Scriptable Render Pipelines URP and HDRP, see the Render pipeline feature comparison.

色调映射

色调映射是指将颜色值从一个范围映射到另一个范围的过程。使用 HDR 时,必须使用色调映射来转换 HDR 图像缓冲区中的颜色,以使这些值位于显示设备可以处理的范围内。如果不使用色调映射,则可能会丢失图像中的许多细节和颜色信息,尤其是在非常明亮的区域。

在 HDR 中渲染了异常明亮的场景并输出到 SDR。如果不执行色调映射,大部分像素会看起来超出范围。
在 HDR 中渲染了异常明亮的场景并输出到 SDR。如果不执行色调映射,大部分像素会看起来超出范围。
与上面相同的场景。但这一次,色调映射将大多数强度映射到了更合理的区间内。请注意,自适应色调映射甚至可以在上图和此图之间进行混合,从而模拟捕获介质(例如眼睛、摄像机)的自适应特性。
与上面相同的场景。但这一次,色调映射将大多数强度映射到了更合理的区间内。请注意,自适应色调映射甚至可以在上图和此图之间进行混合,从而模拟捕获介质(例如眼睛、摄像机)的自适应特性。

将 HDR 渲染与 SDR 输出结合使用时,必须使用色调映射将 HDR 图像缓冲区转换为 SDR 图像以进行显示。Unity 提供了可以执行此操作的色调映射后期处理效果:Post-Processing Stack V2 包URP 集成后期处理解决方案HDRP 集成后期处理解决方案均包含色调映射效果。

将 HDR 渲染与 HDR 输出一起使用时,您可以:

  • 创建您自己的色调映射解决方案,将 HDR 图像缓冲区直接转换为兼容的 HDR 格式进行显示 *使用 Unity 的色调映射后期处理效果将 HDR 缓冲区转换为 SDR 图像(如上所示),然后使用 Unity 的自动输出色调映射将该 SDR 图像转换为合适的输出格式。有关 Unity 的自动输出色调映射的更多详细信息,请参阅 HDROutputSettings.automaticHDRTonemapping 的文档。

在内置渲染管线中使用 HDR 渲染

在前向渲染路径中,仅当摄像机上设置了后期处理效果时摄像机才支持 HDR。这是出于性能考虑的原因。如果摄像机没有后期处理效果,则场景将直接渲染到不支持 HDR 的后缓冲区。

在延迟着色渲染路径中,为摄像机启用 HDR 时,光照缓冲区也被指定为浮点缓冲区。这样可减少光照缓冲区中的条带。

  • 2020.1 NewIn20201 中添加了 HDROutputSettings API
使用线性纹理
HDR 拾色器