High Dynamic Range高动态范围的实现

意思我就不解释了,主要是最亮值和最暗值的比,屏幕有个极限,那就是0~255.这个范围太小了,不足以模拟一下环境,对于大于1的像素来说,会被直接夹到1.这意味着细节的丢失,12和20的值都变成了1,那么这不叫丢失么,因此,最主要的问题为将高动态范围HDR映射至低动态范围LDR.我们使用的是Tone Mapping。要使用ToneMapping,又要得到屏幕的平均亮度。因此问题变成了计算平均亮度。
  我直接使用微软提供的方法,每次downScale图片到1/4,最后变为1,其实我一直都在想能不能直接提取像素进行计算,这要使用到CPU,可能会降低性能,至于降低多少,我还没有进行尝试。
  ToneMapping的公式 Equation for average luminance。这个公式其实可以变变形,最后可以变成【每个Pixel(x,y)相乘】的积的(1/n)次方,可能运算效率也会降低,实验之后我会把结论贴上来。不过downScale也并未严格按照公式计算,我想会出现误差,至于误差的大小,现在还不清楚。

然后 Equation for luminance scaled to target average luminance
Equation for tone mapping operator这样就得到了最后结果,这就是ToneMapping.其实对于过量的光线,会产生一种叫侵润的现象,也就是我们感觉周围都有一层朦胧的光线,感觉物体的边缘也被包裹在了光团里面,其实还会发生一种叫做蓝移的现象,这当然不是天文学中的蓝移了,具体和视锥细胞和视杆细胞对颜色的敏感性有关,我们暂时不考虑这些,仅仅考虑bloom,就是光的清润作用,还有人眼对光的适应性。
BrightPass:这个过称主要是为了提取场景中极亮的部分,并且将较暗的部分置为0,至于这个极亮,我们使用keyValue来表示

 较小的keyValue值。仅仅是大于1的部分被提取。


较大的keyValue值,将部分<1也提取了。

然后就是卷积:
                              模糊了一下,大小为原场景的1/8
好了,和进行了ToneMap的场景混合一下就好了,挺简单吧。

                                                                         初入场景的不适应



                                                                                    逐渐适应

 


                                                                             注意窗户上的细节


                                                                        直接被夹到1的图,丢失了细节

这里的场景是直接一张HDR图片做成的,你可以理解成非3D场景,不过我们只需在3D渲染的最后添加同样的过程便行了,这本来就是一个屏幕效果。

/Files/ttthink/HDR_Effect.rar









转载于:https://www.cnblogs.com/ttthink/archive/2009/10/16/1584638.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值