为蒙皮静态和骨骼网格体对象创建准确的非线性变形器系统是一个复杂且计算量很大的过程,尤其是在实时计算这些变形模拟时。使用 虚幻引擎 的 机器学习 ( ML ) 变形器(Deformer) 框架,你可以在运行时实现近似的复杂网格体变形,使用外部预生成的网格体变形模拟数据来训练 ML变形器模型(ML Deformer Model) ,以便模仿高质量网格体变形,极大提高游戏内网格体变形的质量,而不带来实时变形生成的计算成本。
ML变形器框架在内部利用由变形器模型驱动的 神经网络推理 ( NNI )系统,在GPU上处理近似网格体变形计算,缓解CPU上的一些处理带宽。
虚幻引擎商城中还提供了适用于 AutoDesk Maya 的插件,可用于生成必要的网格体变形数据。在AutoDesk Maya中生成网格体变形数据后,数据会导出为 FBX (.fbx)和 Alembic (.ab)文件,你可以将其导入到虚幻引擎中,用于训练变形器模型。
本文档提供了一个示例工作流程,在Autodesk Maya中生成网格体变形模拟数据,然后在虚幻引擎中使用该数据训练变形器模型,在运行时近似角色的网格体变形。
先决条件
-
ML变形器框架(ML Deformer Framework) 是一种插件,必须先启用才能使用。在虚幻引擎菜单中找到 编辑(Edit)> 插件(Plugins) ,找到 动画(Animation) 分段中的 ML变形器框架(ML Deformer Framework) 并将其启用。启用该插件后,你将需要重启编辑器。

- ML变形器工作流程要求你对工作流程的一部分使用 Autodesk Maya 。
- 你在虚幻引擎和Autodesk Maya中都有一个蒙皮角色。
ML变形器模型
ML变形器框架依赖经过训练的ML变形器模型来驱动蒙皮网格体变形。
你可以选择以插件的形式安装预制模型。就该示例而言,工作流程的一部分可选择使用ML变形器神经变形模型,你可以从"插件(Plugins)"窗口安装该模型。
- ML变形器神经变形模型(ML Deformer Neural Morph Model) 是一种插件,必须先启用才能使用。在虚幻引擎菜单中找到 编辑(Edit)> 插件(Plugins) ,找到 动画(Animation) 分段中的 ML变形器神经变形模型(ML Deformer Neural Morph Model) 并将其启用。启用该插件后,你将需要重启编辑器。
你可以在项目中安装和使用其他多个预制模型。你甚至可以在插件的C++程序包中创建自己的ML变形器模型,或自定义现有模型。
Autodesk Maya插件设置
你需要下载并安装 ML变形器 - Maya数据生成插件(ML Deformer Data Generation Maya Plugin) 。为此,首先找到虚幻商城页面,并下载插件。
安装插件后,它将位于虚幻引擎安装目录的 Plugins 文件夹中。默认情况下,它位于以下路径:
…\Engine\Plugins\Marketplace\MayaMLDeformer\Content\MayaMLDeformer.zip
将 MayaMLDeformer.zip 解缩压到 C:\Users\username\Documents\maya\modules。如果 modules 文件夹不存在,你可以创建它。
对Mac用户来说,插件位于 /Users/Shared/Autodesk/modules/maya。
现在,当你打开Autodesk Maya时,应该会在主菜单栏中看到 UE MLDeformer 。
在Maya中训练数据生成
ML变形器插件为角色创建训练数据的方法是,在骨骼上设置流程性关键帧,这些关键帧将为机器学习算法生成有用的数据集。要开始训练数据生成过程,你必须首先打开该工具。
在Maya的主菜单栏中,点击 虚幻引擎机器学习变形器(UE ML Deformer)> 数据生成器(Data Generator) ,这将打开 训练数据生成设置(Training Data Generation Setup) 窗口。
你还要在Maya场景中导入或打开你的蒙皮角色。就该示例工作流程而言,将使用MetaHuman。
添加骨骼参数
为了训练关节,你必须添加要修改的一系列节点和属性,以及这些属性的可用值范围。
在Maya中选择你想添加的关节,然后点击 训练数据生成设置(Training Data Generation Setup) 窗口的 参数(Parameters) 分段中的 添加 (+)(Add (+)) 。
这将打开 添加参数(Add Parameters) 窗口,你可以在其中进一步优化你想在训练中使用的关节参数。你还可以点击 刷新(Refresh) ,使用你的当前选择内容来刷新参数列表。
选择你想添加为参数的关节属性,然后点击 添加所选参数(Add Selected Parameters) 将其添加到训练数据生成设置(Training Data Generation Setup)中。在大部分情况下,关节中只有旋转属性是必要的。
你可以使用 属性筛选器(Attributes Filter) 分段来自动优化和排除属性。点击 添加 (+)(Add (+)) 以添加新条目并根据你想排除的属性来命名。在此示例中,将排除所有平移和其他次要属性,这样最终的属性仅显示旋转。

