Happy My Life

日常とか技術とか

UE4でミクさんに可愛く踊ってもらう方法

UnrealEngine Advent Calendarの18日目です。ほかの方のエントリーと比べて、こんなゆるいエントリーを書いてよいのか躊躇しますが、UE4をはじめて日が浅い人向けということで。

きっかけ

秋からようやく触り始めたUE4ですが、最初にとりかかった課題が「MMD(MikuMikuDance)系のモデルを読み込んで、モーションやカメラを動かすにはどうしたらよいのか?」。その手法をTwitterで尋ねて見ると「Unityなら、MMD4Mecanim使えばすぐできるよー」という返答が返ってくるものの「UE4は、わからん」という返答が…。 ということで、ググりながら進めていきました。基本的には、UE4でMMDのモーションを使ってみる - ぼっちプログラマのメモを基本にいろいろ調べた結果となっています。今回のようなMMD向けデータを使ったPV作りは、UE4の扱いに慣れるには割とよい手段だと思います。 ちなみに、完成した動画はこれ。

データを用意する

何はともあれデータを用意します。いくつかのデータを試してみましたが「綺麗にモデルデータが変換される」「尺が短い(試行錯誤しやすい)」という点から以下のデータを使いました。制作者に感謝。 - モデル: YYB式初音ミクver1.01 - モーション : galaxias!(修正版) - 曲 : galaxias! 背景はUE4の"建築デモ"をベースに作成しました。椅子やテーブルを撤去しただけですが。

FBXファイル(モデル&モーション)を用意する

モデル(PMXデータ)とモーション(VMDファイル)からFBXファイルを作成します。変換にはMMD4Mecanimに含まれているpmx2fbxコマンドを使います(便宜上、YYB式初音ミクver1.01のファイル名は、yyb_miku.pmxとリネーム)

>  pmx2fbx yyb_miku.pmx galaxias!.vmd

先のコマンドを実行するとFBXファイル(yyb_miku.fbx)が生成されます。生成されたFBXファイルは、UE4がサポートしているFBX(2013)形式ではないので、Autodeskが配布しているFBX Converterで変換します。 fbx-conv

プロジェクトを用意

“建築デモ"のプロジェクトをベースに背景データを用意します。踊るスペースを確保するために、椅子、テーブル、敷物を全部撤去します。撤去したあと、ビルドの実行を忘れずに。

bg

モデルデータ & テクスチャをインポートする

次にfbxファイルをインポートします。インポートするには、fbxファイルを、Content Brower(左下のウィンドウ)にfbxをドラッグ&ドロップします。すると、fbxインポートのウィンドウが開くので、モデル、スケルトン、モーション、モーフターゲットのデータをインポートするように指定します。モーフターゲットのインポートの指定(Import Morph targets)はデフォルトではチェックが入っていないので、忘れずにチェックを入れてください。そして"Import All"でインポート開始。

fbx-import-dlg

次にテクスチャーもインポートします。テクスチャーのインポートも、テクスチャー画像(pngファイル)を選択して、先ほどのようにドラッグ&ドロップします。

マテリアルを変更する

fbxファイルをインポートが完了するとfbxモデルに適用されている0_face0など多数の真っ白なマテリアルが生成されます。これらマテリアルにテクスチャーを割り当てていきます。 まず、マテリアルをダブルクリックしてマテリアルエディタを開き、テクスチャーをドラッグ&ドロップして、テクスチャーとマテリアルを関連づけていきます。 テクスチャーにはアルファ値が含まれているので、MaterialのBlend Modeを"Masked"にします。あとは、テクスチャのアルファとマテリアルのOpacity Maskを接続します。これでテクスチャの透過設定が有効になります。 この設定をすべてのマテリアルに対して行います。その設定後は以下の通り。

mat

マテリアルに割りつけるテクスチャーは、マテリアル毎に異なります。この関連付けはpmx2fbxで変換した際に出力されるxmlファイル(今回は、yyb_miku.xml)を元に行います。マテリアル毎のtextureIDを元に、textureListからテクスチャー名を引けば分かるのですが、いちいちそんなことやってられないので、xmlファイルをpythonスクリプトに通すことで見やすくすることができます。 今回利用したモデルのテクスチャーとマテリアルの関係は以下の通りです。

