一种屏幕空间中体积雾的算法

文档序号:6632920阅读:430来源:国知局
一种屏幕空间中体积雾的算法
【专利摘要】本发明公开了一种屏幕空间中体积雾的算法,包括:利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子;基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色。本发明所述屏幕空间中体积雾的算法,可以克服现有技术中模拟效果差、适用场景少等缺陷,以实现模拟效果好、适用场景多的优点。
【专利说明】一种屏幕空间中体积雾的算法

【技术领域】
[0001] 本发明涉及计算机图形学【技术领域】,具体地,涉及一种屏幕空间中体积雾的算法。

【背景技术】
[0002] 自然现象有很多,像云,雾等更能给人带来如临仙境的感受,在虚拟的3D场景中, 游戏中运用大量的雾化来模拟现实中的一种大气现象,用来营造一种氛围来增强场景的真 实性和距离感,雾中包含成千上万的小粒子,不仅吸收来自场景的光线,他们还要反射一部 分的光线到场景中,粒子之间还存在反射、散射、吸收等问题,不是用一个简单的模型就能 表示出来的,在游戏中,可以尝试关闭、打开雾效,打开雾效以后,场景显得更加逼真,而游 戏反而更加流畅,是因为开启雾效后其实对雾模型后的物体进行优化,从而能提高渲染速 率。
[0003] 在游戏中目前是在游戏中目前是利用场景的深度(即场景到摄像机的距离)来计 算雾化的系数,这种方法可以快速生成雾的效果,复杂度比较低,整个雾是充满场景的,无 法体现真实雾效果。
[0004] 在实现本发明的过程中,发明人发现现有技术中至少存在模拟效果差和适用场景 少等缺陷。


【发明内容】

[0005] 本发明的目的在于,针对上述问题,提出一种屏幕空间中体积雾的算法,以实现模 拟效果好和适用场景多的优点。
[0006] 为实现上述目的,本发明采用的技术方案是:一种屏幕空间中体积雾的算法,包 括:
[0007] a、利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;
[0008] b、基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体 积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的 混合因子;
[0009] c、基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行 混合,然后投射到屏幕空间最终颜色。
[0010] 进一步地,所述步骤a,具体包括:
[0011] 在场景中,各点相对于摄像机的距离可以用深度图来表示,即深度图中的每一个 像素值表示场景中某一点与摄像机之间的距离;
[0012] 在未放置雾模型之前,通过渲染场景的所有物体,利用多重渲染目标MRT技术渲 染场景同时把深度信息保存到一张纹理中;MRT是GPU编程中的像素着色器支持的渲染方 式,通过像素着色器能够返回多个渲染目标。
[0013] 进一步地,所述步骤b,具体包括:
[0014] ⑴为了计算可见像素的混合因子,在放置体积雾模型之后,首先渲染不包含任何 物体的体积雾模型:
[0015] 先渲染体积雾的正面,并把体积雾正面像素的深度保存到渲染目标中;再渲染体 积雾的背面,把体积雾的背面像素的深度保存到另一张渲染目标中,那么体积雾背面像素 深度和前面像素深度的差近似为屏幕空间上该像素点的雾的浓度,对于屏幕上的任意一点 的像素用同样的方式计算;
[0016] ⑵视点与目标对象的距离简称视点距离,即:场景深度,能够从步骤a得到的纹理 即场景深度图中获取,它与体积雾模型正、背深度之间有着阶梯关系,且在体积雾的正面深 度值、背面深度值都小于1的条件下,有以下三种情况表示场景中可见像素的混合因子:

【权利要求】
1. 一种屏幕空间中体积雾的算法,其特征在于,包括: a、 利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上; b、 基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾 的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合 因子; c、 基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混 合,然后投射到屏幕空间最终颜色。
2. 根据权利要求1所述的屏幕空间中体积雾的算法,其特征在于,所述步骤a,具体包 括: 在场景中,各点相对于摄像机的距离可以用深度图来表示,即深度图中的每一个像素 值表示场景中某一点与摄像机之间的距离; 在未放置雾模型之前,通过渲染场景的所有物体,利用多重渲染目标MRT技术渲染场 景同时把深度信息保存到一张纹理中;MRT是GPU编程中的像素着色器支持的渲染方式,通 过像素着色器能够返回多个渲染目标。
3. 根据权利要求1或2所述的屏幕空间中体积雾的算法,其特征在于,所述步骤b,具 体包括: ⑴为了计算可见像素的混合因子,在放置体积雾模型之后,首先渲染不包含任何物体 的体积雾模型: 先渲染体积雾的正面,并把体积雾正面像素的深度保存到渲染目标中;再渲染体积雾 的背面,把体积雾的背面像素的深度保存到另一张渲染目标中,那么体积雾背面像素深度 和前面像素深度的差近似为屏幕空间上该像素点的雾的浓度,对于屏幕上的任意一点的像 素用同样的方式计算; ⑵视点与目标对象的距离简称视点距离,即:场景深度,能够从步骤a得到的纹理即 场景深度图中获取,它与体积雾模型正、背深度之间有着阶梯关系,且在体积雾的正面深度 值、背面深度值都小于1的条件下,有以下三种情况表示场景中可见像素的混合因子:
其中,Dbadt为体积雾背面像素深度值,Dfmt为体积雾正面像素深度值,Dsmre场景像素深 度值,Dft^badt为体积雾背面深度,Df()g_fMnt为体积雾正面深度,D为视点距离。
4. 根据权利要求3所述的屏幕空间中体积雾的算法,其特征在于,在步骤b中,视点距 离和雾模型的正背面的深度关系包括: 当视点距离小于体积雾的正面深度时,混合系数为〇,结果为物体本身的渲染结果; 当视点距离大于雾的背面深度时,混合系数为1 ;结果使用雾的颜色值; 当视点距离不小于雾的正面深度且小于雾的背面深度时,混合系数范围(〇, 1)。
5. 根据权利要求3所述的屏幕空间中体积雾的算法,其特征在于,所述体积雾模型具 体是闭合的凸面体,是因为当光线进出凸面体的次数不会大于两次。
6.根据权利要求2-5中任一项所述的屏幕空间中体积雾的算法,其特征在于,所述步 骤c,具体包括: ⑴基于计算得到的可见像素的混合因子,将场景颜色和雾的颜色进行混合,那么在场 景编辑器中,雾的颜色是一个可调参数,是已知量,同时设置调节雾的浓度系数,以控制雾 的厚薄,将上步得到λ和该浓度系数相乘得到最后的混合系数,这个系数就是输入屏幕之 前在帧缓冲中雾的可见像素的混合系数Π ,能够用以下公式表示: η = λ *d (2); 其中,η表示最后的混合系数,d为编辑器中雾的浓度系数; ⑵然后利用clamp函数把最后的混合因子约束在[0, 1]之间,实现场景中的物体逐渐 融入雾中的渐变效果; 基于上述最后的混合系数,把场景颜色和雾颜色进行混合,得到输入屏幕上最终的场 景颜色,其混合公式为:
其中,Cfinal为场景的最终颜色值,Cfog为雾的颜色值,Cs为场景颜色。
【文档编号】G06T15/10GK104392478SQ201410607219
【公开日】2015年3月4日 申请日期:2014年10月31日 优先权日:2014年10月31日
【发明者】张翼 申请人:无锡梵天信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1