基于屏幕空间的海洋仿真的研究与实现

2015-12-23 01:08胡雄俊杨红雨
计算机工程与设计 2015年2期
关键词:海平面视点海浪

胡雄俊,杨红雨,2,万 宇

(1.四川大学 计算机学院,四川 成都610065;2.四川大学 视觉合成图形图像技术国家重点学科实验室,四川 成都610065;3.四川川大智胜软件股份有限公司 研究院飞行模拟机部,四川 成都610065)

0 引 言

对海洋的模拟仿真第一步就是对海浪建模,目前主要的建模方法可以分为4 类[1]:基于几何模型、物理模型、海浪频谱和Perlin 噪声几种方法,现对后两者进行简单介绍。

基于海浪频谱的建模具有直观真实的特点,海浪谱是对海洋环境长期实际监测得到的数据统计而来,这种建模方法通过对海浪谱进行反演得到高度场,模拟海浪波形,一般分为线性叠加法和线性过滤法两种[2]。这种方法模拟的海浪效果真实感强,但缺陷在于大量的重复置换贴图会在海洋远侧产生明显的瓷砖效应[3]。

基于Perlin噪声的海浪建模方法是通过不同频率的Perlin噪声构建一种特定的高度场用来模拟海浪。这种方法生成的海浪不会存在既定方向,随机性大,符合自然规律,有很好的真实感,但是由于其计算复杂度较高,严重影响大面积海洋渲染实时性,一般只用来模拟规模较小的水域。

本文考虑到飞行员在远海海面上空飞行时视野内场景,从实际情况出发,结合海浪谱和Perlin噪声这两种方法的优点对海浪建模,并充分发挥GPU 超强的并行计算能力进行绘制。最后,在模拟飞行员看到的较真实的大面积深海海域场景同时,保证较高的海浪绘制实时性。

1 海浪建模

1.1 经典Gerstner波模型

海洋表面的波浪是由数量庞大的简单波形成的,而每一个简单波又是一些正弦波的线性叠加。经典的Gerstner模型[4]从近似流体动力学的角度阐述了每一个简单水波经过时,海浪表面的质点在垂直方向上做周期性运动。在1986年,被Fournier和W.T.Reeves首次引入图形图像领域[5]。其表达式为

其中,点 (x0,y0)是质点平衡位置,A 是振幅,也就是质点做圆周运动轨迹的半径,K 是角波数,ω 是角频率,t是时间参数。设波长为λ,周期为T,那么k=2π/λ,ω=2π/T,(kx0-ωt)表示相位角,点 (x,y)表示时刻t质点运动到的位置。

1.2 基于频谱统计模型

根据线性波理论和随机过程波浪理论[6],认为海浪是由无数个振幅不同,频率各异,方向错杂,相位纷乱的正弦波叠加组成。一般通过频率的形式把海浪的能量表达出来,并定义为海浪谱。2001 年,Tessendorf J.[7]采用海洋统计和经验模型,将大量正弦波进行叠加,然后对结果进行快速傅里叶变换,生成一个与海浪谱分布近似的有限区域高度场。通过这种方法生成的海浪效果真实感较强,但是在形成一个大面积海域时,在远处会产生明显的周期性效果,图1是仅使用FFT 生成的一片海面,在图中远处可以明显看出重复贴合。另外,这种方法的实时性较一般,只能满足一定网格点数条件下的要求。

图1 仅使用FFT 生成的海面

1.3 基于Perlin噪声模型

Perlin噪声是由Ken Perlin在1985年发明的一种自然噪声生成算法[8]。它被广泛运用在计算机图形学。算法通过一些基值进行随机插值来模拟自然界物体,如高山轮廓,海浪,摇曳的树枝,石纹等。谢攀[9]用这种方法在Vega Prime中建立对海面的仿真。给定一个基础噪声函数和噪声插值函数,就可以生成一系列连续的不同振幅和频率的平滑函数,再将这些平滑函数进行叠加就构造了一个Perlin噪声函数,可表示如下[10]

式中:(x,y)——像素位置,I——分频次数,α——平滑参数,其值越小,获得的噪声灰度图越平滑。图2 中,通过将左边4张不同分频次数的2D 噪声叠加,最后形成最右边的扰动噪声纹理。

图2 经过不同分频次数叠加形成的扰动噪声纹理

利用此扰动噪声纹理中的细节可模拟海面水波的运动,该方法能够很好地消除海面远处重复贴合带来的瓷砖效应,但是由于Perlin噪声建模的海浪自身周期长,模拟的海浪模型比较平缓,在绘制大面积深海海域时,会使整片海面的近处表现得比较模糊,缺乏细节。与实际效果相比,存在一定差异。

2 高度场生成

Tessendorf J.[7]采用海洋统计和经验模型,从频域角度出发,应用随机噪声和Phillips频谱生成海洋频域数据,然后用快速傅里叶变换计算得到海浪空域波形,得到比较接近真实自然界的波浪。Phillips频谱在计算机图形学中被广泛使用,Phillips频谱函数计算如下

式中:K——波向,可表示为

设海洋表面是一个M*N 的网格点数的矩形区域,n∈[-N/2,N/2],m∈ [-M/2,M/2],LX,LZ表示矩形区域在x,z方向上的长度。ω 是角频率,A 是一个数值倍数常量,k是波数,L 是风速v 的平方与重力加速度g 之比L=v2/g。得到的初始时刻的高度场值可以用下式表示

式中:ˇG(K)——随机Gauss随机数。即ˇG(K)=Gaussian (K)。

每一次的实时计算中,在X,Y,Z 这3个方向上更新频谱。在时刻t得到Z 方向的高度值为式中:ω 为散度,它描述了海底地形与海浪的关系,受重

最后通过快速傅里叶变换逆变换将频域信号转换为空域信号,得到空域高度场值。

3 CUDA GPU 并行计算

从NVIDIA CUDA toolkit1.0开始,到现在最新5.5版本,其功能不断升级完善,为C,C++程序员提供了一个良好的基于GPU 加速应用的综合性发展环境。CUDA 编程一般分为主机端 (HOST)和设备端 (DEVICE),前者主要是CPU 设计控制程序流程,分配调度释放资源,后者则是GPU 设定线程 (Thread)的处理方式并进行并行计算。

CUDA 基本要素Thrust是一个类似于STL 的CUDA并行算法库,使用这些高度抽象封装的算法,隐藏了内部细节,有利于安全性,又提高了可靠性。根据官方实验数据,使用这一要素,在并行排序等计算上,其性能可以提升5到100倍。在GPU 领域,NVIDIA 推出的CUDA 技术搭建的是一种并行计算体系架构,比单纯的CPU 运行效率至少高出十倍。实验数据结果表明,在处理一张256*256的网格计算中,GPU 的计算效率要比CPU 高出80 到100倍。

在本文研究中,采用CUDA GPU computing toolkit4.0库函数对频谱进行快速傅里叶变换。结合VS2008和OSG得到渲染结果。硬件条件是windows操作系统,3.30GHz Intel Core i5-3550 CPU,8.0GB RAM,2GB 显 存,NVIDIA GeForce GTX 560Ti。在充分发挥GPU 高性能并行计算能力时,很好地弥补了采用FFT 构建海浪模型的实时性一般的缺陷,在实时性和真实性之间的得到了很好的均衡。

4 网格模型

4.1 网格算法

在计算网格模型时,大体分为两种算法。一种可以称为是正投影算法,主要分为以下几步:

(1)计算海平面区域在世界空间的坐标,划分得到该坐标系下的网格;

(2)将世界空间下网格投影变换到屏幕空间;

(3)在屏幕空间网格上进行置换贴图;

(4)网格渲染。

这种方法将有效规律的网格从世界空间坐标系变换到屏幕空间坐标系,因此不会有断裂和很严重的闪烁现象,不足之处是需要另外的算法将其扩展到海平面。综合考虑本文研究对象是飞行员在海面上飞行时视野内场景真实性,需要严格控制闪烁感,便采用另外一种与之类似的投影网格方法投影网格算法[11],主要步骤分为[12]:

(1)在屏幕空间生成一个正对视点的规律网格;

(2)将网格上的点投影到海平面;

(3)把海平面上的有效网格矩阵变换到世界空间坐标系下的网格;

(4)在世界空间坐标系下的网格上进行置换贴图;

(5)网格渲染。

将屏幕空间的规律网格投影到海平面如图3,图4 所示。图3中的地平线曲线是视点所能看到的海洋最远处。图4中海平面上网格点是图3中均匀的网格点投影形成的。可以看出,图3中的B 点在视点网格范围内,投影到海平面上时能得到一个有效网格点。而其中的A 点则超出了视点范围,在投影时就会投影到海平面后面,形成逆向投影点 (backfiring)[11]。解决这个问题,必须引入另外一个投影摄像机projector,使之始终朝向海平面,并且用观察者投影机查看projector投影矩阵生成的网格[13]。图4中相机向上方向与A 点夹角为θ,与A′夹角为天顶角ZenithAngle,为了确保类似A 这样的点都能正常投影到海平面上,则至少需要偏移一个差角Ω。

