GPUSprites 类型数据

GPUSprites.png

GPUSprite 类型数据模块支持在 GPU 上模拟粒子。传统 CPU 系统允许在一帧内存在数千个粒子。利用 GPU 模拟可对成千上万个粒子进行高效模拟和渲染。

GPU 粒子不支持传统 CPU 粒子的所有功能,但它们拥有一些独特功能,可使效率得到提高。CPU 仍然将发射粒子,以确定生成粒子的位置、时间和数量。CPU 也可使用传统 CPU 粒子方法对尺寸和速度等初始属性进行指定。

将“GPU Sprites”类型数据模块添加至发射器,以在级联中授权 GPU 粒子 Sprites。在级联中授权其他特效后,在发射器中添加和编辑模块对模拟参数进行修改。模拟随属性改变实时更新。

属性

属性 描述

Beam

Camera Motion Blur Amount 基于摄像机动态模糊设置 sprites 的拉伸程度。

支持属性

GPU 粒子支持下列属性:

Initial Location
  • 在生成时确定。

  • 支持 CPU 粒子可用的多数方法。

Initial Velocity
  • 在生成时确定。

  • 可从生成源的运动继承速度。

Acceleration
  • 所有粒子的常量,跨越发射器生命周期。

Drag
  • 生成时决定的初始阻力系数,每个粒子皆有不同。

  • 可使用曲线在粒子生命周期中对其进行调整。所有粒子共享该曲线。

Lifetime
  • 生成时决定的生命周期,每个粒子皆有不同。

Color
  • 生成时决定的初始颜色。所有粒子的初始颜色皆相同。

  • 可使用曲线在粒子生命周期中对其进行调整。所有粒子共享该曲线。

Size
  • 生成时决定的初始尺寸,每个粒子皆有不同。

  • 可使用曲线在粒子生命周期中对其进行调整。所有粒子共享该曲线。

Rotation
  • 生成时决定的初始旋转,每个粒子皆有不同。

RotationRate
  • 生成时决定的旋转速率,每个粒子皆有不同。

SubImageIndex
  • 子图像索引在粒子生命周期中将存在变化,由一条曲线定义。

  • 所有粒子共享该曲线。

重要概念

在您的场景中使用 GPU 粒子时,理解下列关键概念至关重要。

运动

粒子运动以牛顿动态力学为基准。在每个时间步长中,粒子位置和速度基于其当前位置、当前速度、恒加速度和阻力进行整合。

GPU 粒子虽然在细节上和传统 CPU 粒子不同,但其仍然支持轨道运动。从概念而言,粒子移动犹如 Sprite 围绕粒子实际位置进行轨迹运动,由一个变化量抵消。利用轨道可向粒子添加额外的细节运动。

矢量场

GPU粒子特性的最有趣之处,除了高效外,还有矢量场。 矢量场就是对粒子运动产生影响的统一的矢量网格。 矢量场被作为Actors放置在世界中(全局矢量场),而且可以像其它Actor一样被平移,旋转和缩放。 它们是动态的,而且在任何时候都可被移动。 矢量场也可放置在Cascade内(本地矢量场),这样它对粒子的影响就被限制在其相关的发射器中。 当粒子进入矢量场的边界时,粒子的运动会受矢量场影响。当粒子离开该边界时,矢量场对粒子的影响消失。

默认情况下,矢量场会对其中的粒子施加一个力。 矢量场同时还有一个叫"紧密性"的参数。 这个参数控制了粒子跟随场中矢量的紧密程度。 当该值被设置为1,粒子会直接读取矢量场速度,然后完全跟随矢量场来运动。

静态矢量场指恒定不变的矢量网格所在的场。 这些场可以从Maya中导出并以立体贴图的形式导入。 静态场占用资源很少,可以用来对粒子添加有趣的运动,特别是对场自身的运动添加动画效果。

另外,矢量场可以从2D图像中重建。 本例中,我们可以导入一个犹如法线贴图的图像并将其围绕该空间挤压或旋转来重建立体贴图。 除了重建外,可以添加静态矢量场,这样可以添加一些噪点和随机性。 另外,2D图像可以通过在atlas贴图中存储单独帧来添加动画。 这样做可以让您在离线的状态下执行流体模拟,并以很少的系统性能来实现对粒子运动的实时重建。

性能

GPU 粒子的 CPU 消耗由粒子生成所主导。因粒子以传统 CPU 粒子的方式在 CPU 上生成,所以性能特征十分相似。

粒子的 GPU 消耗主要由粒子数量决定。少数功能在现有消耗外为 GPU 粒子增加了额外消耗。大部分 GPU 消耗可归因于分类和渲染。分类功能为可选项,粒子发射器需要时启用即可。渲染通常由填充率所主导。粒子材质上的指令数量和粒子总量均有助于减小粒子尺寸。粒子非常小时,渲染由顶点消耗所主导。在此情况下,减少粒子数量是降低消耗的唯一方法。

模拟消耗将随重叠发射器的矢量场数量变化。因此,减少重叠矢量场数量有助于降低模拟消耗。