博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bloom, Fake HDR, True HDR(转)
阅读量:6691 次
发布时间:2019-06-25

本文共 1726 字,大约阅读时间需要 5 分钟。

 bloom, Fake HDR, True HDR概念

HDR在我旧网上有说过原理,主要是参考了gamedev上的文章.现在把这几个放一起解释一下.

这些后期处理技术都是为了实现发光特效(glow effect)

HDR, 指高动态光范围,类似于暴光的效果,由于rgb分量在计算机显示

时超出255范围的就被丢弃,所以暴光效果表示不太出来,于是使用了一些

方法来得到这样的效果, 一般常用方法就是把高光找出来模糊后加色混合原场景.

bloom 和 Fake HDR(伪HDR), True HDR(真HDR)原理都差不多,主要是在实现

方法上的不同, 如下所示实现方法:

1. bloom的实现:

   只渲染发出的光芒到一贴图上(例如关掉灯光只渲染自发光物件的光芒)

   然后blur这张贴图

   最后把它用加色混到场景上

2. True HDR的实现:

   读取hdr文件

   将颜色转到64位浮点原贴图中

   将原贴图以1/4大小渲染到downsample贴图中(只取高光,丢弃LDR.即亮度低于1的被过滤掉)

   对downsample进行横向blur然后再纵向blur

   最后将blur与原贴图加色合成并进行tone mapping(调整亮度和乘上暴光指数)就是最终的贴图了.

   提示:

   什么是tone mapping:

     tone mapping指的是对那个可能过亮或过黑image进行rbg值缩放调整(因为最终输出

   的rbg值是不能超出计算机显示范围).

   具体参见hdr教程参见(非常简单,有源码):

  

3. Fake HDR的实现:

   由于真HDR需要SM3.0的浮点纹理支持,所以有人在dx8下作出了伪HDR, 作法是

   将hdr浮点格式转换成16位整形到一整形贴图上,然后再把发光部分抽出来渲染到另一贴图上,

   对它进行blur, 然后用加色方式与第一张贴图混合.

   参考(在fake hdr和true hdr):

  

 说白了这种唬人的技术可以用非常简单的方法来实现, 具体可参考dxsdk后期处理例子

 有bloom, glow等效果,  而且可以自己组合(有点象3dsmax那个后期合成), 不过由于多

 遍渲染及相关计算等处理会使速度变慢.

 dx的例子在: Microsoft DirectX SDK (December 2006)\Samples\C++\Direct3D\PostProcess\

  这里有我对该程序的分析:

 http://blog.csdn.net/flipcode/archive/2008/03/18/2194994.aspx

 另外HDR相关可参考phoenixzz的<Something about HDR>解释也比较容易懂:

 他的网站:

 他的解释:

 HDR(High dynamic range) 光照技术是一种近期十分热门的技术,很多最新的DEMO与商业游戏都使用了这种技术,如近期比较流行的帝国时代三与Half-Life2等。由于传统图形学中的纹理颜色表示范围在[0,1]之间,而现实生活中光的范围远远超过[0,1],因此超出范围的光信息就会丢失。由于DX9支持了浮点纹理格式,因此可以支持更大范围的颜色,HDR得以实现。

说到底,HDR实现的根本技术在于浮点纹理格式与浮点绘制表面,A16B16G16R16F 的纹理格式已经足够。其实整数格式的纹理也可以实现HDR,只是需要多费一些事,需要将浮点数表示为整数格式压进整数格式的纹理中。

渲染技术其实很简单,首先将像素结果乘以一个曝光度(一般大于1),这个结果一般会超过[0,1]这个范围,将小于1的部分保存为一个普通的LDR纹理(可以是R8G8B8格式),将超过1的部分保存为HDR纹理(A16R16G16B16F格式);然后对HDR纹理进行BLUR(先水平方向再垂直方向,而且进行BLUR的纹理大小可以是原大小的1/2或1/4,也可以BLUR多遍),最后将LDR纹理与BLUR的结果相加即得到最终的结果。

至于得到特殊的效果,需要仔细调整曝光度以及一些参数。

转载于:https://www.cnblogs.com/lancidie/archive/2011/07/18/2109990.html

你可能感兴趣的文章
action中redirectAction到另一个命名空间中的action该如何配置
查看>>
label标签利用jquery获取值得方式为$("#message").html()
查看>>
javascript创建Ajax对象
查看>>
php文件缓存
查看>>
思考方式--教会你如何去思考!
查看>>
mysql库的操作
查看>>
c++的getline()和get()函数
查看>>
面向对象第一单元总结
查看>>
模拟购物车
查看>>
web典型理论题整理HTML+CSS部分
查看>>
前端基础之jQuery入门 01
查看>>
Xshell 5 免费版本安装过程
查看>>
关于ready和load方法作用于不同情况下的比较
查看>>
Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载
查看>>
使用CSS让元素尺寸缩小时保持宽高比例一致
查看>>
HDU-2955-Robberies
查看>>
如何使Linux系统上的程序开机后自动运行 (转)
查看>>
Silverlight中 Content="{TemplateBinding Content}" bug
查看>>
Jsoup后台解析html、jsp网页
查看>>
中间件详解,Django复习
查看>>