前言:
PS:这期教程是关于将.vmd转换到七日杀、生成舞蹈.unity3d的教程,如果你只是想在游戏里跳舞,下载大佬们分享的舞蹈文件.unity3d放到Mods\VRoidMod\Dances文件夹下即可!
5分钟极速版视频教程:
主要是关于MMD导入到七日杀里,主要是利用脚本优化了许多繁琐费时的工作
然后自制的小工具箱插件,应该能减少一些繁琐/容易出错的操作,提高一些转换的效率:
1. 小工具箱插件
https://github.com/maoxig/VroidMMDTools/releases/
更新日志见github
或者度盘链接: https://pan.baidu.com/s/1PLHAipqHuH4iN7ckq2IEFA?pwd=u231 提取码: u231
2. MMD4Mecanim: http://stereoarts.jp/
(或者如果已经有PMX2FBX直接设置下路径就行)
3. 前置VRoidMod和工程文件:https://www.nexusmods.com/7daystodie/mods/3501
感谢以上项目,此外感谢七日杀中文网的相关大佬,本人工作基本上是在前人基础上小修小改以及整合
关于MMD,本视频/工具仅仅是整合了一些已有的工具/思路,在转换、使用时请遵守原MMD的相关规定,尊重相关著作权。如有对二次使用者造成的损害,与本人、本工具无关。
下面是图文教程,最后面还会有原理,或者可能出现的问题,你可以先跟着图文过一遍,如果有问题优先看原理、存在的问题,然后想办法解决,如果还是有问题可以评论区、私信反馈。
——————————————————————————————
图文教程:
0. 准备项目
下载准备好Unity, MMD4Mecanim(可选,但是得有PMX2FBX),以及这个unity工具箱就行,转换MMD是不需要Vroid mod的工程文件的(如果有namespace报错,是因为引用了VRoid mod的工程文件的类,如果你只想转MMD而不转人物,把我工具箱报错的那俩个文件(VRoidSpringBoneAutoCreator.cs和VRoidSpringBoneSaverEditor.cs删掉就行,不过还是建议你去N网下载VRoidMod的工程文件,说不定可以顺便转人物呢)
也就是你需要下载3个包,前面引言里面都有贴链接。导入unity包只需把.unitypackage拖进project里,如果导入时有提示按yes即可。
1.确保这个工具箱是正常的
导入工具箱插件之后,会在窗口上面多几个选项,主要是关注VMD Morph Camera Animator Tool和VMD To Anim Converter这两个选项。
其中VMD To Anim Convter是单纯的vmd转anim的工具(把MMD4Mecanim重新封装优化了一下),里面也有一些配置,可以检查一下三个路径,可以检查一下配置。
然后点击打开VMD Morph Camera Animator Tool,进入插件主窗口。
这里说明一下,里面提供的配置默认都是设置好的,如果不知道要不要改那就是不要改。
2.准备MMD文件
把要处理的MMD 动作.vmd,(镜头.vmd,表情.vmd)和音频(.mp3/.ogg/.wav)文件夹放到项目里(可以创个Workspace整洁一些)。这些资源获取的问题见评论区置顶。
3. 从vmd生成动画剪辑,或者使用已有的动画剪辑
这里有两种情况,一种是只有vmd文件,就把vmd拖进去,然后点击生成动画剪辑。
还有一种情况是已经有了animClip(比如之前已经执行过生成动画剪辑,此时可以直接用Output里面存的),因此,也提供了直接使用anim的导入选项。
点击从vmd生成动画剪辑之后,会在output里面生成一个anim文件,但是此时这里的anim是只包含人物运动数据的anim,因此我们在后面添加上镜头和表情。
在生成动画剪辑时,如果出错,建议看一下原理,使用MMD4Mecanim提取出animClip,然后使用已有的animClip
4. (可选但推荐)导入镜头vmd
有些MMD的镜头和动作放在一个vmd里面,这时候还是拖前一个vmd就行。
你现在可以放心导入镜头,因为我已经在下面这个帖子里修复了很多问题,而且镜头是MMD的灵魂所在,我建议你加上。
【VRoid补丁dll】修复VRoid舞蹈多人联机锁镜头、声音忽大忽小bug、全角色镜头 – 角色模型 – 七日杀中文网
新版本的工具箱多了一个镜头缩放的选项,我举个例子你就知道这是干嘛的:有一些镜头vmd是针对身高1.8m的角色设计的,那么在贴脸对焦时就会对焦在1.8m,那如果角色模型只有1.6m高,那此时在游戏里,镜头就会对焦在头顶上,所以在导入vmd时要缩放一下镜头(乘上1.6/1.8=0.88)。但是我上面那个补丁支持在游戏内动态调节缩放,更加自由,所以你通常现在不需要管他了,不过我还是强烈建议你可以略微调整,使得调整后他完美适配1.6m视线高度的角色(因为这是默认的VRoidMod视线高度),这样游戏局内里面自动计算的就总是正确的,不再需要局内手动调整
5.导入表情vmd
通常MMD的表情和动作放在一个vmd里面,这时候还是拖前一个vmd就行,但是有一些是分开的,所以我在设计面板时拆开来了
6.合并动画曲线、创建控制器
预览形态键映射设置,选择你需要添加的曲线,然后点击添加到动画并创建控制器
这里如果创建失败,我目前已知的有些问题是如果形态键写入的太多有时候会报错,我也没找出原因,可以试试取消选择一些形态键映射。
其实到这一步就已经可以添加音频并打包输出了,但是我们稳妥一些检查两步。
重要:新版本(v0.0.4之后)提供了一个基于Unity Timeline(通常会自带,非常古老的unity2017.1以下可能得装一下)的一键预览按钮,只需要拖一个已有的人物模型到框内,然后点击之后可以一键预览:
此外要在unity内部预览镜头的话得在人物节点创建一个一定规范的镜头,我已经提供了一个脚本一键创建符合规范的镜头,允许创建脚本、点击按钮后,再点击Timeline的播放,你可以直接在game窗口直接看到运镜的效果,而不需要播放游戏,因此后面三步可以合并到一步,大大提高检查效率。
6.5 检查步骤:音频检查(可选):
这里建议音频不要太大,适当即可。然后我们需要检查音频和动作踩点、同步。
情况一:动作配布里面提供了音频.mp3/.ogg/.wav通常不需要检查,直接拖进去就行;
情况二:自己下载的音乐,我们得首先检查音乐踩点没,然后调整下音频(通常音频可能缺失/多几帧)。检查对轴可以用unity的Timeline功能,调整音频可以用其他音频工具、插件。这里说一下我的两种方法,仅供参考,也许有更好的方法:
1. 比较简单的情况,例如很明显可以观察到音频缺失、多了多久,直接使用ffmpeg修改一下音频
2. 比较复杂的情况,可以参考:【MMD相关】扒音轨和对轴 – 哔哩哔哩的思路。可以把配布视频扒下来(搜在线提取器),然后在Timeline里面找画面相同的那一帧,然后看音频差了多少,
之后简单微调一下音频即可,工具箱里提供了一个简易音频编辑器,其中用到的ffmpeg(可选)可以随便用电脑里有的就行(因为大部分音频、视频软件里面可能都塞了一个)
7. 检查步骤:人物方向检查(可选)
找到Output新创建的动画,预览一下,确保人物面对的方向(红色箭头)和蓝色箭头在大部分时候基本上对齐,不对齐的话可以拖动修改第一个offset(Root Transform Rotation那个)。
如果人物的初始位置很奇怪,可以尝试改第三个Center of Mass改为original
8. 检查步骤:最终检查(可选)
利用一个已有的人物检查一切正常(可以用vrm的人物预览一下),主要是关注骨架、动作、表情、镜头(可选)。要在unity内部预览镜头的话得在人物节点创建一个一定规范的镜头,我已经提供了一个脚本一键创建符合规范的镜头;
不过正常导出角色模型到游戏里是不需要带镜头的,我们这里只是为了在unity里面测试
我们把刚刚的output里面生成的controller拖到人物模型的这里,这样你点击播放play之后,角色就会动起来,可以检查镜头、表情、动作等等。
此外,你也可以像之前那样使用Timeline检查,我比较喜欢用Timeline,因为可以同时检查音频、动作、镜头,并且不需要点击play播放就能检查(播放的话unity得等几秒,而且不能编辑修改)
一切无误就可以点击打包按钮打包导出了,自动打包会自动检测、重命名控制器、动画、音频,然后输出为unity3d。可以直接把打包输出路径设在VRoidMod的dances路径下,这样打开游戏就能检查是否有问题
————————————————————————————————————
原理
(个人理解,也许不对欢迎指正)
让角色在游戏里跳舞,主要是依赖于一个human controller(和其对应的anim,并且包名、assets名都得一样)。
作者的指引是这样的
所以其实非常简单,只要有anim和controller就行。如果要搞MMD的话,MMD4Mecanim本身就能利用pmx和vmd提取出anim,只需要用这个anim创一个controller,然后把资源命名好然后打包就行了,此时已经就能够在游戏里跳舞了。
我们后面的工具都主要是为了实现 1. 表情 2. 镜头
表情功能应该是由勇气佬搞出来的,其原理就是在controller对应的anim添加一段曲线,指定控制模型Body下的Skinned Mesh Renderer组件,控制相关的形态键在某一帧的权重:
因此其实这是一个双向的过程,既需要人物模型在Body下的Skinned Mesh Renderer组件有相关的形态键,舞蹈本身又得对此做出控制调用。(因此你也能想到,如果有更多的约定规范,可以据此实现更多操作,例如涩涩)
镜头功能应该是由-二三佬搞出来的。原理也很简单,就是平时在人物模型下挂一个平时禁用的镜头,然后舞蹈开始激活,结束时关闭,然后在动画里面写入控制镜头的曲线:
根据前面说的,要能有镜头,需要角色和舞蹈双向符合规范(即Camera_root/Camera_root_1/Camera下的Camera组件,路径是任意的,但这个是前人规范,我们遵守),因此只有同时满足 1. 角色在这个路径带有镜头 2. 舞蹈按照约定调用了镜头,才会激活镜头并运镜。
(注:使用【VRoid补丁dll】修复VRoid舞蹈多人联机锁镜头、声音忽大忽小bug、全角色镜头 – 角色模型 – 七日杀中文网补丁之后,导出时角色可以不给人物添加相机,这部分我已经在补丁里做了)
(注:如果多人下锁定队友镜头请还是看这个帖子)
——————————————————————————————————————————
总之大概的方法、思路、原理应该就是这样,然后工具的代码都是开源的(除了PMX2FBX那个工具),而且逻辑还算清晰,有问题的话也可以自己试试改一改,然后有些常量可能写死在文件里没暴露出来,总之可以看看,随便改改都无所谓。在使用工具时有问题可以提,有时间我改改
可能的问题:
1. 有些例如GETCHAT好像嘴唇表情好像在解析时报错了,但是似乎是vmd本身或者解析库的问题,因为那个解析库是一个几年的老东西了,即使怀疑是它的问题也无能为力。最终我的解决方案是,利用MikuMikuDance把嘴唇数据重新导入,然后再重新导出(相当于刷新一下),这样就能成功解析嘴唇了
2. 有些舞蹈vmd非常依赖于提供解析的pmx模型骨骼,如果解析时报错、动作抽风、脚部手臂打结、人物飘逸飞天等等,需要更换一个更加适配的pmx模型(有些可能需要用pmxeditor改模修改骨骼适配)
3. 如果提取出来的animClip里面,动作、表情、镜头都一切正常,但是初始位置、方向等等不正常,这通常是unity抽风,去第7步看那个面板调节那几个选项试试
1. 关于资源查找,网上有很多可以集中找到资源的地方,例如模之屋、b碗、nico3d等等,只要想找都可以找到,不管是正经的还是不正经的,应该都有
2. 打包后请勿修改包名,因为Vroid Mod会依据包名来获取包内资源,改包名会导致它找不到
3. 这些工具总之因为受限于unity和各种各样的原因,也许功能并不全面,可以考虑使用其他工具来拓展、辅助功能实现,比如如果要动作轴对音频轴,可以使用unity的Timeline
一边给黑心老板打工,一边在写mod
非常感谢大佬分享技术!!!
这个逼装的我给82分,剩下的用666的方式打给你!
板凳!
牛
最近又忙又懒,QQ/B站/N网同名 有问题的话在QQ群反馈
正式版了嘛?如正!
感谢大佬的付出,赞一个!这个逼装的我给82分,剩下的用666的方式打给你!
实在不会,能接委托吗?
大佬,找不到模型。
草,B碗随便搞了点货试出来很整蛊的事,如果按照Alter默认工程的高度“女商人”来做角色身高的话,大部分MikuMikuDance中“怼脸特写”镜头都达不到标准高度,然后就变成了怼着脖子拍了
在MikuMikuDance里提前把镜头配布里怼脸的Y轴都至少提高1.0,才能差不多对上脑袋,但感觉最少还是得1.5到2.0
按模特身高做模型压力最大的一集,4000帧的歌至少得动一百帧左右的镜头高度)
正式版了嘛?如正!
那个地板穿透的问题还真不太好搞,我看ヒアソビ的第3005帧(unity里面是第6010帧100秒),我从mikumikudance和unity里面看,它镜头都是从这么深的地板下面穿上来。我本身是想给镜头加一个碰撞这样可能不会穿到里面,但是这种肯定没法救回来。感觉也不用管这种了,还是让他们自己搭舞台吧(或者跑虚荣之塔顶这种高层建筑跳)
一边给黑心老板打工,一边在写mod