Husman

人は夢見る ゆえに生きるもの
posts - 14, comments - 37, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

HDR tonemapping算法的一些改进

Posted on 2013-04-05 15:07 Husman 阅读(5298) 评论(1)  编辑 收藏 引用
tonemapping可以说是影响HDR最终质量关键因素之一。
这里略去HDR基本流程,这个可以在网上很容易找到,我这里只简单说一下网上没有的东西。
细心观察"HDR Lighting sample" in DirectX 9.0c SDK,会发现sample上的暗区的细节保留不够,而亮区部分又感觉有点过曝。
我在此基础上做了些修改,色调映射用了
Exponential tone mapping算法
公式:color  = 1 - exp( -Exposure * color )
在tone map之前先对场景的低亮度区域做对比度调整,color = pow(color, k1+Lum*k2);
这里k1,k2是两个可以在shader上调整的参数。
Exposure = MiddleGray / Lavg,归一化后就是1/(1+Lavg/MiddleGray),MiddleGray我们通常设成0.18,1/MiddleGray大概等于6
简化后这个公式就是Exposure = 1/(1 + 6 × Lavg)× K,K是一个可以调节的参数
Vignetting暗角可以通过采样边角饱和度低的灰度纹理实现。
代入tone mapping公式就变成
color  = 1 - exp( -Exposure * color * Vignetting )

DXsample中的效果:


改进之后的效果:


可以看到改进后暗部细节表现的更加细致,亮部也没有过曝,四周也呈现了一定的晕影

参考文献
http://megapov.inetart.net/manual-1.2/global_settings.html#film_exposure
http://filmicgames.com/archives/75
http://freespace.virgin.net/hugo.elias/graphics/x_posure.htm
"HDR Lighting sample" in DirectX 9.0c SDK

Feedback

# re: HDR tonemapping算法的一些改进  回复  更多评论   

2013-04-05 16:32 by doyle
门外汉表示好像改进前看上去更真实些……
只有注册用户登录后才能发表评论。