原标题:HDR 是什么?有哪些具体介绍?
HDR,高光动态渲染,概念我就不多做解释了。
为什么要HDR?
我们一般的显示器只能显示8位色,就是灰度从黑(0)到白(255)共有_256_个等级。
但是,日常我们遇到的场景,光照强度远远的超过了这个范围。
假如你有一个宽容度极其牛逼的相机,能记录下所有数据。
直接将亮度范围等比的缩放映射到[0,255]的区间内就好了。
倒也不是不可以,但是你把几十万倍的范围直接映射到这么小的一个区间,往往会导致color banding(色带)问题,而且既有可能两端还有存在一片黑或者一片白的情况。
HDR就是为了解决这一问题。
它根据场景的明暗对比, 把HDR高动态范围光照非线性的ToneMapping映射到显示器能显示的LDR低动态光照范围,尽可能的保存了明暗对比细节,使最终渲染效果更加逼真。
那么总共分几步?
将整个场景渲染到一张浮点纹理上;
利用色调映射(Tone Mapping),把HDR的浮点纹理映射到LDR(低动态范围)的缓存区上;
渲染泛光(Bloom)效果;
将泛光和色调映射的结果进行叠加。
解释一下:
第一步,
没什么好说的,就是浮点纹理运算。
第二步,
什么是色调映射?
色调映射是在有限动态范围媒介上近似显示高动态范围图像的一项计算机图形学技术,翻译成人话,就是在有限的动态范围内显示高动态图像。目的是是把亮度线性映射到[0,1]的范围。
一种最为简单的归一化处理方式。
L是当前像素的亮度,Lmax和Lmin分别是图像的最大亮度和最小亮度。
可以看到,这种算法实际上特别的简单粗暴,并不能很好的满足我们的我需求。
来看另一种较为常用的算法,Photographic 算法
调整亮度,确定一个平均亮度,
公式先对亮度取对数,平均后再进行幂运算,
是一个极小值,避免算黑色像素时log=0的问题。
2. 计算缩放因子
其中L(x,y)是当前像素的亮度值。是一个常数,
的大小决定了映射后场景的整体明暗程度,一般取0.18,也就是我们平均所说的18%中性灰。
当然这个值也可以调整。
3. 压缩高亮部分
经过上两个步骤,还是会有场景过亮超出显示范围的问题,所以需要将亮部压缩。
是场景中亮度最高的值,可以看到,最亮的部分被压缩成了
。
4. 局部加亮与加深(Dodging & Burning)
对于动态范围比较大的图像,还是会存在细节无法保留的问题,所以这里我们再对局部进行一下调整。
熟悉后期的同学,应该很熟悉D&B是在做什么,就是让某些局部亮一点,某些局部暗一点,比如我们最熟悉的双曲线磨皮,实际上就是D&B的一种。
第三步,
添加泛光
然而即使是这样,还是没有很好的解决“真实性”问题,这也是我们看到的很多HDR的照片都会有一种很假的感觉。
所以我们还得添加一种叫做“泛光”的效果。
所谓泛光效果,就是强光的边缘会有一圈光晕,并且影响到了它周边的东西。这个很好理解。
原理也很简单,提取强光高亮部分,再做一个高斯模糊就好了。
第四步,
叠加,这个没有什么好说的了
这就是HDR的大概原理了。
在之前,做了一个假设,就是有一台宽容度极其牛逼的相机,实际上我们相机一般也就是14bit左右。
那么怎么办呢?
多拍几张曝光值不同的照片就OK了。
几乎稍微专业一点的相机都 会有包围曝光这个功能,调整一下范围,按快门就是了。
然后扔进后期软件中,LR PS,HDR合成就好了。
具体的后期就不多说了,没什么难度,
不过很多人在玩HDR的时候总会有过度的现象,作为一个老年人,还是希望大家能够克制。
以上。
参考:
zh.wikipedia.org/wiki/%
learnopengl-cn.readthedocs.io
rastergrid.com/blog/20返回搜狐,查看更多
责任编辑: