我要发帖 回复

正式会员

11

主题

23

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2007-11-25 08:43:13 | 浏览 : 2404    评论 : 17
三维云场景的模拟

 通过计算机模拟进行仿真实验是计算机图形学
技术在军事领域的具体应用之一。在虚拟战场环境
中, 存在十分复杂的自然景象, 如雨、雪、云、雾、海浪
等。这些景象对于虚拟场景的“沉浸感”有很大贡献。
在各种自然景象的模拟仿真中, 云的可视化仿真是
其中具有挑战性的研究之一。由于真实的云彩环境
会因为天空和气象状况的不同, 变得复杂多变, 而且
当光线穿过云体时, 存在十分复杂的光线反射、折射
和散射等现象。因此, 要模拟出具有逼真且实时云彩,
效果的三维天空场景是目前计算机图形学领域的一
个难题。
从20 世纪70 年代末到现在, 国内外研究人员
一直在努力探索云的模拟仿真方法。对云的模拟仿
真一般要考虑3 个因素: ①建模。根据云的物理特
性或者通过受控的随机过程来生成表示云的模型
据, 包括云的外形、运动和物理属性的生成。②光照。
模拟光与云交互作用, 包括光的反射、折射和散射等
现象。③绘制。根据生成的模型数据场, 采用适当的
绘制方法生成云的图像。
云的模拟按照几何维数的差异可分为二维模型
和三维模型。按照建模原理可分为基于个体生长
(O n togenet ic) 的方法和基于物理过程,
的方法。基于个体生长的方法主要是利用人
的视觉形态特征获得云的视觉形状而不需要模拟云
生成或消散的真实物理过程, 这样渲染速度较快。目
前比较成功的方法有分形方法、过程纹理函数方法、
细胞自动机方法和粒子系统等。基于物理过程的方
法主要是通过模拟气象上导致云形成的物理过程以
及光与云的交互作用来进行云的模拟仿真。该方法
提出较晚, 主要包括光照模型、基于流体动力学的数
字模拟和定性模拟等, 但由于过大的计算需求还不
适应目前图形学仿真的需求[ 1 ]。
本文对三维云模型的构建、光照、绘制及场景的
漫游进行了探讨。首先利用面向对象的粒子系统模
型对云进行构建, 然后通过简单的光照模型及有效
的绘制算法实现了三维云图的可视化, 并加入天空
背景的漫游系统, 生成云的位置和方向能够随用户
漫游时视点的变化而变化, 可以从各个角度对云进
行观察, 大大提高了虚拟场景的逼真程度。整个三维
云场景模拟系统分云模型的构建、云的绘制和三维
漫游场景可视化3 个独立的部分。

最近VR访客

force8008 评论于2007-11-25 08:49:27
1 云模型的构建
云的粒子系统模型利用的是一种假想的物理模
型, 主要为了方便地模拟云的形态及运动特征。粒子
系统是一种简单且有效的不规则模糊物体的建模方
法[ 2 ]。其基本思想是把物体看成是由大量不规则的
随机分布的粒子组成的粒子集。每个粒子具有一定
的属性(包括外观、空间位置、运动、生存属性等) , 它
们可以在不断运动和改变形状中, 来表现景物总体
的外形特征和动态的变化规律。
高性能的粒子系统可以真实地模拟出一些虚拟
场景。在云的粒子系统设计中, 为了方便设计和管理
系统中的粒子, 采用了面向对象的设计方法, 它与面
向对象中类的概念有些类似, 可以当成类来处理, 每
个粒子即为粒子类的一个实例。给每个云粒子赋予
的状态属性有: Po sit ion, 粒子当前在空间中的位置;
V elocity, 粒子的运动规律(静态云则不考虑) ; Co l2
o r, 粒子颜色的变化, 可以产生一些真实的效果; Ra2
diu s, 粒子的大小, 其影响粒子系统的表现效果及运
行的速度; Tex tu re, 粒子纹理, 所设置纹理数目会对
粒子系统的性能产生巨大的影响; A lpha, 融合模式
等。根据云粒子的各种特性, 设计了粒子系统的核
心, 即: 粒子系统类。云粒子的各种属性都封装在该
类中。
粒子类的简要设计如下
CV ecto r 类主要描述粒子在三维空间中的位
置。
class CV ecto r
{
   f loat x , y , z ;
}
CPart icle 类简要描述了粒子的一些基本属性:
class CPart icle
{
   CV ecto r po s, velocity, co lo r;
   f loat radiu s;
   f loat den sity;
   GL u in t tex tu re;
   f loat alpha;
}
本系统的静态云团外形的生成是通过随机法生
成的, 主要思想是首先构造一个几何三维空间, 用数
学函数表示出该三维空间函数表达式, 然后在这个
三维空间内随机地填充粒子。由于云形状具有随机
性和多变性, 随时可能处于变化中, 因此引入扰动函
数对表示三维空间的函数值进行随机扰动, 这样可
以得到比较真实随意的云团效果。因为云团是静止
的, 某一云团绘制完其内部粒子间的关系则相对固
定下来, 一定程度上提高了系统的运行速度。
force8008 评论于2007-11-25 08:51:27
2 云的光照
在自然环境中, 照射云的光主要是太阳光, 由于
太阳十分遥远, 可以认为是有一定方向的平行光。一
束光照到粒子后可以分为两部分, 一部分是被粒子
吸收转换为其他形式的能量, 另一部分被粒子散射
出去。粒子对光的吸收使得穿过粒子的光强减少, 这
也是形成阴影的原因。粒子对光的散射使得光的传
播方向发生变化, 使原来方向的一束光, 转换为有一
定发射角的发射光。由于散射效应的影响, 一束光进
入粒子云后, 要经过若干粒子的散射, 才最终投射出
云层。
当只考虑某一方向上的光对单个粒子的散射
(这个方向通常是指向视点的方向) 时称之为单一散
射光照模型。如果考虑所有方向上的光对多个连续
粒子的散射则称之为多重散射光照模型。把光对1
个粒子的散射称之为单一粒子散射, 如图1 所示。
光对多个连续粒子的散射称之为多重粒子散射, 如
图2 所示。多重散射光照模型在物理特性上更具有精确性,
但需要更繁琐的计算。利用光的单一散射光

