上下文
上下文是 Visual Effect Graph 处理(垂直)工作流程并确定粒子生成及模拟方式的主要元素。您在图形上组织上下文的方式定义了处理工作流的操作顺序。有关处理工作流程的信息,请参阅 Visual Effect Graph 逻辑。每个上下文定义一个计算阶段。例如,上下文可以:
- 计算效果产生的粒子数。
- 新建新的粒子。
- 更新所有活粒子。
上下文按顺序相互连接以定义粒子的生命周期。在图形创建新粒子后,Initialize 上下文可以连接到 Update Particle 上下文以模拟每个粒子。此外,Initialize 上下文可以改为直接连接到 Output Particle 上下文,在不模拟任何行为的情况下渲染粒子。
创建和连接上下文
上下文是一种 图形元素,因此要创建一个上下文,请参阅添加图形元素。
上下文以垂直、线性的顺序相互连接。为了实现这一点,它们使用流程插槽。根据上下文定义的粒子生命周期的具体部分,上下文可能在其顶部、底部或两个位置都设有流程插槽。
配置上下文
要更改上下文的行为,请在节点 UI 或检查器中调整其设置。
某些设置还会更改上下文的外观。例如在一个 Quad Output 上下文中,如果您将 UV 模式设置为 FlipbookMotionBlend,Unity 会将以下额外属性添加到上下文标头中:Flipbook Size、Motion Vector Map 和 Motion Vector Scale。
流程兼容性
并非所有上下文都可以相互连接。为了保持一致的工作流程,以下规则适用:
- 上下文仅连接到兼容的输入/输出数据类型。 事件 可以连接到一个或多个事件或 **Initialize* 上下文。 Initialize* 上下文可以有一个或多个 **Initialize 源,或一个或多个 GPUSpawnEvent 源,但这些数据类型是互斥的。
- 只有一个 Initialize 上下文可以连接到一个 Update 上下文。
- 您可以将 Output 上下文连接到 Initialize 或 Update 上下文。
有关上下文兼容性的细分,请参阅下表。
上下文 | 输入数据类型 | 输出数据类型 | 具体备注 |
---|---|---|---|
Event | None | SpawnEvent (1+) | None |
Spawn | SpawnEvent (1+) | SpawnEvent (1+) | 有两个输入流程插槽,分别用于启动和停止 Spawn 上下文。 |
GPU Event | None | SpawnEvent | 到 Initialize 上下文的输出 |
Output Event | SpawnEvent (1+) | 将 CPU SpawnEvent 输出回 Visual Effect 组件。 | |
Initialize | SpawnEvent (1+) 或 GPUSpawnEvent (1+) | Particle (1) | 输入类型是 SpawnEvent 或 GPUSpawnEvent。这些输入类型是互斥的。 可以输出到 Particle Update 或 Particle Output。 |
Update | Particle (1) | Particle (1+) | 可以输出到 Particle Update 或 Particle Output。 |
Particle Output | Particle (1) | None | 可以有来自 Initialize 或 Update 上下文的输入。 没有输出。 |
Static Mesh Output | None | None | 独立上下文。 |
上下文类型概述
本节介绍每种上下文的所有常见设置。
Event
Event 上下文仅显示其名称,即一个字符串。要触发 Event 上下文并从中激活工作流,请在 组件 API 中使用该 Event 上下文的名称。有关如何执行此操作的信息,请参阅 发送事件。
Spawn
Spawn 上下文是具有三种状态的独立系统:Running、Idle 和 Waiting。
Looping* (Running):此状态意味着 Unity 计算上下文中的代码块并生成新的粒子。 *Finished** (Idle):此状态意味着生成机器已关闭,并且不计算上下文中的代码块或生成粒子。
- DelayingBeforeLoop/DelayingAfterLoop (Waiting):此状态在您可以指定的延迟时间期间暂停上下文。延迟之后,上下文恢复,计算上下文中的代码块,并生成粒子。
要自定义 Spawn 上下文,您可以向其添加兼容的 Blocks。有关 Spawn 上下文 API 的信息,请参阅 脚本参考。
启用和禁用
Spawn 上下文公开了两个 流程插槽:Start 和 Stop:
- Start 输入重置/启动 Spawn 上下文。如果不为此流程插槽连接任何对象,它会隐式地使用 OnPlay 事件。Start 使用多次与使用一次的效果相同。
- Stop 输入停止 Spawn 系统。如果不为此流程插槽连接任何对象,它会隐式地使用 OnStop 事件。
循环和延迟
每个 Spawn 上下文都包含一个状态,用于确定该上下文何时生成粒子。
- Spawn 上下文在特定持续时间的循环中发射粒子。这意味着当每个循环开始时,内部生成时间都会重置。默认情况下,持续时间为 infinite,但您可以更改此设置。
设置循环模式:- 在图形中选择 Spawn 上下文。
- 在检查器中,单击 Loop Duration 下拉菜单。
- 从列表中,单击 Infinite、Constant 或 Random 中的任何一个。
- Spawn 上下文可以执行一次、多次或无限次循环。
设置循环次数:- 在图形中选择 Spawn 上下文。
- 在检查器中,单击 Loop 下拉菜单。
- 从列表中,单击 Infinite、Constant 或 Random 中的任何一个。
- Spawn 上下文可以在每个循环之前和之后执行延迟。在延迟期间,生成时间正常流逝,但 Spawn 上下文不会生成任何粒子。
要设置延迟持续时间:- 在图形中选择 Spawn 上下文。
- 在检查器中,单击 Delay Before Loop 或 Delay After Loop 下拉菜单。
- 从列表中,单击 None、Constant 或 Random 中的任何一个。
如果将 Loop Duration、Loop、Delay Before Loop 或 Delay After Loop 设置为 Constant 或 Random,Spawn 上下文会在其标头中显示额外的属性以控制每种行为。为了评估您设置的值,Unity 使用以下规则:
- 如果设置,Unity 会在该上下文的 Start 流程输入触发时评估 Loop Count。
- 如果设置,Unity 会在每次开始循环时评估 Loop Duration。
- 如果设置,Unity 会在每次延迟开始时评估 Loop Before/After Delay。
有关循环和延迟系统的可视化,请参见下图:
GPU Event
GPU Event 上下文是实验性上下文,它将输入连接到来自其他系统的输出 GPU 事件。它们在两个方面与普通的 Event 上下文不同:
- GPU 计算 GPU 事件,CPU 计算普通事件。
- 您无法使用代码块自定义 GPU Event 上下文。
备注:当您将 Spawn 事件连接到 Initialize 上下文时,请注意 GPU Spawn 事件和普通 Spawn 事件是互斥的。同一时间,您只能将一种类型的 Spawn 事件连接到 Initialize 上下文。
Initialize
Initialize 上下文基于 SpawnEvent 数据生成新粒子,Unity 根据 Events、Spawn 上下文或 GPU Event 上下文计算这些数据。
例如:如果 Spawn 上下文声明该效果应该创建 200 个新粒子,则 Initialize 上下文会为所有 200 个新粒子处理其代码块。
要自定义 Initialize 上下文,您可以向其添加兼容的 Blocks。
Initialize 上下文是新系统的入口点。因此,它们在标头中显示以下信息和配置详细信息:
属性/设置 | 描述 |
---|---|
Bounds(属性) | 设置系统的包围盒。 |
Capacity(设置) | 控制系统的分配计数。 |
Update
Update 上下文基于 Particle 数据更新系统中的所有活粒子,Unity 从 Initialize 和 Update 上下文计算这些数据。Unity 执行 Update 上下文,从而更新每个粒子、每一帧。
Particle Update 上下文还会自动处理粒子的一些计算,以简化常见的编辑任务。
要自定义 Update 上下文,您可以向其添加兼容的 Blocks。
设置 | 描述 |
---|---|
Update Position | 指定 Unity 是否对粒子应用速度积分。启用后,Unity 将简单的欧拉速度积分应用于每帧每个粒子的位置。禁用时,Unity 不会应用任何速度积分。 |
Update Rotation | 指定 Unity 是否对粒子应用角度积分。启用后,Unity 将简单的欧拉积分应用于每帧每个粒子的旋转。禁用时,Unity 不会应用任何角度积分。 |
Age Particles | 如果上下文使用 Age 属性,这将控制 Update 上下文是否使粒子随时间老化。 |
Reap Particles | 如果上下文使用 Age 和 Lifetime 属性,这将控制 Update 上下文是否在粒子的年龄大于其生命周期时移除粒子。 |
Output
Output 上下文渲染系统中的粒子。它们根据来自同一系统中 Initialize 和 Update 上下文的粒子数据,使用不同模式和设置渲染粒子。然后,它将配置渲染为特定的原始形状。
要自定义 Output 上下文,您可以向其添加兼容的 Blocks。