使用机器学习变形器

使用虚幻引擎中的机器学习变形器,让你的蒙皮角色实现实时变形。

Choose your operating system:

Windows

macOS

Linux

为角色创建准确的非线性变形器系统可能是一个复杂而且成本高昂的过程,尤其是在实时游戏引擎中。你可以改用虚幻引擎中的 机器学习(ML)变形器 ,它能近似模拟可以在外部捕获的所有复杂变形模型,大幅提高游戏内角色的质量。

ML变形器在内部利用虚幻引擎的神经网络推理(NNI)系统以及变形器图表系统,使所有内容保持在GPU上。该系统还随附适用于Maya的插件,可帮助你生成训练数据。然后,该数据会导出为FBX和Alembic文件,以便训练你的ML变形器资产。

本文档概述了ML变形器的操作流程。

先决条件

  • ML变形器是一种插件,必须先启用才能使用。在虚幻引擎菜单中找到 编辑(Edit)> 插件(Plugins),找到 动画(Animation) 分段中的 MLDeformer 并将其启用。你需要重启编辑器,此更改才能生效。

    mldeformer插件

  • ML变形器要求你对工作流程的一部分使用 Autodesk Maya

  • 你在虚幻引擎和Autodesk Maya中都已经导入了一个蒙皮角色(在引擎中作为骨骼网格体导入)。

Autodesk Maya插件设置

你需要下载并安装 ML变形器 - Maya数据生成插件(ML Deformer Data Generation Maya Plugin)。为此,首先找到ML变形器虚幻商城页面,并下载插件。

从虚幻商城下载mldeformer

安装插件后,它将位于虚幻引擎安装目录的 Plugins 文件夹中。默认情况下,它位于以下路径:

  …\Engine\Plugins\Marketplace\MayaMLDeformer\Content\MayaMLDeformer.zip

MayaMLDeformer.zip 解压缩到 C:\Users\username\Documents\maya\modules 。如果 modules 文件夹不存在,你可以创建它。

maya插件安装位置

对Mac用户来说,插件位于 /Users/Shared/Autodesk/modules/maya

现在,当你打开Autodesk Maya时,应该会在主菜单栏中看到 UE MLDeformer

maya中的UE MLDeformer菜单

在Maya中训练数据生成

ML变形器插件为角色创建训练数据的方法是,在骨骼上设置流程性关键帧,这些关键帧将为机器学习算法生成有用的数据集。要开始训练数据生成过程,你必须首先打开该工具。

在Maya的主菜单栏中,点击 虚幻引擎机器学习变形器(UE ML Deformer)> 数据生成器(Data Generator) ,这将打开 训练数据生成设置(Training Data Generation Setup) 窗口。

在maya中打开ml变形器

你还要在Maya场景中导入或打开你的蒙皮角色。此示例中使用了基本二头肌模型。

在maya中导入网格体进行变形训练

添加骨骼参数

为了训练关节,你必须添加要修改的一系列节点和属性,以及这些属性的可用值范围。

在Maya中选择你想添加的关节,然后点击 训练数据生成设置(Training Data Generation Setup) 窗口的 参数(Parameters) 分段中的 添加 (+)(Add (+))

ml变形器骨骼参数

这将打开 添加参数(Add Parameters) 窗口,你可以在其中进一步优化你想在训练中使用的关节参数。你还可以点击 刷新(Refresh) ,使用你的当前选择内容来刷新参数列表。

关节属性

选择你想添加为参数的关节属性,然后点击 添加所选参数(Add Selected Parameters) 将其添加到训练数据生成设置(Training Data Generation Setup)中。在大部分情况下,关节中只有旋转属性是必要的。

添加所选参数

你可以使用 属性筛选器(Attributes Filter) 分段来自动优化和排除属性。点击 添加 (+)(Add (+)) 以添加新条目并根据你想排除的属性来命名。在此示例中,将排除所有平移和其他次要属性,这样最终的属性仅显示旋转。

ml变形器属性筛选器

配置骨骼参数

添加属性后,你现在需要配置每个轴的活动度。具体做法是,选择每个属性,并在 参数属性(Parameter Properties) 中指定该轴的 最小值(Minimum)最大值(Maximum) 移动范围。这些值应当尽可能切合实际,具体视角色的复杂度和类型而定。需要定义此数据,才能保障ML变形器训练过程的准确性和质量。该插件会自动将这些值初始化为Maya中配置的关节限制(如果为该关节设置了这些限制)。你还可以提供给定参数类型的默认值。

