`
dengbaoleng
  • 浏览: 1162617 次
文章分类
社区版块
存档分类
最新评论

深入说明HDR技术

 
阅读更多

原帖地址:http://hi.baidu.com/freedomknightduzhi/blog/item/0cdb8a0fe7cf37ffab6457df.html

Author: FreeKnightDuzhi

关于Bloom和HDR的帖子和图片网上已是一堆,但罕有能够明确说明程序实现过程的帖子,明天需要进行简单一个讲解,故在此做个补充记录。

首先HDR是高动态光照。注意两个词:1:高(高精度)。 2:动态(光照时实时运算的)。

然后说下当前计算机图形学大部分颜色表示A8R8G8B8,即颜色可以表示为0-255的亮度(即一个深灰暗色到一个灰白亮色之间,并不能表示一个深黑色和一个非常耀眼的亮白色),用浮点数表示为【0,1】内,其实这是远不能表示人眼可分辨的亮度层级的(补,人眼可分辨亮度层级是1000,当前色彩学能表达的亮度层级是10的12次方……悲催啊,可怜的人眼)。那么,高于1.0f 的亮度将丢失被当成1.0f 表示进行渲染,得到的结果就是常规没有HDR游戏看到的画面。

那么HDR技术目的就是把颜色通道中无法表示的高亮亮度和极暗亮度 表示出来,所以它的特点就是:

1:亮的地方更亮。2:暗的地方更暗。3:亮暗部分的细节都表现的明显。

技术原理就是使用更高的颜色精度的纹理格式渲染。

它的传统分类有:按照单颜色通道精度分类有int16, FP16, FP32等。首先int16就意味着用16位int表示一个颜色通道,这个很诡异,在SM2.0下就可以支持,效率不高,效果很差,现在都被废弃了-。- FP16就是单精度float类型来表示一个颜色通道,GPU对浮点处理通常有额外加速,所以它的效率更高,效果也更好。FP32就是双精度浮点类型表示一个颜色通道,自然精度更高效果更好,可是会付出一些效率代价。FP系列的都要求是SM3.0以上。而后来DX10,11神马浮云般的就支持FP64,FP128咯╮(╯_╰)╭ 某志开发网游,面对国内二三级城市,8予考虑……

基本想法流程:我们使用A8R8G8B8肯定是不能充分表达我们所想表达的肉眼可分辨细节啦,那么就用更精确的颜色通道来表示亮度呗,很简单,使用D3DFMT_A16R16G16B16F就好啦。但是很遗憾,由于GPU限制,我们不能设置后台缓冲为这么高精度的模式。所以,这个方法不行……悲催……那么,我们创建一个这样高精度的纹理,然后进行渲染,将渲染后的结果递交给后台缓冲就可以再屏幕上得到这种高精度的结果咯:)

所以,我们不得不创建一个高精度的纹理作为渲染对象,用它来替代原本的后台缓冲,我们就称这个纹理叫HDR渲染纹理。

其实,我们将HDR渲染纹理作为渲染对象后,就像平常的渲染就足够了。渲染完了之后呢,将这个纹理绘制到原本的后台缓冲就OK了。呃,怎么将纹理绘制到后台缓冲?……直接渲染一个全屏的四方面片带上这个纹理到后台缓冲就哦了 -.-

那么,从上面流程我们发现貌似我们还没有做像素的精度提升处理,这一步我们称之为曝光吧。

关于曝光的说明,有兴趣的去看看http://freespace.virgin.net/hugo.elias/graphics/x_posure.htm(╮(╯_╰)╭某志表示懒的翻译)

总之,各种数学家得到的最终结果之一是: float4 exposed = 1.0 - pow( 2.71, -( vignette * unexposed * exposure ) );
这也就是我们写Shader所需要关注的唯一的公式(当然也有其他类型的公式,不同的公式有不同的效果)。其中 unexposed 就是原始的未加工的颜色纹理,vignette 下面描述,exposure 就是曝光度,大于1一般就可以了。(个人喜欢设置为2.0f,省事)

vignette 在摄影里面称之为 暗角。因为照相机镜头有一个曲线度,导致照出的相片四个角会有一些亮度的丢失,发暗。这个就是暗角。

下面用俩公式表示暗角的代码。

float2 vtc = float2( iTc0 - 0.5 );
float vignette = pow( 1 - ( dot( vtc, vtc ) * 1.0 ), 2.0 );
其中,iTc0就是纹理边角的大小,值限制为[0,1]之间。

呃,扯远点。之前说过,大自然的色彩现在表示为10的12次方,可是人眼只可以分辨10的3次方色彩。那是否人眼就会很多色彩无法分辨,当然不是-。-人眼不能分辨的颜色,我们自然也没必要渲染和讨论了……那么人眼是如何做到识别更大范围的色彩的呢。是一种亮度自动适应机制,我们可以假设从一个光亮的室外刚走进一个黑暗的小黑屋里,那么人眼开始时什么都看不到的,但是慢慢的人眼会调整,适应黑暗的亮度,就可以看到一些色彩了,这就是亮度适应。

游戏里有些时候需要这么去做,例如从室内到室外,或者天气的突然变化(打闪咯),此时,我们需要做的就是动态修改一下曝光度,即exposure 。那么,此时这个曝光度如何计算呢?

最简单的方法就是使用Mip-map,Mip-map递归到1个像素纹理,此时得到的这个像素点亮度就很接近当前的全场景平均亮度,然后将这个亮度作为曝光度,将会比你硬编码方便自然的多。而且,很眩哦,全场景动态光照自适应。

最后,进行Bloom。这个单词我相信能来研究HDR的人是不会陌生的,它非常简单,就是获得当前场景纹理的一份拷贝,然后将这份拷贝进行Blur得到处理后的纹理(Blur一般是先水平方向再垂直方向,当然,可以进行多次╮(╯_╰)╭),再将处理后的纹理和原场景纹理进行一个混合得到最终结果。

当然这里有两个细节:1,为了让Bloom效率更高,我们经常可以将原场景拷贝后,缩减为原来的1/4再进行Blur,。2,我们经常是为了让亮的地方更亮,而不是需要全场景都进行Blur(没必要对普通色彩就可以表达的色彩进行Blur处理),所以在压缩拷贝场景纹理之前,通常我们会减去一个固定的色彩值,仅处理高于该色彩值的像素纹理即可,这样效率也会有些提升。当然,反之亦然,可以处理更暗的情况。

我们终于得到了一个高精度的纹理,但是考虑到可怜的显示屏,我们需要再加一道工,进行ToneMapping以保证最终渲染的RGB值不能超过计算机显示屏显示范围。ToneMapping的目的很明显,就是将一个高范围的值映射为一个低范围的值,这里就要求有合适的映射算法。

这里,http://www.graphixer.com.cn/ShowWorks.asp?Type=1&ID=48他有详细说明,俺不再做额外解释。

然后,将这个纹理渲染到后台缓冲。

那么,HDR到这里就全部结束了-。-

若需要特殊的效果,可以调整一下曝光度的数值,或者进行诡异的Blur便可以。

还不明白?那么详述一下

详细流程

1:创建一个D3DUSAGE_RENDERTARGET的高精度格式纹理,并且设置渲染对象为该纹理,替代后台缓冲。 device->SetRenderTarget( 0, m_hdrTex );

2:为这个纹理创建Mip-Map取得1/4即第三层级纹理m_hdrTexLevel3.

3:对m_hdrTexLevel3进行逐纹理像素曝光处理。

4:对m_hdrTexLevel3图进行Blur。

5:恢复m_hdrTexLevel3图到原始大小m_hdrTex。

6:将原始场景图和Blur过的m_hdrTex图进行相加混合。

7:进行Tone-mapping。

8:得到最终纹理,将该纹理渲染至后台缓冲。

以上流程均可以写在一个.fx里交由GPU处理~

//-------------------------------

附:获得亮度很简单……

float lum = dot( color.rgb, float3( 0.333, 0.333, 0.333 ) );

有些人喜欢重视Green轻视Blue,那是未必有意义的……俺测试的效果还是均衡的好-。-但是还是给出吧。

float lum = 0.27*r + 0.67*g + 0.06b; // 据说这个公式是根据人眼对红绿蓝的敏感度得到的。好吧,叫兽砖家。

分享到:
评论

相关推荐

    HDR-60 70中文使用说明书

    根据提供的文件信息,以下是对"HDR-60/70中文使用说明书"的知识点进行详细说明。 1. 产品概述 HDR-60/70是一款高标清硬盘录像机,支持硬盘热插拔功能,采用MPEG-2编码标准。这意味着该设备能够记录高清视频,并存储...

    HDR TMO原始碼

    在现实世界中,我们的视觉系统可以适应各种光照条件,而HDR技术正是为了模拟这一能力,让数字图像能更好地反映真实世界的视觉体验。 接着,我们来探讨TMO(色调映射)算法。Tone Mapping是HDR图像处理的关键步骤,...

    Uncharted 2: HDR Lighting

    综上所述,《Uncharted 2: HDR Lighting》不仅深入探讨了Gamma校正的重要性,还介绍了影调映射、SSAO等技术在游戏中的应用。这些技术共同作用于游戏的渲染流程中,使得《神秘海域2》能够呈现出令人惊叹的视觉效果。...

    HDR, tone mapping代码

    HDR技术通过拍摄多张不同曝光的照片并合并它们来模拟人眼对光线的感知,从而获得包含更多亮度信息的图像。 描述中提到的“tone mapping”是HDR处理中的关键步骤,它是一种将高动态范围图像转换为适合标准显示器显示...

    HDR:适应能力提升

    标题中的“HDR”是High-Dynamic Range的缩写,它...综上所述,这个压缩包可能是一个关于HDR技术的综合学习资源,涵盖了理论知识、实践应用和特定工具的使用,特别是与TeX的结合,为用户提供了深入了解和使用HDR的途径。

    电信设备-多摄像头的HDR拍摄方法、拍摄装置和移动终端及可读存储介质.zip

    7. **应用与挑战**:HDR技术不仅适用于静态摄影,还被广泛应用于视频录制。然而,HDR也面临一些挑战,如运动模糊、鬼影(由于不同时间点拍摄的图像对齐问题)以及处理速度限制等。因此,持续的研发工作致力于改进...

    matlabHDR工具箱用于将高动态范围(HDR)图像处理成MATLAB和Octave.zip

    高动态范围(HDR)图像处理是数字图像处理领域的一个重要技术,它允许捕捉并再现超出普通相机传感器动态范围的光线信息。MATLAB HDR工具箱是一个专门为处理和分析高动态范围图像设计的软件包,适用于MATLAB和Octave...

    matlab[ICCV 23]使用语义一致变压器的无对齐HDR去重影的正式实现(代码和数据集).zip

    标题中的"matlab[ICCV 23]使用语义一致变压器的无对齐HDR去重影的正式实现"指的是一个基于MATLAB的图像处理项目,该项目在...通过这个公开的实现,研究者们有机会深入理解这一技术,并可能将其扩展到其他相关应用中。

    安桥nr906说明书

    下面,我们将深入探讨其主要特性、操作指南以及技术细节。 1. **主要特性**: - **多声道输出**:NR906支持9.2声道输出,能够实现杜比全景声(Dolby Atmos)和DTS:X等三维音效格式,为用户提供沉浸式的环绕声体验...

    FUJIFILM富士X-Pro2英文说明书.pdf

    【FUJIFILM富士X-Pro2英文说明书】是一份详细指导用户如何操作富士X-Pro2数码相机的...通过这份详尽的说明书,用户不仅可以学会如何操作富士X-Pro2,还能深入了解摄影技术和相机功能,从而充分发挥这款高端相机的潜力。

    FUJIFILM富士X100F英文说明书.pdf

    6. **更深入的摄影与回放**:包括高级拍摄技巧,如连拍,定时器,HDR,以及更复杂的图像设置。 7. **菜单系统**:详述了相机的菜单结构,如何通过菜单进行高级设置。 8. **连接性**:涵盖如何将相机连接到电脑或其他...

    可视媒体技术

    2. **3.HDR&BilateralFilter.ppt** - 高动态范围(HDR)技术允许在图像中保留更多的亮部和暗部细节,提高了视觉的真实感。双边滤波器是一种图像平滑技术,它可以保留边缘的同时去除噪声,用于改善图像质量。 3. **...

    FUJIFILM富士FinePix F1000EXR英文说明书.pdf

    - **技术注解**:解释一些专业术语和技术参数,帮助用户更深入地理解相机的工作原理。 - **故障排查**:列出常见问题和解决方案,帮助用户自行解决简单的问题。 - **附录**:包含重要信息和参考资料,如规格表、安全...

    HDR Visual Difference Predictor-开源

    5. **文档**:详细说明HDR VDP的工作原理、使用方法和API接口的文档。 6. **许可证文件**:规定了开源软件的使用、分发和修改条款,通常遵循GPL或MIT等开源协议。 通过利用HDR VDP,开发人员可以: 1. **评估图像...

    FUJIFILM富士HS50EXR英文说明书.pdf

    技术说明包含了关于相机硬件和软件的详细信息,如像素、感光度、镜头性能等,为高级用户提供深入的参考。 **9. 故障排除** 当遇到问题时,这部分提供了可能的解决方案,帮助用户诊断并解决相机操作中的常见问题。 ...

    消费电子行业研究周报显示和成像技术持续升级创新-14页.pdf.zip

    3. **夜间模式与HDR**:通过多帧合成和AI算法,手机摄影在暗光环境和高动态场景下表现显著提升,这是成像技术的一大突破。 4. **AI辅助拍摄**:人工智能在识别场景、优化设置、稳定视频等方面发挥重要作用,提供了...

    FUJIFILM富士FinePix F770EXR英文说明书.pdf

    对于技术爱好者,这里会提供更深入的技术信息,包括像素、ISO感光度、快门速度、光圈等摄影术语的解释,以及相机的性能和规格详情。 **故障排除** 如果遇到任何问题,故障排除章节将提供可能的解决方案。根据提示...

    FUJIFILM富士FinePix F900EXR英文说明书.pdf

    9. **技术说明**:提供了关于相机硬件和软件的技术信息,如像素、感光度、镜头规格等。 10. **故障排除**:当遇到问题时,提供了一些建议和解决方案,帮助用户诊断和解决常见问题。 11. **附录**:包含额外的信息,...

    FUJIFILM富士FinePix F850EXR英文说明书.pdf

    3. **进阶摄影**:深入讲解高级摄影技巧,可能涉及曝光补偿、连拍、定时拍摄、HDR、微距摄影等功能。 4. **进阶回放**:涵盖照片编辑、删除、评级和分享选项,以及如何使用相机内置的图像管理工具。 5. **录制电影**...

    尼康D7100使用说明书 简体中文 PDF

    - **技术注释**:深入解析相机内部构造与工作原理,增进专业理解。 - **故障排除**:针对常见问题提供解决方案,减少维修成本。 #### 六、保养与配件 - **存储卡兼容性**:列出推荐的存储卡类型,确保数据读写稳定...

Global site tag (gtag.js) - Google Analytics