APP下载

基于GPU 的降雨天气实时仿真

2019-04-12潘泽云丁利琼程鹏

现代计算机 2019年7期
关键词:收尾雨点风力

潘泽云,丁利琼,程鹏

(1.四川大学计算机学院,成都610065;2.四川川大智胜软件股份有限公司,成都610065)

0 引言

一直以来,自然场景的模拟与仿真都是计算机图形学中的重要研究方向之一,特别是在三维场景中,对诸如雨雪天气等大气现象的重现方面,更是投入颇大。其原因在于,在对雨雪天气的实施绘制中,雨点及雪花的数量巨大,降落时运动又受多方面因素影响,因而轨迹复杂,且形状会发生些许扭曲变形,再加上多变的光照条件,确实极难给人以浑然天成之感。

目前,在模拟降雨方面有四种常见的方法[1],分别为:基于粒子系统的方法、基于图像的方法、基于纹理的方法,以及综合法。在模拟不规则模糊物体方面,粒子系统是公认的最为成功的图形生成算法[2-3],已在诸多商业软件中被广泛采用,其动态的过程计算模型在配合以适当的物理模型的前提下,会将整个建模过程变得非常简单,但是前期物理模型的准备需要对降雨的整个物理过程有足够细致了解;基于图像的方法是将整幅降雨效果图加入场景,以时间为基准进行旋转或替换从而达到动态的视觉效果[4-5],这样做计算量少,实时响应程度高,但是缺少真实感,也无法体现光照风向等因素,也有从视频中分离出雨点,并根据不同场景的光照和视点等因素调整其亮度的做法;基于纹理的方法使用连续的弯曲纹理模拟雨点的降落过程,是一种结合了物理运动模型、光照交互技术[5-6]和粒子系统的方法,光照是其中至关重要的因素。

本文将综合上述三种方法,把不同方法的优势方面糅合起来,从图片中分离出雨点的基本信息以生成雨点纹理库,并运用到粒子系统中进行实时渲染。图片源自NVIDIA 的数据库,该数据库中包含了370 张以雨滴震荡模型为基础的生成于不同光源照射和视角的雨点图片。为减少光照计算量,使用二维纹理数组存放已生成完毕的雨点数据库,并借鉴GPU 粒子系统[7-8]的有关思想,充分利用GPU 的性能优势,同时满足真实感和实时性方面的要求。

1 关键技术

1.1 受力模型

自然界中,雨点自开始下落至最终落地,经历了三个过程:受重力和风力的影响,与地平线呈某角度开始加速降落,在此同时又受到空气阻力的作用使得该加速度不断减小,其中空气阻力绝对值随速度绝对值的增大而增大;在某一时刻,竖直和水平方向的空气阻力分力分别与该方向上重力、风力的分量合力相等,这时雨点速度达到最大值,称该速度为收尾速度,在不考虑风力变化的前提下,雨点将保持收尾速度匀速降落直至与地面发生碰撞。

雨点降落过程中的受力示意图如图1,图中坐标系为场景世界坐标系,v0为该时刻雨点的飞行方向,G、F、f1、f2分别为该时刻所受重力、风力、竖直和水平方向上的空气阻力,α 为速度与水平方向的夹角。计算可得:

图1 雨点降落过程中的受力分析

由此公式可知,α 在0°到90°之间时,风力与偏移角成某非线性反比关系,大致可得如下步骤以模拟风场中的降雨场景:

(1)确定最大粒子数量

(2)根据风向设置粒子系统的公共方向矢量

(3)根据风力大小计算夹角α

1.2 运动模型

(1)收尾速度

当雨点处于不同速度时,会发生不同程度的形变,将处于收尾速度时雨点的等效半径记为r。在等效半径r 不同的情况下,收尾速度v 的计算有如下两种情况[9]:

①r ≺0.13mm 时:

②r ≥0.13mm 时:

其中,ρω与ρ 分别表示雨点与空气的密度,g 表示重力加速度,C 是阻力系数,h 是雨点的扁率,C0与γ 为常数。

一般来说,雨点会在开始下落后的几秒内完成加速过程达到收尾速度,而本文设置的视点位于地面上方数米处,故将雨点的初始速度设置为收尾速度,在风力的影响下速度会稍有起伏。风力大小为数个预设值,并随时间变化对风力进行插值,更具真实感。

(2)初始位置

而对雨点的初始位置(x0,y0,z0)的设置,有两个关键点:一是需要均匀分布;二是位置有随机偏量。因此,将其设置为:

w,a,b,c 分别为绘制视口的宽度和三个常数。

1.3 雨点的粒子绘制

本文利用GPU 高效的图形处理能力实现粒子每一时刻速度与位置的更新,为确保这些更新计算可以正常映射到GPU 并行处理模型上,采用了布告板技术,将每一个代表了雨点的粒子延伸为平行于xOy 平面的矩形以适应渲染。不妨设矩形边长为L,已知粒子坐标为(x0,y0,z0),则不难求出矩形的四个顶点坐标:

如此,就能将雨点纹理映射到矩形平面上融合形成雨点。雨点纹理源自NVIDIA 数据库中,各种光照及视角条件下的16 位单色图像。将数据存放在二维纹理数组中,利用多重渲染目标技术,可以减少切换频率并加快计算,从而加快访问效率。片元处理阶段,对存储位置和速度数据的纹理取样,根据运动模型与当时刻参数计算雨点速度,并利用求得的速度与前一帧所在位置更新位置信息并写入到片元颜色输出数组。

雨点在降落过程中,因雨点、视点与光源三者的相对位置不断变化,故而需要随位置变化不断确定新的纹理单元进行采样,采样索引为三个角度参数:θlight,θview,φlight,以此为依据从三维纹理中寻找最接近的纹理坐标。其中,θlight为光源方向与xOz 平面的夹角,θview为视点方向与xOz 平面的夹角,φlight为光源方向与视点方向在xOz 平面上的投影所成角,如图2 所示。

图2 相对位置关系示意图

考虑到不同场景中,不同的光照强度及光源位置可能对雨点透明度的视觉效果造成不同影响,故对透明度进行设置,使其与光照强度成正比,和与光源的距离平方成反比。

2 试验结果

在Intel Core i7-4790K CPU 4.00GHz,8GB RAM,NVIDIA GeForce GTX 780,分辨率1680×1050 像素显示器的硬件条件下,依上述方法模拟降雨天气。试验结果如表1,效果图如图3。

表1 性能相关数据

图3 不同粒子数效果图

相较于纯粹基于粒子系统、图像或纹理之一的方法,本文所述方法采用真实受力及运动模型,较好地提高了真实度,实现了不同场景下的可复用性,又有效利用了GPU 高效的图形处理能力,兼顾了运算效率,保证了渲染的实时性。

3 结语

本文所述方法引入真实物理模型,其中风力大小、雨点等效半径、光照强度及光源位置等条件都可以根据不同场景需要进行调整,实现对不同风力条件下,各种等级的降雨的实时模拟,可复用性较强;但若要进一步模拟不同时段中自然光照下的场景,仍需引入太阳光光照模型,且雨点和场景的交互性有待加强,如雨点落在不同位置产生的不同飞溅、涟漪效果等。在下一步的工作中,将继续进行上述方面的研究,并尝试向其他天气进行延伸,以求完成对全年全天气的模拟仿真。

猜你喜欢

收尾雨点风力
海上漂浮式风力发电机关键技术研究
为什么风筝有线能飞,断了线就飞不了了?
雨点
雨点会说话
帆不是越大越好
人物通讯写作教学摭谈
雨点种子
芭比的闪亮王冠
收尾工作的大差异来自于这些小技巧
钱家营矿工作面过老巷收尾技术研究