八叉树粗糙网格投影的快速的烟模拟方法

文档序号:6372316阅读:389来源:国知局
专利名称:八叉树粗糙网格投影的快速的烟模拟方法
技术领域
本发明属于计算机虚拟现实技术领域,具体地说是一种快速的烟模拟方法,该方法可用于虚拟火灾救援,战争游戏和电影等方面。
背景技术
随着计算机技术的飞速发展,人们越来越注重自然现象在计算机动画中的真实性,在模拟战场、火灾救援时,烟的模拟是必不可少的。从1990年代开始出现了很多用计算机进行烟的模拟方法。使用网格的方法来模拟烟的公式是著名的纳维-斯托克斯方程(Navier-StokesEquation)
CViIdt = -uV-u-Vp + f(I)V-U = O(2)其中u表不速度场,f表不外力,P表不压强,t表不时间。众多模拟方法中采用的一个较为通用的框架是Stam在1999年提出的将流体方程进行分解计算[I](I)施加边界环境;(2)施加外力(比如浮力)与内力(比如旋力),du/dt = [;(3)后向追踪进打速度平流,Biildt = —uV · u ;(4)速度投影,5u/ft=-Vp,其中的P通常由Δρ = ν·ιι得到;(5)后向追踪进行温度密度平流。然而,用早期的模拟方法来进行大规模的烟模拟是非常昂贵的,这是因为速度投影中的Δρ = ν·ιι是一个全局的求解方程的过程,计算量非常大。近20年来有很多研究人员使用各种方法来加速模拟过程,加速模拟的核心主要在于如何减小速度投影的计算量。现有的快速模拟方法大概分成三类第一类是降维的方法,从大量预计算数据中提取一组基,这组基只需要少量的基函数就能近似原有的所有数据,然而这种基缺乏物理含义,而且模拟的场景改变时又需要大量的预计算;第二类是使用粗糙的网格进行模拟,然后使用加入噪声或者非物理的方法加入细节从而达到高分辨率效果,但是这种方法是非真实的;第三类是采用八叉树的方法,空间网格用八叉树表述,但是这种方法在数值计算上有困难,比如高价插值。

发明内容
为克服上述缺点,本发明的目的在于提供一种快速模拟方法,该方法可以极大的加速模拟过程,同时还能保持完全精细网格模拟时的细节。为了达到上述目的,本发明采用一种八叉树粗糙网格投影的快速的烟模拟方法,实现方法是首先,用户输入场景物体,烟的产生范围,烟的初始浓度、持续注入浓度,旋度系数,浮力系数以及指定感兴趣的区域;接着,根据场景物体以及感兴趣的区域生成距离场;然后,根据距离场以及各层次的距离场阈值生成八叉树粗糙网格;最后,在烟的模拟过程中的每一帧,进行速度投影时,将精细网格上的速度映射到八叉树粗糙网格上,然后在八叉树网格上进行速度投影,之后再映射回精细网格进行局部投影。在八叉树粗糙网格上进行速度投影时我们使用了如下文中公式(3)所述的新的数学模型,与传统的模型相比,该模型在八叉树上使用时,可以避免传统方法中的非精确插值,从而更加准确。在进行局部投影的过程中,我们将原本求解方程的问题转换为矩阵-矩阵乘法,并采用GPU并行计算。


图I示出本发明基于八叉树粗糙网格投影的快速的模拟方法的主要流程图;图2示出本发明中一个二维距离场;图3示出本发明八叉树粗糙网格的二维示意图,(a)中使用了两个阈值0,0,划分为3个层次,(b)中使用了一个阈值1,划分为2个层次;
图4示出本发明的八叉树粗糙网格的三维示意图
具体实施例方式如图I所示,本发明的八叉树粗糙网格投影的快速的烟模拟方法采用如下步骤(I)输入场景物体以及感兴趣的区域,生成距离场。所谓“场景物体”是指栅格化之后的体素描述的物体,“感兴趣的区域”也是由栅格化之后的体素描述的区域。在生成距离场的过程中,利用一个先进先出的队列,先将场景物体以及感兴趣区域的体素的距离置为0,并加入到队列中,然后每次取队首体素,对该体素的上下左右前后6个邻居体素分别进行考察,如果该邻居体素还没有被加入过队列则将它的距离置为队首体素的距离加I并加入队尾,考察完队首体素则从队列中删除它。图2是一个应用本方法生成的二维距离场,图中的带阴影区域是场景物体与感兴趣的区域。(2)生成距离场之后,根据指定的划分层次与每个层次的距离场阈值,将空间划分成八叉树网格。所谓“划分层次”,是指空间中允许的不同规模的单元格的最大种类,N个划分层次需要N-I个距离场阈值。在生成八叉树网格的过程中,我们先将整个空间划分成最粗糙的网格,如果每个粗糙单元格中含有比相应阈值小的体素,则将该单元格细分为8个子单元格。如此递归地细分,直到不能再分为止。图3是两种不同阈值生成的八叉树网格,(a)中使用了两个阈值0,0,划分为3个层次,(b)中使用了一个阈值1,划分为2个层次。(3)在进行每一帧的模拟过程中,我们按如下步骤进行(a)施加边界环境。边界环境主要是指边界的速度值,温度,烟的注入浓度等。(b)施加外力与内力。外力主要指浮力,浮力的公式采用ftoy = a (T-Tamb)Z,其中α是浮力系数,T是每个体素的温度,Tanib是环境温度,ζ是一个与重力方向相反的单位向量,通常是(0,0,I)。内力主要是指旋力,施加旋力采用Fedkiw[2]的旋度放大方法,先根据速度场u计算出旋度场ω = νχιι,再根据旋度场计算出旋力方向N,N的计算公式为
V I ω I
,接着计算旋力= εΜΝΧω),其中ε为旋度系数,h为单元格的 长。(c)进行速度的平流。我们采用BFECC[3]方法来进行速度的平流。
(d)将精细网格的速度映射到八叉树网格上,映射方法是=^Y4fefiJItf,其中
<是八叉树网格上的速度,<是精细网格上的速度,fsets是每个八叉树网格的面所覆盖的精细网格的面的集合,η是该集合的元素个数。(e)速度投影。我们使用下面的模式来求解投影后的速度
权利要求
1.ー种八叉树粗糙网格投影的快速的烟模拟方法,其特征在于它包括以下步骤 (1)输入场景物体,烟的产生范围,烟的初始浓度、持续注入浓度,旋度系数,浮力系数,以及指定感兴趣的区域;这里场景物体、烟的产生范围以及感兴趣的区域用栅格化的体素来描述,烟的初始浓度指模拟开始时烟的浓度,持续注入浓度指每个时刻新增的浓度,旋度系数和浮力系数是影响烟的运动的物理參数; (2)根据场景物体以及感兴趣的区域生成距离场; (3)根据距离场以及各层次的距离场阈值生成八叉树粗糙网格; (4)在烟的模拟过程中的每ー帧,进行速度投影时,将速度映射到八叉树粗糙网格上进行投影; (5)在烟的模拟过程中的每ー帧,在进行粗糙网格上的速度投影之后,将速度映射回精细网格,并在每个八叉树单元格对应的区域进行局部投影。
2.如权利要求I所述的八叉树粗糙网格投影的快速的烟模拟方法,其特征在于在所述步骤(2)中生成距离场的方法是 首先,构造ー个先进先出的队列,将场景物体所在的体素以及感兴趣的区域的体素的距离置为O并加入到队列中; 然后,取队首体素,考察它的上下左右前后6个方向的邻居体素,如果没有被加入过队列,则将它的距离置为队首体素的距离加I,并将该体素加入到队列中,队首元素从队列中去除; 最后,重复考察队首元素,直到队列为空。
3.如权利要求I所述的八叉树粗糙网格投影的快速的烟模拟方法,其特征在于在所述步骤(3)中根据相应的距离场阈值生成八叉树粗糙网格,具体方法是 首先,将距离场划分为最粗糙的网格; 然后,如果每个粗糙单元格中的各个细网格的距离值都大于相应层次的距离场阈值,则不用细分,否则,分成八个细网格; 最后,对每个粗糙单元格进行递归的细分,直到不能再分。
4.如权利要求I所述的八叉树粗糙网格投影的快速的烟模拟方法,其特征在于在所述步骤(4)中在八叉树粗糙网格上的投影方法采用了极小化投影前后速度的能量差的数学模型,具体模型为 min u , (u - H *) 2 dr - J AV udr |(I) 其中U与U*分别是位置r处的投影后和投影前的速度,\是r处的拉格朗日乘子,Q是问题的求解空间,V .为向量场的散度算子。
5.如权利要求I所述的八叉树粗糙网格投影的快速的烟模拟方法,其特征在于在所述的步骤(5)中,局部投影的过程中将求解方程的问题转换为矩阵-矩阵乘法并使用GPU加速计算。
全文摘要
本发明是一种八叉树粗糙网格投影的快速的烟模拟方法,该方法根据场景中的物体以及用户设定的感兴趣的区域,先自动的生成距离场,然后根据这个距离场和用户设定的相关阈值自动将场景划分为八叉树网格。这个八叉树的特征为在细节丰富的地方划分得更细,在细节比较少的地方划分得粗一些,在进行每帧烟的模拟的速度投影阶段,先将速度映射到八叉树网格上进行投影,然后映射回精细网格进行局部投影,为了更好的在八叉树网格上进行速度投影,本发明的八叉树粗糙网格投影的快速的烟模拟方法,能够最大效率地利用计算资源而且能模拟出具有丰富细节的烟。
文档编号G06F17/50GK102819630SQ201210219490
公开日2012年12月12日 申请日期2012年6月27日 优先权日2012年6月27日
发明者齐越, 左庆 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1