矢量场

概述

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

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

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

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

全局矢量场

全局矢量场,如前面所述,可以作为Actor被放置到关卡中。 但是,它们无法从 内容浏览器 中被拖曳出来。 为能在关卡中设置矢量场,我们需要添加一个矢量场空间Actor,我们还需要合适的矢量场资源来与其关联。

矢量场空间Actors

矢量场空间Actor不是传统意义上的空间。 如需创建,您可以在类浏览器中搜寻矢量场空间并将其拖曳到关卡中。 然后,通过Actor的属性指派来自 内容浏览器 的矢量场。 一旦添加完成,场可以被放置,旋转,并缩放。

VFScaled.png

任何包含全局矢量场模块 的GPU平面粒子系统都可以使用此全局矢量场。

GlobalVectorFieldsSystem.png

GameModeVFV.png

在这张图片中,仅位于发射器空间下半部分的粒子正与矢量场空间相交。

本地矢量场

本地矢量场与全局矢量场相反,是完全存在于粒子系统内的而不是放置在世界中的矢量场。 这表示本地矢量场仅能影响它们所分配到的粒子发射器,而全局矢量场可以影响任意拥有全局矢量场模块 的粒子系统。

本地矢量场通过本地矢量场模块 来添加。

LocalVectorField.png