配置骨骼参数
添加属性后,你现在需要配置每个轴的活动度。具体做法是,选择每个属性,并在 参数属性(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)设置而定。
如果你指定的是 目标Alembic文件(Target Alembic File) ,生成训练数据完成后,现在你应该会拥有导出的 .fbx 和 abc 文件。
你的FBX和Alembic文件必须包含相同数量的帧,并且每个帧必须对应于相同的骨骼姿势。
虚幻引擎中的变形器训练
现在你可以将完成的训练文件放入虚幻引擎中。
导入Alembic文件
首先导入你在训练过程中创建或位于不同外部变形器工具中的 .abc 文件。在 内容浏览器(Content Browser) 中,点击 导入(Import) ,然后选择你的 .abc 文件并点击 打开(Open) 。
在导入设置对话框窗口中,为导入设置以下参数:
- 将 导入类型(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变形器编辑器将显示警告,你必须再次重新导入几何体缓存。
设置好这些参数后,点击 导入(Import) 以导入几何体缓存。鉴于alembic文件的大小,此过程可能需要特别长的时间。根据复杂性和大小,需要的时间从几分钟到几小时不等。
导入训练的FBX
接下来,你需要导入根据Maya训练数据创建的FBX文件。在 FBX导入选项(FBX Import Options) 对话框窗口中,为导入设置以下参数:
- 如果你已将角色导入到虚幻引擎中,请设置 骨架(Skeleton) 字段以使用该角色的骨架。
- 启用导入动画(Enable Import Animations) 。
- 将 动画长度(Animation Length) 设置为 导出的时间(Exported Time) 。
设置好这些参数后,点击 导入(Import) 以导入FBX。鉴于FBX文件的大小,此过程可能需要特别长的时间。
创建ML变形器资产
接下来,你必须创建 ML变形器资产 ,以便包含和关联Alembic和FBX序列。在内容浏览器(Content Browser)中,点击 添加 (+)(Add (+)) ,然后选择 动画(Animation)> ML变形器(ML Deformer) 。在创建资产后将其打开。
在 ML变形器编辑器(ML Deformer Editor) 的 细节(Details) 面板中,将角色的骨骼网格体和导入的已训练FBX动画序列分配到其各自的属性。这将导致网格体显示在 训练基础(Training Base) 视口标签下。
你还要将导入的Alembic文件分配到 几何体缓存(Geometry Cache) 属性。这将导致Alembic网格体同时显示在视口中的训练目标(Training Target)标签下。
你应该会看到绿线,渲染在训练基础模型之上。这些表示基础和目标网格体之间的增量或差值。确保它们看起来正确,因为变形器模型将在训练期间学习这些情况。如果目标网格体相较于训练基础旋转得有点不一样,你可以使用 对齐变换(Alignment Transform) 来将其对齐。它们不需要重叠,只是旋转需要匹配。
拖动时间轴播放头会将两个序列一起推移,这样你可以验证其动画是否匹配。确保绿线(增量)在每个帧都看起来正确。
如果某些帧上的增量看起来不正确,你可以尝试在启用 常量拓扑优化(Constant Topology Optimization) 选项的情况下重新导入几何体缓存。
在ML变形器编辑器工具栏中点击 训练模型(Train Model) 以开始训练。该过程可能需要很长时间。
训练过程完成后,你可以在ML变形器 测试(Testing) 模式下查看结果。
你可以在 可视化(Visualization) 面板中调整 重量(Weight) 属性,观察ML变形器网格体(右侧)相较于线性蒙皮网格体(左侧)的效果。
启用 显示热图(Show Heat Map) 属性,并调整 可视化(Visualization) 面板中的热图选项,查看ML变形器所变形的网格体区域的直观表示。
变形器蓝图设置
为了开始在关卡中的角色上使用ML变形器,你需要使用蓝图中的 ML变形器组件 来设置该角色。
首先创建 Actor蓝图 。在 内容浏览器(Content Browser) 中,点击 添加 (+)(Add (+)) > 蓝图类(Blueprint Class) ,然后选择 Actor 。在创建蓝图后将其打开。
将你的骨骼网格体从内容浏览器(Content Browser)拖入 组件(Components) 面板中,以将其添加到蓝图。
接下来,点击 组件(Components) 面板中的 添加 (+)(Add (+)) 并选择 MLDeformer ,以添加 MLDeformer组件(MLDeformer Component) 。
选择 MLDeformer组件(MLDeformer Component) 并在 细节(Details) 面板中指定你的 ML变形器资产(ML Deformer Asset) 。
最后,选择 骨骼网格体组件(Skeletal Mesh Component) 并在 网格体变形器(Mesh Deformer) 属性中指定 变形器图表(Deformer Graph) 。
如果你没有变形器图表,你可以使用位于 引擎(Engine)> 插件(Plugins)> MLDeformer内容(MLDeformer Content)> 变形器(Deformers) 内容文件夹中的示例 DefaultMLDeformerGraph 。要访问此文件夹,请点击内容浏览器(Content Browser)中的 设置(Settings) ,并启用 显示引擎内容(Show Engine Content) 和 显示插件内容(Show Plugin Content) 。