from: http://blog.csdn.net/ccanan/article/details/6745207
HDR&ToneMapping
HDR
high dynamic range.
很多程序朋友(包括我)都是从dxsdk上看到和学习这个概念,开始学习的更多的是一整套hdr sample的流程:
- 在float render target上去render scene
- 后面很多console上的游戏使用rgbm等编码方式来节省内存和bandwidth
- 通过down sample去计算亮度
- treyarch是cook到场景数据里面,省了这个down sample的过程
- 根据亮度对场景做一个矫正(tone mapping)最后输出到一个rgb8的render target上
- dynamic range:reinhard的<tone mapping>论文中定义:一个场景中最高亮度与最低亮度的比是dynamic range。
- low dynamic range : 之所以出现这种情况是图像存储介质(打印纸,照片,电脑屏幕等)精度有限造成的,导致在range上没法完全记录一个场景的亮度信息,只能记录有限的一部 分,比如游戏里常见的在rgba8上渲染,每个channel大于1的部分就被截取到1了。
- high dynamic range : 准确讲是high dynamic range imaging,是指一种图像技术,它能让图像表示一个比原有技术(之前的LowDynamicRange)更大(greater)的dynamic range
- 这样就可以更加准确和真实的描绘一个场景
- 自动根据亮度矫正明暗:让我们晚上看东西也能比较清楚,一开灯眼睛要矫正一会回来
- 局部适应性:比较经典的图是:
- 曝 光率问题---解决:exposure adjustment。和照相时候曝光原理差不多,白天亮曝光就短一些,晚上曝光长一些,编程时候就是计算render target的平均亮度,然后矫正,这样沙漠的白天和丛林的夜晚都可以在游戏中的rgba8上有一个良好的体现。在hable的论文里,这个属于不同的场 景之间的处理问题范畴。
- 压缩的过程中不可避免的涉及到重新分配亮度值,怎么做来得到更好的尽可能不失真的画面这个解决方案就是tone mapping
ReinhardToneMapping
tone mapping方面比较著名的reinhard哥:
reinhard主页
http://www.cs.ucf.edu/~reinhard/cdrom/
paper link:
http://www.cs.ucf.edu/~reinhard/cdrom/tonemap.pdf
tone mapping干什么的?
dxsdk里面也有说,本来是摄影中提出的概念,解决怎么把场景中范围巨大的亮度值放到范围有限的存储空间中来(照片,打印机。。。),达到一个让人喜欢的结果。
这里面一点是“让人喜欢的结果”,它是一个含有主观意味的东西,没有一个绝对的标准,也没有说什么是绝对的对和错,根据游戏类型和开发者,玩家口味,大可选择自己喜欢的结果,tonemapping是达到这一结果的方法而已。
tonemapping相关的研究是从摄影技术中发展过来的,只不过digital imaging有比摄影洗相片更好的一个优势,可以进一步发展:
首先明确和定义一些概念:
- zone:存储空间的亮度阶这么一个概念,比如print只有11个zone
- middle grey:中间的亮度
- dynamic range:指场景中最高亮度与最低亮度的比值
- 这是一个最学术派的定义,具体上摄像师一般会追求细节还可以明辨的range
- key:描述整个场景亮度的数值
- dodging and burning:把高亮度的东西亮度降低为dodging,把低亮度的部分加亮为burning
tone mapping就是一个原始颜色向目标颜色映射的过程,不同的函数呈现一些不同的特点,这里列一些,看下对比:
ppt中有更多的一些对比,这里直接总结filmic tone mapping的好处就是:
- 向暗色过渡的更“脆”
- 高亮部分更柔和
- 在input color的match上也更接近linear
实现类似filmic tone mapping的mapping的时候一般是把映射关系放到texture里,然后sample texture,不过有牛人把mapping搞到一个公式里了,hable还加了参数可以让美术调:
A = Shoulder Strength B = Linear Strength C = Linear Angle D = Toe Strength E = Toe Numerator F = Toe Denominator Note: E/F = Toe Angle LinearWhite = Linear White Point Value F(x) = ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F)) - E/F; FinalColor = F(LinearColor)/F(LinearWhite)在具体的代码看hable的blog更好了:
float A = 0.15; float B = 0.50; float C = 0.10; float D = 0.20; float E = 0.02; float F = 0.30; float W = 11.2; float3 Uncharted2Tonemap(float3 x) { return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F; } float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR { float3 texColor = tex2D(Texture0, texCoord ); texColor *= 16; // Hardcoded Exposure Adjustment float ExposureBias = 2.0f; float3 curr = Uncharted2Tonemap(ExposureBias*texColor); float3 whiteScale = 1.0f/Uncharted2Tonemap(W); float3 color = curr*whiteScale; float3 retColor = pow(color,1/2.2); return float4(retColor,1); }
相关推荐
HDR, tone mapping代码
假设桌面的亮度为1,那么太阳按正常亮度而言,就该是它的几万倍,这个自然界1-10000的黑白过渡,要如何用电脑的256阶模拟呢?HDR技术会按一个方法(Tone
Real-Time_Tone_Mapping_for_High-Resolution_HDR_Images
该开源代码在实现“Photographic Tone Reproduction for Digital Images”论文算法时有一处错误。论文本身有一个符号错误和一个参数设置不合理。这些我都在程序中做了修正。关于该论文的色调映射算法讲解可参见我的...
视频采集端hdr优化
CUDA-HDR-音调映射 CUDA源文件,用于处理图像的亮度通道并应用HDR色调映射。
Introduce tonemapping effect is good, have reference value very much
程序是对Reinhard论文“Photographic Tone Reproduction for Digital Images”的实现,具体的讲解可参考我的博客https://blog.csdn.net/u014230360/article/details/108527016
在程序中提出了一种利用亮度直方图构造色调映射查找表(LUT)的色调映射算法。融合人类视觉系统(HVS)的特性,在构造直方图的同时,更加重视视觉可分辨度...使用memorial.hdr图像例子,图像高动态映射后细节表现完美。
Improved Laplacian Model for Tone Mapping of HDR image
reduces the dynamic range of an HDR image using the method % originally proposed by Durand and Dorsey, "Fast Bilateral Filtering % for the Display of High-Dynamic-Range Images", % ACM Transactions on ...
使用matlab2014撰写,执行program资料夹中的main.m,参数都在main.m中最上方修改,output会有hdr和tone mapping后的结果在program资料夹中 % folder: the (relative) path containing the image set. % type_: '...
色调映射工具(Tone Mapping tool)也能用于48位TIFF文件,同样适用于48位压缩工具(Compression tool)。另一技巧是使用从RAW文件解压出来的不同曝光度的照片。这对于合并菜单下的曝光混合方式来说,特别是对自动...
这样的高动态范围(HDR)图像无法在常规显示器上直接复制。 为了获得更自然的外观,必须将强度范围压缩到显示器的低动态范围,同时大致保持图像的外观。 此过程称为色调映射或动态范围压缩。 在MATLAB中已考虑并实现...
色调映射工具(Tone Mapping tool)也能用于 RAW 文件,同样适用于 48 位压缩工具(Compression tool)。 另一技巧是使用从 RAW 文件解压出来的不同曝光度的照片。这对于合并菜单下的曝光混合方式来说,特别是对自动...
另一个叫HDR色调映射(HDR Tone Mapping),通过“HDRI”菜单来进行。 曝光混合是最容易理解的了。它将不同曝光的照片进行合并,将它们合并成一张高光和阴影都呈现细节的照片。 HDR色调映射处理包含两步:第一步是把...
另一个叫HDR色调映射(HDR Tone Mapping),通过“HDRI”菜单来进行。 曝光混合是最容易理解的了。它将不同曝光的照片进行合并,将它们合并成一张高光和阴影都呈现细节的照片。 HDR色调映射处理包含两步:第一步是...
HDR_Toolbox:HDR工具箱,用于将高动态范围(HDR)图像处理为MATLAB和Octave
在生成HDR图片以前可以选择是否启用MTB校正、Tone Mapping演算法、以及Gamma颜色校准 按下HDR即会开始执行运算 在图片生成后对图片点击右键可以储存图片(可以自选储存位置) 在Files里面则可以选择储存HDR图片,位置...
台湾大学的HDR合成,动态范围压缩资料,包括讲解主要的处理算法