论文翻译1_粒子系统

声明

原文作者:William T.Reeves, Lucasfilm.Ltd
原文题目:Particle Systems-A Technique for Modeling a Class of Fuzzy Objects(Computer Graphics, Volume 17, Number 3, July 1983)
翻译仅供个人学习,勿做他用
部分地方为了语义通顺,在尊重原文意思的同时使用了意译
翻译限于个人水平,敬请见谅


1 引言

  • 当下的计算机图像合成技术对诸如云、雾、水和火等自然事物进行建模已经被证明是困难的。这些“模糊”的物体并没有平滑、界限清晰、闪闪发亮的表面,而是拥有不平整、复杂、界限模糊的表面。我们对这些事物形体的动态、流动变化深感兴趣。它们的动作既不一成不变也不能被计算机图像中的常见简单仿射变换所描绘。
  • 本文提供了一种对模糊物体的建模方法,称为“粒子系统”。粒子系统在图像合成方面与一般使用的呈现方式有三个基本的不同点。第一, 物体并不由一系列基本的面元素如多面形或色块所呈现,且它的边界也不为这些元素所定义,而是借助基本粒子组成的云团来定义它的体积;第二,粒子系统并不是确切的实体,它的粒子随着时间的变化而改变外观,粒子新旧更替。第三,由粒子系统所呈现的物体的外形并不被明确规定,因此其不具确定性。此外,随机处理被用于生成和改变物体的外观。
  • 在模糊物体的建模过程中,相较于传统以面为导向的技术,粒子系统方法有几个重要的优势。首先,粒子(目前将其想象为三维空间的一个点)是比多边形更加原始和简易的,是表面呈现方式中最为简化的。因此,在相同的计算时间内采用粒子系统可以处理更多的基元并产生更加复杂的图像。由于粒子是简易的,所以它也易于运动模糊。时态混叠效应下快速运动的物体导致的运动模糊现象在计算机图像合成中已经被长久地忽视了;第二个优势是模型定义是程序性的,并且由随机数控制。因此,相比于通常使用现有的基于表面的系统,使用粒子系统获得一个十分精细的模型并不一定需要人们长时间设计。由于它是程序性的,所以粒子系统可以调整其细节级别以适应特定的一组查看参数。使用分形曲面,使用粒子系统放大可以显示越来越多的细节;第三,使用粒子系统建模的物体是“活的”,也就是说,它们会在一段时间内改变外观。而这种复杂的动力学形式使用基于曲面的建模技术则难以实现。
  • 建模时将物体做成粒子的集合并非新想法。十五年前,最早的电脑磁带游戏将太空飞船的爆炸描绘成充满屏幕的许多光点。尽管在文献中很少提及它们,但在许多三维建模系统中,点源被用作图形数据类型。俄亥俄州的Roger Wilson使用粒子来建模从烟囱中冒出的烟雾。在他的模型中既没有随机控制,也没有动力学。Alvy Ray Smith和Jim Blinn在他们的系列节目《宇宙》(Cosmos)中使用粒子来给恒星消亡建模。Alan Norton使用粒子生成和显示三维分形形状。Jim Blinn讨论过模拟光通过和被粒子层反射的光反射函数。他的技术被用于生成土星环的图片。Blinn并没有解决模糊物体的建模问题,这也是他论文的主题。体积表示法也被认为是曲面表示的可行替代方案。实体建模是体积表示的一种,就如Norm Badler和Joe O’Rourke的《泡泡人》(Bubble-man)的一样。在分形建模中,随机建模的使用将我们的工作和最新的进展联系起来。
  • 第二部分更加详尽地描述了粒子系统的基本框架。第三部分研究了在《星际迷航2:可汗之怒》中粒子系统是怎样用于在“创世纪演示”中生成火,第四部分展现了粒子系统的另外几个应用,第五部分讨论了该领域未来的进一步研究。