图3 屏幕坐标下的偏移

图4 投影偏移

这种算法不会损失屏幕空间每一个网格点,也很容易扩展到海平面,但其缺点也是显而易见的。一是由于偏移后远处的网格点很密集,欠采样,当视点移动时,与远处网格点的视角偏差比较大,从而产生较强的闪烁感,本文将在后面详细介绍降低闪烁感方法。二是当视点移动到一定高度时,在海平面的边界会有一些断裂,因此需要一个更大的画布覆盖这些断裂,在后面也会给出解决方法。

4.2 降低闪烁感

在飞行模拟仿真应用中,由于飞行员需要长时间进行模拟训练,为了缓解视觉疲劳,降低图元栅格化产生的闪烁感是一项非常关键的任务。

光线跟踪技术因为其实现原理的简洁高效,极大地提高了算法的效率,但与此同时也引入了欠采样的问题。在基于光线跟踪技术的海洋模拟中,欠采样会集中发生在距离视点较远的区域内。其根本原因是因为光线跟踪技术是数值计算的结果,其像素点上表现的颜色信息往往不能反映准确的图元颜色信息,这在图元较远的时会特别严重。在默认的图形管线中,开启超级采样能有效的缓解图元投影占据像素过小带来的闪烁问题,但同样的方法并不适用于光线跟踪。理想情况下,荧幕上每个像素所表示的颜色信息应当是摄像机眼点位置和像素边界的正方形所构成的椎体和图元在三维世界坐标系中相交面的颜色的综合信息,所以基于光线跟踪射线求交的方法往往会造成远处像素的不连续和闪烁。

在实现过程中,如果在默认的绘制管线中不做处理,进行顶点位置更新操作会在顶点处理阶段进行。但是在这个阶段做更新操作,采样的结果将是被采样纹理上的一个精准的像素 (设置nearest采样),实际上在很远的地方,需要采样的应该是平铺置换贴图展开的大平面的一块区域。这样以某一准确采样值代替该像素周围特定的一块区域均值,就会产生误差,形成跳跃不连续。为了避免这种情况发生,本文采用了一种延时采样的方法。利用片源处理阶段显卡能够取到周边像素的纹理坐标信息,硬件自动计算出mipmap等级这一特性,实现均值计算,将高度的采样延时到片源处理阶段,具体做法分为三步:

(1)把屏幕空间看到的所有像素需要置换更新的高度存放在一个屏幕等大的纹理intermediateTexture上。

(2)把这张intermediateTexture纹理做一些适当的处理,然后作为下一步的输入。

(3)在顶点处理阶段采样这张已经处理过的纹理,进行置换更新,这样就保证了连续性。

处理绘制这张intermediateTexture时,需要很大的几何体,对像素采样发生在图元内部。而透明度抗锯齿是专门处理几何体内部的,覆盖采样抗锯齿 (CSAA)只对边缘进行抗锯齿处理,实验中在采样阶段开启Nvidia显卡透明度抗锯齿使得效果有更显著的提高。

经过一系列这样的处理之后,闪烁感降到了人眼可以接受的范围之内,看不到闪烁。利用硬件计算,提升绘制效率,但随之增加了一张纹理,而且为了避免海平面边缘出现裂缝,必须根据视点高度动态地调整这张纹理的大小。实验中发现,当视点距离海平面高度H 与海平面水平宽度L 满足关系式 (8)时,效果最佳

式中:η——拉伸系数,本文实验中取η=1.40,φ 为视点到最远处海平面的射线与视点到海平面垂直方向的夹角。

除了在程序中通过算法降低闪烁感,在栅格化过程中开启硬件反走样降低栅格化带来的闪烁,这两者结合能够很好的减轻闪烁感。

前面的算法是建立在网格分辨率和屏幕分辨率一致的情况下,然而这样会导致顶点过多,延时采样阶段负担过重,降低绘制效率;另一方面,降低网格分辨率又会很大程度地减少海浪细节,使得模拟的效果模糊平缓,不够真实。为了协调两者,本文实验测试得出,采用3*3的网格在效率和细节上是一个比较好的平衡点。

