我是如何用Blender制作賽馬娘動(dòng)畫的?

首先我不怎么懂unity,也不會(huì)用MMD,主要在blender里用各種插件制作動(dòng)畫。
以下內(nèi)容也不會(huì)涉及太復(fù)雜的技術(shù),也存在很多尚未解決的問題。用這個(gè)方式處理的模型也無法應(yīng)用到mmd。

所需的工具和素材:
賽馬娘全套模型和貼圖(顯而易見)
Blender
MMD插件
MikuMikuRig插件(BV1Ja411r7DN)
Rigidbody-bone(可選,處理物理用)
DerbyFacialConventor1.1(可選,處理表情用,作者 @CroakFang)
PmxEditor(可選,處理表情用,最方便,需要配合最新版MMD插件)
Unity(可選,處理表情用,效果更好。腳本作者?@CroakFang)
插件和程序都打包在https://pan.baidu.com/s/1DWF0dz29mA96PrlHMfVVoQ?pwd=qscr?

首先要準(zhǔn)備好全身的模型。以泳裝黃金船為例。

看看頭像。阿船編號(hào)為1007,她的泳裝的編號(hào)是30。因此搜索出1007_30對(duì)應(yīng)的文件夾pfb_bdy1007_30(身體模型)、pfb_chr1007_30(頭部模型)和對(duì)應(yīng)貼圖。
黃金船身體模型與貼圖涉及到:

頭部和面部模型與貼圖是:

尾巴都是通用模型,大多只有兩種。比如阿船編號(hào)1007搜出tex_tail0001_00_1007_diff貼圖。因此阿船的尾巴是tail0001所對(duì)應(yīng)的pfb_tail0001_00.fbx。

尾巴模型的貼圖則是:

基本所有人物模型涉及的都是這么幾套(尾巴有兩個(gè)是通用的),diff和shad_c分別是明暗貼圖,而base和ctrl則是涉及到高光金屬度透明度等,在材質(zhì)里都要用上。
像波旁新宇宙比較特別的還有發(fā)光的emi貼圖,此外還有骯臟的dirt貼圖,潮濕的wet貼圖……有需求的話就在著色器里自由發(fā)揮吧。

將身體和尾巴的模型全部導(dǎo)入blender。(頭部先不用)
由于單位不同,導(dǎo)入時(shí)縮放會(huì)是0.01,alt+s恢復(fù)縮放就好。

將尾巴綁定在身體模型的hip骨骼上。


再在編輯模式用shift+s把后面幾根骨骼首尾相連。再全部選中(最后選中最前端的骨骼),利用Rigidbody-bone給它們上物理。



然后在右邊出現(xiàn)的新集合rigidbody_bone中,選中所有新出現(xiàn)的空物體,在物理屬性、剛體約束、棱角里,將上限和下限都調(diào)成-5和5(或者你參考實(shí)際效果后需要的數(shù)值)
事后記得將rigidbody_bone這個(gè)集合設(shè)定為不可見。


不用擔(dān)心空物體太多這一步太麻煩,只要你在輸入數(shù)據(jù)后,按住alt再按回車,所有被你選中的物體的該數(shù)值都會(huì)變成你輸入的數(shù)值。
然后你按下播放,選中最前面的骨骼,就能隨意玩弄馬尾巴了。

其他物理你也可以如法炮制,或者各顯神通找別的方式解決,blender這方面替代方案很多。
之前發(fā)速子茶座的時(shí)候,決勝服和頭發(fā)我也是用這個(gè)方式解決的,效果還算不錯(cuò)。但在數(shù)值上調(diào)了好幾次。
關(guān)于怎么做材質(zhì),我之前琢磨過一套仿馬娘渲染的節(jié)點(diǎn),可以直接從工程文件里拿去用。
把剛才搜集來的貼圖都逐一導(dǎo)入進(jìn)去,按節(jié)點(diǎn)提示的在著色器里連上節(jié)點(diǎn)即可。
(分身體、頭部、面部、眼睛、描邊。)



這套節(jié)點(diǎn)組以一個(gè)日光物體為模擬日光,用蘭伯特模型計(jì)算明暗。并且模仿馬娘添加了高光邊緣光金屬光等。
然而賽馬娘的著色器并不是簡(jiǎn)單的拼湊貼圖就能模仿。這只能讓畫面第一眼看上去還像回事兒?!?/p>
沒有特別需求的話,調(diào)調(diào)反光顏色和強(qiáng)度就行了。有改進(jìn)方案的話歡迎在評(píng)論區(qū)分享。
然后是控制器,眾所周知這種骨架放到blender非常難用。
此時(shí)可以安裝小威廉伯爵大佬編寫的mmr插件,選中身體的骨架,將骨骼寫入并創(chuàng)造控制器。然后動(dòng)起來就會(huì)方便很多了。
綁定一次骨架比較麻煩,但綁好后馬娘的骨架就全部通用。已經(jīng)綁好預(yù)設(shè)的插件我會(huì)發(fā)出來。在預(yù)設(shè)里選擇快樂米可,然后點(diǎn)生成控制器即可。




這樣身體和尾巴的部分就大功告成了。

之所以頭部要單獨(dú)處理是因?yàn)橐崛”砬椤?/p>
馬娘的表情是通過運(yùn)動(dòng)頭部骨骼實(shí)現(xiàn)的,存儲(chǔ)表情信息的文檔是ast_chrXXXX_XX_facial_target.json,根據(jù)編號(hào)和服裝給它搜出來。

處理表情主要有兩種方式。
第一種方式是先把頭部的模型pfb_chr1007_30導(dǎo)入blender,利用mmd插件轉(zhuǎn)換模型為mmd模型,再導(dǎo)出為pmx。

