UE动画导入标准流程

本文将简要介绍在必要时从外部资源导入动画的各种方法。转自虚幻引擎官方公众号,原文连接:https://mp.weixin.qq.com/s/JVzp0UIVUckfx0HPLHwbZA

介绍

在虚幻引擎中制作动画的功能已经越发强大,而且随着最新添加的约束和其他改进(如动画重定向),我们也可以更方便地在引擎内制作动画。 

本文旨在介绍在必要时从第三方应用程序将动画导入动引擎的各种方法及工具,并让大家了解相应的方法以及在制作环境中的正确用法,同时介绍这些方法的局限性。无论你是制作群像动画还是只制作几个角色,了解每种方法的局限性都可以帮助你找到最适合自己项目的方式。 

此外我们还要考虑到,使用任何外部导入的资源都会产生另一个问题,即资产管理和数据存储需求,还有在虚幻引擎之外制作动画也会使管线更加复杂,从而拖慢创作迭代的过程。

控制绑定

控制绑定(Control Rig)是一套功能齐全的动画控制系统,旨在让大家能够完全在虚幻引擎中制作动画。它具有强大的FK、IK和样条IK功能,还有后向解算(Backwards Solve)功能,可以将外部动画和动捕重定向到现有的控制绑定上。要了解控制绑定的更多信息,请参考《物体和角色动画制作》。除了在引擎中制作动画,控制绑定动画还可以从Sequencer时间轴中导出为FBX格式,并在必要时导回外部DCC。 

Unreal Editor for Fortnite也支持控制绑定。要了解更多相关信息,请参考Epic开发者社区的《如何使用控制绑定创建动态链》

动画导入

虚幻引擎不断改进和增加动画功能的同时,某些限制也可能使得我们必须通过其他方法从外部资源导入动画。

FBX

从外部资源导入动画的标准工作流程用的是FBX格式。关于FBX内容工作管线的文档:《FBX内容管线》 | 虚幻引擎5.2文档

混合变形/变换目标

FBX变换目标管线

在外部DCC应用程序中使用非线性变形器是一种常见的工作流程,通过支持FBX文件格式中的变换目标(Morph Target)导入选项,可以制作骨架网格体动画,并添加混合变形来添加动画控制。此外,你可以在Sequencer中将动画烘焙到FK控制绑定上,并且使用时间轴中的变形变换目标值。要了解此工作流程的简要概述,请参考此教程:《使用控制绑定驱动混合变形或变换目标》 | Epic 开发者社区

动画片段

通过导入已导出的动画,用户可以在Sequencer时间轴中为同一个骨架网格体添加不同的动画片段,并且还能在两个不同的动画之间进行混合,使动画之间的过渡更加平滑。有关将动画导入虚幻引擎的内容,请参考《如何在虚幻引擎中使用FBX导入动画》。

动画还可以使用后向解算(Backward Solve)烘焙到完整的控制绑定上,后向解算会将动画应用到角色的控制绑定(Control Rig)上,从而进行引擎内的动画调整。要了解更多关于控制绑定、正向及后向解算的信息,请参考:《虚幻引擎中的控制绑定正向及后向解算》。

此外,还可以使用角色控制绑定在导入动画的基础上添加更多动画,做出更多细节。

Alembic缓存(ABC)

导入Alembic几何体缓存的功能提供了更多的可能性,例如利用外部DCC中的非线性变形和动态驱动动画。此外,还可以将Alembic缓存与骨架网格体动画相结合来达成特定的目标,例如将作为Alembic缓存的角色头部连接到FBX驱动的动画躯干上。这就提供了一种高效的方法,让你可以添加角色面部的细微挤压和拉伸动作,并提高了肢体动画的灵活度。在Alembic缓存导入选项的对话框中,有三个导入类型选项:静态网格(无动画)、几何体缓存和骨架。要了解更多使用Alembic缓存的详细信息,请参考:《虚幻引擎中的Alembic文件导入器》
此功能需要在插件面板中启用一个插件:

图片[1]-UE动画导入标准流程-数字折叠

Alembic几何体缓存

