CN104392478A - 一种屏幕空间中体积雾的算法 - Google Patents
一种屏幕空间中体积雾的算法 Download PDFInfo
- Publication number
- CN104392478A CN104392478A CN201410607219.8A CN201410607219A CN104392478A CN 104392478 A CN104392478 A CN 104392478A CN 201410607219 A CN201410607219 A CN 201410607219A CN 104392478 A CN104392478 A CN 104392478A
- Authority
- CN
- China
- Prior art keywords
- mist
- depth
- scene
- volume
- color
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Image Generation (AREA)
- Display Devices Of Pinball Game Machines (AREA)
Abstract
本发明公开了一种屏幕空间中体积雾的算法,包括:利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子;基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色。本发明所述屏幕空间中体积雾的算法,可以克服现有技术中模拟效果差、适用场景少等缺陷,以实现模拟效果好、适用场景多的优点。
Description
技术领域
本发明涉及计算机图形学技术领域,具体地,涉及一种屏幕空间中体积雾的算法。
背景技术
自然现象有很多,像云,雾等更能给人带来如临仙境的感受,在虚拟的3D场景中,游戏中运用大量的雾化来模拟现实中的一种大气现象,用来营造一种氛围来增强场景的真实性和距离感,雾中包含成千上万的小粒子,不仅吸收来自场景的光线,他们还要反射一部分的光线到场景中,粒子之间还存在反射、散射、吸收等问题,不是用一个简单的模型就能表示出来的,在游戏中,可以尝试关闭、打开雾效,打开雾效以后,场景显得更加逼真,而游戏反而更加流畅,是因为开启雾效后其实对雾模型后的物体进行优化,从而能提高渲染速率。
在游戏中目前是在游戏中目前是利用场景的深度(即场景到摄像机的距离)来计算雾化的系数,这种方法可以快速生成雾的效果,复杂度比较低,整个雾是充满场景的,无法体现真实雾效果。
在实现本发明的过程中,发明人发现现有技术中至少存在模拟效果差和适用场景少等缺陷。
发明内容
本发明的目的在于,针对上述问题,提出一种屏幕空间中体积雾的算法,以实现模拟效果好和适用场景多的优点。
为实现上述目的,本发明采用的技术方案是:一种屏幕空间中体积雾的算法,包括:
a、利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;
b、基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子;
c、基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色。
进一步地,所述步骤a,具体包括:
在场景中,各点相对于摄像机的距离可以用深度图来表示,即深度图中的每一个像素值表示场景中某一点与摄像机之间的距离;
在未放置雾模型之前,通过渲染场景的所有物体,利用多重渲染目标MRT技术渲染场景同时把深度信息保存到一张纹理中;MRT是GPU编程中的像素着色器支持的渲染方式,通过像素着色器能够返回多个渲染目标。
进一步地,所述步骤b,具体包括:
⑴为了计算可见像素的混合因子,在放置体积雾模型之后,首先渲染不包含任何物体的体积雾模型:
先渲染体积雾的正面,并把体积雾正面像素的深度保存到渲染目标中;再渲染体积雾的背面,把体积雾的背面像素的深度保存到另一张渲染目标中,那么体积雾背面像素深度和前面像素深度的差近似为屏幕空间上该像素点的雾的浓度,对于屏幕上的任意一点的像素用同样的方式计算;
⑵视点与目标对象的距离简称视点距离,即:场景深度,能够从步骤a得到的纹理即场景深度图中获取,它与体积雾模型正、背深度之间有着阶梯关系,且在体积雾的正面深度值、背面深度值都小于1的条件下,有以下三种情况表示场景中可见像素的混合因子:
其中,Dback为体积雾背面像素深度值,Dfront为体积雾正面像素深度值,Dsence场景像素深度值,Dfog-back为体积雾背面深度,Dfog-front为体积雾正面深度,D为视点距离。
进一步地,在步骤b中,视点距离和雾模型的正背面的深度关系包括:
当视点距离小于体积雾的正面深度时,混合系数为0,结果为物体本身的渲染结果;
当视点距离大于雾的背面深度时,混合系数为1;结果使用雾的颜色值。
当视点距离不小于雾的正面深度且小于雾的背面深度时,混合系数范围(0,1);。
进一步地,所述体积雾模型具体是闭合的凸面体,是因为当光线进出凸面体的次数不会大于两次。
进一步地,所述步骤c,具体包括:
⑴基于计算得到的可见像素的混合因子,将场景颜色和雾的颜色进行混合,那么在场景编辑器中,雾的颜色是一个可调参数,是已知量,同时设置调节雾的浓度系数,以控制雾的厚薄,将上步得到λ和该浓度系数相乘得到最后的混合系数,这个系数就是输入屏幕之前在帧缓冲中雾的可见像素的混合系数η,能够用以下公式表示:
η=λ*d (2);
其中,η表示最后的混合系数,d为编辑器中雾的浓度系数;
⑵然后利用clamp函数把最后的混合因子约束在[0,1]之间,实现场景中的物体逐渐融入雾中的渐变效果;
基于上述最后的混合系数,把场景颜色和雾颜色进行混合,得到输入屏幕上最终的场景颜色,其混合公式为:
Cfinal=η*Cfog+(1-η)*Cs;
其中,Cfinal为场景的最终颜色值,Cfog为雾的颜色值,Cs为场景颜色。
本发明各实施例的屏幕空间中体积雾的算法,由于包括:利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子;、基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色;可以利用基于屏幕空间的体积雾模拟场景中具有体积且任意形状的雾的效果;从而可以克服现有技术中模拟效果差和适用场景少的缺陷,以实现模拟效果好和适用场景多的优点。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明中场景深度和体积雾正、背深度之间关系示意图;
图2为本发明中基于屏幕空间体积雾的算法流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
为了表现现有技术中这种复杂的模型,根据本发明实施例,如图1和图2所示,提供了一种屏幕空间中体积雾的算法,利用基于屏幕空间的体积雾模拟场景中具有体积且任意形状的雾的效果,当观察者从近到远的场景中物体会逐渐的“朦胧”化,超过一定的距离后完全与背景融合在一起。
在游戏场景中的体积雾,就是被限制了形状的雾,为了加快开发进度,每个游戏开发架构中被置入了模型编辑器,场景编辑器,动作编辑器等工具辅助开发,首先利用场景编辑器置入一个闭合凸面体模型,这个模型用来模拟体积雾影响范围。其原理为:根据屏幕空间场景中UV像素信息和该位置的深度信息,然后结合场景中雾模型的正面和背面的深度信息和根据相机位置的不同得到该场景的可见像素的混合系数,然后将雾的颜色和场景颜色进行混合得到最终场景。
本发明技术方案的具体实施方案为:
第一:首先利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上。
在场景中,各点相对于摄像机的距离可以用深度图来表示,即深度图中的每一个像素值表示场景中某一点与摄像机之间的距离。在未放置雾模型之前,通过渲染场景的所有物体,利用多重渲染目标(MultiRenderTarget,简称MRT)技术渲染场景同时把深度信息保存到一张纹理中,MRT是GPU编程中的像素着色器支持的渲染方式,通过像素着色器可以返回多个渲染目标。
第二:分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子。
为了计算可见像素的混合因子,在放置体积雾模型之后,这个体积雾模型最好是一个闭合的凸面体,是因为当光线进出凸面体的次数不会大于两次,首先渲染不包含任何物体的体积雾模型,先渲染体积雾的正面,并把体积雾正面像素的深度保存到渲染目标中,再渲染体积雾的背面,把体积雾的背面像素的深度保存到另一张渲染目标中,那么体积雾背面像素深度和前面像素深度的差近似为屏幕空间上该像素点的雾的浓度,对于屏幕上的任意一点像素用同样的方式计算。如图所示1。
从图1中可以看出视点与目标对象的距离简称:视点距离,即:场景深度,可从第一步得到的场景深度图中获取,它与体积雾模型正、背深度之间有着阶梯关系,且在体积雾的正面(fogstart)、背面(fogend)深度值(深度值都是小于1)都小于1的条件下,有以下三种情况表示场景中可见像素的混合因子:
其中,Dback为体积雾背面像素深度值,Dfront为体积雾正面像素深度值,Dsence场景像素深度值,Dfog-back为体积雾背面深度,Dfog-front为体积雾正面深度,D为视点距离。
那么视点距离和雾模型的正背面的深度关系为:
当视点距离小于体积雾的正面深度时,混合系数为0,结果为物体本身的渲染结果。
当视点距离大于雾的背面深度时,混合系数为1;结果使用雾的颜色值。
当视点距离不小于雾的正面深度且小于雾的背面深度时,混合系数范围(0,1);
第三:把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色。
有上述步骤2得到的混合因子,将场景颜色和雾的颜色进行混合,那么在场景编辑器中,雾的颜色是一个可调参数,是已知量,同时设置调节雾的浓度系数,以控制雾的厚薄,将上步得到λ和该浓度系数相乘得到最后的混合系数,这个系数就是输入屏幕之前在帧缓冲中雾的可见像素的混合系数η,可用以下公式表示:
η=λ*d (2)
其中,η可以表示最后的混合系数,d为编辑器中雾的浓度系数。
然后利用clamp函数把最后的混合因子约束在[0,1]之间,从而实现了场景中的物体逐渐融入雾中的渐变效果;
有了上述的最后的混合系数,把场景颜色和雾颜色进行混合,得到输入屏幕上最终的场景颜色,其混合公式为:
Cfinal=η*Cfog+(1-η)*Cs;
其中,Cfinal为场景的最终颜色值,Cfog为雾的颜色值,Cs为场景颜色。
与现有技术相比,本发明的技术方案,具有以下优点:
⑴利用雾化优化场景渲染,在观察的范围到物体会被限制在一定距离内,超过一定的距离,渲染远处的物体没有价值,从而可以有效的把这种物体剔除掉,造成不必要的资源浪费;
⑵对场景增加氛围,引入雾效,从近到远的场景中物体会逐渐“朦胧”,在超过一段距离后会完全和背景融在一起。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种屏幕空间中体积雾的算法,其特征在于,包括:
a、利用MRT技术渲染所有场景的物体,把场景的深度信息渲染到一张纹理上;
b、基于渲染得到的场景信息的纹理,分别渲染体积雾模型的背面和正面,得到体积雾的正、背面深度并保存到两张渲染目标中同时结合场景的深度值计算得到可见像素的混合因子;
c、基于计算得到的可见像素的混合因子,把场景颜色和雾的颜色以混合因子进行混合,然后投射到屏幕空间最终颜色。
2.根据权利要求1所述的屏幕空间中体积雾的算法,其特征在于,所述步骤a,具体包括:
在场景中,各点相对于摄像机的距离可以用深度图来表示,即深度图中的每一个像素值表示场景中某一点与摄像机之间的距离;
在未放置雾模型之前,通过渲染场景的所有物体,利用多重渲染目标MRT技术渲染场景同时把深度信息保存到一张纹理中;MRT是GPU编程中的像素着色器支持的渲染方式,通过像素着色器能够返回多个渲染目标。
3.根据权利要求1或2所述的屏幕空间中体积雾的算法,其特征在于,所述步骤b,具体包括:
⑴为了计算可见像素的混合因子,在放置体积雾模型之后,首先渲染不包含任何物体的体积雾模型:
先渲染体积雾的正面,并把体积雾正面像素的深度保存到渲染目标中;再渲染体积雾的背面,把体积雾的背面像素的深度保存到另一张渲染目标中,那么体积雾背面像素深度和前面像素深度的差近似为屏幕空间上该像素点的雾的浓度,对于屏幕上的任意一点的像素用同样的方式计算;
⑵视点与目标对象的距离简称视点距离,即:场景深度,能够从步骤a得到的纹理即场景深度图中获取,它与体积雾模型正、背深度之间有着阶梯关系,且在体积雾的正面深度值、背面深度值都小于1的条件下,有以下三种情况表示场景中可见像素的混合因子:
其中,Dback为体积雾背面像素深度值,Dfront为体积雾正面像素深度值,Dsence场景像素深度值,Dfog-back为体积雾背面深度,Dfog-front为体积雾正面深度,D为视点距离。
4.根据权利要求3所述的屏幕空间中体积雾的算法,其特征在于,在步骤b中,视点距离和雾模型的正背面的深度关系包括:
当视点距离小于体积雾的正面深度时,混合系数为0,结果为物体本身的渲染结果;
当视点距离大于雾的背面深度时,混合系数为1;结果使用雾的颜色值;
当视点距离不小于雾的正面深度且小于雾的背面深度时,混合系数范围(0,1)。
5.根据权利要求3所述的屏幕空间中体积雾的算法,其特征在于,所述体积雾模型具体是闭合的凸面体,是因为当光线进出凸面体的次数不会大于两次。
6.根据权利要求2-5中任一项所述的屏幕空间中体积雾的算法,其特征在于,所述步骤c,具体包括:
⑴基于计算得到的可见像素的混合因子,将场景颜色和雾的颜色进行混合,那么在场景编辑器中,雾的颜色是一个可调参数,是已知量,同时设置调节雾的浓度系数,以控制雾的厚薄,将上步得到λ和该浓度系数相乘得到最后的混合系数,这个系数就是输入屏幕之前在帧缓冲中雾的可见像素的混合系数η,能够用以下公式表示:
η=λ*d (2);
其中,η表示最后的混合系数,d为编辑器中雾的浓度系数;
⑵然后利用clamp函数把最后的混合因子约束在[0,1]之间,实现场景中的物体逐渐融入雾中的渐变效果;
基于上述最后的混合系数,把场景颜色和雾颜色进行混合,得到输入屏幕上最终的场景颜色,其混合公式为:
Cfinal=η*Cfog+(1-η)*Cs;
其中,Cfinal为场景的最终颜色值,Cfog为雾的颜色值,Cs为场景颜色。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410607219.8A CN104392478B (zh) | 2014-10-31 | 2014-10-31 | 一种屏幕空间中的体积雾的操作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410607219.8A CN104392478B (zh) | 2014-10-31 | 2014-10-31 | 一种屏幕空间中的体积雾的操作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104392478A true CN104392478A (zh) | 2015-03-04 |
CN104392478B CN104392478B (zh) | 2017-12-05 |
Family
ID=52610376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410607219.8A Active CN104392478B (zh) | 2014-10-31 | 2014-10-31 | 一种屏幕空间中的体积雾的操作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104392478B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104751509A (zh) * | 2015-03-31 | 2015-07-01 | 克拉玛依红有软件有限责任公司 | 一种实时体积雾化效果算法 |
CN106780642A (zh) * | 2016-11-15 | 2017-05-31 | 网易(杭州)网络有限公司 | 迷雾遮罩贴图的生成方法及装置 |
CN108031117A (zh) * | 2017-12-06 | 2018-05-15 | 北京像素软件科技股份有限公司 | 区域雾效实现方法及装置 |
CN113470161A (zh) * | 2021-06-30 | 2021-10-01 | 完美世界(北京)软件科技发展有限公司 | 虚拟环境中容积云的光照确定方法、相关设备及存储介质 |
WO2022188460A1 (zh) * | 2021-03-09 | 2022-09-15 | 网易(杭州)网络有限公司 | 光照渲染方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6940501B2 (en) * | 2001-03-28 | 2005-09-06 | Intel Corporation | Tiled display |
CN104091363A (zh) * | 2014-07-09 | 2014-10-08 | 无锡梵天信息技术股份有限公司 | 一种基于屏幕空间实时的体积云计算方法 |
-
2014
- 2014-10-31 CN CN201410607219.8A patent/CN104392478B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6940501B2 (en) * | 2001-03-28 | 2005-09-06 | Intel Corporation | Tiled display |
CN104091363A (zh) * | 2014-07-09 | 2014-10-08 | 无锡梵天信息技术股份有限公司 | 一种基于屏幕空间实时的体积云计算方法 |
Non-Patent Citations (7)
Title |
---|
OAYX: "体积雾(dx9)", 《HTTP://WWW.CNBLOGS.COM/LANCIDIE/ARCHIVE/2011/02/23/1962538.HTML》 * |
刘芳: "虚拟环境中自然景物模拟研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
唐为: "生成多层雾化效果技术的研究", 《万方学位论文数据库》 * |
张毓茜: "真实感三维场景中实时渲染特效的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
熊西满: "基于3D图形引擎的雾化渲染方法及实现", 《万方学位论文数据库》 * |
第九道: "体积雾(dx9)", 《HTTP://BLOG.SINA.COM.CN/S/BLOG_6EE567910100UWHL.HTML》 * |
郭浩瑜: "《Unity 3D ShaderLab开发实战详解》", 30 April 2014, 人民邮电出版社 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104751509A (zh) * | 2015-03-31 | 2015-07-01 | 克拉玛依红有软件有限责任公司 | 一种实时体积雾化效果算法 |
CN106780642A (zh) * | 2016-11-15 | 2017-05-31 | 网易(杭州)网络有限公司 | 迷雾遮罩贴图的生成方法及装置 |
CN106780642B (zh) * | 2016-11-15 | 2020-07-10 | 网易(杭州)网络有限公司 | 迷雾遮罩贴图的生成方法及装置 |
CN108031117A (zh) * | 2017-12-06 | 2018-05-15 | 北京像素软件科技股份有限公司 | 区域雾效实现方法及装置 |
CN108031117B (zh) * | 2017-12-06 | 2021-03-16 | 北京像素软件科技股份有限公司 | 区域雾效实现方法及装置 |
WO2022188460A1 (zh) * | 2021-03-09 | 2022-09-15 | 网易(杭州)网络有限公司 | 光照渲染方法、装置、电子设备及存储介质 |
CN113470161A (zh) * | 2021-06-30 | 2021-10-01 | 完美世界(北京)软件科技发展有限公司 | 虚拟环境中容积云的光照确定方法、相关设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104392478B (zh) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102396003B (zh) | 用于向计算机图形中的对象添加阴影的方法 | |
US7414625B1 (en) | Generation of glow effect | |
CN104392478A (zh) | 一种屏幕空间中体积雾的算法 | |
JP2010033296A (ja) | プログラム、情報記憶媒体及び画像生成システム | |
CN104103092A (zh) | 一种基于聚光灯实时动态阴影的实现方法 | |
CN104091363A (zh) | 一种基于屏幕空间实时的体积云计算方法 | |
CN104143205A (zh) | 大规模真实感体积云的实时渲染方法 | |
US8411089B2 (en) | Computer graphics method for creating differing fog effects in lighted and shadowed areas | |
Kosinski et al. | Tron Legacy | |
US6828969B2 (en) | Game system, program and image generating method | |
JP4651527B2 (ja) | プログラム、情報記憶媒体及び画像生成システム | |
CN106384376B (zh) | 雾效模拟方法及装置 | |
WO2017174006A1 (zh) | 图片处理的方法和装置 | |
Bittner et al. | Shadow caster culling for efficient shadow mapping | |
CN106910240A (zh) | 一种实时阴影的生成方法及装置 | |
Babić | Volumetric Atmospheric Effects Rendering | |
Oravakangas | Game Environment Creation: Efficient and Optimized Working Methods | |
Luque | The cel shading technique | |
Raudsepp | Volumetric Fog Rendering | |
Rose et al. | Real-time photorealistic stereoscopic rendering of fire | |
Kubota | Real-Time Screen Space Cloud Lighting | |
Ghani et al. | Preserving wayang kulit for future generations | |
Kang et al. | A study on the real-time toon rendering for 3D geometry model | |
Paquette et al. | Rendering a CG Scene | |
Robbins | Computer graphics and digital visual effects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |