Unity 中的高动态范围 (High Dynamic Range) 渲染

在标准渲染中,像素的红色、绿色和蓝色值分别由 0..1 之间的分值表示,0 表示亮度为零,1 表示显示设备的亮度为最大。尽管此功能方便易用,但不能准确反映出真实生活场景中的光照效果。人眼具有调节实际照明效果的功能,因此,光线昏暗房间里看起来是白色的物体,其亮度实际上不如大白天看起来是灰色的物体。另外,眼睛对于此范围低端亮度差异的敏感度高于对高端亮度差异的敏感度。

如果调节渲染,让像素值的范围更准确地反映可在真实场景中显示出来的亮度级别,则可达到更有力的视觉效果。虽然这些值最终需要映射回显示设备上的可用范围,但任何中间计算(如 Unity 图像效果)可让结果更具权威性。可在内部显示图像以便使用 0..1 范围以外的值是高动态范围 (HDR) 渲染的精华所在。

HDR 的使用

HDR 单独启用,以便让每个相机 (Camera) 使用相机组件上的设置:-

HDR 激活时,程序会将场景渲染至可容纳 0..1 范围以外的像素值的 HDR 图像缓冲区。然后使用 HDR 泛光等图像效果对此缓冲区进行后处理。色调映射图像效果可将 HDR 图像转换为可传送并显示出来的低动态范围 (LDR) 图像。LDR 转换必须应用于图像效果管道的某个位置,但若仅限 LDR 的图像效果稍后会运用,则转换无需在最后一步进行。为方便起见,某些图像效果可在应用 HDR 效果后自动转换为 LDR(请参阅以下脚本 (Scripting))。

色调映射

色调映射是将 HDR 值映射回 LDR 范围的过程。色调映射技巧有许多种,但适用于某一工程的技巧不一定就适合其他工程。Unity 包含了各种色调映射图像效果。要使用这些效果,请选择资源 (Assets) -> 导入资源包 (Import Package) -> 图像效果 (Image Effects)(仅限专业版),在场景中选择相机,然后依次选择组件 (Component) -> 图像效果 (Image Effects) -> 色调映射 (ToneMapping) 图像效果文档中对色调映射类型做了详细介绍。

使用 HDR 渲染得异常明亮的场景。未使用色调映射时,大部分像素看起来都超出了范围。

与上面相同的场景。但这里的色调映射效果在更合理的范围内运用最强的亮度。请注意,自适应色调映射可在上述两张图之间实现平衡,从而模拟捕获媒体(例如眼睛,相机)的自适应性质。

HDR 泛光和光晕

使用 HDR 可对后处理进行更多控制。LDR 泛光有一个缺点,即使像素亮度低于 1.0,场景中的许多区域也会出现模糊。使用 HDR 就有可能只使亮度大于一的区域泛光。这导致只含超高亮元素的场景渗色到相邻像素,从而生成更理想的效果。内置的'泛光和镜头眩光 (Bloom and Lens Flares)' 图像效果现在也支持 HDR。要将其导入至相机,请选择资源 (Assets) -> 导入资源包 (Import Package) -> 图像效果 (Image Effects)(仅限专业版) 在场景中选择相机,然后依次选择组件 (Component) -> 图像效果 (Image Effects) -> 泛光 (Bloom) 图像效果文档中对“泛光 (Bloom)” 效果做了详细介绍。

此场景中的车窗太阳光反射亮度值远大于 1.0。如果相机的 HDR 功能启用,那么泛光只会在这些部分出现并显示光晕,从而捕获其亮度。

如果 HDR 功能未启用,则车窗仍保持为不显示光晕特效。强化光晕效果的唯一方式是降低亮度阈值,但是其他不需要强化光晕效果的图像区域也会显示光晕特效。

HDR 的优点

HDR 的缺点

使用说明

正向渲染

在正向渲染模式中,只有显示某种图像效果时才支持 HDR。这是基于对性能的考虑。如果未显示图像效果,则不存在色调映射,并出现强度截断。这种情况下,程序会将场景直接渲染至不支持 HDR 的后台缓冲区。

延迟渲染

在 HDR 模式下,光照预通过缓冲区也作为浮点缓冲区分配。这可减少光照缓冲区的波段。即使不显示图像效果,延迟渲染也支持 HDR。

脚本

ImageEffectTransformsToLDR 属性可添加至图像效果脚本来指示目标缓冲区应位为 LDR,而非 HDR。实际上,这意味着脚本可在应用其 HDR 图像效果后自动转换为 LDR。

Page last updated: 2013-06-26