2 粒子系统的基本模型

  • 粒子系统是许多微小粒子的集合,它们共同表示一个模糊的物体。在一段时间内,许多粒子将被生成为一个系统、在这个系统内移动和改变外观,最后随着这个系统销毁。
  • 为了在动态演示中计算每一帧,需要进行以下步骤:(1)新粒子被生成到系统内,(2)每个粒子都被分配独立的属性,(3)系统中任何存在时间超过预定寿命的粒子都会被销毁,(4)剩余的粒子根据它们的动力学属性被移动和转化,(5)最后在帧缓存器中渲染活动粒子的图像。粒子系统可通过编程被设定为在每一步执行任何一组指令。由于它是程序性的,所以这种方法可以结合任何描述物体外观或动力学的计算模型。举个例子,粒子的运动和变换能够与一组偏微分方程的解联系在一起,或者粒子的属性能够基于统计力学被分配。因此,我们能利用那些已经在其它科学或工程学科中被开发的模型。
  • 在本文的研究中,我们是用简易的随机过程作为帧生成的每个步骤的程序性要素。为了在粒子系统中控制粒子的形状、外观和动力学特性,模型设计者需要用到一组参数。一般来说,每组参数表明了粒子属性值的范围。我们通常使用平均值和最大方差来指定这些范围。
  • 后续小节更加详尽地描述了粒子系统的基本模型和在我们编写的软件中这些粒子是如何被控制和规定的。

2.1 粒子生成

  • 粒子在系统中以受控随机过程生成。该过程确定在每个时间间隔(给定帧)内进入系统的粒子数。生成的粒子数目很重要,因为它强烈影响模糊物体的密度。
  • 模型设计者可以在下面两种方法中选择一种来控制新粒子的数目。第一种方法是,设计者控制每帧内生成的粒子的平均数量及其方差。在帧f上生成的实际粒子数为:
    NPartsf = MeanPartsf + Rand( ) × VarPartsf
    其中Rand是一个程序过程,它返回一个在-1.0和+1.0之间概率均匀分布的随机数,MeanPartsf是粒子数量的平均数,VarPartsf是粒子数量的方差。
  • 第二种方法是新粒子的数量取决于物体在屏幕上的大小。模型设计者控制每个屏幕单位面积内生成粒子的平均数及其方差。程序化粒子系统可以决定每一个特定帧的视图参数,计算其覆盖的大致区域,并相应地设定新粒子的数量。对应的方程为:
    NPartsf = (MeanPartssaf + Rand( ) × VarPartssaf) x ScreenArea,
    其中MeanPartssa是每单位屏幕面积粒子数的平均值,MeanPartssaf是其方差,ScreenArea则是粒子系统在屏幕上所占的面积。这个方法 控制了粒子系统细节的级别,从而控制渲染其图像所需的时间。举个例子,我们没必要在屏幕上4个像素大小的区域生成100000个粒子。
  • 为了使粒子系统能够在密度上增减,设计者可以随时间去改变每帧生成的粒子的平均数量(即,MeanPartsf和MeanPartssaf是如上所述的帧数函数)。目前,我们使用一个简单的线性函数:
    MeanPartsf = InitialMeanParts + DeltaMeanPartssaf x (f - f0)
    MeanPartssaf= InitialMeanPartssa + DeltaMeanPartssa x ( f - f0),
    其中f是当前帧,f0是粒子系统处于活动状态的第一帧,InitialMeanPartssa表示该第一帧的粒子平均数,VarPartssaf表示其变化率,方差约束量VarPartssaf和VarPartsf目前在所有帧上都是常量。更复杂的二次型、三次型甚至随机变化在均值和方差参数中都很容易添加。
  • 为了控制粒子系统中的粒子生成,设计者指定f0和参数InitialMeanParts、DeltaMeanParts和VarParts,或和参数InitialMeanPartssa、DeltaMeanPartssa和VarPartssa

2.2 粒子属性

  • 对于每个被生成的新粒子,粒子系统必须指定其以下属性值:
  • 初始位置
  • 初始速度(包含速率和方向)
  • 初始大小
  • 初始颜色
  • 初始透明度
  • 形状
  • 寿命
  • 粒子系统的几个参数控制着粒子的初始位置。粒子系统在三维空间内有一个用于定义原点的位置,通过原点绕坐标系旋转的两个角度得出其方向 (球坐标系)。粒子系统也有一个 生成形状,它定义了一个关于其原点的区域,新产生的粒子被随机放置在该区域内。我们已经实现的生成形状有:半径为r的球体,坐标系内xoy平面上的半径为r的圆形,以及坐标系内xoy平面上的长l宽w的矩形。图1展示了一个典型的球形生成形状的粒子系统。基于物理系统或混沌吸引子的更复杂的生成形状已被构思出来但仍未实现。
    (插图)
  • 粒子系统的生成形状也描述了新粒子移动的初始方向。在一个球形生成形状内,粒子从粒子系统的原点向外移动。在圆形或矩形形状中,粒子从x-y平面向上移动,但被允许根据另一个参数——“放射”角度——偏移垂直方向。粒子的初始速度由该公式决定:
    InitialSpeed = MeanSpeed + Rand( ) x VarSpeed,
    其中MeanSpeed和VarSpeed是粒子系统的另外两个参数,它们分别表示平均速度和速度的方差。
  • 为了确定一个粒子的初始颜色,粒子系统需要一个平均颜色和与该颜色的最大偏差。粒子透明度和粒子大小也由平均值和最大变化范围决定。这些方程与上面给出的初速公式类似。
  • 粒子系统有一个用于明确每个被生成粒子的形状的参数。目前已实现的粒子形状有球形、矩形和条纹球形。后者被用于运动态模糊化粒子——一个在给快速移动物体建模时十分重要的特性。我们在2.5小节和3小节更加详细地探讨了条纹粒子。
  • 可能的属性控制参数及其变体的数量是无限的。我们目前呈现的是已经找到的最有用和最有趣的。

2.3 粒子动力学

  • 在粒子系统内的单个粒子在三维空间内随着时间移动,并改变颜色、透明度和尺寸。
  • 将粒子从一帧移动到下一帧(的位置)易如反掌,只需将它的速度矢量加到它的位置矢量上即可。更复杂一些,粒子系统也使用加速度在帧与帧之间修改黎姿的速度。通过这个参数,模型设计师能够模拟重力并让粒子以抛物线轨迹而不是直线轨迹运动。
  • 粒子随着时间的颜色变化是由颜色变化率这一参数所规定的。粒子的透明度和尺寸也是这么被控制的。在我们的实现方案中,这些变化率在粒子系统中的影响对所有粒子而言是全局的,我们也很容易想到将这个参数也做成随机变化的。

2.4 粒子销毁

  • 粒子在被生成时赋予了一个以帧为衡量单位的寿命。随着每一帧被计算,(剩余)寿命也逐渐减少。当粒子的(剩余)寿命减为0时,粒子就被销毁了。
  • 只要粒子对图像没有任何贡献,也可以用其它机制来安排粒子的销毁。如果根据颜色和透明度计算的粒子强度低于指定阈值,则该粒子将被销毁。从其父粒子系统的原点沿指定方向移动的距离超过规定值的粒子也会被销毁。这一机制能够被用于去除在关注区域以外的粒子。

2.5 粒子渲染

  • 一旦一帧内所有粒子的位置和外形参数都被计算了,渲染算法就会生成一张图片。一般的粒子渲染问题与更常见的图元(如多边形和曲面)组成的物体对象的渲染一样复杂。粒子可以在屏幕深度上遮挡其它粒子。它们既能变得透明也能在其它粒子上投射阴影。此外,粒子可以在场景中与基于曲面的建模基元的物体共存,而且这些物体能够和粒子交合。
  • 在我们已有的系统中,有两个假设允许我们简化渲染算法。第一个假设是,我们假设粒子系统不与其它基于曲面的建模基元交合,因此我们的渲染算法只需处理粒子。使用其它技术建模的对象将在渲染后的合成阶段与粒子系统对象合成在一起。为了让粒子系统和其它物体交合或在它们后面,渲染系统将基于在模型坐标空间中定义的剪裁平面使粒子系统图像分为多个子图像,然后在合成阶段将这些子图像与其它图像混合。
  • 另外一个在目前的渲染系统中做出的假设是每个粒子能够被显示为一个点光源。借助这个假设,确定隐藏曲面不再是一个问题。每个粒子都向它覆盖的像素增加一点光强。一个在其它粒子后面的粒子不再被遮挡,而是给其覆盖的像素添加更多光强。添加的光强及其颜色取决于粒子的透明度和颜色。目前,增加光强的数值不再取决于粒子间距和观察位置,但这些是简单的拓展。观察到的变化、粒子的尺寸和它的形状决定了哪个像素要被遮挡。为了防止时间混叠和残影(的出现),所有粒子的形状都进行反锯齿绘制处理。许多粒子的光可能叠加到一个像素上,因此渲染算法固定红、绿、蓝通道的强度值固定在帧缓存器的最大强度值处,而不是让它们任意溢出。
  • 借助上述算法和假设,我们不再需要给粒子排序,它们以任意生成顺序渲染到帧缓存器。阴影不再是问题,因为粒子不再反射光而是发光。

2.6 粒子层级

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022 Daniel Qi
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信