图形与动画 您所在的位置:网站首页 粒子碰撞公式是什么 图形与动画

图形与动画

2024-01-21 05:12| 来源: 网络整理| 查看: 265

图形与动画——什么是粒子系统 目录 为什么要使用粒子系统粒子的属性粒子的层次结构 为什么使用粒子系统?🤔

个人理解的粒子系统:用于表示复杂、无结构实体的物体时,所用到的以单个粒子为基础单位,多个粒子共同构成的表示系统

对于物体的三维表示方法有很多,比如说网格模型、结构实体表示法(交并补)、扫描表示法等等。但是这些都是难以去表示一朵云、烟、水等复杂的三维物体。为什么呢?因为这些物体没有具体的结构,没有具体、清晰并且准确的表面;组成这些物体的物理结构往往是粒子,并且这些粒子的运动是随机的、表面是模糊的、不确定的。并且他们(云、烟等)也不是刚性物体,在描述下落、扩散、扰动(例如风吹散云)的时候,不能用常规的物理规律来描述他们的运动。

而粒子系统的诞生就是用来解决这些问题的。首先,一个物体(云烟)的实际物理模型,可以用多个粒子来表示,构成的表面是不固定的,最终可以考虑用多个粒子组成的粒子云来描述整体形态。其次,因为每个粒子的运动是不稳定(也可以说是随机的)、运动也是独立的,可以用随机函数来描述粒子的运动。最后,考虑实际情况,例如一团火焰,或者一团烟,总是会有生成的起点和消散的边界,因此我们可以考虑粒子拥有生命周期,整体会随着粒子的生成和死亡,产生生成的起点和消散的边界。

粒子的程序性是十分重要的,程序性意味着每个粒子都大致遵循着某一个固定的函数,而这个函数中又有着随机的变量来赋予给每个特定的粒子,这样使得每个粒子的运动相互独立,又有着大致相同的轨迹。其次,粒子系统的模型对象是“活动”的,这样他们在一段时间内改变形式(例如整个粒子系统的表面的变化),只需要修改其粒子的函数表达式即可。

粒子的属性 粒子的基本模型

粒子系统是由多个粒子构成的 ,每个粒子的运动都遵循一定的序列:

新粒子的生成每个粒子的运动轨迹,或者说其运动的函数系统中粒子对其他粒子的影响,粒子间的关系(即就是粒子间是如何互相影响的)粒子何时消失(不显示),也就是粒子的死亡在一个帧缓存中粒子应当如何表示 粒子的生成

粒子可以通过一个随机函数来生成,这个函数应当规定,单位时间进入新的粒子系统的粒子数量,也可以理解为,单位时间内,粒子系统中,某一帧的新粒子的产生是怎么样的,newParticle是新粒子数,meanParticle是粒子平均数目,varParticle是其方差。

在这里插入图片描述

还有第二种方法,新粒子的数量取决与物体的屏幕大小: 在这里插入图片描述

其实就是上面的公式乘以屏幕的大小,这样可以控制渲染的区域,也就减少了渲染所需要的时间,因为我们只需要渲染可视区域内的粒子数目。

粒子的运动

粒子的运动需要我们确定以下几个属性的值:

初始位置

初始速度

加速度

颜色、透明度

形状

生命周期

粒子的基础属性

我们可以设置粒子系统的生成粒子的初始位置,粒子在三维空间内有一个确定的起源位置。当然粒子系统也有一个生成范围区域,在这个区域内,生成的新粒子将会被随机排布。其次,粒子系统的生成形状也描述了新粒子的初始运动方向,比如表现爆炸的粒子系统,生成粒子的初始运动方向将会在一个球形的区域内从起源向着外围运动。

描述粒子初始运动速度的一般公式为:

在这里插入图片描述

其中,平均速度(MeanSpeed)和变化速度(VarSpeed,可以理解为应用到不同粒子上的方差)是粒子系统的另外两个参数。

为了确定一个粒子的初始颜色,一个粒子系统被赋予一个平均颜色,并给出一个介于0到1之间的随机数乘以该颜色的最大偏差。粒子透明度和粒子大小也由平均值和最大变化决定。对于初速度,方程与上面给出的方程相似。

在这里插入图片描述

