首页>论文>正文
日期
12/13
2010
咨询
  • QQ扫一扫

  • Vision小助手
    (CMVU)

视景仿真中云的建模与实时渲染技术研究
收藏
2010-12-13 09:25:28来源: 李锋 万刚 韩阳 姚霄飞

摘  要: 在视景仿真中对云的建模和实时渲染是一项十分重要的工作,可以增强场景的视觉感受。然而大多数的虚拟现实系统对云的模拟没有足够的重视。本文全面总结了视景仿真中云的建模与绘制技术,并根据视景仿真对云景模拟的需求,实现了一种既能获得良好的视觉效果,又能实时绘制的云景建模与仿真技术,极大地提高了虚拟视景的真实感。
关键词: 粒子系统;特效;实体云建模

1  引  言
     云是天空的主要景物,对云的模拟不仅可以增强场景的视觉感受,而且是实现其他环境特效的重要方面。自然界中云具有以下特点:
 (1)云是运动的,云的形状、数量等是实时变化的。
 (2)云在结构上有极大的自相似性。
 (3)云是有一定厚度的,有极强的体积感。
 由于云没有规则的几何结构,并且光线通过云层时要发生复杂的反射、折射和散射致使云的光照模型难以描述,因此对云的模拟,尤其是对三维实体云的模拟难度很大。
    目前,视景仿真领域的研究人员根据不同的仿真需求提出了一系列对云景的仿真与绘制方案,但主要有两种思路,一是基于平面的用纹理背景来模拟云的远景效果,通常是用分形技术生成云的纹理,通过参数的调整控制云的厚度、颜色,还可以在过程纹理的生成中加入时间变量,生成随时间变化的风起云涌效果。只要纹理生成的过程函数好,这种方法也可以得到良好的仿真效果,在大多数视景仿真系统中视点离云的距离很远已经可以满足要求,但是当视点离云层很近,如飞行仿真系统中,飞机要进入云层,要有穿云的效果,显然用纹理背景来模拟云景已不能满足要求了,这时,就需要绘制三维的可进入的云景,我们称之为实体云。
    实体云模拟云景效果逼真,有体积感,能实现穿云的效果,但算法复杂系统消耗很大。本文全面研究了视景仿真中云的建模与绘制技术,并根据视景仿真对云景仿真的需求,实现了一种既能获得良好的视觉效果,又能实时绘制的云景建模与仿真技术。当观察者位于地面观看云彩时,可以直接用高度真实感的纹理背景模代替云景;当观察者以飞行模式漫游于虚拟场景需要靠近云层时,则用三维实体云。通过视点相关技术、层次细节技术、动态视点替用技术提高了仿真的实时性。
2  远处云景的模拟
 我们在改进天空背景,对云彩的形状、颜色、透光效果的模拟时,是采用算法纹理、透明度变化和曲面变形等方法来综合实现的。
2.1  云彩纹理的生成
 云彩的逼真程度很大程度上取决于纹理的效果。本文中,我们采用了Perlin Noise纹理来实现。Perlin Noise是一个种子的随机数产生器,他用一个整数作为参数,然后通过把几个噪音函数在一定范围内缩放叠加重现这些现象。用Perlin Noise可以生成真实感较强的云彩纹理。
 生成Perlin Noise要经过以下三个步骤:
 (1)创建噪音生成器;
 (2)构造插值函数;
 (3)用平滑函数进平滑处理。
在得到基本的Perlin Noise纹理后,还不能当作云彩纹理,我们采用了4Octaves不同频率和振幅的噪音纹理来合成最终的云彩纹理。噪音纹理的阶数可视具体情况而定。由于天空并不是什么位置都有云,很多地方是蓝色的天空,所以在合成纹理后还要减去一个基数,来实现云的多少的模拟。纹理生成过程如图1所示。


图1  云彩纹理生成示意图

2.2  曲面云层的实现
    由于平面云面与我们日常生活常识不符,直接将纹理映射到天空球发生的形变又难以克服,所以我们采用了贴上云彩纹理的贝塞尔曲面来表示云层。我们用了一个(可改变)的网格控制点产生一个四边垂的曲面,放置云层时,把曲面的四周置于地平线以下,曲面控制点是中间点稍高。
2.3  云彩动态效果的实现
     云彩是运动的,它们在空中随风飘动,不时改变形状,云彩数量、厚度也随时间改变。一般小的细节变化频繁,大的特征改变较慢。基于以上分析,我们从两个方面实现云的动态效果,一是对贝塞尔曲面的控制点进行随机扰动以模拟云层的浮动和紊流效果;二是对云彩的纹理坐标进行扰动实现云的对流、飘动效果的模拟。
 远景云的优点是效率较高,能生成比较逼真的视觉效果,缺点是只能模拟远处的云,不能实现穿云的效果。
3  近处实体云的模拟
    当视点在云层里面,比如飞行器穿云飞行时,这时必须体现云的体积感,对云这类具有体积感的非规则物体进行绘制主要有三种方法:
 (1)基于物理模型的方法。用气象学原理构建云的几何模型,运用光线追踪技术构建云的光照模型,这类方法生成的效果逼真度高,但计算量大,难以实时绘制。
(2)基于三维纹理的体绘制的方法,体绘制是体数据的可视化方法最直接有效的方法,三维纹理是体数据最直接的一种可视化方法。根据视线的方向,把三维体纹理给切分成朝向视点的切片,通过多层融合技术实现云层的可视化渲染,此方法绘制效果较好,算法简单,但消耗内存较多,且当前的主流硬件还不支持三维纹理。
 (3)基于二维纹理的体绘制方法。二维纹理的方法是预先生成一系列的纹理,然后根据视线的变化调用不同的纹理。
 在视景仿真中,需要满足实时性,因此很多绘制云的算法并不适用,本文采用粒子系统与纹理映射相结合,并应用动态视点替换技术实现了对三维实体云的实时动态仿真。
3.1  实体云的建模
3.1.1  实体云的几何模型
    对于云这种具有自相似性的不规则物体,可以利用分形几何技术来构建其几何模型。首先用一系列椭球体定义出云的基本形状,然后噪音扰动构建云的细节。在构建云的分形模型过程中,在不同的方向上对这些基本椭球体从不同维度做变形,然后,将云球初始化数据随机缩小,并在不同方位上偏离父球中心的微小位移处进行多次随机复制,该过程一直继续下去直到满足迭代要求为止。
    在建模过程中,我们对分形过程进行了简化改进。将云团的粒子直接当作粒子系统的粒子,它拥有位置,半径等属性信息。下面主要讨论如何使用分形技术确定粒子的位置,半径。云团的中心坐标为(X,Y,Z),云团半径为R,云粒子的位置偏移是随机的,它的半径r是由偏离云团中心的距离决定的。云粒子的基色在没有光照的情况下可以设为一个统一的量。

而云粒子的半径,可以表达为:

▽Li表示云粒子距离云团中心的距离。
 云层的分形建模过程如图2所示:


图2  云的分形建模示意图

3.1.2  云粒子纹理的生成
   在实体云的粒子系统中,每一个基本粒子要用一个贴上纹理的四边形来表示,纹理的生成对最后的仿真效果有极大影响,下面就讨论如何为云的基本粒子生成合适的纹理。
   粒子云的纹理采用RGBA的形式描述,通常颜色的RGB分量的数值相等。透明度和纹理的灰度值相对应,所以可以用一个分量来讨论。以下就其中的一个分量来讨论。由于球状粒子的厚度从中心到边缘递减,所以其纹理的灰度值也应该满足这一规律,同时要求连续过渡,一般可用高斯分布来模拟这个趋势,公式如下:

    其中d为距离球心的距离;h(d)表示距离球心d处的纹理的灰度值;为高斯分布的方差,为了达到归一化,将取为3;为中心峰值的调制度,调整的大小可以调整中心灰度的最大值,的取值范围是,根据仿真效果发现将峰值取为0.4较为合适。