最小值最大值骨骼参数范围

正确配置这些参数可能很耗时,所以我们推荐你点击 文件(File)> 保存配置(Save Config) ,将你的进度保存为 .json 文件。

保存配置

你可以选择 文件(File)> 加载配置(Load Config) 来恢复保存的配置。 配置文件基于节点和属性名称,并且可以在带有匹配名称的Maya场景中使用。

配置网格体

要完成训练数据,你必须指定 基础网格体(Base Mesh),并可选择指定 目标网格体(Target Mesh)

基础网格体(Base Mesh) 是绑定到骨架的网格体,在虚幻引擎中也会使用此网格体。

目标网格体(Target Mesh) 是单独的网格体,包含与基础网格体相同的顶点和拓扑,但用于变形。例如,目标网格体可能使用体积保留技术和肌肉模拟来创建逼真的变形。 目标网格体可以存在于Maya中,也可以在Houdini等外部程序中创建。目标网格体导出为Alembic缓存 .abc

要指定基础和目标网格体,请点击 网格体设置(Mesh Settings) 区域中的 添加 (+)(Add (+))。界面上将显示一个窗口,你可以在其中点击 选择(Select) 按钮并指定每个网格体,目标网格体是可选的,除非你的场景中有它。

配置网格体映射

选择你的网格体并点击 确定(OK) 将其添加到网格体设置列表。

基础网格体和目标网格体

如果你的骨骼网格体由多个网格体组成,你应当将每个单独的网格体添加到网格体设置列表。通常,仅当你使用模块角色时才需要这样做。

开始生成姿势

最后,你必须指定 生成器设置(Generator Settings) 以确定训练长度和配置。将为每个 姿势数量(Num Poses) 的参数列表中的每个属性创建一个关键帧。

生成器设置

名称

说明

姿势数量(Num Poses)

要创建的随机姿势的数量,这会为这些帧创建动画。推荐的范围是 5,000 - 50,000 ,但是,在通常情况下,你可以将其设置为 25,000

训练需要大量数据才能得出良好的结果。预计需要大约25,000帧的动画数据,以对应于虚幻中的默认训练设置。虽然使用较小数据集训练是可以做到的,但结果很可能较差。姿势数量(Num Poses)值越高,训练就越慢。

开始帧(Start Frame)

随机生成的姿势将此帧号中开始。你可以设置大于0的值,将现有动画数据与生成的帧组合起来。

活动参数(Active Parameters)

每个帧之间的姿势的随机数值。在大部分情况下,你应当将其设置为大约 75% ,值越高,质量越好。但是,将其设置为 100% 可能会导致模拟问题。

点击 生成(Generate) 以在Maya中开始训练数据生成过程。如果你使用 目标网格体(Target Mesh) 和 *目标Alembic文件(Target Alembic File)** ,则该过程可能需要特别长的时间。根据模型的复杂程度,时间可能在几分钟到几个小时不等。你还要确保有足够的可用磁盘空间,因为Alembic文件可能变得非常大(大约50到100GB),具体视顶点计数和姿势数量(Num Poses)设置而定。

生成maya训练数据

如果你指定的是 目标Alembic文件(Target Alembic File),生成训练数据完成后,现在你应该会拥有导出的 .fbxabc 文件。

训练数据文件

你的FBX和Alembic文件必须包含相同数量的帧,并且每个帧必须对应于相同的骨骼姿势。

虚幻引擎中的变形器训练

现在你可以将完成的训练文件放入虚幻引擎中。

导入Alembic文件

首先导入你在训练过程中创建或位于不同外部变形器工具中的 .abc 文件。在 内容浏览器(Content Browser) 中,点击 导入(Import) ,然后选择你的 .abc 文件并点击 打开(Open)

将alembic文件导入到虚幻中

在导入设置对话框窗口中,为导入设置以下参数:

  • 导入类型(Import Type) 设置为 几何体缓存(Geometry Cache)

  • 禁用展平轨道(Disable Flatten Tracks) 。需要这样做,才能将FBX网格体与Alembic几何体缓存轨道匹配。如果你只有一个网格体,可以使展平轨道(Flatten Tracks)保持启用,但这不是必需的。务必确保你的Alembic轨道名称以你在Maya中的大纲视图中看到的名称开始。

  • 压缩位置精度(Compressed Position Precision) 设置为 0.001 以确保更高准确性。如果你保留默认值,ML变形器可能会学习压缩所引入的错误。

  • 启用存储导入的顶点数量(Enable Store Imported Vertex Numbers) 。这样做才能在骨骼网格体和几何体缓存之间匹配顶点。如果你忘记这样做,ML变形器编辑器将显示警告,你必须再次重新导入几何体缓存。