在这里插入图片描述

粒子系统有一个参数,指定它产生的每个粒子的形状。目前实现的粒子形状有球形、矩形和条纹球形。后者用于运动模糊粒子——在建模快速移动的物体时,这是一个非常重要的特性。

当然,粒子的属性是非常复杂的,并且粒子的变体以及其控制参数也是不计其数。正是因为有这些函数来控制新生成的粒子,我们才能随时间改变粒子的属性。

粒子的生命周期

粒子的属性我们已经知道如何描述了,我们还需要考虑粒子的生命周期。粒子的生命周期是由帧数来衡量的,当每一帧被生成时,粒子的生命周期将会递减,当一个粒子的寿命达到零的时候,它将“死亡”(消失)。当然还有另外一个需要考虑的机制,也即是主动的终结粒子的生命周期,当不需要再渲染该粒子时(粒子处于视口之外),我们将终结他的生命周期来减少渲染上的负担。

粒子的渲染

一旦计算出一帧所有粒子的位置和属性参数,渲染算法就会生成一张图片。粒子渲染问题,和渲染由更常见的图形基本元组构成的物体一样复杂,比如渲染多边形和曲面,我们可能会考虑当前表面的反射光对其他表面的影响。同样,粒子也可以让那些,在它后面的其他粒子,在屏幕深度上变得模糊。同样它们可以是透明的,也可以在其他粒子上投下阴影。此外,粒子可以与基于三角形构建的原始模型对象共存,并且这些模型对象可以与粒子相互影响。

简化渲染的方案

在我们现有的系统中,有两个理论可以简化渲染算法。

首先第一个假设是,我们假设粒子系统不与其他基于图形基本元组的原始模型相交,因此我们的渲染算法只需要处理粒子。在预渲染(post rendering)的合成阶段,使用其他建模技术生成的对象,与粒子系统对象一起合成。当粒子系统与其他物体相交或在其他物体的后面时,渲染系统会根据整体模型,在坐标空间中定义多个剪切平面,这个平面将粒子系统的图像分割成子图像。这些子图像最后在合成阶段与其他图像结合,构成完整图像。

在我们当前的渲染系统中做的另一个假设是,每个粒子都可以显示为一个点光源。有了这个假设,那么如何确定遮挡的表面,不再是一个问题。因为每个粒子都给它所覆盖的像素增加了一点光。在另一个粒子后面的一个粒子没有被遮挡,而是为被遮挡的像素增加了更多的光。添加的光量和它的颜色取决于粒子的透明度和颜色。通过计算粒子的大小,和它的形状,我们可以确定哪些像素被覆盖。在这个假设中所有的粒子形状都是抗锯齿的(这块没读懂原文,其中之一的原因是防止频闪)。多个粒子将影响一个像素中光亮的强度和颜色,而渲染算法将单独的红、绿、蓝强度固定在帧缓冲区的最大强度值上,而不是让它们互相影响。

在此算法和假设下,不需要对粒子进行排序。它们按照生成的顺序被渲染到帧缓冲区中。而且在这种假设中,我们将不再考虑阴影,因为粒子不是反射光而是发射光。

粒子的层次结构

在粒子系统中,我们可以考虑一个机制,生成。当创建一个粒子系统时,其中的粒子本身可以构成一个粒子系统的父节点。当父粒子系统发生变换时,它的所有后代粒子系统及其粒子也会发生变换。用父粒子系统的平均颜色和方差来选择子代粒子系统的平均颜色和方差。每帧产生的新粒子系统的数量是基于父粒子的生成速率。父节点的其他参数同样会影响其子节点的参数。因此我们会用树结构来构建粒子的层次结构。

层次结构,可以用来对由许多粒子系统组成的复杂对象模型,进行全局控制。例如,一个云可能由许多粒子系统组成,每一个都代表一个水粒子的翻腾区域。一个父粒子系统可以将这些集合在一起,并控制受风和地形影响的云的全球运动和外观。

用来对由许多粒子系统组成的复杂对象模型,进行全局控制。例如,一个云可能由许多粒子系统组成,每一个都代表一个水粒子的翻腾区域。一个父粒子系统可以将这些集合在一起,并控制受风和地形影响的云的全球运动和外观。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有