实时绘制三篇

2024-06-25

实时绘制 篇1

关键词:无粘性海浪,海浪绘制,波数,波浪谱

0 引 言

海浪的绘制在计算机动画、虚拟现实等领域有着广泛的应用。近年来,计算流体力学CFD( Computational Fluid Dynamic) 、随机海浪、海洋学等领域的研究成果不断应用到海浪绘制中。同时,计算机技术飞速发展,尤其是图形处理器GPU硬件性能以及可编程能力的大幅提升、多GPU系统的研发,也促进了海浪绘制技术的发展,使得一些以往只能用于数值仿真的算法也能用于海浪的实时绘制。

1 海浪绘制的分类与相关知识

1. 1 海浪绘制的分类

海浪的绘制可分为3个尺度[1]: 精细尺度为飞溅和泡沫,中间尺度为水面的波纹,大尺度为波浪的翻转和破碎。根据绘制的海浪是否考虑液体粘性,海浪的绘制可分为粘性海浪的绘制和无粘性海浪的绘制。

粘性海浪的绘制需要考虑液体的粘性,主要使用CFD理论描述流体运动。液体的粘性,是一种在液体中产生内摩擦力的性质。粘性流动包括摩擦、热传导和质量扩散等输运现象[2]。绘制粘性海浪时需用CFD的数值方法解算粘性流体控制方程。使用较多的 控制方程 包括纳维-斯托克斯N-S ( NavierStokes)[3 - 5]方程和经格子波尔兹曼法LBM( Lattice BoltzmannMethods) 离散的浅水方程[6]等。N-S方程为宏观力学方程,而使用LBM离散浅水方程则为介观力学方法。通过解算粘性流体控制方程,可以得到流体的静止状态和运动状态的特性( 包括粘性力、速度、压强、密度等参数的变化) ,以及流体和相邻固体间的相互作用和流动规律。除了解算粘性流体控制方程,还要进行碰撞检测、对粒子排序等。然而在解算粘性流体控制方程、碰撞检测、排序时需要耗费大量计算机资源,因此该方法通常用于绘制精细、中间尺度的海浪。用该方法绘制大尺度海浪时,即使运用多GPU系统[5],绘制的实时性仍然较差。

无粘性海浪的绘制忽略了液体的粘性,无法描述液体的耗散、粘性输运、质量扩散以及热传导运动。但该方法也有优点: 其一,将海浪离散成一系列有相应频率、波数、振幅、传播方向等物理特性的成员波( wave component) ,成员波受风等因素影响,其物理特性可以通过观测获得,这使得绘制结果可以反映风对海浪的影响,而且将模型与观测数据结合; 其二,其计算量较之粘性海浪绘制更小,绘制的实时性好,适合于实时绘制大尺度海浪。无粘性海浪的绘制包括基于规则波的方法和基于不规则波的方法。前者主要使用Gerstner波( 余摆线波) 来描述海浪运动,绘制结果是规则波; 后者要对随机谱函数进行二维2D快速傅里叶逆变换IFFT( Inverse Fast Fourier Transform) ,绘制结果是不规则波。

1. 2 相关知识

为了便于读者阅读,需要对相关知识进行介绍,包括: 规则波、不规则波、波数、波数向量、频率谱、瞬时空间谱、方向谱、方向分布函数等。

规则波是波形规则的波,在一定的时间及地点,其出现的大小是可以预测的; 不规则波指的是波高、波峰、波周期和波浪传播方向不定的波,在一定的时间和地点,其出现的大小是无法预知的,不规则波也称为随机波[7,8,9]。

设世界坐标系xyz中,xy平面平行于海面,z轴垂直于海面,x = ( x,y) ,ω表示圆频率。对于二维海面,波数指的是每2π长度的波长数量,即如果令λ表示波长,波数k = 2π/λ,在三维海面,通常使用的是波数向量k = ( kx,ky) ,kx为k在x轴上的分量,ky为k在y轴上的分量,θ为k与x正半轴的夹角,k = | k | ,波数和频率之间存在一定的关系,可以互相转换。令ξ( x,t) 为位置为x的点在t时刻的表面位移( surface displacement) ,即偏离平衡位置的高度,符号表示取期望值,海水密度为ρ,g为重力加速度,则ρgξ2/2为单位面积波浪势能,可用ξ2表示能量,ξ2可写为:

其中S( ω) 为频率谱,Ψ( k) 为瞬时空间谱,E( ω,θ) 为方向谱[10]。S( ω) 、Ψ( k) 及E( ω,θ) 均为能量密度函数,S( ω) 反映了能量相对于频率ω的分布,Ψ( k) 反映能量相对于波数向量k的分布,E( ω,θ) 则反映了能量在ω和θ 的分布。由于k和ω存在一定的关系( 色散关系) ,则三者的关系为:

2 基于规则波的方法

基于规则波的无粘性海浪实时绘制运用有限振幅波理论描述海浪运动。有限振幅波理论包括Gerstner波和Stokes波。Gerstner波主要用于海浪绘制[11,12,13,14,15,16,17,18],而Stokes波多用于海浪的数值模拟[19,20]。

三维Gerstner波流体质点运动方程为:

其中P = k·x0- ωt为相位,r是质点的深度函数,θ = kx0- ωt,A和B为水深、波数等参数的函数。Fourier等[11]首先将Gerstner波用于海浪绘制,并改进了Gerstner波模型,将相位改写为:

其中Δz = z - z0,λ为比例系数。这种改进没有改变质点的运动轨迹,但使得波峰变得更加尖锐,波谷变得更加平缓,绘制效果与实际海浪更为接近。另外文献[11]还以相速度和表面曲率为判据,增加了相应的粒子模拟了波浪破碎产生的飞溅和泡沫。Thon等[12]对Gerstner波生成的纹理贴图增加了3D Perlin噪声扰动函数,扰动函数由波浪的频率特征所决定。尹勇[13]将该方法应用于航海模拟器 中,在计算运 动轨迹半 径r时使用了S( ω) ,并提出了对S ( ω) 自适应动态采样的方式。Hinsinger等[14]提出计算r时使用方向谱E( ω,θ) ,并提出了用与视点位置相关的自适应网格构造海面的方法。Fréchot等[15]对E( ω,θ) 进行采样 进行改进,提出了4 + 6n的非均匀 采样方法( n∈Z+) ,即将波能等分为4 + 6n份,在E( ω,θ) 峰值附近使用密集网格采样,在距离峰值远的区域采用稀疏网格采样,提高了采样效率。与文献[13 - 15]采用深水谱不同,Lee等[16]采用了浅水谱,以浅水TMA谱绘制海浪,使得绘制结果能体现水深影响。王纲等[17]提出了一种新的细节层次LOD( Level of Detail)网格。在视点附近,采用两级细分圆形网格构成两级LOD,网格中顶点的间距由模拟的海况确定,两级LOD以外的网格部分,采用同心圆网格。这种新的网格既能改善绘制真实感,也能保证绘制帧率的稳定,绘制结果应用于航空模拟器中。文献[11 - 17]采用的是基于网格的方法。与此方法不同,Yuksel[18]采用了基于粒子的Gerstner波,并对波浪粒子和水中固体进行碰撞检测,进而实现了固液耦合。固液耦合生成波的体积与固体浸入液体的体积相同。使用粒子绘制无粘性海浪的好处就是可以通过碰撞检测实现固液耦合,但这种耦合忽略了流体的粘性。

3 基于不规则波的方法

实时绘制基于不规则波的无粘性海浪通常对随机谱函数进行IFFT。算法介绍如下。

坐标系的建立和相关参数的设置与1. 2节相同。令风速向量u = ( ux,uy) = ( Ucosα,Usinα) ,U为风速大小,α为风速与x轴正方向的夹角。在航海学和气象学中,风向是风吹来的方向,记为α',α与α'的关系如下:

则t时刻水平位置x的表面位移ξ( x,t) 与二维位移矢量D( x,t)为:

式( 2) 表示对ξ~( k,t) 进行2D IFFT,符号Re表示取其后括号内表达式的实部,符号lm表示取其后括号内表达式的虚部;ξ~( k,t) 是随机谱函数,它决定了波面的结构; i为虚数单位;在Lx×Ly平面上采样M×N个点,则kx= 2πm / Lx,ky= 2πn / Ly,x = m Lx/ M,y = n Ly/ N,m、n均为整数,- M /2≤m < M /2,- N /2≤n < N/2; 波面网格点的水平位置为x + λD( x,t) ,λ为一常数,用于衡量位移向量重要性。使用D( x,t) 不会直接改变表面位移,而是根据表面位移的空间结构来扭曲表面点的水平位置。这种方法使得波峰部分变得尖锐,波谷部分变得平缓,绘制结果更加逼真。

ξ0( k) 的计算中使用了高斯随机数,因此绘制结果为不规则波。在计算ξ0( k) 时使用了瞬时空间谱Ψ( k) ,目前Ψ( k) 主要使用Phillips谱[21,22,23,24,25,26,27],其形式为:

其中A = 3. 84×10- 3,L = U2/ g,U为距离海面19. 5m高度处风速。

该方法由Tessendorf[21]首先提出。Michel[22]对上述算法进行改进,提出了多波段合成法以提高绘制速度。将高度图分为低频段高度图和宽频段高度图。低频段高度图是分辨率较低的纹理,用以代替水体的表面几何形状,由IFFT获得。宽频段图是分辨率高的纹理,包括低频段及高频段信息,用于获取法线贴图。对高度图进行下采样,进而绘制海面。这种方法用适当数量的多边形绘制海面即可使得绘制结果细节丰富。Ren等[23]使用动态同心圆网格绘制海面,使得距离视点近的区域绘制点密度更大,距离远的区域绘制点密度更小,且采样网格随视点变化而变化。Miandji等[24]对多波段合成法进行改进,高频段高度图由低频段高度图生成,对高度图进行上采样以绘制海面,该方法的绘制效率较之于文献[22]更高。wierkowski等[25]在IFFT生成的海面上叠加船行波,模拟了海面与船舶的耦合。方建文等[26]将对随机谱函数进行IFFT的方法与Bézier曲线相结合绘制了动画风格的海浪,改进了波浪扭曲的效果。Grindstad等[27]在航海模拟器中以高度为判据实现了深水中模拟波浪产生的泡沫。设置某一个高度作为门限值,当海浪高程超过这一值的时候,即认为海浪产生泡沫,在这周围贴泡沫纹理。Dupuy等[28]绘制了海浪破碎时产生的白浪( whitecap) ,采用雅可比行列式( Jacobian) 判断波浪破碎是否产生白浪,但未模拟白浪的消失过程。

上述方法所用的谱多为Phillips谱,该谱仅能反映风速对海浪的影响。海面上除了风速,风距也能对海浪产生影响。风距指的是风接近于不变的方向和速度时在开阔的水面上吹过的距离。因此还应尝试参数包括风距的谱绘制海浪。频率谱中JONSWAP谱的参数中包含风距,因此用JONSWAP谱和Poisson形式的方向分布函数构造一个瞬时空间谱:

其中SJ( ω) 表示JONSWAP谱,DPo( θ) 表示Poisson形式方向分布函数[10],用ΨJ - Po( k) 绘制的海浪可以反映风距的影响。图1是使用ΨJ - Po( k) 绘制的海浪,其中风速为8. 0 m/s( 距离海面高度10 m处) ,风距为50 km。

4 算法的比较及可能的改进

上述两种无粘性海浪的绘制方法具有共同优点: ( 1) 均使用波浪谱,所绘制的海浪可以体现风的影响; ( 2) 均可实现大范围海域的实时绘制。