模拟海洋采用的是动态的网格,即使存在某一部分欠采样,肉眼对此也并不太敏感,即人眼对闪烁有一定的宽容度。在这个宽容度的范围内,不会觉察有明显的闪烁感。经过上述方法应用后,实验中海洋的闪烁感得到了很好的控制。

5 蒙板混合

基于频谱统计模型生成的海浪经过贴图后在远处会产生瓷砖效应。通过FFT 生成的海浪模型细节丰富逼真,但周期短;而基于Perlin噪声生成的海浪模型周期很长,符合深海域波浪模型特征,不足的是缺乏细节,模糊平缓,肉眼不敏感。结合两种模型优点,采用蒙板混合。距离视点一定距离 (800 m)以内采用基于频谱模型生成海浪,20000m 以外采用基于Perlin噪声模型生成的海浪,而在800m 到20000m 之间的区域,则使用这两者的混合,其海浪混合如图5 所示。经过混合后的海浪效果更加真实,如图6所示。相比较前面的图1,可以明显看出海浪的细节更加丰富细腻。

图5 海浪混合

图6 混合后的效果

6 海面光照渲染

海水颜色是由很多复杂因素共同决定的,比如水中矿物质,微生物体色和数量,杂质等。另外,水面光照效果(折射,反射,漫射等)对水面的真实感也起到重要作用。在本文研究中,主要考虑海面上光的反射和折射。

本文中光照模型满足Fresnel定律,其中Fresnel系数ρ计算公式如下[13]

式中:θt——折射角,θi——反射角。公式给出了Fresnel系数与反射角,折射角的关系。但实际计算中太过复杂,可 以 简 化 为[10]

式中:E——反射方向,N——法线方向。

6.1 光的反射

当视点运动到近水面处,朝远侧海面眺望时,海面反射光将主要影响场景渲染。由光学原理可知,发生反射时反射角等于入射角,即在图7中有i=r,而图中法线的计算在实际光照渲染中主要分为四步:

(1)基于频谱建模,经过FFT 后得到高度场,由该高度场生成梯度值,记为F梯度值;

(2)基于Perlin噪声建模,生成Perlin噪声高度场,同样得到Perlin噪声梯度值,记为P梯度值;

(3)计算FFT 和Perlin模型混合因子,混合F梯度值和P梯度值;

(4)由混合梯度值得到光照光线。

Fresnel反射纹理从一张预计算的纹理中读取。原理如图7左部分所示。发生反射时,在视锥内能看到的范围为图中粗黑界面与两条边界反射光线所围成的区域,即图中所示可见区域,在这个区域外面的物体将被裁剪掉。下一步,利用立方体映射技术 (cube mapping)技术,将反射向量与天空盒立方体面相交,获取其纹理颜色,生成反射纹理对象。接着绘制真实视点所见场景。最后取得反射纹理对象,并与水体表面颜色混合,得到光照反射图像。水体表面颜色Cwatersurface的计算为[13]

式中:R,T——入射光和反射光,在不考虑衰减的情况下它们满足R+T=1。

图7 海洋光照反射折射

6.2 光的折射

当视点运动到海面一定高度,近乎垂直地看向水面时,光的折射对场景的渲染占主导因素。光的折射满足Fresnel准则,计算折射角β满足

其中n1,n2分别为空气折射率和水折射率。一般取n1=1.0,n2=1.33。

光的折射与反射计算相似,生成折射纹理比生成反射纹理相对简单,只需要渲染在实际视点位置渲染水下不具有透明折射的对象,并将计算后将结果存在一张纹理中[10]。海洋光照反射折射如图7右部分。

此外,在光照计算中增加了镜面光成分。通过实时计算太阳的位置和反射光形成海面镜面光,镜面系数随着太阳的位置运动而变化,图8是增强光照渲染之后的效果图。

图8 增加光照后效果

7 实验结果与分析

移动视点,截取实验的部分效果如图9所示。

从图9可以看出,渲染后的深海海域场景比较接近自然真实效果。在模拟飞行员海上对抗演练时,能达到其对虚拟海洋真实性的要求。在实验过程中,本文提出了基于屏幕空间反向投射高度场网格点的算法,该算法采用了逆向思维,并且能够将绘制的平面海洋扩展到球面,便于和陆地地形等一起分布在地球模型上。同时也详细提出了一种解决目前海洋模拟中普遍存在的闪烁问题的方法。用Fraps工具测试平均绘制帧率为61fps,达到了预期效率的要求。

图9 效果

8 结束语

