文 | 王十七
编辑 | 王十七
前言
粒子系统主要用于不规则模糊物体建模及其图像的生成,基本思想是把无规则形状的物体看作是众多粒子所组成的粒子团,各个粒子都有自己的属性,如颜色、形状、大小、生存期、速度等。
粒子随时间的推移而不断地改变状态,从而模拟出无规则的物体及其运动变化。
从粒子系统方法诞生到现在, 它已经逐步成为计算机图形学中应用最广、应用时间最长的方法之一。
人们仍然在积极地对这种方法进行研究和扩展,不断地加以改进和完善,不断地拓展其应用的领域。

一般而言,创建特定的粒子系统是一个比较复杂的过程,不仅要考虑真实的物理模型和相应的动力学规律,而且还需要对粒子的大量属性分别进行设置。
我们基于粒子系统方法,构建了沉淀现象的数学模型,详细描述了沉淀现象的实现过程, 并讨论了沉淀现象实现过程中的实时性优化方法和真实感增强技术。
最后,将该方法应用到化学反应的沉淀模拟中。

相关工作
粒子系统方法历经了20多个年头,其应用领域得到了很大限度的扩充,已经成为计算机图形学中的一个重要手段和工具,并广泛运用于游戏和各类虚拟现实系统中。
总结起来,在应用粒子系统方法时,需要注意两方面:一是自然现象模拟的真实性,这是评价应用此方法成功与否的重要标志, 这就要求使用者深入理解自然现象,建立合适的模型。
二是实时性,采用粒子系统方法模拟自然现象时,随着模拟场景中粒子数量的增加,对这些粒子的控制和处理就会变得比较繁琐,系统开销急剧增加,系统运行的速度也会相应受到很大的制约。

这就要求使用者建立简单实用的模型来减少计算开销。
目前,应用粒子系统方法模拟自然现象多限定在火焰、云团、喷泉、爆炸等, 对于液体中的沉淀现象,如化学反应中的沉淀物、水中的沙尘等,还很少有文献涉及到。
而沉淀现象是自然界中常见的自然现象之一,用计算机真实地再现沉淀现象对研究沉淀过程、掌握沉淀规律具有重要的现实意义。

沉淀现象的数学模型
采用粒子系统方法对于 自然现象的模拟关键在于运动模型的设计。
粒子的运动模型是粒子运动状态在虚拟环境中的抽象表达,它描述了粒子在三维空间中运动状态的变化。
粒子运动状态的变化主要表现在空间位置、速度、加速度上的改变。
对于沉淀现象中的粒子,由于受到液体的粘滞力、浮力和容器大小的限制,粒子有一定的运动范围,称为粒子的产生域。
产生域控制粒子的活动范围,实际上是一个包围盒, 其大小与液体的密度、粘稠度以及粒子的初始位置和速度有关。

设产生域的长、宽、高为(H1,H2,H3),则粒子的位置坐标应该满足如下限制:x≤H1 ,y ≤ H2, z ≤H3 ,另外,沉淀现象中的每个粒子,都有一个存活时间的限制,称为粒子的生命周期,用t表示粒子的存活时间,T0表示粒子的生命周期,则粒子的存活时间应该满足:t ≤T0

沉淀现象的实现过程
为了实现沉淀现象的模拟, 需要经历粒子初始化、粒子更新、粒子绘制3个主要过程, 系统完整的工作流程图如下图所示。

系统初始化包含两个方面:一方面是对粒子基本属性的初始化,包括赋予粒子初始的位置、颜色、大小、加速度、速度、生命值等。
另一方面是对粒子系统属性的初始化,包括环境参数、产生域、纹理、粒子数量等。
在粒子的运动过程中需要更新的属性主要有位置、速度、生命值等。
粒子运动状态主要通过对粒子属性的更新来实现。
首先是粒子生命值更新。
当图像每刷新一帧,就需要将每个粒子已存活时间加上粒子已存活时间增量与粒子生命值进行比较,如果粒子已存活时间已达到其生命值,则判定粒子死亡。

其次是粒子速度的更新。
在粒子更新过程中,关键之处在于粒子速度值的更新, 因为粒子速度决定了粒子的运动模型。
再次,粒子的颜色和透明度的更新。
计算方法是将粒子前一帧时的颜色和透明度值分量加上颜色增量和透明度增量。
对于粒子的绘制,就是以更新后的颜色和透明度值为基础,在下一帧时视口的恰当位置再现粒子。

绘制时,不仅要考虑粒子的数量,而且还要考虑粒子源的属性。
粒子系统中的所有粒子都是由粒子源产生的。
粒子系统的粒子源有两个重要的性质 ,即粒子源形状(Source Shape)和粒子源大 小(Source Size),它们一起确定了粒子发射平台的外形特征。

沉淀现象实现过程中的优化
沉淀现象实现过程中的优化主要包括实时性和真实感。
一方面实时性增强真实感,另一方面实时性和真实感又是矛盾的,有的方法增强了实时性但降低了真实感, 有的方法增强了真实感但降低了实时性。
为了提高沉淀现象模拟的实时性,用户可以根据具体情况,在对真实感影响不大的情况下,采取措施如下。
首先,为了减少计算开销,可以简化沉淀现象的数学模型,如,在受力分析过程中忽略粒子之间的相互碰撞,不考虑粒子之间的相互作用合力,也不考虑液体对粒子的粘稠力,这样可以减少大量的计算开销。

其次,在粒子沉淀过程中,为了减少分配和释放内存的操作给系统带来的负担,可以将所有粒子都视为“不死”粒子, 在粒子消亡的时候给该粒子重新赋予生命值,并初始化该粒子的其他属性。
尽量降低粒子源数目,粒子系统中的所有粒子都是由粒子源产生的,粒子系统的粒子源确定了粒子发射平台的外形特征,从而决定了粒子产生的初始状态。

如果粒子源大小设定为一个非零正数值,那么粒子系统中的每个粒子都会随机地获得一个在给定粒子源形状和大小范围内的初始位置, 如果设定的粒子源大小为 0,那么不管使用何种粒子源形状,所有的粒子都会从指定的特殊效果位置处产生。
最后,在实现有生命粒子的绘制时,采用什么形状的粒子将会影响系统的实时性,应该将粒子简化为矩形面片、圆等规则几何形状以尽可能减少系统绘制的开销,然后采用纹理融合技术,将二维纹理图片映射到矩形面片上,纹理的颜色根据实际需要模拟的沉淀颜色进行设置。

为了增强沉淀现象模拟的真实感,用户可以根据具体情况,在对实时性影响不大的情况下,采取措施如下。
首先,在粒子绘制时,为 了增强粒子的真实感,可采用色彩融合技术进行绘制,所谓融合就是将某个像素的颜色和已绘制在屏幕上与其对应的像素颜色相互结合所产生的一种效果。
其原理是在RGBA模式下,设定不同的Alpha通道分量(Alpha通常为RGBA颜色模式的第 4个颜色组成分量A)与融合函数中源颜色和目的颜色值所占的比例来实现粒子不同的颜色与透明效果。
其次,为了增强沉淀现象的真实感,在渲染的过程中采用了三维立体显示技术。

人观测空间物体时产生立体感是由于物体在左右跟视网膜上的影像存在视差的缘故。
利用该原理, 在粒子的绘制过程中先绘制出实体的模型,然后通过设置左、右眼位置来产生两个不同视点的具有水平位差的模型画面。
在戴上特殊的三维立体显示眼镜后,双眼会融合这两幅图片,头脑中就重构了一幅具有深度感的空间立体沉淀图像。

运用实例
根据以上讨论的方法及优化技术, 基于OpenGL技术 ,模拟化学实验时试管溶液中产生的沉淀现象。
沉淀的发生域限定在了以试管大小为基准的圆柱形空间中,粒子源大小为0,坐标系统如下图所示。

其它相关参数的值如表1所示。

模拟是在配置为Pentium D 2.80 GHz的 CPU、DDR512MB内存及 NVIDIA GeForce 7300 LE(256MB)显卡的PC机上进行的, 当场景漫游系统中动态粒子数达到900时,场景漫游系统能够以40 fps的速度进行漫游。
同时显示器的垂直刷新率为 60Hz,可以保证渲染图像显示跟屏幕更新保持同步。沉淀现象的效果如下图所示。

结束语
本文基于粒子系统方法,构建了沉淀现象的数学模型,详细描述了沉淀现象的实现过程,并讨论了沉淀现象 实现过程中的实时性优化方法和真实感增强技术。
基于OpenGL技术对沉淀现象的模拟进行设计,并在化学实验仿真项目中得到了实现。
该方法在数学方法和绘制方法上都力求简化, 以最简单的数学模型完成模拟任务,这样不仅使系统结构易于理解,而且提高了运行速度,具有一定的通用性, 扩大了系统应用范围,只要对粒子速度模型中的随机参数稍作修改,该系统即可应用于其它现象的模拟,增强了系统的可移植性。