真实的海浪通常可视为一个随机过程[10,29],因此使用基于不规则波的方法较之基于规则波的方法更接近于实际情况。在使用基于不规则波的方法时,需要对k进行采样,用以计算Ψ( k) 、Ψ( - k) 、ω( k) 和ω( - k) ,进而计算ξ( k,t) ,对ξ( k,t) 做IFFT来计算ξ( x,t) 和D( x,t) 来绘制海浪。当采样的k数量大时,IFFT的计算量也很大,这会影响绘制的实时性。可以采用某些投影网格来减小绘制点数量、提高绘制效率,这种方法研究较多,不再赘述。此外,还可以针对Ψ( k) 的数学特性从另一个方面进行改进。Ψ( k) 反映能量在k的分布,其曲面形状如图2所示。在谱极大值点附近的一个区域内,k的Ψ( k) 或Ψ( - k) 值非0,这些k会影响IFFT及绘制结果。该区域外,k的Ψ( k) 及Ψ( - k) 值均为0,这些k不影响IFFT及绘制结果,如果过多的采样这种k,会增加IFFT计算量,影响绘制的实时性,但对绘制效果不产生影响。因此可以对k的采样范围、采样间距进行优化,减少Ψ( k) 及Ψ( - k) 值均为0的k的采样,降低k的总采样数量,从而减少IFFT计算量、提高绘制效率。这方面的改进目前研究较少,是需要进一步改进的地方。另外,在以往的研究中,Ψ( k) 均使用的是深水谱,还可以尝试使用浅水谱以及双峰谱,使得绘制结果能反映水深、涌浪的影响。

5 结 语

根据是否考虑液体粘性,将海浪的绘制分为粘性海浪的绘制和无粘性海浪的绘制。

粘性海浪的绘制使用粘性流体控制方程来描述海浪,适合于绘制中、小尺度的海浪,在绘制大尺度海浪时实时性差。无粘性海浪的绘制忽略了液体的粘性,可分为基于规则波的方法和基于不规则波的方法。基于规则波的方法以Gerstner波为理论基础; 基于不规则波的方法对随机谱函数进行IFFT。较之于粘性海浪的绘制,无粘性海浪绘制计算量较小,可实现大规模海浪场景的实时绘制,也能实现波浪破碎的效果,且计算中使用了波浪谱,绘制的海浪能体现风的影响。对基于不规则波的方法中所用的瞬时空间谱Ψ( k) 进行改进,用JONSWAP谱和Poisson方向分布函数构造ΨJ - Po( k) ,使得绘制结果能反映风速、风距的影响。无粘性海浪绘制适合应用于航海、航空模拟器。其中航海模拟器模拟了船舶航行的环境,主要用于船舶驾驶员培训。船舶驾驶员通过观察模拟器视景系统生成的海浪,推测风属性,进而采取适当的操船措施。国际海事组织IMO( InternationalMaritime Organization)[30,31]和挪威船级社DNV( Det Norske Veritas)[32]鼓励在船舶培训、评估中使用模拟器,DNV要求在航海模拟器中绘制海浪要是用海浪谱,绘制结果能体现风对海浪的影响[32],因此无粘性海浪的实时绘制满足DNV的要求。

论实时绘制大规模场景的各种技术 篇2

关键词:三维场景;大规模场景

Various Technologies of Real-time Rendering Large-scale Scenes

Zhang Fengjuan

(Tianjin University,Tianjin300072,China)

Abstract:In recent years,real-time computer graphics,graphic design has become a research focus.In this paper,I will introduce in detail the development of a real-time rendering large-scale program system for three-dimensional scene by the various techniques used.

Keywords:Three-dimensional scene;Large-scale scene

一、采用3DS Max建模软件对三维场景进行建模

作为一款历史悠久,极富特色的强大三维软件,3DS Max具有强大的三维建模功能。它的建模方式多种多样。在3DS Max里可以进行面片、网格和NURBS曲线建模,使许多复杂物体的建模得到简化。3DS Max的建模技术很多,一个对象的建立可以使用多种造型技术实现。如基本造型、放样造型、合成造型等。本次课程设计中,通过使用3DS Max建模,得到了建筑物等模型。

二、纹理映射技术

为了使我们要绘制的图形看起来更真实,可以在物体表面实现绘制纹理的功能。纹理其实就是指物体表面的二维图形,我们把纹理按照一定的方式贴到物体表面,能够使物体看上去更加真实。

