MMD动画在UE5的使用

前言

先科普一下啥是MMD, MMD全称*MikumikuDance*, 这个Miku就是初音未来, 再引用wiki介绍

MikuMikuDance(通常缩写为MMD)是一款免费动画程序,可让用户制作动画并创建 3D 动画电影,最初是为Vocaloid角色初音未来制作的

本文不过多介绍MMD, 有兴趣的同学可以自行谷歌, 本文主要针对如果在UE5中使用MMD素材进行分析

目标: UE5标准骨架角色/第三方卡通角色使用MMD角色动画和镜头动画

3dance

涉及到的软件

  • UE5
  • maya
  • Blender
  • PmxEditor/VmdEditor(非必须)

关于素材

网上有很多优秀的MMD素材, 主要有模型,角色动画和相机动画

比如比较有名的模之屋, 里面有大量的玩家自制mmd动画, 多数是可以二次修改或者商用的;

模之屋的模型基本都是国内知名游戏的模型, 比如米哈游系列, 这一类如果是自己把玩也是可以的, 如果要商用那么得自己准备合适的模型;

image-20231206091333430

在二次元模型界有一个比较有名的日本网站: booth

这里面的模型基本是可以商用的, 很多游戏比如 知名VR游戏VRChat内的虚拟形象很多都用的是booth的角色

本文就使用booth中的角色进行MMD动画尝试

image-20231206091608190

导入MMD模型

隔壁unity有很多现成的插件直接导入mmd, 而且卡通材质球都可以覆盖完全; ue这方面稍微落后了一点, 在早期需要使用blender或者c4d安装相应的mmd插件然后再导出fbx到ue;

后面经过一些大佬的开发, 有一个相对完善的插件

UE4时代叫做 IM4U, UE5后这个插件的原作者似乎停更了, 然后其他大佬为爱发电基于此魔改了一个UE5版本的插件,链接在这里IVP5U

虽然还是有很多bug, 但是基本能用

mmd的模型资源一般是 pmx格式

动画资源一般是 vmd格式

安装完插件以后, 直接将pmx文件拖动到content以后, 如果pmx文件没有问题就会弹出如下窗口

image-20231207165049053

点击导入, 会卡顿一会, 然后一般会创建很多材质球和贴图, 如下

image-20231207165140632

默认是无光模式, 在导入选项中可以选择勾选

导入MMD角色动画

角色动画导入也是一键拖拽进来,

image-20231207172214950

上面两个选项要填上, 下面两个无所谓

这里会出现一个大坑

ik bug

从网上下载的绝大多数(预计80%+)的动画导入以后都是上图这个鸟样

U管的QB老师说这种情况是因为动画数据异常导致

what!??

要么插件有问题, 要么动画本身没问题, 不可能这么高的比例的mmd动画有问题

死马当活马医到vmd view尝试预览一下

vmd ed

果然是正常的

想到mmd骨架是ik骨骼的, 莫非数据都在ik上??

尝试

ik

果然猜得没错!!! [手动狗头]

那就用录制大法, 输出一个有FK数据的动画就可以重定向了

导入MMD相机动画

相机动画即Level Sequencer动画, 不能再拖进来了

我们需要创建一个Level Sequencer资源

会发现多了一个按钮

image-20231207173220189

导入以后看点运气, 一般还是需要手动的对一下相机与角色的位置关系

dance1

搞定!

重定向

MMD的骨架非常的奇怪, 关注核心骨骼, 会发现脊椎一条线跟UE标准小白人有比较大的差别

image-20231207165359792

image-20231207165441581

pelvis对应的是腰这个问题不大, 但是MMD骨架的上下半身分别有一个相对的根骨骼, 这个跟小白人不一样

这样会导致重定向的时候无法很好的匹配骨骼链

找一个动画发现上下半身2个骨骼都是有动画信息的, 那么暂时先不管, 我们先设置ik

经过反复验证, 最理想的配置如下图

image-20231207165833831

然后下半身这个骨骼只能被单独空出来, 没有数据

测试一个带有转身的动画重定向表现, 截取转身过程的一帧, 很惨

image-20231207165957130

原因也不用猜,意料之中, 因为mmd骨架转身的时候他是同时动了上下半身2个骨骼, 而没有用 这个骨骼来转身, 虽然绝大多数情况, 上下半身2个骨骼的旋转数据非常接近

现在有2个思路, 原则是把全身的旋转想办法拷贝到pelvis/腰上去

  1. 修复重定向后的小白人动画, 将spine旋转数据部分拷贝到pelvis中
  2. 将mmd动画的上下半身骨骼的信息拷贝到腰上去

方法1

最简单粗暴的就是写一个动画修改器, 把spine_01的旋转信息拷贝到pelvis中去,

image-20231207171058350

这里我只将spine_01的roll增量加到pelvis上去

UE5 1

UE5 modify

只能说很勉强, 毕竟这个方式还有是有点粗暴, 而且考虑到另外两个轴以及位移的影响, 这个方案还是需要额外到maya中去处理动画细节, 有点惨

方法2

思路

  1. 既然上下半身数据几乎一致, 那么将下半身的数据先拷贝到上半身
  2. 上半身的数据拷贝到一个临时对象
  3. 把上下半身2个骨骼的局部空间数据清零
  4. 临时对象的数据拷贝到腰上

用最方便的方式测试

image-20231207171410092

上面用一个跟腰平级的虚拟骨骼当做临时对象传递数据

然后继续用录制的方式加装烘焙动画了

image-20231207171811972

image-20231207171818736

数据确认无误已经到腰上了

测试重定向

rec

搞定!

修复骨骼太大

在导入fbx的后, 有些时候会发现骨骼异常的大, 如下

image-20231207152357446

这个是由于多种原因导致, 比较常见的是不同软件之间的单位不一致导致(一般就是差距100倍)

解决方法最简单的是把fbx导入到blender处理

导入之前, 先把blender的场景选项中的缩放单位设置到0.01

image-20231207152510333

导入fbx以后, 一般你会发现你的模型的最外层缩放是一个比较大的值, 比如

image-20231207152613518

按 ctrl+a , 点击下图按钮即可把缩放归一, 有点像maya的冻结变换

image-20231207152700648

这样再导入到UE以后就正常了