0 : face0     -> face.png
1 : face1     -> face.png
2 : eye1      -> face.png
3 : eye2      -> face.png
4 : face2     -> face.png
5 : eyehi     -> face.png
6 : Body00    -> face.png
7 : Body01    -> body01.png
8 : Body02    -> body03.png
9 : Glasses00 -> Glasses.png
10 : Glasses01 -> Glasses.png
11 : Hair01    -> hair02.png
12 : Skirt     -> body02.png
13 : Black01   -> body02.png
14 : Black02   -> body03.png
15 : luminous01 -> body02.png
16 : luminous02 -> body01.png
17 : luminous03 -> body03.png
18 : luminous04 -> body03.png
19 : Clothes01 -> body02.png
20 : Black03   -> body02.png
21 : Shoes     -> body02.png
22 : Clothes02 -> body03.png
23 : Hair02    -> hair01.png
24 : Hair03    -> hair01.png
25 : Hair04    -> hair03.png
26 : face*     -> face.png
27 : Body04    -> face.png
28 : Body03    -> face.png
29 : Hair shadow -> body01.png

モーフターゲットを設定する

このままでもそれっぽく動きますが表情の変化がないと蝋人形が踊っているだけになるので、モーフターゲットを使って目の瞬きや表情が出るよう設定していきます。ここでは、分かりやすい目と表情が変化するよう設定しています。 UE4でモーフターゲットを利用したアニメーションを行うには - モーフカーブを設定する - アニメーションブループリントを使って、モーフカーブとモーフターゲットを関連づける と2段階で設定します。 最初にモーフカーブを設定します。モーフカーブには名前とパラメータ(0.0~1.0)を設定します(瞬きなど表情変化はモーフカーブの値が参照されます)設定値は、MikuMikuDanceの編集画面から拾ってきます(FBXファイルに含まれているようだが、どうやって適用させるかが分からなかったので…)

morph

モーフカーブを設定したあとは、次にアニメーションブループリントで、モーフカーブとモーフターゲットの関連付けをします(アニメーションブループリントは、Content Browserから"yyb_miku"を右クリックして、"Create" > “Create Animation Assets” > “Create Anim Blueprint"で新規作成します) 今回はモーフカーブとモーフターゲットは一対一対応となるので、そのまま割り当てます。 なお、モーフターゲットのパラメータ名は、元のPMXデータでは日本語で設定されており、UE4のエディタにインポートすると全角文字に該当する文字はすべて?に置き換えらます。そこで、あらかじめモーフターゲット名は、PMXエディタで半角英数字に置き換えておくとよいでしょう。今回は、「0_majime」「2_nikori」「23_mabataki」「29_warai」と変更しています。

anim-blueprint

配置して踊らせる

つぎにステージ上に配置して踊らせます。先ほど作成したステージに、ミクさんを配置します。配置は、Content Browserからドラッグアンドドロップでレベル上に配置するだけです。

put-miku

カメラワークを設定する(マチネ)

Playを押すと、このままでも踊ります。が、見た目の変化が全く無く、自分でカメラを動かす必要があるためイマイチです。 ということで、マチネを使ってカメラワークの設定を行います。マチネは演出のために使う機能で、モデルのモーション変更、移動、カメラの切り替え、音の切り替えが指定できます。ここでは、カメラの切り替えや音の再生タイミングを指定しています。 マチネではカメラ2台と音を設定しています。これらを駆使して、動きのあるシーンを作っています。カメラは、フレーム単位で、位置や向きが指定でき、その間の移動やカメラの向きは補間するので、適当に割付しても、それっぽく動いてくれます。 あと、カメラが2台のうち、どちらカメラの画を採用するか、といったシーン切り替えは、Directorで指定します。

matinee

あとは、実行直後にマチネが実行されるようレベルブループリントで定義します。

lv-blueprint

この状態でプレイすると、アプリケーションとしてミクさんが踊るシーンが再生されます。踊っている姿を満喫したら最後に動画を作成します。マチネには動画を作成する機能(toolbarの"movie")で撮影します。撮影サイズや撮影フレーム数(fps)を指定して撮影を開始します。撮影後にはaviファイルが生成されます(音は含まれてません)

YouTube向けに編集

YouTubeにアップロードするための動画データを作成します。今回はMicrosoftムービーメーカー(無償)を使って編集しました。といっても、余計なフレームを削除、音入れ、エンコードしかしてませんが。あとは出来上がった動画をYouTubeにアップロードして終わりです。

工夫の余地は十分にある

今回は、わりと基本的な機能のみを使って作ってみました。ほかには、UE4の物理演算で髪や衣類を動かす、背景で花火を飛ばす(パーティクル)、といったこと等、様々なことが設定できます。工夫の余地はいろいろあるので、一度チャレンジしてみてはいかがでしょうか。 最後に冬コミ(C87)の告知ですが。最終日にUnrealEngine4の歩き方という本を頒布しますので、よろしければぜひ。 次は、 syunta (@suizenji_Z)さんのUE4のBPで4マッチパズルを作った話です。