原文链接:https://docs.unity3d.com/Manual/HDR.html
在标准渲染中,一个像素的红、绿、蓝值被表现为0-1范围中的一个分数,0和1分别表示要显示在设备上的强度为0或是最大强度。然而这是简单的使用,它不能精确的反应光线在真实的生活场景中的运作方式。人眼趋向于去适应周围光线环境,所以在一个朦胧光线的房间中看起来是白色的对象,也许事实上比在一个完全日光下看起来是灰色的对象更暗。另外,眼睛对范围低端的亮度差异比对高端的亮度差异更敏感。
如果渲染使用的像素值的范围可以更精确的反映在真实场景中要呈现的光照水平,就可以获得更令人信服的视觉效果。虽然这些值会最终需要被映射回显示设备支持的范围,所有中间的计算(比如Unity的图片效果)将会得出更真实的效果。允许图形内部使用0-1范围之外的指来呈现是高动态范围渲染(HDR)的本质。
使用HDR工作
HDR可以在每个摄像机的Camera组件上使用设置来单独启用。
(图片见原网页)
当HDR是激活的时候,场景被渲染到一个可以适应像素值超过0-1范围的HDR图像缓冲上。这个缓冲接下来会被诸如Bloom等等后处理效果在后处理栈中使用。然后HDR图像被转换到标准低动态渲染(LDR)图像,发送去显示。这通常是通过Tonemapping色调映射来完成的,是Color Grading(颜色分级)流水线的一部分。这个到LDR的转换必须被应用在后处理流水线的某些点上,但是如果转换之后是单纯的LDR效果则不必是最后一步被应用。为了方便,一些后处理效果可以在应用HDR效果后自动转换到LDR(看下面的脚本)。
Tonemapping(色调映射)
Tonemapping是将HDR值映射回LDR范围的一个过程。有许多不同的技术,适用于一个项目但是也许对另一个项目来说不是最好的选择。各种各样的tonemapping技术包含在后处理栈中。您可以从Asset Store上下载后处理栈来使用它们。在Color Grading(颜色分级,链接见原网页)文档中您可以找到关于Tonemapping类型的详细叙述。
(图片见原网页)
使用HDR来渲染一个异常明亮的场景。没有使用Tonemapping,大多数像素似乎都超出了范围。
(图片见原网页)
和上面一样的场景。但是这次Tonemapping将最亮的部分转换成了一个大概可信的范围内。请注意adaptive tonemapping甚至可以将第一张图与第二张图来融合,这样来模拟被媒体(比如摄像机,眼睛)捕捉到的自然的叠加效果。
HDR的优势
·在高亮度的区域颜色不会失真
·更好的支持bloom和glow效果
·在低频率光照区域减少条带
HDR的劣势
·使用浮点渲染纹理(渲染更慢而且需要更多VRAM(显存))
·没有硬件抗失真支持(但是您可以使用一个抗失真后处理效果来使边缘平滑)
·并不是在所有硬件上都支持
使用注意
正向渲染
在正向渲染模式下只有您目前有后处理效果时才支持HDR。这是由于性能的考虑。如果您目前没有后处理效果,那么tonemapping就不会存在,并且将发生亮度截断。这种情况下场景将会被直接渲染进不支持HDR的backbuffer中。
延迟渲染
在HDR模式下光照buffer也会被分配为一个浮点buffer。这减少了光照buffer中的条带。即使目前没有后处理效果延迟渲染也支持后处理效果。
脚本撰写
ImageEffectTransformsToLDR特性可以被添加到后处理效果脚本中,这样来表明目标buffer应该使用LDR来代替HDR。更本质上来说,这意味着一个脚本可以在应用其HDR后处理效果后自动的转换到LDR。查看编写后处理效果(链接见原网页)一文获取更多信息。
也可以看看
HDR颜色拾取器