海洋模拟仿真一直是比较热门的话题,本文最后的实验结果在模拟场景真实性和绘制实时性之间得到了较好的均衡,特别是对海洋仿真中的闪烁感问题提出了一种解决方法,真实感更强。当然,也存在一些完善提高的地方。首先就是对虚拟海洋环境飞行对抗演练视景来说,场景特效单一,只考虑了简单的海洋环境,需要在后期研究中增加更多的环境因素,如雨,雾,岛屿,舰艇等。再者是帧率,需要在后期的实验中进一步优化模型,并深入研究线程资源的合理分配,充分利用显存,减少数据在CPU 和GPU 之间的传输。最后还可以增加水面与水上物体的实时交互,如舰艇尾波,细浪,泡沫,海底的焦散,使场景更加丰富逼真。

[1]XIN Jiajia.The modeling and simulation techniques of OSGbased marine environment [D].Yantai:Yantai University,2012 (in Chinese).[辛佳佳.基于OSG 的海洋环境建模与仿真技术研究 [D].烟台:烟台大学,2012.]

[2]YIN Baorui.Virtual simulation of the marine environment based on OpenGL [D].Harbin:Harbin Engineering University,2010 (in Chinese). [尹宝瑞.基于OpenGL 虚拟海洋环境仿真 [D].哈尔滨:哈尔滨工程大学,2010.]

[3]REN Hongxiang.Realistic scene rendering of ocean based on GPU in marine simulator[D].Dalian:Dalian Marine University,2009 (in Chinese). [任鸿翔.航海模拟器中基于GPU的海洋场景真实感绘制 [D].大连:大连海事大学,2009.]

[4]HOU Xuelong,HUANG Qilai,SHEN Peizhi.Ocean wave real-time simulation method based on FFT [J].Computer Engineering,2009,35 (22):256-261 (in Chinese). [侯学隆,黄启来,沈培志.基于FFT 的海浪实时仿真方法 [J].计算机工程,2009,35 (22):256-261.]

[5]WEI Dengyue.Ocean wave reality research in the virtual reality[D].Nanning:Guangxi University,2012 (in Chinese).[魏登月.虚拟现实技术中的海浪真实感研究 [D].南宁:广西大学,2012.]

[6]SE Bastien M Candel.Numerical solution of conservation equations arising in linear wave theory [D].English:Cambridge University Press,2008:1-31.

[7]WANG Rui.The research and application of ocean scene modeling and rendering in virtual environment[D].Hefei:Anhui University,2011 (in Chinese). [王锐.虚拟环境中海洋场景建模与绘制研究及实现[D].合肥:安徽大学,2011.]

[8]DING Shaojie.Research on generating technique of virtual ocean environment and special effects [D].Harbin:Harbin Engineering University,2008 (in Chinese).[丁绍杰.虚拟海洋环境生成及场景特效研究 [D].哈尔滨:哈尔滨工程大学,2008.]

[9]XIE Pan,KANG Fengju,SU Man.Ocean wave simulation based on Perlin noise used in Vega Prime[J].Application Research of Computers,2009,26 (11):4386-4389 (in Chinese).[谢攀,康凤举,苏曼.基于Perlin噪声的海面仿真在Vega Prime中的应用 [J].计算机应用研究,2009,26 (11):4386-4389.]

[10]LI Bo.Research on ocean surface modeling and simulation in complex environment in real-time [D].Wuhan:Huazhong University of Science and Technology,2010 (in Chinese).[李波.复杂环境下的海面实时建模与仿真研究 [D].武汉:华中科技大学,2010.]

[11]Zhao Wei,Chen Leiting,Chen Fan,et al.Real-time simulation of ocean system with dynamic environment[C]//International Conference on Information Security and Artificial Intelligence,2010:115-119.

[12]YU Hongyi.Real-time rendering of large-scale water scene[D].Hangzhou:Zhejiang University,2007 (in Chinese).[虞宏毅.大规模水场景的实时绘制 [D].杭州:浙江大学,2007.]

[13]CHENG Yongxin.Real-time 3Dengine and the scene of largescale sea management and implementation [D].Chengdu:University of Electronic Science and Technology of China,2009 (in Chinese).[程勇新.3D 引擎中大规模海面实时渲染及场景管理研究与实现 [D].成都:电子科技大学,2009.]

猜你喜欢
海平面视点海浪
丫丫和小海浪
海浪
海平面上升 我们如何应对
樊应举
中国海平面比去年升高38毫米
【环球扫描】 中国海平面35年升11 cm 近10年升幅为30年最高
视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
两会视点
气候科学与海平面上升