照模型进行云绘制的算法是由Y. Dobash i 等提出
的[ 3 ]。M. J. Harris 对他的光照模型进行了扩展, 利
用多重前向散射光照模型进行了云绘制, 多重前向
散射光照模型只考虑入射光前向很小立体角C内的
散射效应, 这样既压缩了运算量, 又把散射能量大部
分考虑在内, 如图3 所示[ 4 ]。在Harris 的基础上对其
多重散射光照模型进一步简化, 把云看成是只受太
阳入射光照射的粒子集, 入射的太阳光穿过粒子后
散射到视点位置。
211 光源散射
粒子点p 处在入射方向l 上受到的光照强度为
I (p , l) , 它一般有两部分组成, 一部分是所有来自l
方向(且没有被中途路径上的粒子所吸收) 的光强,
另一部分是从其他粒子散射到p 点的光强, 计算式

I (p , X) = I 0 (X) e-∫D p
0
S( t) dt +
∫D p
0
g (s, X) e-∫D p
0
S( t) dt, (1)
其中: I 0 (X) 是云块边缘处在X 方向上入射到的光
强; S( t) 是光强在云内某深度t 处的衰减系数; D p 是
P 点在云内沿着光的传播路径上的深度值。其中:
g (V, X) =∫4Pr (V, X, X′) I (V, X′) dX′, (2)
表示在点V 处从X 方向的入射光散射到X′的光强,
r (V, X, X′) 是一个双向散射函数, 它决定了点V 处接
受的散射光所占的比例。r (V, X, X′) 可以扩展为
r (V, X, X′) = A(V) S(V) p (X, X′)。A(V) 是点V 处介质
的反照率; p (X, X′) 是相位调制函数。
对多重散射模型进行了简化, 只计算发生在光
源方向上的散射, 因此可得X= l, X′= - l, 且假设式
(2) 中散射只发生在很小的立体角C内, 由于角度很
小, 因此式(2) 可简化为
g (V, l) = r (V, l, - l) I (V, - l)Cö4P。
  把光的路径上粒子0 到D p 分成离散的部分sj ,
j= 1, ⋯,N ,N 为路径上0 到D p 上粒子的数目, 则简
化式(1) 后, 得
I p = I 0Π
N
j= 1
e- tj + Σ
N
j= 1
g k Π
N
k= j+ 1
e- tk , (3)
其中: I 0为云边缘的光照强度, 假设反照率与透明度
值是沿着光的传播方向上与每个粒子相关的离散
值, 则可得到g k= A
k
S
kp ( l, - l) I k
Cö4P。为了便于算
法在计算机上用程序实现, 对式(3) 进一步简化, 得
force8008 评论于2007-11-25 08:53:15
法在计算机上用程序实现, 对式(3) 进一步简化, 得
I k =
g k- 1 + T k - 1 I k- 1 , 2 ≤ k ≤N ;
I 0, k = 1 。
(4)
其中: T k= e- tk是粒子p k 的透明度。从式(4) 可以看
出, 粒子p k 的光强I k 是由粒子p k- 1散射到p k 的光强
和光穿过粒子p k- 1处的光强(由透明度T k 决定) 共
同决定的。
212 视点散射
计算得到每个粒子处受到的入射光强I k 后, 再计
算这些光穿过粒子散射到视点位置的那部分光强。根
据Dobash i 的视点单一散射光照模型的表达式:
E k = S k + T kE k- 1, 1 ≤ k ≤N ,
可得到, 粒子p k 受到的光照强度E k 等于入射到粒子
上且没有被吸收的光强T kE k- 1加上粒子的散射光强
E k 决定。其中: S k= A
k
S
kp (X, - l) I k
ö4
P,
X 为视点的
方向; T k 是透明度; I k 是式(4) 的计算结果。
213 相位函数
前面提到的p (H) 是相位函数, 相位函数对云的
光照渲染来说是非常重要的, 如图4 所示。对于单个
粒子, 它在方向光的照射下, 有个光照方向X′和视点
方向X, 光照方向和视点方向之间交角为H, 称为散
射角, 它决定了从光源发射方向散射到视点方向的
光照强度。为了表示这种接受光强和H的关系, 所以
引入了相位调制函数。应用简单的瑞利散射函数
(Rayleigh funct ion) P (H) =
3
4
(1+ co s2H) , 它比较适
合球状微小粒子的散射, 运用它可以得到较好的视
觉效果。
3 云的绘制
311 光照效果的绘制
  云的光照效果的绘制分为光的预处理和实时处
