Niagara概览

本文会对虚幻引擎4中的Niagara VFX系统进行大致介绍。

Choose your operating system:

Windows

macOS

Linux

Cascade和Niagara都可用于在虚幻引擎(UE4)内创建视觉效果(VFX),但从创建和调整VFX的方式来看,Niagara与Cascade有很大不同。

Niagara是虚幻引擎的次世代VFX系统。利用Niagara,技术美术师能够自行创建额外功能,而无需程序员的协助。我们将系统设计得具有更高适应性和灵活性,同时使其易用、易理解。

Niagara核心组件

Niagara VFX系统共有四大核心组件:

  • 系统(Systems)

  • 发射器(Emitters)

  • 模块(Modules)

  • 参数(Parameters)

系统

Niagara系统包含多个发射器,结合后可产生一种效果。例如制作烟花效果,可能需要多次爆发。为此需创建多个发射器,并放置在名为Firework的Niagara系统中。 在Niagara系统编辑器中,可在系统中修改或覆盖发射器或模块内的任何内容。系统编辑器中的 时间轴(Timeline) 面板将显示系统包含的发射器,并可用于管理此类发射器。 发射器编辑器和系统编辑器大致相同。欲了解系统编辑器界面的详情,参见 Niagara系统和发射器编辑器参考 。系统编辑器中不同作用的UI元素将各章节中讲解。

发射器

Niagara发射器包含模块。其用途单一,但可重复使用。Niagara发射器的一大独特之处在于,可使用模块堆栈创建模拟,并在同一发射器中以多种方式进行渲染。继续以烟花效果为例,可创建一个发射器,其中包含用于火花的sprite渲染器,和用于火花之后流光效果的条带渲染器。 欲了解Niagara发射器编辑器界面的详情,参见 Niagara系统和发射器编辑器参考

模块

Niagara模块是Niagara VFX的基础层级。模块等同于Cascade的行为。模块将与一般数据通信、封装行为,与其他模块堆栈,并写入函数。 使用高级着色语言(HLSL)编译模块,但可用节点在图表中进行可视化编译。可创建函数,包括输入,或写入到值或参数图。甚至可使用图表中的 CustomHLSL 节点写入HLSL内联代码。 欲了解Niagara发射器中可用默认模块的详情,参见 Niagara系统和发射器模块参考

参考和参数类型

参数 是Niagara模拟中的数据的抽象表现。将参数 类型 分配到参数,以定义参数代表的数据。共有四种参数:

  • 图元(Primitive) :此类参数定义不同精度和通道宽度的数值数据。

  • 枚举(Enum) :此类参数定义一组固定的指定值,并取其中一个指定值。

  • 结构体(Struct) :此类参数定义一组图元和枚举类型的组合。

  • 数据接口(Data Interfaces) :此类参数定义从外部数据源中提供数据的函数。此可为UE4其他部分中的数据,或外部应用程序中的数据。

如需向发射器添加自定义模块,请点击 加号 按钮( + )并选择 直接设置新参数或现有参数(Set new or existing parameter directly) 。这会在堆栈中添加一个 设置参数 模块。你可以点击 设置参数(Set Parameter) 模块中的 加号 按钮( + ),然后选择 添加参数(Add Parameter) 来设置现有参数,或者选择 新建参数(Create New Parameter) 来设置新参数。欲了解各类发射器模块的详情,参见 Niagara系统和发射器模块参考

Niagara堆栈模型和堆栈组

Niagara中的粒子模拟采用 堆栈 的形式运行。模拟从堆栈顶部流向底部,依次执行名为 模块 的可编程代码块。重要的是,每个模块都会被分配到一个 分组 中,该 分组 会描述该模块的执行时间。详情请参阅 Niagara关键概念 以及 Niagara系统和发射器模块参考

模板和向导

首次创建Niagara发射器或Niagara系统时将显示对话框,包含选择要创建发射器或系统种类的数个选项。其中一项用于选择模板。此类模板基于部分常用基本效果,并且已经包含各种模块。 可更改模板中的参数。可添加、修改或删除模块。在系统模板中,还可添加、修改或删除发射器。模板只是用来启发创造性,并提供部分即刻使用的东西。有关Niagara编辑器UI的更多详情,请参阅 Niagara编辑器UI参考

系统向导

系统向导为新建系统提供了以下选项:

  • 从所选发射器新建系统(New system from selected emitters) :如果你选择此选项并单击 下一步(Next) ,则会列出所有可用的发射器。此列表既包括项目中的现有发射器,也包括模板发射器。选择你希望包括在新系统中的发射器,并单击绿色 加号(Plus sign) + )图标以添加它们。然后,单击 完成(Finish) 以创建系统。如果你选择现有发射器,则系统将从这些发射器继承。如果你选择模板发射器,则系统将不会继承任何内容。此外,模板发射器是一个实例,该实例可以仅位于系统本地,也可以另存为单独的发射器资产。

点击查看大图。

  • 从模板新建系统(New system from template) :如果你选择此选项并单击 下一步(Next) ,则你可以从代表几种常用效果系统的模板列表中进行选择。与发射器模板一样,此列表可以由美术主管或创意总监指定。如果你刚接触UE4,此选项可以帮助你了解特效系统是如何在Niagara中创建的。

点击查看大图。

  • 复制现有系统(Copy existing system) :如果你选择此选项并单击 下一步(Next) ,则会列出所有现有发射器。选择其中一个进行复制,然后单击 完成(Finish)

点击查看大图。

  • 创建空系统(Create empty system) :如果你选择此选项,则系统不会包含任何发射器或发射器模板。若你想要创建于其他系统完全不同的新系统,使用此选项。

