将复杂的动画数据存储在 2D 纹理中或网格 UV 中是在保持必要的动画外观和感觉前提下降低动画开销的好方法。 过去您可能使用 变形目标 做过同样的事,但是这个新方法有几个变形目标所不具备的优点。 其中一个优点就是允许您在无法利用变形目标的系统(例如级联粒子编辑器)中使用复杂的动画数据。 在下列文档中,我们将论述如何使用此脚本为您的 UE4 项目生成内容。
先决条件
在我们开始使用脚本前您需要了解几点知识,这样才能在使用这种技术时获得尽可能好的结果。
脚本位置
此脚本仅在虚幻引擎 4 (UE4) 4.8 版及更高版本中提供。
顶点动画脚本将位于下列位置,名为 VertexAnimationTools.ms。
Engine\Extras\3dsMaxScripts\VertexAnimationTools.ms
最新版本的顶点动画脚本已经更新,修正了3Ds Max 2014及以上版本处理图像灰度的方式。
关于工具的警告
虽然此工具通过将复杂的动画数据存储到纹理中,可以非常有效地降低动画开销,但使用此工具也会带来几个缺点。 首先,此工具只能在一个 2D 纹理中最多影响 8192 个顶点。 这是因为对于 DirectX 11,纹理的最大大小是在 X 或 Y 方向为 8192 像素。 此工具使用下列公式生成纹理中的数据。
最终纹理分辨率:X = 网格中的顶点数,Y = 捕获的帧数。
由于这一限制,此工具最适合用于需要动画但可能不宜使用复杂动画结构来实现的视觉效果或环境静态网格。 此工具也 不适用于 骨骼网格动画,因为材质编辑器不能使用骨骼转换。 这意味着如果您想以类似的方式影响骨骼网格的顶点,需要使用 变形目标。
顶点动画工具详解
在顶点动画工具中,您将找到影响静态网格顶点的两种截然不同的方法。 下一节我们将说明这两种方法并讨论它们彼此的差异。
-
顶点动画工具(Vertex Animation Tools):顶点动画工具最上面的部分标为"顶点动画工具"(Vertex Animation Tools),用于生成将存储变形目标顶点位置和法线的 2D 纹理。
属性名称 说明 动画选项(Animation Options): "动画选项"(Animation Options)允许您选择是使用在 3Ds Max 中用时间轴创建的动画,还是使用在 3Ds Max 或其他 3D 软件包(例如 Maya 或 Blender)中创建然后从该软件包逐帧导出的各个关键帧网格,以便在 3Ds Max 中重新构建动画。 处理动画网格(Process Animated Meshes): 此按钮将处理 3Ds Max 场景中的动画网格,创建然后导出所需的纹理。 动画开始(Anim Start): 此选项定义应该作为动画开头的帧。 动画结束(Anim End): 此选项定义应该作为动画结尾的帧。 跳帧(Frame Skip): 此选项允许您跳过若干帧以在纹理空间上尝试和保存。 处理选定网格(Process Selected Meshes): 此选项仅在启用关键帧网格的情况下可用,它将按选择的先后顺序处理选定的关键帧网格。 -
序列描画器(Sequence Painter):序列描画器的作用与顶点动画工具相似,但有一个关键的不同,顶点的信息存储在网格 UV 中而不是 2D 纹理中。
属性名称 说明 描画选择序列(Paint Selection Sequence): 此选项在网格 UV 中存储关于网格顶点的信息,而不是将该数据存储在 2D 纹理中。
3Ds Max 版本和脚本安装
我们只使用 3Ds Max 2015 测试过此工具。 虽然它也许能够和其他 3Ds Max 版本配合工作,但我们尚未测试过任何其他版本,因此使用其他版本的 3Ds Max 请自负风险。 要安装脚本,只需将脚本从它在 4.8\Engine\Extras\3dsMaxScripts 中的位置拖到 3Ds Max 视口中,然后脚本将自动启动。
如果您发现自己经常使用此脚本,可以将脚本添加到某个工具栏或者四向菜单中。如果您不清楚如何添加,Autodesk 站点有非常详细的操作指南,将为您说明如何操作。
3Ds Max 单位设置
在我们开始使用工具前,首先需要确保将 3Ds Max 使用的计量单位设置为与 UE4 使用的计量单位相符。 这样我们就能确保此工具从 3Ds Max 导出的数据在 UE4 中也能以同样的方式工作。 由于 UE4 使用厘米作为其默认计量单位,我们需要确保 3Ds Max 也使用此单位,为了更改此设置,我们需要进行下列操作。
- 首先,打开 3Ds Max 2015,完成加载后从主菜单栏选择 定制(Customize) > 单位设置(Unit Setup)。
- 然后单击 系统单位设置(System Unit Setup),将 系统单位设置(System Unit Setup)从"英寸"(Inches)改为 厘米(Centimeters),再按 确定(OK)按钮。
- 最后将 显示单位刻度(Display Unit Scale) 改为 公制单位(Generic Units),并按 确定(OK)按钮。
不要 跳过此步骤,这一点极其重要。如果跳过此步骤,将内容导入 UE4 中时可能因为 UE4 和 3Ds Max 的单位不同而导致渲染错误。
工具选择
顶点动画 3Ds Max 脚本提供了两种不同的存储顶点动画数据方法。 一种方法在 2D 纹理中存储顶点位置,另一种方法在网格的 UV 中存储顶点位置数据。 在下面您将找到说明如何设置和使用这两种方法的链接。
关键帧方法 - 此方法使用关键帧,它们可以从其他 3D 软件包导出,并导入 3Ds Max 中。信息保存在网格 UV 中。
动画时间轴方法 - 此方法使用 3Ds Max 动画时间轴,将结果编码为 2D 纹理。
提示与技巧
要想充分发挥此技术的优点,您可以遵循下面概述的几条提示与技巧。
提高动画播放速率
如果您感到动画播放速率太慢,可以使用 TimeWithSpeedVariable 材质函数加快播放速率。 要进行此操作,如果您使用 MS_SequencePainter_SequenceFlibook 材质函数,只需将 TimeWithSpeedVariable 的输出连接到 0-1 动画(0-1 Animation)输入。 如果您使用 MS_VertexAnimationTools_MorphTargets 材质函数,请将 TimeWithSpeedVariable 的输出连接到 变形动画(Morph Animations)的输入。