然后在DerbyFacialConventor輸入對(duì)應(yīng)的數(shù)值,將ast_chr1007_30_facial_target.json拖入到這個(gè)窗口。


然后對(duì)應(yīng)部位的表情數(shù)據(jù)就會(huì)放到剪切板,選眉毛就是眉毛,選眼睛就是眼睛,選嘴巴就是嘴巴。新建txt保存后再改為csv就能用了。

打開PmxEditor,導(dǎo)入剛才導(dǎo)出的頭部pmx,將這三個(gè)文件都拖到表情變換里就行了。然后重新導(dǎo)出pmx,用blender的mmd插件導(dǎo)進(jìn)工程,在變形工具里就能看到對(duì)應(yīng)的表情了。


在選擇將變形綁定到.placeholder,等上一段時(shí)間,表情就能用了。

不過因?yàn)閙md縮放有差別,要先把頭部的骨架縮小到0.8,應(yīng)用,然后再放大到1.25倍,這樣表情的比例就正常了。


然后給材質(zhì)處理好,刪掉多余的幾個(gè)文件就行了。


然后將頭部的Neck加約束到身體的Neck,頭部的Head加約束到Head。

這套方案效果還可以,但是綁定后blender會(huì)卡頓,而且表情不完善萬圣節(jié)大米之類有虎牙的角色虎牙會(huì)飛出來。

第二種方案就是利用unity,有大佬編寫了對(duì)應(yīng)的腳本來處理。
其實(shí)在blender里也能寫,只是我不會(huì)……

首先下載unity創(chuàng)建工程,在工程里導(dǎo)入頭部模型、腳本Facialtest.cs、以及表情文件ast_chr1007_30_facial_target。

為了運(yùn)行腳本,需要安裝JsonNet.9.0.1.unitypackage。雙擊后在工程里點(diǎn)導(dǎo)入即可。
然后選中導(dǎo)入的頭部文件,去掉轉(zhuǎn)換單位的勾,勾上讀取/寫入,然后點(diǎn)應(yīng)用。

把頭部拖入場(chǎng)景里,選中后在右邊拖入腳本為新的組件,按圖里的填寫好資產(chǎn),按下ctrl+p運(yùn)行。


運(yùn)行過后再回到場(chǎng)景里拖一下show看看,你會(huì)發(fā)現(xiàn)表情已經(jīng)導(dǎo)入了。

然后在包管理器里安裝fbx插件,你就能右鍵導(dǎo)出這個(gè)頭部模型。



然后就能導(dǎo)出了。因?yàn)槟苡行?dǎo)出的只有默認(rèn)的ASCII的fbx,所以你blender里還得裝個(gè)能導(dǎo)入ASCIIfbx的插件。

然后導(dǎo)入的面部的形態(tài)鍵里就是所需的表情。
因?yàn)槊總€(gè)類別最前面的base是默認(rèn)表情,在使用時(shí)先把所有的base拉滿,否則還是會(huì)有虎牙突出的變形。

然后將頭部的Neck加約束到身體的Neck,頭部的Head加約束到Head……骨骼位置到unity過了一遍后還不一樣了,還得調(diào)回來……


當(dāng)然也可以是重新導(dǎo)入一個(gè)原始的頭部fbx,保留骨架和頭部,把面部替換過去。
這套控制器你不調(diào)回來也不影響用,只是強(qiáng)迫癥難受。

然后是法線問題。顯而易見的是如果你使用表情,陰影就會(huì)變得一團(tuán)亂。

這個(gè)暫且沒有找到解決方案,我現(xiàn)在是用法線編輯修改器,讓修改器指向某個(gè)以頭部head骨骼為父級(jí)的空物體。并且將該物體的z縮放調(diào)為6。還算能用吧
修改器上最大角度后面的鎖必須先勾上?。。ú蝗荒惆製v搞亂了的話就只能重新導(dǎo)入了,我這邊就不小心搞亂好幾次)




描邊用實(shí)體化修改器即可。
如果要求比較高,可以先把模型都復(fù)制一個(gè),全部合并重疊點(diǎn),然后再上透明材質(zhì)做實(shí)體化或全部法向翻轉(zhuǎn),沿法向放大


臉部描邊需要專門弄個(gè)節(jié)點(diǎn),利用ctrl的貼圖。身體和頭部如果有透明的地方,也需要用這個(gè)方式。


當(dāng)然這樣的描邊還是有點(diǎn)問題的……比如穿透的部分會(huì)缺失描邊,不知道怎么實(shí)現(xiàn)原版描邊。如果有看上去不協(xié)調(diào)的地方,你也得手動(dòng)修一下。


細(xì)心的玩家肯定知道賽馬娘眉毛是前置的。
其實(shí)在合成里處理一下就行。首先把眉毛的面片都選中,按p分離出來(本來有自帶的M_Mayu,不過導(dǎo)出的M_Mayu不帶頂點(diǎn)組。如果你覺得點(diǎn)眉毛改形態(tài)鍵太麻煩的話,也可以用數(shù)據(jù)傳遞到M_Mayu)
需要注意眉毛在里面還有一部分,也不要忘了開形態(tài)鍵最前面的base,不然按這個(gè)操作出來的眉毛是有點(diǎn)問題的。
然后單獨(dú)新建一個(gè)眉毛的集合放進(jìn)去。




給眉毛新建一個(gè)視圖層,在新視圖層里把眉毛以外的集合全部去掉


在合成里按圖連一下節(jié)點(diǎn),按f12就能看到合成眉毛在前面了的效果。

給眉毛單獨(dú)復(fù)制個(gè)面部材質(zhì),開背部剔除,不然背對(duì)著也能看見眉毛


大功告成
