江苏航运职业技术学院学报  2016年01期 18-22+26   出版日期:2016-03-25   ISSN:1006-6977   CN:61-1281/TN
基于粒子系统与纹理映射的自适应雨景仿真系统研究


0引言
随着虚拟现实技术的发展, 对各种真实场景的仿真模拟已经出现在各种应用领域, 如汽车模拟、飞行器模拟以及航海模拟系统。[1]以航海模拟系统为例, 通过对真实海上场景的模拟, 航海模拟系统能够给航海训练员提供非常接近于真实驾驶船舶时的主观感受, 在避免意外操做带来的危险前提下最大限度的训练提高航海船员的驾驶技术。在航海模拟系统中, 对气象的模拟是其重要组成部分。这是因为在实际船舶驾驶中, 经常会受到各种气候的影响, 如雨、浓雾、雪等等。因此, 针对这些天气状况的模拟一直以来也是航海模拟系统的研究重点方向之一。Straik在2002年提出视频场景中的降雨算法, 但是该方法在3D应用中存在一定的局限性;Reeves提出的粒子建模系统可以有效模拟虚拟系统中的不规则物体的特性, 被有效地用于模拟雨雪场景。[2,3]但是该方法由于是对每一个雨滴都分配一个粒子进行描述, 所以在内存的使用上消耗比较大, 这样对系统的实时性有很大的影响。在实际使用过程中, 为保证航海模拟的实时性要求, 本文提出一种粒子系统与纹理映射相结合的雨滴模拟算法。该算法可以在保证系统实时性要求的前提下, 尽可能地贴近真实雨景。实验证明, 本文算法可以在保证逼真度的前提下有效提高运行速度。
1粒子系统与纹理映射系统相结合的模拟算法
1.1粒子系统
粒子系统自提出之后就被采用于对不规则物体场景的模拟之中, 并被K.kusamoto首次用于模拟雨景系统。粒子系统的基本原理就是为每一个雨滴分配一个粒子, 并赋予每个粒子以初始位置、形状、生存周期以及速度等属性。通过一个随机过程对每个粒子的属性进行控制, 以达到模拟雨景中各种雨滴的运动状态模拟。[4,5]粒子系统具体的算法流程如下:
(1) 创建新的雨滴粒子, 并对其属性进行初始化;
(2)计算当前存活粒子的属性, 并对其进行更新;
(3) 删除系统中生命周期结束的粒子;
(4) 绘制并显示当前存活的粒子。
在模拟3D系统中, 并不是在整个系统中创建粒子, 而是在当前视点区域创建雨滴粒子, 如图1所示。通过这种方法, 可以有效减少粒子数。图1 视点区域示意图图1 视点区域示意图 下载原图雨滴粒子在实际运动过程中主要受到:雨滴本身所受到的重力、下落过程中受到的阻力以及运动过程中可能受到的风力。按照牛顿动力学得到粒子在运动过程中的速度方程, 如式 (1) 所示:其中, Vc代表当前时刻粒子的运动速度, Vp代表前一时刻的粒子运动速度, t表示时间间隔, Vdif代表空气阻力以及风力对速度带来的影响。考虑到空气阻力很小, 并且相邻两帧之间的时间间隔很小, 将雨滴粒子在相邻两帧之间的运动近似为匀速运动, 即:因此, 雨滴粒子在相邻两帧间的位置方程如式 (3) 所示:式中, Pc表示当前雨滴粒子所在的位置, Pp表示雨滴粒子在前一帧所在位置, Vc表示雨滴粒子运动速度。此外, 为保证粒子的可重复利用, 当粒子超出可视区域后, 并非直接让其消亡, 而是对其属性进行重置, 这样代替产生新粒子的方法, 从而减轻计算机负担。1.2纹理映射
该方法的主要思想就是采用雨滴纹理信息来覆盖整个需要模拟的场景, 并按照实际雨点的方向进行循环滚动。[6]图2中展示了一些雨景视频中分离出来的中雨和暴雨场景下的雨线纹理。图2 雨线纹理图2 雨线纹理 下载原图该方法的优点就是实现简单, 并且对计算要求也不高, 可以有效地满足实时性要求。但由于它是采用单一的纹理映射的方法, 在实际的模拟情况下逼真度会受到影响。
1.3粒子系统与纹理映射结合算法
在传统的基于粒子系统的雨景模拟系统中, 考虑到实时性要求, 最多可以模拟的粒子数只有几万个, 虽然可以满足普通的降雨场景, 但是对于暴雨场景是远远不够的。并且, 实际使用过程中, 计算机除了模拟降雨场景之外, 还需同时处理其他任务。因此, 单纯使用粒子系统来模拟雨景是不符合实际使用要求的。结合基于粒子系统以及纹理映射雨景模拟方法, 本文提出一种根据雨量大小自适应的雨景模拟系统。在实际雨景模拟系统使用中往往发现, 人们会对眼前的雨滴比较敏感, 在远离自己视点处的雨滴场景实际上并不是很关注。[7]因此本文采用视点分层方法来进行雨景模拟, 如图3所示。图3 视点分层示意图图3 视点分层示意图 下载原图在靠近视点A层采用粒子系统进行雨滴的模拟, 在远离视点的B层则动态选用粒子系统和纹理映射系统。当降雨量比较小的情况下, 计算机完全有能力进行粒子的计算处理, 两层均采用粒子系统进行雨景模拟;当降雨量比较大的情况下, 为保证逼真度, 距离视点较近的一层依旧采用粒子系统, 而较远一层则采用纹理映射。通过设定阈值来确定选取何种策略, 算法流程如图4所示。图4 算法流程图图4 算法流程图 下载原图
2粒子系统与纹理映射结合的雨景仿真系统的实现
本文设计的仿真系统充分利用了图像处理器GPU (Graphics Processing Unit, 以下简称“GPU”,最大限度上提高系统的实时性。采用CPU与GPU协同工作, 映射纹理的选取、显示以及粒子系统中粒子的初始化均交由CPU处理, GPU主要计算降雨过程中粒子的属性, 并对相应的粒子属性进行更新。
2.1粒子属性定义
每一个雨滴粒子都有其大小、位置以及生存周期等属性, 定义一个结构变量Particle进行描述粒子:
2.2自适应雨景生成
在实际降雨场景中, 将降雨量大致分为以下三个等级:小雨、中雨以及大雨。在小雨场景中, 使用纹理映射的方法会使模拟逼真度有一定损失。因此, 我们在小雨场景中完全采用粒子系统进行场景的模拟, 只有在中雨以及大雨情况下采用粒子系统与纹理映射相结合的方法。这就要求该系统具有自适应调节的能力, 实现伪代码如下:
2.3线程分配
为提高计算机效率, 使用CPU与GPU协同工作, 实现框架如图5所示。[8]图5 系统工作框架示意图图5 系统工作框架示意图 下载原图
3雨景仿真系统实验结果的比较
本文将粒子系统与纹理映射结合的自适应仿真与传统基于粒子系统以及纹理映射仿真的方法进行对比, 图6为采用该系统模拟出的小雨以及中雨场景。左图是完全使用粒子系统进行模拟的结果, 右图为混合了粒子系统与纹理映射的模拟结果。从实验结果可以看出, 本文方法能够有效模拟不同雨量的雨景。图6 模拟小雨及中雨场景截图图6 模拟小雨及中雨场景截图 下载原图
为测试本文算法的实时性, 将本文方法与单纯使用粒子系统以及纹理映射的方法进行对比。在模拟相同雨景时的显示帧率作为评判实时性指标, 帧率越高说明实时性越好, 获得实验结果如表1所示。表1 模拟雨景的显示帧率实验数据 下载原表表1 模拟雨景的显示帧率实验数据根据表中数据可以发现, 在降雨量大致相同的情况下, 本文提出的方法相比较粒子系统, 帧率有比较明显的优势, 但是与纹理映射方法比较时, 优势却不是很大。在实际的模拟观测中发现, 基于本文算法二者结合的雨景仿真系统较纹理系统, 逼真度还原方面更加接近粒子系统。从图7三种模拟方法下的降雨场景进行对比图可以发现:单从一帧图像之上观察, 三种模拟方法都可以有效表示出中等降雨场景。但以连续帧播放的方法对比发现:粒子系统的模拟效果最好, 但是帧率相对较低;纹理映射系统重复感比较明显, 给模拟逼真度带来了不好的影响, 但是其帧率比较高;本系统综合两种方法的优势之后, 不仅可以有效地逼近粒子系统的逼真度, 同时也将帧率保持在比较好的范围。因此, 本方法更加符合实际使用要求。图7 模拟方法实验对比截图图7 模拟方法实验对比截图 下载原图
4结束语
模拟航海系统中雨景仿真的实时性一直是航海模拟系统领域的研究重点之一。本文通过对实时性较好的纹理映射系统以及逼真度较好的粒子系统进行研究, 提出了一种粒子系统与纹理映射相结合的雨景模拟算法。本文使用的纹理映射方法简单直接, 采用提取的雨点纹理信息进行映射, 但这会给仿真逼真度带来一定的影响, 尤其是雨后目标的清晰度与展现的问题。因此, 下一步的研究发现主要是如何采用比较好的纹理映射方法, 可以在具有较好实时性要求的前提下, 进一步提升仿真的逼真度, 增强雨后目标的清晰度, 这样可以进一步减少粒子系统个数, 系统的实时性可以得到进一步提升。