#【前提】
・Unreal Engine 4.9.2の使用を前提に記述しています。ただし、現時点(2015/12/20)の最新版の4.10.1でも同様に動作します
・うそを書くつもりはありませんが、私の使用経験に基づいて記述しているため、間違いが多分にある可能性があります
・私の環境がWindowsなのでWindows環境前提です
・できる限り初心者前提で書くつもりです
・twitterのアンケートでMMDのモデルに関心がある率が高かったためMMDのモデルを前提に再利用を説明します
・MikuMikuDanceはこちらです
http://www.geocities.jp/higuchuu4/
・ニコニコ立体さんはこちらです
http://3d.nicovideo.jp/works/td14712
・【超重要】MikuMikuDanceのモデルは、MikuMikuDanceで使用される(レンダリング)ことを前提として作成されているものが多く、他の環境での使用を前提としていないため、モデラーさんによっては他の環境での使用を控えるよう注意書きをされている場合があります
__ 【超重要】他のMMDモデル用に作成されている他人のモデルを使用される場合は、作者さんが作成されているReadMe等を熟読し、モデルをお借りしているのだという意識の元で自己判断での使用をお願いします__
・MMDモデルの読み込みは、当記事の前提記事をお読みください
http://qiita.com/housakusleeping/items/4e171f2ab9a1805c4e77
・各httpのリンクを開く場合はブラウザの右クリックから「新しいタグで開く」が便利です
・手順に使用されている画像が小さくて見づらい場合が画像をクリックしてください。大きくなります
#【目的】
UE4でプレイヤーのキャラクタのゲーム内アニメーションをグレーマン先生(ブルーマン先生)等のプロトタイプから
変更する方法を解説します。
#【モーションのリターゲット】
##【骨】
人体のモーション(アニメーション)を再利用する場合、3Dモデルの骨の構造を理解することは重要です。
通常、3Dモデルの骨のことをボーン(Bone)と呼びます。
ボーンは回転、移動等を行って3Dモデルを曲げたり移動させたりする場合に使用します。
##【主要な部位】
異なるボーン構造をもったモーションをリターゲット機能を利用してモーションを変換して再利用する場合
人体の以下の部分の骨の名称が重要になります。
・頭
・首
・肩(左右)
・上腕(左右)
・前腕(左右)
・手首(左右)
・背中
・腰
・大腿(左右)
・下腿(左右)
・足首(左右)
手の指として
・親指(左右)
・人差し指(左右)
・中指(左右)
・薬指(左右)
・小指(左右)
これらの部分の骨の位置と名称が重要になります。
簡単ではありますがwikipediaに骨の名前が書かれています参照ください
https://ja.wikipedia.org/wiki/%E4%BA%BA%E9%96%93%E3%81%AE%E9%AA%A8%E3%81%AE%E4%B8%80%E8%A6%A7
##【ue4の標準ボーン】
ue4の標準ボーンと思われるこのキャラクタのボーン構造を、まず、理解することから始めます。
ue4のテンプレート等で使用されている人体キャラクタモデルです。
これを上記した主要な部位に当てはめると
・頭
head
・首
neck_01
・肩(左右)
clavicle_l 左
clavicle_r 右
・上腕(左右)
upperarm_l 左
upperarm_r 右
・前腕(左右)
lowerarm_l 左
lowerarm_r 右
・手首(左右)
hand_l 左
hand_r 右
・背中
spline_01
spline_02
spline_03
・腰
pelvis
・大腿(左右)
thigh_l 左
thigh_r 右
・下腿(左右)
calf_l 左
calf_r 右
・足首(左右)
foot_l 左
foot_r 右
手の指として
・親指(左右)
thumb_01_l 左手
thumb_02_l
thumb_03_l
thumb_01_r 右手
thumb_02_r
thumb_03_r
・人差し指(左右)
index_01_l 左手
index_02_l
index_03_l
index_01_r 右手
index_02_r
index_03_r
・中指(左右)
middle_01_l 左手
middle_02_l
middle_03_l
middle_01_r 右手
middle_02_r
middle_03_r
・薬指(左右)
ring_01_l 右手
ring_02_l
ring_03_l
ring_01_l 左手
ring_02_l
ring_03_l
・小指(左右)
pinky_01_l 左手
pinky_02_l
pinky_03_l
pinky_01_r 右手
pinky_02_l
pinky_03_l
となります。
この辺りの骨の命名は、命名する人によってもツールによっても違いますので注意が必要です。
ue4の標準構造の命名規約がこうなっていると言うことです。
(_l _r等の左右の名前の付け方も前だったリ後ろだったりします)
例えば、指などの名称も
■ 親指:Thumb
■ 人差し指:Pointer Finger, Index Finger, Forefinger, First Finger,
■ 中指:Middle Finger, Long Finger, Second finger,
■ 薬指:Ring Finger, Third Finger
■ 小指:Little Finger, Pinkie, Pinky, Fourth Finger
のように様々な名称付けがされている場合がありますので、他のツール(他の人)で作成したボーンの構造には注意が必要です。
当然ですが、腰などの他部位に関しても同じことが言えます。
##【MMDの標準ボーン】
MMDのモデルであるpmxのニコニコ立体さんのモデルです
手の指の骨はこうです
次にMikuMikuDanceのモデルの保存形式であるpmd,pmxの標準ボーンを上記の主要部位に当てはめると
・頭
頭
・首
首
・肩(左右)
左肩
右肩
・上腕(左右)
左腕
右腕
・前腕(左右)
左ひじ
右ひじ
・手首(左右)
左手首
右手首
・背中
下半身
上半身1
上半身2
・腰
腰
・大腿(左右)
左足
右足
・下腿(左右)
左ひざ
右ひざ
・足首(左右)
左足首
右足首
手の指として
・親指(左右)
左親指0
左親指1
左親指2
右親指0
右親指1
右親指2
・人差し指(左右)
左人差1
左人差2
左人差3
右人差1
右人差2
右人差3
・中指(左右)
左中指1
左中指2
左中指3
右中指1
右中指2
右中指3
・薬指(左右)
左薬指1
左薬指2
左薬指3
右薬指1
右薬指2
右薬指3
・小指(左右)
左小指1
左小指2
左小指3
左小指1
左小指2
左小指3
##【ボーンの対応表】
骨の部位(ベース) | ue4標準ボーン | MMD標準ボーン |
---|---|---|
頭 | head | 頭 |
首 | neck_01 | 首 |
肩(左) | clavicle_l | 左肩 |
肩(右) | clavicle_r | 右肩 |
上腕(左) | upperarm_l | 左腕 |
上腕(右) | upperarm_r | 右腕 |
前腕(左) | lowerarm_l | 左ひじ |
前腕(右) | lowerarm_r | 右ひじ |
手首(左) | hand_l | 左手首 |
手首(右) | hand_r | 右手首 |
背中1 | spline_01 | 下半身 |
背中2 | spline_02 | 上半身1 |
背中3 | spline_03 | 上半身2 |
腰 | pelvis | 腰 |
大腿(左) | thigh_l | 左足 |
大腿(右) | thigh_r | 右足 |
下腿(左) | calf_l | 左ひざ |
下腿(右) | calf_r | 右ひざ |
足首(左) | foot_l | 左足首 |
足首(右) | foot_r | 右足首 |
骨の部位(詳細設定) | ue4標準ボーン | MMD標準ボーン |
---|---|---|
親指(左1) | thumb_01_l | 左親指0 |
親指(左2) | thumb_02_l | 左親指1 |
親指(左3) | thumb_03_l | 左親指2 |
親指(右1) | thumb_01_r | 右親指0 |
親指(右2) | thumb_02_r | 右親指1 |
親指(右3) | thumb_03_r | 右親指2 |
人差し指(左1) | index_01_l | 左人差1 |
人差し指(左2) | index_02_l | 左人差2 |
人差し指(左3) | index_03_l | 左人差3 |
人差し指(右1) | index_01_r | 右人差1 |
人差し指(右2) | index_02_r | 右人差2 |
人差し指(右3) | index_03_r | 右人差3 |
中指(左1) | middle_01_l | 左中指1 |
中指(左2) | middle_02_l | 左中指2 |
中指(左3) | middle_03_l | 左中指3 |
中指(右1) | middle_01_r | 右中指1 |
中指(右2) | middle_02_r | 右中指2 |
中指(右3) | middle_03_r | 右中指3 |
薬指(左1) | ring_01_l | 左薬指1 |
薬指(左2) | ring_02_l | 左薬指2 |
薬指(左3) | ring_03_l | 左薬指3 |
薬指(右1) | ring_01_r | 右薬指1 |
薬指(右2) | ring_02_r | 右薬指2 |
薬指(右3) | ring_03_r | 右薬指3 |
小指(左1) | pinky_01_l | 左小指1 |
小指(左2) | pinky_02_l | 左小指2 |
小指(左3) | pinky_03_l | 左小指3 |
小指(右1) | pinky_01_r | 右小指1 |
小指(右2) | pinky_02_r | 右小指2 |
小指(右3) | pinky_03_r | 右小指3 |
#【MMDのモデル読み込みプラグイン導入】
こちらの記事を確認して、ニコニコ立体さんをue4に持ってきてください。
http://qiita.com/housakusleeping/items/4e171f2ab9a1805c4e77
##【モーションリターゲット】
異なるボーンのモーションのリターゲットには大きく2つの方法があります。
1)ue4の標準リグ(ボーンではない)を使用する方法
2)異なるボーンのスケルタルメッシュのどちらかをリグ化する方法
###1)ue4の標準リグ(ボーンではない)を使用する方法
1 ue4標準ボーンのリグ登録
まず、ue4の標準ボーンをリターゲットするために設定します。
ue4の標準リグを選択するため
リグの選択画面で「ヒューマノイドリグを選択」をクリックします
下記のようにリグとボーンが同じ名称であるため、勝手に紐づけされ設定されます。
ue4の標準リグにはue4の標準ボーンと同じものが紐づけされています。
「ポーズを表示」ボタンをクリックしモデルのスタンスを確認します。
以下のように確認画面が出ますので、モデルのリセット時の、AスタンスTスタンス等を必ず確認します。
また、ここで指や腕、足等々曲がっている等の問題があるとリターゲットが上手く実行できないため
ここで修正できるものは修正します。
以下の例は方の角度を修正しAスタンスからTスタンスに変更する例です。
ue4の標準ボーンの場合は特に何も修正が必要ないので、そのまま「ポーズの保存」ボタンをクリックします。
2 MMDモデルのリグ登録
ニコニコ立体さんのスケルトンをダブルクリックします
ue4の標準リグを選択するため
リグの選択画面で「ヒューマノイドリグを選択」をクリックします
【ボーンの対応表】を参考に、ue4の標準リグにMMDのボーンを紐づけていきます。
ボーンの設定が終わったら「ポーズを表示」ボタンでスタンスを確認します。
ここで注意するべきは、モデルのTスタンスとAスタンスの違いです。
(後述します)
ただし、ue4標準ボーンとMMD標準ボーンは同様にAスタンスであり特に確認は必要ありません。
ですので、このまま「ポーズを保存」ボタンをクリックします。
次の【モーションの変換コピー】に進めます。
###2)異なるボーンのスケルタルメッシュのどちらかをリグ化する方法
ue4で標準に用意されている人型のリグであるhumanoidrigを使用せずに
自分でリグを指定する方法です。
リグの元になるボーンを選択し、右クリックを押し「作成する」を選択後に「リグを作成」を選択します。
OKをクリックします
新たなリグを作成すると、リターゲットマネージャのリグ選択画面で追加したリグが使用できるようになります。
これを適用すると以下のように今回追加したリグが変換の型になって、ここに各ボーンを紐づけていくことになります。
この方法を使った場合、リグの元になったボーンはそのままボーンが紐づけられるため便利です。
感の良い方は気付かれたかと思いますが
このリグを使用してue4の標準ボーンをこのリグに紐づける場合、先程の「1)ue4の標準リグ(ボーンではない)を使用する方法」に逆のことをやることになります。
つまり、ue4の標準ボーンをMMDの標準ボーンに紐づける作業が必要になります。
詳細は説明しませんが、みなさん試してみてください。
#【モーションの変換コピー】
上記の異なるリターゲット設定が終わったら、モーションのリターゲットをしてみましょう。
とりあえず、試しに以下のアニメーションをMMDモデルにコピーしてみます。
コピーしてリターゲットしたいモーションを選択します
右クリックしメニューを開き「別のスケルトンのコピーを作成」を選択します。
リターゲットが開始されコピーされたMMDのモデルのアニメーションが再生されます。
うまく行きました?
明らかに手首の座標が狂っています。
#【リターゲットの調整】
ここまでは、経験がなくてもある程度、クリアできる単純な手順です。
モーションのリターゲットで重要なのは、こういった不具合が起こったときに
トラブルを経験し、対処した経験の積み重ねによる調整です。
さて、なぜこのようなことが起こってしまったのか考えなければなりません。
一番、良いのは「なぜ?」と考えて色々なところを見直すことです
###【リターゲットのトラブル】
よくあるトラブルの例の一覧を箇条書きしておきます
・Aスタンス、Tスタンスの誤り
異なるボーンのリターゲットを行う場合、リターゲット元、リターゲット先でスタンスが違う場合
どちらかのスタンスに合わせなければなりません
・余計なボーンの回転角度(rotation)が入っている
異なるボーンのリターゲットを行う場合、できうる限り、各ボーンの回転角度は合わせる必要があります
この例はよくおこります。そもそも、原理的にはAスタンス、Tスタンスの違いもこれが原因です。
また、スタンスポーズ(元のポーズ)をよく見ると、実は指が曲がっていたり等々
私も沢山経験しました。
・左と右を間違える
これは単純にリグに登録するときに左のボーンと右のボーンを間違える場合です。
私の経験上、指等の登録時に陥りがちです。
・そもそもリグのボーン登録を間違える
リグを登録するとき対応するボーンを正しく登録していない、英語のボーンの場合ありがちです。
※「モーションリターゲットは一日にしてならずじゃ」by 猪熊滋悟郎
###【この例の答え】
この、ue4の標準ボーンから、MMDの標準ボーンへのリターゲット時の答えは以下です。
(これですべて解決するとは限りません)
ue4の標準ボーンを開き、「ref pose」をクリックしてスタンスポーズ(大元のポーズ)を確認してみましょう。
ここを合わせて、リターゲットしてみましょう。
ue4の標準ボーンの画面からリターゲットマネージャを起動しポーズを修正します。
リターゲットマネージャの「ポーズを表示」ボタンをクリックします
肘の部分のボーンに角度がついてしまっていますので、「-30」回転しできる限りまっすぐにします。
修正したらポーズを保存をクリックし編集後のポーズを保存します
この辺りの調整は、完全な正解がありません
よく見て、おかしいところを確認し調整していきましょう。
#【プレイヤーキャラの入れ替え】
ここまで、異なるモーションのリターゲットがなんとなく上手くいくようになったら
ゲーム上のプレイヤーのキャラを入れ替えてみます。
例として、サードパーソンのテンプレートのキャラクタをMMDの標準ボーンに変えてみます。
サードパーソンのプロジェクト上に上記の方法でMMDモデルを読み込み
リターゲットでモーションのコピーが正しく行われるところまで実施しておきます。
###【コントロール系の全てアニメーションのリターゲット】
プレイヤーキャラクタになっている「グレーマン先生」のボーンを選択し右クリックし、メニューを開きます
ここで「別のスケルトンへリターゲットする」を選択します
「選択」をクリックしリターゲットを行います。
この時点でエディタの「プレイ」ボタンを押しゲームを実行するとグレーマンがまったくアニメーションしなくなります。
次に元々、プレイヤーをコントロールしていた以下のアクターのブループリントをエディタで開きます
ブループリントを開いたら「ビューポートタグ」を開き「Mesh]を選択します。
ここが右の赤枠で示す通り「グレーマン」のままになっています。
ここで、MMDモデルがまったく動かずAスタンス等になっているようなら、どこかで間違っています。
上記をもう一度読み返し再挑戦してみてください。
上手くアニメーションされていたらブループリントをコンパイルします。
エディタに「プレイボタン」を押すとプレイヤーキャラクタが入れ替わり、アニメーションも適用されました。
なぜ、アニメーションのリターゲットだけでなくゲーム自体も問題ないかといいますと
この方法を使用すると
・アニメーション全て
・アニメーションブループリント(ステートマシンも)
・アニメーションブレンドスペース
の全てが新しいキャラクタに置き換わるからです。以下のように入れ替わっているはずです。
#【応用】
この手順の応用を行うと以下のような動画も簡単に作成可能です。
[ue4] A Girl and Her Kite [WIP]
https://www.youtube.com/watch?v=SynlYfasm-M
[ue4] A Boy and His Knife [He does not have a knife]
https://www.youtube.com/watch?v=30nkgEnGEoc
ゲームだとこんな感じ
[UE4]鷺宮カノさんに私のゲームに来て頂いた[中野シスターズ」
https://www.youtube.com/watch?v=8f38kkuDl20
#【おまけ】
今回、このブログを作成するために作成した途中経過のプロジェクト
ニコニコ立体さんとグレーマンのリグの紐づけだけ行ったプロジェクトを以下に置いておきます
リターゲットを試してみたい方どうぞ
#【最後に】
アニメーションデータの再利用は結構奥の深い分野です。
私のmotionbuilder使用時の頃からの経験からue4に置き換えて記述しています
モーションのリターゲットは、最終的には調整がすべてです。
この方法以外にも、モーションによるモデルのポリゴン抜け等に対処するために
加算キーを追加してモーション自体を修正することもあります。
みんさんもモーションを上手く再利用して、作成時間の節約をしましょう。
最後まで読んでいただきありがとうございました。
明日はみんな大好きue4の中の人、@junyash シモダさんです。
#【追記 2016/01/10】
##【ボーンの対応表 HumanIK】
骨の部位(ベース) | ue4標準ボーン | HumanIKボーン |
---|---|---|
頭 | head | Head |
首 | neck_01 | Neck |
肩(左) | clavicle_l | LeftShoulder |
肩(右) | clavicle_r | RightShoulder |
上腕(左) | upperarm_l | LeftArm |
上腕(右) | upperarm_r | RightArm |
前腕(左) | lowerarm_l | LeftForeArm |
前腕(右) | lowerarm_r | RightForeArm |
手首(左) | hand_l | LeftHand |
手首(右) | hand_r | RightHand |
背中1 | spline_01 | Spine |
背中2 | spline_02 | Spine1 |
背中3 | spline_03 | Spine2 |
腰 | pelvis | Hips |
大腿(左) | thigh_l | LeftUpLeg |
大腿(右) | thigh_r | RightUpLeg |
下腿(左) | calf_l | LeftLeg |
下腿(右) | calf_r | RightLeg |
足首(左) | foot_l | LeftFoot |
足首(右) | foot_r | RightFoot |
HumanIKの指は1~4まであるので4は含めない
骨の部位(詳細設定) | ue4標準ボーン | HumanIKボーン |
---|---|---|
親指(左1) | thumb_01_l | LeftHandThumb1 |
親指(左2) | thumb_02_l | LeftHandThumb2 |
親指(左3) | thumb_03_l | LeftHandThumb3 |
親指(左4) | LeftHandThumb4 | |
親指(右1) | thumb_01_r | RightHandThumb1 |
親指(右2) | thumb_02_r | RightHandThumb2 |
親指(右3) | thumb_03_r | RightHandThumb3 |
親指(右4) | RightHandThumb4 | |
人差し指(左1) | index_01_l | LeftHandIndex1 |
人差し指(左2) | index_02_l | LeftHandIndex2 |
人差し指(左3) | index_03_l | LeftHandIndex3 |
人差し指(左4) | LeftHandIndex4 | |
人差し指(右1) | index_01_r | RightHandIndex1 |
人差し指(右2) | index_02_r | RightHandIndex2 |
人差し指(右3) | index_03_r | RightHandIndex3 |
人差し指(右4) | RightHandIndex4 | |
中指(左1) | middle_01_l | LeftHandMiddle1 |
中指(左2) | middle_02_l | LeftHandMiddle2 |
中指(左3) | middle_03_l | LeftHandMiddle3 |
中指(左4) | LeftHandMiddle4 | |
中指(右1) | middle_01_r | RightHandMiddle1 |
中指(右2) | middle_02_r | RightHandMiddle2 |
中指(右3) | middle_03_r | RightHandMiddle3 |
中指(右4) | RightHandMiddle4 | |
薬指(左1) | ring_01_l | LeftHandRing1 |
薬指(左2) | ring_02_l | LeftHandRing2 |
薬指(左3) | ring_03_l | LeftHandRing3 |
薬指(左4) | LeftHandRing4 | |
薬指(右1) | ring_01_r | RightHandRing1 |
薬指(右2) | ring_02_r | RightHandRing2 |
薬指(右3) | ring_03_r | RightHandRing3 |
薬指(右4) | RightHandRing4 | |
小指(左1) | pinky_01_l | LeftHandPinky1 |
小指(左2) | pinky_02_l | LeftHandPinky2 |
小指(左3) | pinky_03_l | LeftHandPinky3 |
小指(左4) | LeftHandPinky4 | |
小指(右1) | pinky_01_r | RightHandPinky1 |
小指(右2) | pinky_02_r | RightHandPinky2 |
小指(右3) | pinky_03_r | RightHandPinky3 |
小指(右4) | RightHandPinky4 |