多个动画网格
您可以一次选择多个动画网格,脚本会将所有数据烘焙到一个网格和一组纹理。 在处理由不同部件组成的角色时,此功能非常有用。 只需选择您需要使用的部件,然后照常运行脚本即可。 脚本将把您选择的部件组合起来,从而生成一个新网格以及所需的 2D 纹理。
跳帧
使用脚本的 顶点动画工具(Vertex Animation Tools)部分的 跳帧(Frame Skip)选项可跳过某些帧。 这是一个非常有用的选项,因为通过它可以降低最终纹理大小,同时保留原动画的外观和感觉。

看一看下面的示例视频,就能了解跳帧功能的实际运作。 您可以看到,在 Original 一词前面的茶壶显示了如何使用全帧范围生成动画。 下一个茶壶,也就是在数字 2 前面的那个,显示了每播一帧就跳过一帧的茶壶动画。以此类推。 您可以看到在最后一个示例中,即使跳过 10 帧,效果仍然保持原来的外观和感觉。
网格名称/编号 | 纹理大小 | 内存存储 |
---|---|---|
Original | 175 KB | 不适用 |
2 | 59 KB | 116 KB |
5 | 30 KB | 145 KB |
10 | 21 KB | 154 KB |
技术信息
下一节说明关于顶点动画脚本如何工作的技术信息。 请注意,这里提供这些信息仅供参考,或者面向希望进一步了解脚本如何工作以便修改的人。
局限性
顶点位置变形目标信息以 16 位带正负号浮点数文件格式存储。 32 位图像更精确,但 16 位已经足以应对大多数 FX 工作。 也就是说,偏移浮点位置离其静止位置越远,精度越低。
还要注意的是,脚本纹理应该使用最邻近的方法采样。
内存用量
每帧每个顶点的内存使用量如下:
- 顶点偏移纹理:每帧每个顶点(每个像素)8 字节
- 法线纹理:每帧每个顶点(每个像素)4 字节