Niagara概览

本页将对虚幻引擎4中的Niagara VFX系统进行概述。

Windows
MacOS
Linux

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

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

Niagara核心组件

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

  • 系统

  • 发射器

  • 模块

  • 参数

系统

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。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback