Unity 2023中的跨平台HDR显示支持


在分享有关如何在项目中启用HDR显示的更多信息以及平台支持和有用的指南之前,我们先来快速了解HDR渲染和显示的概念。
启用 HDR 渲染后,摄像机会将场景渲染到浮点帧缓冲区,这样渲染管线可以存储更多的颜色值范围并更好地保留细节。着色器计算(如光照和后处理)使用更准确的值进行(与 SDR 渲染相比),从而获得更逼真和更逼真的结果。
虽然多年来HDR渲染一直是默认工作流程,但由于缺乏支持HDR的显示,可呈现图像的颜色深度受限于每个通道最多8位。这限制了像素可以表示的最大颜色数(16,777,216 种不同的颜色值)和最大亮度范围。HDR 到 SDR 色调映射用于将颜色缓冲区的 HDR 值重新映射到低动态范围并选择性地应用伽马校正,最后将结果写入交换链图像以进行演示。
Unity 2022.1 为面向桌面和游戏主机平台的高清渲染管线 (HDRP) 引入了 HDR 显示支持。其原理是在创建交换链时设置设备原生颜色空间,并使用自定义 HDR 色调映射将颜色缓冲区的内容重新映射到显示原生 HDR 范围。然后作为最后步骤应用HDR编码,然后再写入HDR交换链图像。
启用 HDR 输出后,交换链图像格式设置为启用更高的颜色深度(每个通道 10 或 16 位)。这使得每个像素可以代表更广泛的可能颜色值(大约680亿个不同值),并且亮度范围也大大增加。
随着 Unity 2023.2 的发布,Unity 编辑器和独立运行版现在可在所有渲染管线和能力平台上提供全面的 HDR 色调映射和显示支持。
新的HDR显示设置可在项目Player Settings的Edit > Project Settings > Player > Other Settings下找到
- 允许HDR显示输出
- 使用HDR显示输出
当 Unity 独立运行版和编辑器在受支持的平台上运行时,这些设置将启用 HDR 输出。
启用HDR输出后,您可以选择配置交换链位深度,为呈现的图像设置更低(每通道10位)或更高(每通道16位)的首选颜色深度。注意:并非所有设备都支持 16 位缓冲格式,可能会转而使用 10 位缓冲格式。
当使用通用渲染管线(URP)时,请确保将使用的渲染管线素材资源设置为启用HDR渲染。选择项目中包含的RP素材资源(通常在素材资源>>设置文件夹下找到),然后导航到项目检查器并启用Quality > HDR。
最后,确保启用HDR色调映射,将Tonemapping组件添加到影响摄像机的后处理体积中。启用HDR输出时,以下色调映射设置应由显示器的HDR功能驱动:
- 支持的最低亮度
- 支持的最大亮度
- 白皮书价值:该值表示显示屏上表示的纸白色表面的亮度,它决定了显示屏的整体亮度
你可以使用C# API来获取显示屏的HDR范围和白纸值。
为了获得最佳的观看者体验,我们建议通过指定的 HDR 校准接口提供对这些参数的运行时控制。我们很快将分享一个新的HDR校准示例项目,您可以将其作为参考实现来开始使用。
关于HDR色调映射和输出的更多详细信息,请参阅关于URP HDR输出和HDRP HDR输出的更新文档。
要在运行时使用HDR输出,设备必须连接到支持HDR的显示器,GPU必须具有启用HDR交换链和演示所需的支持。
在不兼容的设备上运行时,HDR 输出会自动禁用。你可以查询主显示器是否支持HDR显示,以及是否使用HDROutputSettings.available启用了HDR输出。
除了Unity 2022中现有的桌面和主机支持外,Unity 2023.2还为以下平台引入了移动支持:
- iOS 玩家(iOS 16+、iPadOS 16+)
- 使用 Vulkan 和 GLES 的安卓玩家(安卓 9+,具体取决于设备功能)
一些提供HDR显示支持的常见移动设备包括iPhone X及更高版本、Samsung Galaxy S10及更高版本、Galaxy Note 10及更高版本、Galaxy Tab S6及更高版本...
该版本还为具有强大功能的平台引入了 XR 支持。请参考 XR 平台的文档来确定 HDR 显示支持。
HDR处理分两步进行:HDR色调映射和编码。这两个步骤通常在最后一个后期处理渲染通道中应用。
唯一的例外是在URP中注入额外的通道,在后处理之后执行。在这些情况下,HDR 编码在“最终比特”通道中单独应用,该通道始终在渲染管线的末端调用。
RenderPassEvent.AfterRenderingPostProcessing事件注入的自定义覆盖通道将需要对HDR输出进行特殊处理。如果启用HDR输出并启用后处理,则之前的通道将应用色调映射和颜色空间转换。因此,您需要编写自定义效果才能使用预期的动态范围和颜色空间。
使用HDR输出时,建议为所有可显示摄像机启用HDR渲染。您仍然可以根据每个摄像机禁用HDR渲染,但是您需要确保没有在后处理之后执行的渲染通道或在后处理之后插入通道的效果。将 SDR 渲染与 HDR 输出一起使用时,不支持以下功能:
- 升级
- FXAA
- HDR调试模式
- 后处理后的自定义通道
如果要将 SDR 渲染与 HDR 输出一起使用,请确保在 2D 渲染器上关闭后处理。
有关上述限制和指南的更多详细信息,请参阅官方文档:
请在项目中试用新的 HDR 显示支持,并告诉我们你的想法。
您的反馈是我们调整工作优先级、制定有效方案的风向标。你可以在我们的公开路线图上为自己的功能投票,或在Graphics论坛上了解更多。如果您想要的改动未被列出,可以向我们提交功能请求,或者直接联系团队。
如果你喜欢这种深入的学习,请在 Tech from the Trenches 系列中观看Unity开发者们未来的技术分析。
