UE5城市样例中AnimToTexture插件的使用
UE5城市样例中AnimToTexture插件的使用
参考文章:
https://qiita.com/marv_kurushimay/items/8898046ed9986bbdd6b5
https://zhuanlan.zhihu.com/p/496165391
-
AnimToTexture插件简介
AnimToTexture插件的作用是将骨骼网格体转化为带动画效果(材质)的静态网格体。这样的好处是移动时不需要CPU进行动画计算,可以缓解CPU的负担。目前只是作为一个项目插件,位于UE5城市样例中,无法直接启用。需要使用该插件的话,需要下载城市样例,将Plugins/AnimToTexture拷贝到自己的项目中。城市样例可以在EpicGame虚幻引擎的示例处下载。
-
插件使用介绍
目前我使用的话,不同LOD的话需要采用不同的材质,例如LOD0时正常的材质,如果用在LOD1上,则会出现崩坏的效果。毕竟LOD1相比LOD0顶点和三角形数都改变了,而动画效果本质上是对顶点做对应的变换,自然会出现崩坏的效果。若想要实现不同LOD下均可播放动画,可以制作多个动画材质,在不同LOD下切换即可。
下面以AnimToTexture示例给出材质和骨骼网格体为例,具体说下插件的使用过程。
-
准备静态网格体
-
新建一个编辑器工具蓝图BP_ConvertSkeletalToStatic,继承BP_AnimToTexture。
ConvertSkeletalMeshtoStaticMesh函数是插件中提供的用于从骨骼网格体生成单个LOD静态网格体的函数,其中LODIndex是我们想要的LOD层级,-1的话就是全部LOD。运行后即可得到单一LOD的静态网格体。随后将其复制一份,重命名为SM_MyLOD2_V和SM_MyLOD2_B,分别用于VertexAnimation和BoneAnimation。
-
准备烘焙动画需要的纹理
VertexAnimation需要两张,顶点的Position和Normal。BoneAnimation需要三张,骨骼的Position,Rotation和Weight。其内容会在烘焙后改变,所以我这边直接复制了样例中自带的纹理,将其重命名。
-
材质及材质实例的准备
M_Body材质图表如下所示
M_Body_Bone_Animation材质图表如下所示
可以发现,改动是添加了新的节点(动画计算需要的函数),使其支持动画效果。
接下来以M_Body_Bone_Animation为例,创建对应的材质实例。
MI_Body_Bone_Animation_LOD2细节如下
MI_ChestLog_Bone_Animation_LOD2细节如下
改动的图层参数如下
记得勾选Animate,使用UV1,材质选择上面创建好的对应材质。M_Body_Vertex_Animation同理,这里就不过多赘述。
-
将材质实例挂到静态网格体
然后不出意外的得到了两个崩坏的带动画的静态网格体。
但是问题不大,接下来要做的就是烘焙动画。
-
创建数据资产
为BoneAnimation和VertexAnimation分别创建一个AnimToTextureDataAsset。
以BoneAnimation为例,填写情况如下
第一个红框中需要注意的是,静态网格体中LODIndex是0,因为只有一个。当然你也可以不用上面提到的生成单一LOD的静态网格体,而是直接从骨骼网格体中导出静态网格体,这样导出的静态网格体具有和骨骼网格体一样多的LOD层级。UVChannel和材质实例中保持一致。
在红框中可以注册动画效果,多个动画播放顺序默认从前往后,还可以自定义开始结束帧。
-
执行BP_AnimToTexture
首先需要修改对应的参数,以BoneAnimation为例,修改如下
将对应的数据资产和材质实例填写上去,随后执行即可
-
执行结果
之前崩坏的静态网格体,如今显示正常,且能播放动画。至此,不同LOD下的动画烘焙完毕。
-
-