前言:本站为你精心整理了动态特效设计方式范文,希望能为你的创作提供参考价值,我们的客服老师可以帮助你提供个性化的参考范文,欢迎咨询。
编者按:本论文主要从-体建模思想;算法设计;实验结果和算法复杂度分析等进行讲述,包括了产生纹理的动态序列、图像的边界合成、复杂性分析、效果图、运用动态纹理合成思想从原始图像集产生动态纹理序列、通过对实时生成的纹理分割,提取了纹理的边界,并利用其边界属性生成几何体,使得用户在场景中等,具体资料请见:
摘要:提出了一种α-体建模方法:对实拍图像的学习生成动态纹理之后,再对纹理进行边界合成得到划分了颜色区域的图像;通过对图像区域边界的扫描勾勒出图像的轮廓线网格,并根据其到中心的距离为每个网格边界赋予标准的颜色值;最后根据网格的颜色值生成三维模型。实验证明这种动态景物的建模方法能够满足虚拟场景实时绘制的要求,而且具有很好的鲁棒性和连续性。
关键词:动态纹理;网格;三维模型;动态景物;基于图像的绘制
近几年,随着虚拟场景建模技术的发展,客户对虚拟场景的真实感和实时性要求越来越高。在大部分虚拟场景中,尤其是自然环境和战场环境中,火焰、烟雾、硝烟以及干扰云等景物是必不可少的一部分。真实地模拟这些动态景物是影响场景绘制速度的一个重要因素,也是计算机图形图像研究的一个重点和难点。用更少的运算和内存空间,更加逼真地模拟它们的状态一直是人们努力的目标。目前已经有很多关于这方面的研究。Lamorletter和Foster对火焰的各个不同部分分别建立模型[1],然后分别计算不同部分的状态,从而体现整个火焰的运动状态。首先建立火焰的外轮廓线模型,然后对火焰进行上下分段,对不同段的粒子采用不同函数描述,从而体现火焰不同部分的亮度,通过各个部分亮度的变化展现火焰的动态效果。Beaudoin则是建立三维的火焰骨架[2],并在三维骨架内建立速度场。火焰的粒子以当前所处位置的速度运动,实现动态效果。同时,他把火焰由内及外分成不同的层,不同的层用不同的亮度计算函数,体现了火焰由内及外的亮度变化。Ngu-yen则是从燃料入手[3],考察固体燃料由固体变成气体燃烧然后再慢慢冷却的过程。在燃烧的过程中,燃料颗粒以气态在空气中运动并且相互作用,产生火焰的动态效果。同时,燃料颗粒经历温度由低到高的过程,亮度也相应由弱到强地变化,使火焰在不同的段,亮度也不同。Schodl提出一种由少量动态火焰产生无限动态火焰序列的算法[4]。Fedkiw通过跟踪点的运动,利用涡流思路成功模拟了烟的运动[5]。Wijk就如何体现流体纹理随机性和不确定性,并保持纹理一致性和连续性提出了很好的思路[6]。
1α-体建模思想
在以上提出的各种建模方法中,出于真实性、随机性和实时性的考虑,在实际建模过程中常用的方法主要有基于粒子系统的建模和分形[7]建模以及依赖于已有的图像序列的基于计算机视觉的建模。这类动态现象包含的共同特性是产生它们的物理机制十分复杂,一般很难通过物理分析的方法对它们建模。而现有的建模算法多数都是基于粒子系统[7~9],既要考虑其复杂的物理模型,又要利用流体力学的知识计算场景的运动状态。其主要缺点是运算量大,很难达到实时绘制的要求。另一方面,可以很容易收集这类动态序列的样本。于是,产生了图像与几何相结合的建模思想:首先从得到的原始图像序列样本恢复几何信息,然后将纹理映射到几何体表面。但是这种方法要用到计算机视觉理论,不可避免地要从图像中精确地恢复对象的几何模型。这是一个非常复杂的过程,尤其是对于这些没有固定形状的动态景物而言。大部分的火焰合成系统都是动态地展现纹理效果,使其在二维平面上展现出栩栩如生的逼真效果,目前在这方面已有很多研究成果[10,11]。在虚拟空间中,需要从各个视角对这种现象进行观察,只靠纹理的方法是不行的;同时,还要求必须能实时地生成。由于景物在运动过程中,纹理状态具有不确定性,用传统的基于粒子的和分形的建模方法,不仅需要大量内存空间来保持它们的连续性和一致性,还要通过大量的运算来求得它们的下一个状态。这会大大降低绘制的速度,不能满足实时性要求。
基于这种状况,本文提出了一种利用已有图像序列的实时建模方法,即α-体建模思想。这种方法既避免了物理建模的复杂性,又省去了用计算机视觉恢复复杂几何模型的过程。首先运用动态纹理合成思想从原始图像集产生动态纹理序列;其次对动态纹理序列进行背景消隐,得到没有噪声的动态纹理序列;然后再对这个纹理序列中的每一张图像进行边界合成,找出不同的颜色区域边界并计算边界的α值;最后根据α值生成α-体集合。在算法中,主要解决了如何利用合成的区域边界勾勒出纹理的轮廓线以及如何从轮廓线计算α值,并生成α体的问题。
2算法设计
2.1产生纹理的动态序列
动态纹理是一种基于图像的绘制方法,通过对输入图像序列进行学习,生成新的图像序列。它与原序列在视觉上十分相似,不但具有很强的真实感,还具有一定的可编辑性。下面首先定义一个动态纹理,然后分别对动态纹理进行学习、识别和合成。
2.2图像的边界合成
为了建立α-体集,必须找出不同区域的边界。在火焰图像中,不同颜色的区域之间的边界都是曲线。这里用Alpha估计技术,通过以不同的比例混合两种颜色产生边界颜色,而且不需要知道边界的详细信息。
在实际图片中,边界的颜色往往受多个区域的影响,有多个区域的图像可以被分解为只有两个邻接区域的图像。因此,这里主要处理有两个区域的图像。本文用分割两个区域的像素链形成区域边界。像素链用边缘监测器发现的边缘创建,而边界使用区域分割算法或边界寻找工具(如智能截取器IntelligentScissors[13])发现。事实上的困难在于纹理可能有噪声和其他数据源。本文采用如下的方法:
(2)计算Alpha和非混合颜色
两个信号集X和Y是每个对象区域颜色的离散表达。现在必须在两个分布之间建立关系和确定颜色空间的任意一个像素Q,只要将颜色信号转换为连续的分布,这种关系可以很容易建立。这里使用一个均匀的高斯混合来确保在颜色空间所有的点有一个非空对应和简化方程。在Q点比较这两个方程是一个估计Q点Alpha值αQ的方式。当假设Q是X和Y的颜色混合时,Q就不可能是这两个分布中的任何一个。因为要估计混合量,传统的决策理论方法是没有用的。这时要真正地从X分布的颜色穿过边界变形到Y分布的颜色绘制Q点。这种变形通过在两个分布之间线性插值实现。这样估计Alpha就变成一个最大化可能的估计问题,即发现最大化Q点值可能被插值的密度。
3实验结果和算法复杂度分析
3.1复杂性分析
对于一个基于粒子的绘制系统而言,其算法的复杂度与粒子的属性和实现过程有关。在任何系统中,粒子都有以下的属性:粒子的数量、大小、颜色、亮度、透明度、形状、运动速度和方向、生存期;它都要经历粒子状态初始化、依照运动规则运动和属性变化三个实现过程。粒子系统的具体实现过程如下:①在燃点处产生初始火焰粒子集;②赋予火焰粒子属性;③绘制初始火焰;④重新选择火焰粒子集;⑤粒子场中粒子运动、变换;⑥粒子生存期减1;⑦部分火焰粒子消亡;⑧产生新的火焰粒子;⑨绘制火焰粒子集。其中对于每一帧都要重复执行④~⑨。而在本章提出的α-体建模方法中,第一步是初始化过程,是在程序运行之前就必须准备好的动态纹理,这个过程远比粒子系统中①~③要简单得多;其次,在执行过程中对每一帧都要划分边界和计算α值并生成α-体,这个过程也远比粒子系统的④~⑨计算量要小很多,因此该算法的复杂性与基于粒子系统相比要小很多。用粒子系统在SGI图形工作站生成100fps这样的火焰序列,而用本文的建模方法在下面普通的试验环境中也能生成约100fps的序列,性能有明显改善。
3.2效果图
试验环境:PentiumⅢ600MHz的PC机,GeForce2MX显示卡,256MB内存,编程环境为VC++6.0,运行在WindowsXP下,底层图形绘制采用三维图形标准软件Direct3D,每个项目包含120幅图像。
在该环境中,用上面的算法对图1(a)的火焰进行处理。图2分别为三维模型绕轴旋转90°的四个不同视角观察的结果。由图2结果可以看出,本文方法生成的视图没有人工痕迹,几乎达到了与图1(a)的真实图片相媲美的效果。
4结束语
本文以火焰为例,介绍了一种在三维空间重建场景特效的方法。与传统基于粒子系统的方法相比,该算法复杂度低、真实感强;与动态纹理方法相比,该算法能够满足自由变换视点的需要。通过对实时生成的纹理分割,提取了纹理的边界,并利用其边界属性生成几何体,使得用户在场景中,能从不同的视角和视点进行观察。实验证明这种方法不但满足了特效在三维空间视点变换的需要,而且克服了传统建模方法占用存储空间大和运算复杂的缺点,实现了动态景物的实时绘制,提高了绘制速度。
在本文对虚拟火焰的模拟中,不同层的火焰亮度是用颜色和Alpha值确定的,Alpha值用来确定该层火焰的透明程度。在这里Alpha值的计算只是依据边界到中心线的距离,而每一层的实际亮度并不是完全按照这种模式分布的,这将可能导致图形因亮度因素而部分失真。如何准确地再现特效的实际亮度是今后的努力方向。