29 个回答
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 算法
- 调整亮度,确定一个平均亮度,

公式先对亮度取对数,平均后再进行幂运算,
\delta 是一个极小值,避免算黑色像素时log=0的问题。
2. 计算缩放因子

其中L(x,y)是当前像素的亮度值。是一个常数,
\alpha 的大小决定了映射后场景的整体明暗程度,一般取0.18,也就是我们平均所说的18%中性灰。
当然这个 \alpha 值也可以调整。
3. 压缩高亮部分
经过上两个步骤,还是会有场景过亮超出显示范围的问题,所以需要将亮部压缩。

L_{white} 是场景中亮度最高的值,可以看到,最亮的部分被压缩成了 \frac{1}{L} 。
4. 局部加亮与加深(Dodging & Burning)
对于动态范围比较大的图像,还是会存在细节无法保留的问题,所以这里我们再对局部进行一下调整。
熟悉后期的同学,应该很熟悉D&B是在做什么,就是让某些局部亮一点,某些局部暗一点,比如我们最熟悉的双曲线磨皮,实际上就是D&B的一种。
第三步,
添加泛光
然而即使是这样,还是没有很好的解决“真实性”问题,这也是我们看到的很多HDR的照片都会有一种很假的感觉。
所以我们还得添加一种叫做“泛光”的效果。
所谓泛光效果,就是强光的边缘会有一圈光晕,并且影响到了它周边的东西。这个很好理解。

原理也很简单,提取强光高亮部分,再做一个高斯模糊就好了。
第四步,
叠加,这个没有什么好说的了
这就是HDR的大概原理了。
在之前,做了一个假设,就是有一台宽容度极其牛逼的相机,实际上我们相机一般也就是14bit左右。
那么怎么办呢?
多拍几张曝光值不同的照片就OK了。
几乎稍微专业一点的相机逗会有包围曝光这个功能,调整一下范围,按快门就是了。
然后扔进后期软件中,LR PS,HDR合成就好了。
具体的后期就不多说了,没什么难度,
不过很多人在玩HDR的时候总会有过度的现象,作为一个老年人,还是希望大家能够克制。
以上。
参考:
https://
zh.wikipedia.org/wiki/%
E8%89%B2%E8%B0%83%E6%98%A0%E5%B0%84
https://
learnopengl-cn.readthedocs.io
/zh/latest/05%20Advanced%20Lighting/07%20Bloom/
http://
rastergrid.com/blog/201
0/09/efficient-gaussian-blur-with-linear-sampling/
HDR需要软件后期处理,比如iphone4开启HDR后拍照速度会下降,原因就在于此时手机要先后拍摄三种曝光版本的照片,再将三张合为一张输出。
HDR全称High-Dynamic Range(高动态光照渲染),通过HDR,显示器或相机可以很好的表现超出其亮度范围的图像,也可以简单理解为HDR能大幅提高画面细节的明暗对比度。
HDR由两部分组成,动态曝光控制和光晕效果。先说动态曝光控制,通常,显示器能够显示R、G、B分量在[0,255]之间的像素值。而256个不同的亮度级别显然不能表示自然界中光线的亮度情况。举个例子,太阳的亮度是白炽灯亮度的几千倍或者被漫反射照亮的室内亮度的几万倍,这远远超出了显示器的亮度表示能力。HDR技术所要解决的问题就是在有限的亮度范围内表示出宽广的亮度范围。 原理类似于照相机的曝光功能,通过算法调整光线亮度,将光线从高动态范围映射到低动态范围 ,从而得到得到令人信服的光照效果。
HDR的另一部分是光晕效果。人从暗处走到光亮的地方,瞳孔由于来不及收缩,眼睛会自己眯起来,以保护视网膜上的感光细胞。HDR通过对原始图像进行调整,可以模拟这种人眼自动适应光线变化的生理反应,产生类似于光晕的效果。
图像经HDR处理后的理想结果是亮处足够耀眼,暗处能够分辨物体的轮廓与深度,而非原图的一团漆黑。不过HDR在刚被加入DX9的时候曾存在过度滥用的问题,典型的例子是老头滚动条4等使用Gamebryo引擎开发的游戏。