alembic文件导入设置

设置好这些参数后,点击 导入(Import) 以导入几何体缓存。鉴于alembic文件的大小,此过程可能需要特别长的时间。根据模型的复杂程度,时间可能在几分钟到几个小时不等。

导入训练的FBX

接下来,你需要导入根据Maya训练数据创建的FBX文件。在 FBX导入选项(FBX Import Options) 对话框窗口中,为导入设置以下参数:

  • 如果你已将角色导入到虚幻引擎中,请设置 骨架(Skeleton) 字段以使用该角色的骨架。

  • 启用导入动画(Enable Import Animations)

  • 动画长度(Animation Length) 设置为 导出的时间(Exported Time)

fbx文件导入设置

设置好这些参数后,点击 导入(Import) 以导入FBX。鉴于FBX文件的大小,此过程可能需要特别长的时间。

创建ML变形器资产

接下来,你必须创建 ML变形器资产 ,以便包含和关联Alembic和FBX序列。在内容浏览器(Content Browser)中,点击 添加 (+)(Add (+)) ,然后选择 动画(Animation)> ML变形器(ML Deformer)。在创建资产后将其打开。

ml变形器资产创建

ML变形器编辑器(ML Deformer Editor)细节(Details) 面板中,将角色的骨骼网格体和导入的已训练FBX动画序列分配到其各自的属性。这将导致网格体显示在 训练基础(Training Base) 视口标签下。

将网格体分配到ml变形器

你还要将导入的Alembic文件分配到 几何体缓存(Geometry Cache) 属性。这将导致Alembic网格体同时显示在视口中的训练目标(Training Target)标签下。

你应该会看到绿线,渲染在训练基础模型之上。这些表示基础和目标网格体之间的增量或差值。确保它们看起来正确,因为变形器模型将在训练期间学习这些情况。如果目标网格体相较于训练基础旋转得有点不一样,你可以使用 对齐变换(Alignment Transform) 来将其对齐。它们不需要重叠,只是旋转需要匹配。

分配几何体缓存

拖动时间轴播放头会将两个序列一起推移,这样你可以验证其动画是否匹配。确保绿线(增量)在每个帧都看起来正确。

如果某些帧上的增量看起来不正确,你可以尝试在启用 常量拓扑优化(Constant Topology Optimization) 选项的情况下重新导入几何体缓存。

推移时间轴

在ML变形器编辑器工具栏中点击 训练模型(Train Model) 以开始训练。该过程可能需要很长时间。

训练模型

变形器蓝图设置

为了开始在关卡中的角色上使用ML变形器,你需要使用蓝图中的 ML变形器组件 来设置该角色。

首先创建 Actor蓝图。在 内容浏览器(Content Browser) 中,点击 添加 (+)(Add (+)) > 蓝图类(Blueprint Class) ,然后选择 Actor 。在创建蓝图后将其打开。

创建蓝图

将你的骨骼网格体从内容浏览器(Content Browser)拖入 组件(Components) 面板中,以将其添加到蓝图。

添加骨骼网格体组件

接下来,点击 组件(Components) 面板中的 添加 (+)(Add (+)) 并选择 MLDeformer ,以添加 MLDeformer组件(MLDeformer Component)

mldeformer组件

选择 MLDeformer组件(MLDeformer Component) 并在 细节(Details) 面板中指定你的 ML变形器资产(ML Deformer Asset)

mldeformer组件属性

最后,选择 骨骼网格体组件(Skeletal Mesh Component) 并在 网格体变形器(Mesh Deformer) 属性中指定 变形器图表(Deformer Graph)

骨骼网格体组件属性

如果你没有变形器图表,你可以使用位于 引擎(Engine)> 插件(Plugins)> MLDeformer内容(MLDeformer Content)> 变形器(Deformers) 内容文件夹中的示例 DefaultMLDeformerGraph 。要访问此文件夹,请点击内容浏览器(Content Browser)中的 设置(Settings),并启用 显示引擎内容(Show Engine Content)显示插件内容(Show Plugin Content)

变形器图表

标签