理两部分, 即首先从光源的角度计算出每一云粒子
受光源影响的光照强度, 然后利用这个光照强度从
视点的角度实时地绘制每一粒子。在预处理时, 把粒
子按照离光源的远近进行排序, 清空帧缓存, 对每一
个粒子, 计算出将要绘制粒子的光照强度。在实时绘
制时, 再按粒子与视点的远近进行排序, 通过相位函
数调整粒子的颜色值。最后在帧缓存中通过alpha
融合计算粒子的投影颜色值。云的光照绘制过程如
下:
  (1) 预处理部分
P rep rocess ligh t ()
{按照粒子与光源的远近进行处理, p k 为某一粒子;
l= ligh t. po s- p k. po s;
X= - l;
ik= 粒子与光源远近方向分配的灰度值
ik= ik
3 ligh t. co lo r;
p k. co lo r= A
k
S
k ik
Cö4 P
p k. alpha= 110- exp (- S
k )
}
  (2) 实时绘制部分
Render part icle ()
{按照粒子与视点的远近进行处理
X= p k. po s- view. po s;
p k. co lo r= p k. co lo r+ phase (X, l) ;
使用p k. co lo r 和p k. alpha 绘制粒子
}
在绘制过程中, 可以通过随机地控制与粒子有
关的参数来增加真实感。为了更好地模拟云彩效果,
还可控制云团边缘的半透明度比中心的半透明度
高。这样, 在云粒子集中的地方, 会呈现出亮白色。还
可采用色彩融和技术, 把云粒子本身的颜色和天空
force8008 评论于2007-11-25 08:55:08
面的背景颜色很好地融和起来, 在云粒子分散的地
方, 会略微呈现出天空的背景面, 这样就能得到较为
真实的效果。在实际应用时, 需要先启动融和开关,
再把云粒子依次绘出。
312 纹理的绘制
为了尽可能地降低渲染这些粒子的时间, 不能
用三维型体来代表微小的粒子, 因为系统性能承受
不了, 而且alpha 混合的时候效果也不佳。Harris 使
用了在多边形上面贴纹理的方法, 但这样做有两个
弊端: ①增加了顶点数, 增大了系统的负担; ②它不
拥有b illboard 的效果(b illboard 的英文意思是广告
牌, 该技术能够将一个面一直面向观察者, 无论视点
怎么移动和变化, 它始终面向观察者, 这项技术应用
很广, 其中最常用的就是粒子效果, 使用b illboard
和alpha 纹理及动画技术能用来描述很多没有固体
表面的现象, 像烟、火、雾及爆炸等)。本系统在使用
OpenGL 编程接口时使用点精灵(Po in t sp irit) 表示
粒子, 点精灵类似于b illboard[ 5 ]。用点精灵表示一个
点, 首先, 不用进行反走样处理, 其次, 它扩展了基本
的点图元的功能, 一般的点, 只有一种颜色, 不能拥
有纹理, 而点精灵可以。绘制云时由于粒子点很小,
又很多, 因此, 用点精灵加纹理的方法有效的加速了
云的绘制效率。
云纹理图像根据生成方法的不同可分为表面纹
理和实体纹理两种。表面纹理是通过纹理映射生成
的。而实体纹理的纹路直接由算法生成其思想是: 定
义一个三维放置空间, 在其中对每种纹理直接建模,
空间任意曲面的纹理可以通过计算其在纹理空间的
颜色来得到。同时, 为了增强真实性, 还用噪声的方
法对纹理空间进行扰动, 使纹理更为自然。在建模三
维云时为了兼顾云的实时性和真实性, 先通过计算
高斯函数产生二维高斯纹理图像, 然后采用纹理映
射的方法, 高斯函数能有效地控制云纹理灰度和透
明度由中心到边缘的平滑过渡, 比较真实地反映出
云纹理的灰度变化。生成的云如图5 所示。
4 天空漫游场景的可视化
在虚拟战场环境中漫游时, 系统需要大范围的
天空和光照等细节来提供更加自然逼真的效果。三
维天空漫游场景的仿真算法, 目前主要有天空平板
(Sky p lane )、天空盒(Sky box ) 和天空穹(Sky
dom e) 3 种方法[ 6 ]。天空平板法是在场景顶端加一
幅天空纹理, 通过对视角和观察点的控制来达到置
身于场景中的感觉, 这种方法实现起来简单方便, 但
视觉效果显得平面化, 逼真程度不高。天空盒是由环
绕视点的6 张图所组成的立方体罩在场景中, 用户
一直在天空盒中, 视点无论怎么变化都能看到天空
盒的一部份。天空穹是使用一个切去底部的球体, 只
需要一张材质, 由于以更多的顶点构成天空顶, 可以
通过实时改变某些个别顶点的颜色创建一些很酷的
效果, 给人更加真实的效果。这3 种方法实现的共同
原理是: ①天空总是被首先绘制以确保天空位于一
切物体之后; ②无论照相机怎么动, 它们与相机的相
对位置总是不变的。根据实际需要, 本系统选择天空
盒算法, 在绘制时使用优质无缝的纹理图和精确的
投影算法控制, 并考虑天空的材质不能受光照的影
响, 因为如果受光照的影响, 天空盒就会有明暗, 盒
子的内棱会有阴影, 各个面的明暗差别也会明显, 天
空看上去就不会浑圆一体了。生成的三维云场景图,
如图6 所示5 结 语
系统的三维显示部分采用OpenGL 函数实
现[ 7 ]。OpenGL 本身与硬件及操作系统和窗口系统
之类的底层软件无关, 并可以在系统间移植, 用以完
成高级的三维图形编程并要求有阴影、光照、纹理之
类的特殊效果。所以利用OpenGL 图形库在PC 机上
较容易实现了三维建模、建立光照模型、雾化、反走
样、双缓冲区等功能, 大大减轻了三维显示部分编程
工作的难度, 生成的视景既有较好的真实感, 又具有
良好的实时性, 满足了用户的需要。另外, 用点精灵
来表示粒子, 绘制效率得到了提高。本系统实现的效
果在CPU P III866, 内存256, 显卡Gfo rce2 32M 的
个人计算机上, 当粒子数目在[ 1 500, 6 000 ]个范围
内, 云的渲染帧速率在[ 53, 140 ]帧ö秒之间, 在渲染
基础上进行三维视点漫游的帧速率在[ 41, 118 ]帧ö
秒之间, 结果表明该仿真系统在云的绘制及场景漫
游情况下都能达到实时效果。
为了真实地模拟出各种气候条件下云彩表现出
的不同现象, 下一步的研究方向是如何模拟不同种
类的云以及不同光照对它们的影响。随着计算机图
形处理技术的不断完善, 以及有关对云形成的物理
原理研究的不断完善, 用计算机模拟出逼真的三维
天空云彩的虚拟环境是完全可能的
liuh7868 评论于2007-11-26 17:14:57
不错支持一下,谢谢楼主!
kangaroo 评论于2007-11-27 09:36:59
支持一下,弄个文档就更完美了
sunlity07 评论于2008-1-15 09:06:13
谢谢楼主,辛苦了

[ 本帖最后由 sunlity07 于 2008-1-15 09:37 AM 编辑 ]
khy168168 评论于2008-1-23 09:48:21
辛苦了,楼主!
k303281924 评论于2008-1-24 10:42:38
非常棒的文章啊~谢谢分享~
独山子 评论于2008-1-24 11:10:46
论文不是这样发的啊
逆水行舟,不进则退。
hf_hero 评论于2008-1-24 12:19:02
good
andyaxjlvp 评论于2008-1-25 10:11:27
提示: 作者被禁止或删除 内容自动屏蔽
khy168168 评论于2008-2-1 16:50:59
顶呀,不错哈哈~
jazzy001 评论于2008-2-7 03:49:14
谢谢分享
blueuranus 评论于2008-2-7 12:19:16
『 雲 』
http://hx.hxgame.net/showdown.asp?id=370
06年时一部得过许多奖的作品 它的主要作者是一名在美国念书的中国大学生
很有感觉的哦 它应该说是云的虚拟现实而不是游戏了
jerry1023 评论于2008-10-11 13:08:19
寫的不錯也~~~謝謝囉~~
dodoboy 评论于2008-10-18 15:07:32
寫的不錯也~~~謝謝囉~~!!!

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-21 07:05 PM

返回顶部