动画烘焙详解

上面两篇文档介绍了在LayaAir3.0中如何使用时间轴动画及动画状态机,本篇将介绍一种特殊的动画优化方案,动画烘焙。什么是动画烘焙呢?动画烘焙是将所有动画提前计算一次;将所有的骨骼节点预计算,存入内存中;GPU直接通过内存读取对应节点的矩阵值;进行渲染的方式。通过使用动画烘焙,可以降低CPU的消耗,因为GPU动画效率高于CPU动画,对于大量使用骨骼动画的场景,可以大大提高性能。

一、IDE中使用动画烘焙

由于在LayaAir项目中播放动画的对象都需要添加Animator组件,因此我们先准备好一个带Animator的动画对象,如图1-1所示

image-20230215192944684

(图1-1)

在动画状态机中配置好动画状态和动画片段,如图1-2所示

image-20230215193347928

(图1-2)

此时运行场景,可以看到人物在做待机的动画,如动图1-3所示

(动图1-3)

此时的动画是通过CPU计算骨骼的信息来播放动画的,接下来我们来使用动画烘焙,用GPU来计算动画数据

在菜单栏中,点击“工具”,选择“动画烘焙”,如图1-4所示

1-4

(图1-4)

可以打开“动画烘焙”工具,如图1-5所示

image-20230215194129903

(图1-5)

从工具中可以了解到,要想对上面的带Animator的动画做动画烘焙,需要把包含Animator组件的节点,拖入到工具中,如动图1-6所示,我们来拖入节点

(动图1-6)

通过点击烘焙后,开始执行动画烘焙。

动画烘焙的动画不支持动画融合。

在节点名字“DanDing”的目录下会生成动画烘焙后的数据文件。

注意:生成数据文件的目录名是节点的名字

我们来看看都生成了什么数据文件,如图1-7所示

image-20230215194955263

(图1-7)

其中,在danding目录下

  • anim目录:存入动画.lani文件(可以多个动画文件)

  • mesh目录:存入模型文件

  • DanDing.ktx:烘焙后的数据文件,使用ktx纹理图片的格式,用来存放计算好的动画数据

  • DanDing.controller:重新以节点名字命名的3D动画状态机文件

  • DanDing.lh:保存烘焙后的预制体,可以直接使用。点击预制体,可以从图1-7中后边看到,模型节点上配置了SimpleSkinnedMeshRenderer组件,同时配置好烘焙的数据文件

这时我们可以直接使用代码或者直接将预制体拖入场景中,在LayaAir示例中,可以看到加载大量烘焙后的动画,效率有大幅提高,如图1-8

image-20230215203928304

预烘焙骨骼动画示例:https://layaair.com/3.x/demo/?category=3D&group=8&name=6

二、烘焙多个动画

通常情况下Animator中会配置好多个动画,那么就可以一次性的烘焙所有的动画,如图2-1所示

image-20230215201526749

(图2-1)

接下来,重新对DanDing节点,做动画烘焙,如动图2-2所示

(动图2-2)

此时,多个动画就烘焙好了,如图2-3所示

image-20230215202158332

(图2-3)

在anim目录中生成了多个动画lani文件。

打开controller文件后,可以看到所有的动画状态已经创建,后面直接使用预制体就好了。

到此为止,动画烘焙已经介绍完了,开发者可以在项目的优化过程中使用LayaAir3.0提供的动画烘焙工具,进一步提高性能。

Copyright ©Layabox 2022 all right reserved,powered by LayaAir Engine更新时间: 2023-12-06 15:40:52

results matching ""

    No results matching ""