Alembic缓存的应用范围广泛,但并不是在任何情况下都是最佳的解决方案。例如,将Alembic缓存作为几何体缓存导入时,就会通过CPU读取缓存。这样的速度可能会很慢,具体要取决于缓存的大小和硬件的限制。另一个需要考虑的因素是,这种方法更适合孤立的动画,例如关卡中的某一个角色在做什么,或者可能只是场景中角色的头部,而不是一大群角色在做不同的事情,因为在这种情况下,多个几何体缓存会被导入到同一个关卡中。这会对Sequencer的播放速度产生负面影响,从而降低虚幻引擎的实时性能。

图片[2]-UE动画导入标准流程-数字折叠


在这个24帧的动画示例中,每匹马都是同一个Alembic几何体缓存的副本,由于只有10个副本,缓存的播放性能仍然可以高于每秒24帧,这对于线性内容来说还是可以接受的。


图片[3]-UE动画导入标准流程-数字折叠

然而,当马匹的数量增加到25匹时,回放的性能明显就降低了,并且远远低于可接受的限度。每匹马有9.2万个多边形,因此本示例中的多边形数量有大约200万个。

图片[4]-UE动画导入标准流程-数字折叠

这是因为CPU将每个缓存都作为单独的缓存来处理,即便它们引用的都是同一个几何体缓存。 

Alembic骨架

如果使用此选项,引擎会将帧到帧的几何体缓存转换为变换目标,并使用基数计算(Base Calculation)生成目标。需要注意的是,根据生成的总基数百分比,原始动画的部分完整性可能会受到影响。此文档概述了各种导入方法的详情:《虚幻引擎中的Alembic文件导入器》

图片[5]-UE动画导入标准流程-数字折叠

如果使用这种方法,读取生成变换目标的工作将在GPU上进行(而不是CPU),从而提高了生成动画的效率和性能。使用这种方法的话,我们仍然可以达到每秒24帧以上的目标,并且能有96匹马和880万个多边形。

图片[6]-UE动画导入标准流程-数字折叠

Alembic流送几何体缓存

此选项允许每次只将Alembic文件的一部分流送到引擎中,而无需加载整个缓存。它不会将缓存加载为.uasset,而是通过网络将该部分送入虚幻引擎。

要使用这个功能,就必须启用Alembic File插件中的几何体缓存(Geometry Cache)。 

注:此插件仍处于试验阶段。

图片[7]-UE动画导入标准流程-数字折叠

接下来我们可以调整插件的项目设置。在这个示例中,内存占用从4096增加到8192,预警(Look-Ahead)设置为10 秒。这样做是为了节省内存占用,对缓存播放速度不会有任何影响。

注:如果预警时间少于1秒,引擎就要花一些时间来加载缓存,这也可能导致性能问题。

图片[8]-UE动画导入标准流程-数字折叠

使用这些设置以及5个Alembic文件之后,Sequencer中的播放帧率已经低于每秒24帧

图片[9]-UE动画导入标准流程-数字折叠

AnimToTexture / VAT

还有另一种同样好用且非常高效的技术或工具,那就是使用顶点动画纹理。虚幻引擎确实有一个能够将骨架网格体动画转换为VAT的插件,叫做“AnimToTexture”。开发者社区里有该插件的详细教程:使用AnimToTexture在编辑器中烘焙顶点动画 | Epic开发者社区

顶点动画

在这个示例中,顶点的动画位置并没有作为几何体的缓存,而是根据顶点在本地空间中的位置,并使用特殊的材质函来实现动画,该函数利用了材质的世界位置偏移功能,其中材质函数中使用的纹理贴图会代表顶点的位置。

这也是目前示例中最为有效的方法,但也有一些地方需要注意。这些示例中使用的模型有9.2万个多边形,在最后这个例子里,关卡中有240个这样的模型,并且动画帧率有每秒60帧。在高端配置的设备上,帧率可以达到每秒120帧。这些测试都是在高配置笔记本电脑上完成的,最终结果是Sequencer中运行超过2200万个多边形,依然能够用极高的性能速率实时运行。

图片[10]-UE动画导入标准流程-数字折叠