3.1.3  实体云的光照模型
     对于云层的光照模型主要是根据云的厚度以及光线在云层里面的散射、折射、透射形成的不同明暗度。云粒子对光的吸收使得穿过粒子的光强度减小,这也就是云粒子有不同明暗度的原因,粒子对光的散射使得光束的传播方向发生变化,由原来方向一定的光,转化为有一定发散角的发散光。由于散射效应的存在,一束光进入粒子云后,要经过若干个粒子的散射,才能最终投射出该云层。本文采用的明暗度计算步骤如下:
 (1)生成粒子纹理。
 (2)将粒子云中的所有粒子沿太阳光照方向以距离为序由远到近排列。首先找到云的中心位置Center,通过Center沿着光照方向作一条直线,取直线上云团以外任意一点作为虚拟光源的位置。排序的目的在于确定粒子阴影渲染的次序,根据排序的结果,由远到近逐个渲染。
 (3)将现有的颜色缓存用白色清空,用来初始化没有粒子云的阴影状态。
 (4)根据粒子云的中心位置,确定它在当前颜色缓存中的坐标,读取在该坐标周围立体角范围内的光照强度,从而确定该粒子的入射光强度。
 (5)进行纹理映射,纹理映射过程控制颜色的融合方式,改变阴影接受面的光照状态。
 (6)如排队序列中还有未处理的粒子,取下一个粒子进行处理。
 这样就实现了从各个方向观看,云彩效果各不一样,颜色各异。
3.2  实体云的实时渲染
    通过几何建模和光照建模,生成了云团粒子的所有属性数据,通常数据量具大,我们必须注意计算资源的合理应用,为此我们采用了动态视点替用技术,即只有靠近视点的云团用体绘制实现,远离视点的用资源消耗极少的近似面片替代,粒子云团的绘制过程如下:
 (1)首先计算与上一帧之间的视点或粒子云移动的角度偏差,以及距离偏差,如果两者之一计算超过误差容限,进行重绘,否则不重绘,结束重绘程序;
 (2)生成粒子的纹理;
 (3)通过视点沿视点方向作一条直线,将云团中的各个粒子投影到直线上,并计算投影位置到视点的距离,按距离从大到小的顺序排序粒子。排序的作用在于确定绘制的先后顺序,保证离视点最远的粒子最先绘制,最靠近视点的最后绘制,这样就使得最后绘制的粒子也就是靠近视点的粒子能覆盖它后面的粒子;
 (4)取出序列中第一个未绘制粒子,根据光照模型计算云粒子的颜色;
 (5)以各项同性的方式绘制当前粒子;
 (7)记录当前一帧位置,角度和距离,用以和下一帧进行比较。
4  仿真结果分析
    本文根据仿真需求的不同,采用了不同的建模绘制方法。对云的远景,采用过程纹理的方法,而对云的近景采用实体云技术加以模拟,并根据观察者的位置,调用不同的云层模型,当视点在地面远离云层时,直接调用背景纹理模拟云的远景,当视点靠近云层时,用实体云来加以模拟。
    我们在CPU pentium4,2.4G;内存512M;Ti4200显卡的微机试验平台上,算法测试结果表明该方法能满足绘制的实时性。绘制效果如图3所示。



图3:实体云的效果显示

5  总 结
    本文详细讨论云的建模与渲染方法,根据不同的仿真需求,建立不同层次的云景模型,运用过程纹理,并结合曲面扰动多层融合等技术实现了对云远景的模拟。采用粒子系统模拟近景实体云,以分形的方法构建云的几何模型,使用三阶厄密多项式代替传统的高斯函数纹理来生成单个粒子的纹理,运用公告板技术、动态视点替用技术实现对云团粒子的实时绘制。试验表明对云景的模拟极大地增强了虚拟场景的真实感。
参 考 文 献
 [1]   Perlin K. An Image Synthesizer [J].SIGGRAPH 1985:287-296.
 [2] Yoshinori Dobashi.et a1. A Simple, Efficient Method for Realistic Animation of Cloudsf.Tl.SIGGRAPH 2000:19-28.
 [3] Harris M J. et al. Real-Time Cloud Rendering.
 [4] 皮学贤,基于概率测算的有效动态逼真云景仿真算法,第五届中国计算机图形学大会,2004.09.
 [5] 顾幸,天空景物仿真方法研究,南京理工大学硕士论文,2004