点击查看大图。

发射器向导

发射器向导提供以下选项以便新建发射器:

  • 从模板新建发射器(New emitter from a template) :若选择此选项,即可从显示数种常用效果的模板列表中进行选择。在大型开发工作室中,美术主管或创意总监可以策展模板列表,从而确保将公司的最佳实践融入模板中。对于刚接触UE4的新手来说,这些模板也是良好的起点。

点击查看大图。

  • 从现有发射器继承(Inherit from an existing emitter) :若选择此选项,新建的发射器会继承现有发射器属性。此选项使新发射器成为所选的现有发射器的子项。若需要很多具有某些共同属性的发射器,这是个很好的选项。可对父级发射器进行更改,所有子级发射器都会相应做出变化。

点击查看大图。

  • 复制现有发射器(Copy existing emitter) :若选择此选项,你可以为现有的发射器新建一个副本。如果你需要创建多个类似的发射器,就可以使用该选项。选择此选项后单击下一步,随后会列出所有可用的发射器。然后,你可以选择要复制哪一个发射器。

Click image for full size.

Niagara VFX工作流程

创建发射器

创建发射器时,你需要将模块放入堆栈,以便定义外观效果以及要采取的操作等。在 发射器生成(Emitter Spawn) 组中,放置的模块用于定义发射器首次生成时的效果。在 发射器更新(Emitter Update) 组中,放置的模块用于随时间持续影响发射器。在 粒子生成(Particle Spawn) 组中,放置的模块用于定义发射器中生成粒子时的效果。在 粒子更新(Particle Update) 组中,放置的模块用于随时间持续影响粒子。在 事件处理函数(Event Handlers) 组中,你可以在一个或多个用于定义特定数据的发射器中创建"生成"事件。然后你可以在其他发射器中创建监听事件,这些发射器会根据生成的事件触发特定行为。

创建系统

你可以将各个单独的发射器组成一个系统,从而合力表现出你想要的整体视觉效果。有些模块是特定于系统的;当你编辑系统而非发射器时,编辑器的部分元素会展现出不同行为。在Niagara编辑器中编辑系统时,你可以更改或覆盖包含在系统中的发射器的模块。你还可利用Niagara编辑器的时间轴(Timeline)面板来管理系统中所包含的发射器的计时。

创建模块

模块函数流程

模块函数流程

  • 模块会在一个临时命名空间累积,然后你就能将更多模块堆栈在一起。只要它们对同一属性产生效果,这些模块就会正确堆栈和累积。

  • 写入模块时可用以下函数:

    • 布尔运算符

    • 数学表达式

    • 三角函数表达式

    • 自定义函数

    • 使样板函数易用的节点

  • 创建模块后,任何人均可使用。

  • 模块都使用HLSL。逻辑流程如下:

HLSL逻辑流程

注意,你所创建的所有模块、发射器和系统都会消耗资源。为了节省资源,提升性能,请查看Niagara中已包含的模块以确认是否能在不创建新模块的情况下达成目标。 动态输入 可以在这里获得奇效。

Niagara范例

继承

  • 如使用扁平层级,则无法有效定位和使用库中现有资产,将导致用户重复创建此类资产。重复工作不仅效率低下,还会增加开销。

  • 层级继承将提高可发现性,还可高效重复使用现有资产。

  • 系统中的子发射器可覆盖继承内容。

  • 可添加模块,或者模块也可恢复到父值。

  • 以上内容同样适用于发射器级别的行为,例如生成、生命周期、循环、迸发等。

动态输入

  • 动态输入的构建方式与模块的相同。

  • 动态输入可向用户提供无限继承扩展能力。

  • 动态输入作用于值类型,而非参数类型。

  • 图表逻辑和面向用户的值可驱动任何值。

  • 动态输入与创建模块具有几乎类似的功能,但前者无需实际新建模块即可放入堆栈。

  • 可以通过使用并链接动态输入,以多种方式修改及自定义现有模块;这可以防止模块膨胀并提升性能。

Micro表达式

  • 内联值均可转换为HLSL表达式片段。

  • 用户可访问粒子、发射器或系统中的变量以及HLSL或VM函数。

  • 这点十分适用于无需新模块的一次性功能。

事件

  • 事件是元素(如粒子、发射器和系统)间的一种通信方式。

  • 事件可为任何类型的数据,打包为负载(如结构体)并发送。之后其他元素可监听此事件并进行处理。

  • 可用选项:

    • 利用Particle.ID直接在粒子上运行事件。

    • 在系统中所有粒子上运行事件。

    • 设置生成粒子以响应事件,并对此类粒子进行处理。

  • 事件是图表中的特殊节点(结构体)。使用事件节点的方式:

    • 命名事件。

    • 向其添加需要的数据。

    • 将事件处理函数添加到发射器堆栈中。

    • 设置事件处理函数的选项。

  • 具有事件的单独执行堆栈。

    • 你可以将详细图表逻辑放入事件处理函数。

    • 你可以设置一个带有复杂逻辑、完整的粒子系统,之后事件触发时将发生单独行为集。

数据接口

  • 具有可扩展系统,以便访问任意数据。

  • 任意数据包括网格体数据、音频、外部DDC信息、代码对象和文本容器。

  • 数据接口可编写为插件,以便之后获得更好可扩展性。

  • 用户可利用骨骼网格体数据接口获取与骨骼网格体有关的数据。

Houdini

  • 使用Houdini,你可计算分割点、生成位置、撞击位置、撞击速度、法线等。

  • 之后可将Houdini中的数据导出为常见的容器格式(CSV)。

  • 可在UE4项目中将此CSV导入Niagara。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消