要将指定的多个纹理根据自己的需要映射到不同的面上,需要对位图创建一个数组,用来存储位图的名称,然后在初始化OpenGL的时候,可以读取这些位图,然后生成多个纹理存储到一个纹理数组中,接着就可以指定绘制的某个面,对该指定的面进行纹理映射。

使用纹理映射的步骤一般为:载入贴图、绘制贴图、贴图模式的开启与关闭、带光照效果和纹理贴图的图形绘制。

OpenGL中通过指定三角形顶点的在纹理数组的二维坐标,就可以确定三角形内部各个点的贴图纹理座标,从而实现纹理对三角形的覆盖。

三、融合技术

融和(blending)是OpenGL中的一种特殊效果处理方法。融合提供了一种透明或半透明技术。它允许我们混合像素,我们通常用已经光栅化的像素光栅化同一位置的像素。换句话说就是我们在图元上混合图元,这种blending技术允许我们完成多种特效。

首先我们需要结合像素颜色,就是用以前写过的目标像素值去估算源像素值。通过设置不同的源和目的要素,我们能够创造很多不同的混合效果。我们还可以利用一个alpha通道制定透明度来渲染一个纹理,Alpha通道是额外的设置位,用它来保存每一个点的alpha值。当一个纹理被映射到一个图元上时,在alpha通道中的alpha信息也被映射,并且它们利用alpha信息为每个像素赋予纹理。概括的说,使用融和技术的必要步骤是:设置混合要素;假如使用alpha,要指定材质和alpha通道;允许alpha混合渲染状态。

四、三维地形模拟技术

地形是自然界复杂的景物,因此三维真实感地形的绘制一直是国内外计算机图形学关注的热点。随着计算机及图形图像技术的发展,地形可视化的应用越来越广泛。三维地形可视化是研究数字地形模型或数字高程域中显示、简化、仿真等内容的学科。由于OpenGL具有可实时交互操作的优点,所以更适合于空间信息的三维构建,因此它的应用最为广泛。

真实地形的构造,通常采用经纬度构成的规格化网格体逼近的方法,其主要关键技术在于获取网格点的关键参数。

五、粒子系统

粒子系统的应用非常广泛,大量的自然现象可以被精确或近似地使用粒子系统模拟。火焰,喷泉,爆炸,鱼群,气体,星空等等。他们的原理相似。粒子的运动一般都遵循一定的物理学方程。通常这些粒子有如下这些相同的属性集:位置、速度、加速度、生命值、衰减。

下面的伪代码描述了粒子系统运行的流程:

对每一个粒子组

指定group j为当前粒子组

产生新的粒子

改变粒子组属性

更新粒子位置

绘制粒子

end

六、雾化技术

雾是大自然中最常见的现象之一,有了雾的效果,场景看起来会更加真实。在OpenGL中,很容易实现雾的效果。

在OpenGL中,雾的工作模式有两种:线性模式和指数模式。这两种模式是根据雾的浓度变化来区分的。

在线性模式下,只需要提供一个距离视点的开始位置和结束位置。从开始位置到结束位置之间,雾的浓度越来越高,浓度的变化和距离成正比。

在指数模式下,雾的浓度随着距离的增加呈指数增长。这种模式通常用来用于烟雾、烟幕等效果。

启用雾化的效果必须使用glEnable(GL_FOG),同样,取消雾的效果就是glDisable(GL_FOG)。启用雾化后,还需要设置雾的参数才能够真正实现雾的效果。设置雾的参数的命令是glFog。

七、碰撞检测技术

为了增强真实感,在虚拟场景中进行漫游时,必须进行碰撞检测。这是因为,有了碰撞检测,才可以避免诸如观察者飞入地下或者穿墙而过等不真实情况的发生。目前,有多种方法可以实现碰撞检测技术。本程序从观察者的角度出发,采用运动中的观察者与静态的虚拟环境之间的碰撞检测算法。

在可视化系统中进行碰撞检测的一个常用的方法是采用包裹着物体对象的包围盒(bounding boxes),包围盒的各线段与坐标轴平行,包围盒即虚拟物体的最小长方体。采用包围盒进行碰撞检测的最大好处是可以快速进行碰撞检测。

八、计算机动画技术

