图形 2.7 LDR与HDR

LDR与HDR


 

基本概念

 

  我们为什么要使用HDR?(因为HDR好看,对,HDR真的好看,可惜不敢在手游项目上乱用这个玩意。)因为HDR有更好的色彩,更高的动态范围和更丰富的细节,并且能有效的防止画面过曝,超过亮度值1的色彩也能很好的表现,像素光亮度变成正常,视觉传达更加真实。

  HDR才有超过1的数值,才有超过1的数值,才有光晕(Bloom)的效果,高质量的Bloom能体现画面的渲染品质。

 

  那么HDR到底是什么呢?它与LDR相对应。在计算机图形学与电影摄影术中,是用来实现比普通数位图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。
  动态范围的计算方法为最高亮度/最低亮度。
  LDR全称Low Dynamic Range,8位精度,单通道的取值范围在0-1之间,像拾色器、普通的图片基本都是用的LDR。
  HDR全称High Dynamic Range,拥有着远高于8位的精度,单通道可以超过1的值,Unity里面我试了一下,能调个-10和+10,用于HDRI(高动态范围成像:High Dynamic Range Imaging)。
  比如说你想给自己买个屏幕来用于DCC软件的工作,或者是打游戏,那么HDR600以上屏幕的色彩表现就会更好看(当然各位还是根据情况量力而行,顶配不一定是最好的,够用才是最好的)
  上方图片有HDR,下方图片无HDR:

 


 

Unity中的HDR

 

  调整Camera的HDR选项。开启的话,Camera会将场景渲染为HDR图像缓冲区,然后进行屏幕后处理:Bloom&Tonemapping。Tonemapping会将HDR图像再转换回LDR,最后再将LDR图像发送回显示器。

 

  URP自定义渲染管线将场景渲染为HDR图像缓冲区,进行屏幕后处理:Bloom&Tonemapping。Tonemapping转换回LDR,最后把LDR图像发送回显示器。

 

  shader中为color变量加上[HDR]属性前缀,可以将拾色器变为HDR拾色器。HDR拾色器多了一行Intensity配置。使用Intensity滑条可以调整颜色强度,滑动条每增加1,则提供的光量增加一倍。

 

HDR的优点:

  • 滑动条每增加1,则提供的光量增加一倍
  • 减少画面较暗部分的色阶感
  • 更好地支持Bloom

HDR的缺点:

  • 渲染速度较慢,需要更多的显存 ,这里增加了Tonemapping的操作
  • 不支持硬件抗锯齿
  • 部分手机不支持

 


 

HDR与Bloom

 

  HDR和Bloom的区别是常考题呢(

  HDR制作的出的效果其实Bloom制作的效果相差不大,但是它们使用技术却大相径庭。HDR效果本质是比1更亮的颜色和比0更暗的颜色的结合,这个效果是光照计算自然产生的,强度、颜色等方面是游戏程序可动态控制的;bloom效果则是物体本身发出的光照,仅仅是将光照范围调高到过饱和,是游戏程序无法动态控制。

  bloom的本质实际上是将画面中较亮的颜色(用程序规定什么是较亮的颜色)提取出来进行高斯模糊,然后再和原图叠加。这个效果无需HDR就可以实现,而且不受显卡的规格限制。但是这个效果非常受限制,因为bloom无论怎样还是只有8位通道,而HDR最高能支持到32位RGBA。

  

 

   不过事实上unity的流程会有点不一样,会在第一步down sample(降采样),然后高光像素不同的down sample并保存在RT到一定的次数(这个次数由参数控制),再一步一步up(上采样回去。而在up回去时会将之前的down sample加入每步对应的up sample至回到原来的分辨率。

 


 

HDR与Tonemapping

 

  之前提到我们最终要把渲染出的HDR图像最后转回LDR来输出到屏幕上,这个部分使用的技术就是Tonemapping,也就是色调映射。色调映射算法就是指对图像颜色进行映射变换的算法,调整图像的灰度,使得处理后的图像人眼看起来更加舒适,能更好的表达原图里的信息与特征。

  如果直接线性映射回去会怎样:

 

  可以发现映射回去的图像完全不符合哦我们的预期,因此我们需要采用一种非线性的方式来进行映射,比如ACES曲线。

  ACES曲线是指Academy Color Encoding System学院颜色编码系统,是最流行、最被广泛使用的ToneMapping映射曲线,它能很好的保留暗部和亮部的细节,也可以之后在这个基础上再进行调色。

 

其他ToneMapping曲线:

  • 2002年 Reinhard Curve
  • 2007年 CE Curve
  • 2010年 Flimic Curve

 


 

LookUp Texture

 

  LookUp Texture,LUT。在Color Grading的All None模式中有LUT,简单说就是滤镜。但是LUT与Tonemapping不同,LUT在LDR之间做变换,而Tonemapping是在HDR做变化。调整rgb三个通道的LUT被称为3D LUT,格式有3DL、CUBE、CSP、ICC配置文件。

 

 


扩展作业

IBL在HDR和LDR上的区别?

  IBL,指基于图像的光照(Image-Based Lighting)。即将一张作为环境贴图的CubeMap来作为光源,以实现物体融入环境的效果。它和之前我们在传统经验光照模型中手动设置环境光有很大不同,使用CubeMap来作为光源可以看作一个小的球体包裹了这个场景,球面上的所有方向都有光线传来,因此我们要考虑球面上的所有方向来得到一个真正的积分结果。

  而在先行版的PBR中使用IBL有个需要注意的地方,我觉得需要从能量守恒的角度来考虑,即光照中能表示光照强度的量。因此在HDR和LDR上的区别应该从这个方面来考虑,比如太阳光这种强烈的光,HDR会试图保存它的HDR颜色来表现光照强度,但是LDR中这个光照强度会被截断成1,这样我们这部分的光线能量就会损失掉,自然也就违背了能量守恒。那么被LDR截断成1代表着什么呢,意味着最后我们损失了一部分的光线,导致的结果自然就是场景会变的更暗。也就是说相比于HDR,LDR非常不适合用来还原光照环境,这样的环境贴图单纯用于视觉输出还可以,但是用在PBR环境光的输入参数上就会造成错误的效果。

 

左边为HDR探球,右边为LDR探球

 

开启Bloom,对比更加明显

 

 


 

参考

 

【技术美术百人计划先行】基础渲染光照介绍(一)

【技术美术百人计划】图形 2.7 LDR与HDR

HDR和bloom效果的区别和关系

 

跳转回百人合集

posted @ 2022-01-13 22:23  anesu  阅读(712)  评论(0编辑  收藏  举报