这种方法的主要缺点之一就是纹理的大小可能会受到限制,不过这也取决于角色动画的数量。在本示例中,一个24帧的运行周期就只有1024×987的图像,还是比较小的。

图片[11]-UE动画导入标准流程-数字折叠

不过你可以将较长的动画拆分成较小的片段,并导出为VAT纹理,从而避免达到8k的纹理限制。不过动画的每个片段都需要有自己的材质,使用相同的静态网格,并且只是根据你的需要在Sequencer中切换材质。 

你也可以将角色或动画模型分割成模块化的各个部分(比如头部、身体、手部等),然后为每个单独的元素导出顶点动画纹理,这样也可以节省导入纹理的大小,用几个较小的纹理来运行动画,而不是一个非常大的纹理。

不同的DCC都有自己的VAT生成方法,并且效果都不错,你可以好好探索一下这些工作流程,从而找到最适合自己项目的解决方案。

注:目前顶点动画还不支持Groom,因为Groom的绑定还不会计算材质的世界位置偏移。

USD

虚幻引擎中的通用场景描述(USD)

此外,USD还可用于将外部来源的动画导入引擎,这些动画也可烘焙到控制绑定上,从而方便你进一步完善,然后再将改动保存到USD文件中。关于此流程的详细信息,请参考:配合USD动画来使用控制绑定

虚幻引擎的USD提供了一种从外部DCC导入动画的灵活方式,让你可以更轻松地根据需要来进行定制。比如整个动画场景、单个资产,甚至只是它们的动画,都可以从像Maya这样的DCC中导出为USD,然后直接导入到虚幻引擎,或者加载到虚幻引擎的UsdStageWindow中,方便你完成进一步的工作。

基础导出/导入

无论你处理的是整个动画场景还是单个资产,从Maya导出的USD文件都可以直接导入引擎的内容浏览器或关卡(导入关卡也会将资产导入内容浏览器,不过你还可以选择将Actor导入关卡从而保留场景设置)。 

图片[12]-UE动画导入标准流程-数字折叠

虚幻引擎的USD导入选项窗口也会提供详细的导入控制,包括:

    · USD文件中的哪些Prim需要导入

    · 要导入什么类型的数据(几何体、骨架动画等)

    · USD选项(例如要导入的渲染情景、要使用的材质目的等)

    · 如何处理已有资产

    · 资产导入之后如何处理

图片[13]-UE动画导入标准流程-数字折叠

简单的变换动画会以每帧数据的形式输出,而骨架动画将以动画序列的形式输出。 

图片[14]-UE动画导入标准流程-数字折叠


USD舞台窗口

作为导入虚幻引擎的另一种方法,USD文件可以在USD舞台窗口中打开,还能通过UsdStageActor在关卡中查看。在USD舞台窗口中打开文件可以保留这些文件的USD功能(如合成图层、材质目的等),并且你还可以继续用USD的方式工作,对USD文件进行编辑并保存,而导入以后也会将资产转换为uasset。

准备就绪之后,你就可以在USD舞台窗口中将打开的USD文件导入到虚幻引擎,将其转换为uasset。当然你也可以继续在USD舞台窗口中处理USD文件。你可以移动USD舞台中的资产、更改它们的变体、也可以给变换做动画,并将控制绑定应用于UsdSkel资产,从而获得完整的角色动画。只要做好准备,所有编辑工作都将以无损的方式写回到USD文件。

图片[15]-UE动画导入标准流程-数字折叠

总结

熟悉控制绑定和Sequencer一段时间之后,你就会发现在引擎中制作动画是如此轻松。但如果出现了需要外部解决方案的情况,那么了解引擎中有哪些动画相关的导入导出工具,也能让你初步了解到哪种技术最适合自己的。了解如何应用每种技术,能够让你的项目更有效率,同时拥有良好的性能。你还要考虑到导入导出引擎所花费的时间、增加的数据存储量以及所有这些方法的效率损失。无论你使用的是标准的FBX骨架网格体动画管线,还是同时运用这些技术的混合管线,现在你都已经具备了相应的知识,可以在开始项目时胸有成竹,更好地实现自己的内容。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容