利用计算机图形学生成动画,不仅缩短了动画制作的周期,而且还产生具有震撼力的视觉效果。计算机动画技术让我们的世界发生了翻天覆地的变化。

计算机动画就是借助计算机技术生成一系列的画面,其中当前帧画面是对前一帧画面的部分修改。

OpenGL是在帧缓存中存储和操作像素数据。OpenGL通过双缓存技术来实现动画。也就是说,在显示前台缓存内容中的一帧画面时,后台缓存正在绘制下一帧画面,当绘制完毕,则后台缓存内容便在屏幕上显示出来,而前台正好相反,又在绘制下一帧画面内容。这样循环反复,屏幕上显示的总是已经画好的图形,于是看起来所有的画面都是连续的。实现这样的技术,我们需要调用SwapBuffers()函数,。SwapBuffers()函数要等下一屏幕更新之后才能较换前提和后台视频缓存中的内容。在交换前台和后台缓存中的内容之前,必须采用glFlush()和glFinish()进行同步。

九、billboard技术

公告牌技术,即billboard技术,在3D游戏中有着广泛的应用.它的本质就是用预先做好的几幅位图来代替3D物体,极大地节省资源和提高速度。

billboard技术采用于控制场景中的Texture的方向的方法,让他始终以一定的角度对着我们的镜头(一般是垂直于镜头)。如我们在3D游戏中看到的怪物的蓝、红和怪物名字、一些花草树木等,无论我们在哪个方向看它总是对着我们。

十、阴影效果

阴影投射矩阵的生成算法。设计函数void GenerateShadow()计算阴影投射矩阵,记录在二维数组shadow[4][4]中。

绘制阴影。

1.关闭光照和纹理贴图,设置阴影颜色。2.为防止阴影与投射平面重合导致绘图层次混乱,将阴影绘制平面上移一个小单位。3.对于四个阴影投射平面,分别计算阴影投射矩阵,并与当前模型视图矩阵相乘。4.由于当前模型视图矩阵被修改,要恢复之前的状态必须将运算前的矩阵压入矩阵栈,阴影绘制结束后弹出。

5.调用地球仪绘制函数DrawEarth()即可完成阴影绘制。通过对OpenGL和其扩展库glut的应用,采用天空盒、三维地形的绘制、3D模型的载入和贴图、动态水面绘制、雾化、计算机动画等技术,可以得到较为满意的场景演示效果。同时通过键盘和鼠标对视角的控制,漫游的用户体验较好。

当今计算机行业正以日新月异的速度发展,产业界和学术界也结合得越来越紧密。很多图形学的最新进展被用到商业游戏中,从而提高了真实感,增加用户体验。

参考文献:

[1]Donald Trim.App lied Partial D ifferential Equations[M].PW S2Kent,1990

[2]Ernst Hairer,Gerhard W anner Solving O rdinary D ifferential Equa2.tions I: Nonsitiff Problem s[M].New York:Sp ringer2Verlag,1996

实时绘制 篇3

针对PDA硬件配置低,运算能力差等弱点,本文提出了一种基于PDA的三维地形实时绘制的优化方法.在地形数据装载到PDA之前,我们对其进行预处理:顶点坐标转换,计算法向量等并将数据根据PDA的显示特点进行分块;地形数据实时绘制过程中,我们采用假光照,背面消隐,多索引机制等方法进行优化处理.最后,在PDA上完成了实验论证工作,实验表明经过该方法处理后较明显的`降低了地形绘制的响应时间,并给出了测试数据.

作 者:李昂 范荣双 张军 洪莹 LI Ang FAN Rong-shuang ZHANG Jun HONG Ying 作者单位:李昂,LI Ang(中国测绘科学研究院,北京,100039;辽宁工程技术大学研究生学院,辽宁阜新,123000;中国民航大学空中交通管理学院,天津,300300)

范荣双,张军,FAN Rong-shuang,ZHANG Jun(中国测绘科学研究院,北京,100039)

洪莹,HONG Ying(辽宁工程技术大学研究生学院,辽宁阜新,123000)

上一篇:日本的核电劳工下一篇:基于满意度