※本記事はCyber Agent ゲーム技術戦略室 公式ブログの中からVRに関連する技術記事を寄稿いただいております。


 



本記事はUnreal Engine4でMMDモデルを使ってみた(後編)の後の話になります。


 


本記事でできること


・好きなキャラクターモデルをVRで見れる

・好きなキャラクターモデルをVR上で動かせる



 


1.開発環境


Windows 8.1 Pro

Unreal Engine 4.10.4

利用テンプレート:Third Person


 


2.Oculus Runtimeをインストールする


Unreal Engine4.10.4では、Oculus Runtimeのバージョン0.8でなければVRプレビューが利用できないみたいでした。これに伴い以前起動できていたVRゲームが起動できなくなったりしましたが致し方ありません。インストール後は再起動しましょう。



 


3.キャラクターを入れ替える


今回はテンプレートにThird Personを使っているので、ゲームを起動するとデフォルトのグレーマンが出現して操作できます。ここでは、前回の記事(Unreal Engine4でMMDモデルを使ってみた(後編))で作ったキャラクターをグレーマンと入れ替えたいと思います。ThirdPersonBPというフォルダがコンテンツブラウザ(ウィンドウ→コンテンツブラウザ→コンテンツブラウザ1〜4)から確認できると思います。その中のBluePrintsフォルダにあるThirdPersonCharacterを開きます。



画面にグレーマンが出現するのでクリックします。すると、詳細ウィンドウ(ウィンドウ→詳細)にMeshという項目があることを確認できると思います。この項目のスケルタルメッシュを作成したスケルタルメッシュに変更すればキャラクターの入れ替えが完了します。ただ、このままではキャラクターに動きがないので、初期ポーズのまま走ったり、ジャンプしたり歩いたりします。



 


4.アニメーション用アセットを作成する


4章ではキャラクターに動きを付けるために、アニメーションコンポジットと呼ばれるアニメーションアセットを作っていきます。前回の記事(Unreal Engine4でMMDモデルを使ってみた(後編))でキャラクターとモーションを取り込んでいれば、アニメーションシーケンスがフォルダ内にあるはずです。これを使ってキャラクターのアニメーションを作っていきます。


 


4.1 歩行モーションを作成する

歩行モーションに関してはアニメーションコンポジットではなく、アニメーションシーケンスを使います。また歩行モーションはジャンプモーションと比較して特に編集する必要がないので簡単にできます。歩行モーションの作成にはブレンドスペース1Dと呼ばれる、単一の入力値に基いてブレンドするアセットを使います。ブレンドスペース1Dを作成したいフォルダで下図のように選択して下さい。



スケルトンを選択するよう促されるので対象のスケルトンを選択します。



ブレンドスペース1Dを開くと下図のように、中央下部にアニメーションシーケンスを配置できる一本の線が確認できます。



では、アセットブラウザ(ウィンドウ→アセットブラウザ)に表示されている「クロエ・ルメール_Anim_rea_stand_vmd」を線にドラッグアンドドロップしてみます。そうすると…クロエが動き始めました(^o^)



さらにその隣に、「クロエ・ルメール_Anim_歩行モーション_おんな_ゆっくり_vmd」を配置してみます。今度はクロエが歩きはじめました!ここでX軸を0に近づけると徐々に待機モーションになることが分かります。



つまり、歩きモーションの隣に走りモーションを配置すると、



X軸を移動させると歩きモーションから走りモーションに切り替えることができました。これで歩行モーションは完成です!本章で作ったブレンドスペース1Dは5章にて実際に使っていきます。


 


4.2 ジャンプモーションを作成する

ジャンプモーションは待機モーションと異なり、5章のアニメーションBPを作るにあたり3つのアニメーションコンポジットに分割する必要があるので少し手間がかかります。まず、アニメーションコンポジットを作成したいコンテンツブラウザ上で右クリックして下図のように選択します。



調べると命名規則は決まっているようですがここでは、JumpStartAnimComposite、JumpLoopAnimComposite、JumpEndAnimCompositとして3つ作成しておきました。まず、JumpStartAnimCompositeを開いてみると下図のような画面が表示されます。ドキュメントによるとアニメーションコンポジットは、複数のアニメーションを合成して単一ユニットとして扱えるように設計されたアニメーションアセットとありますが、ここで行う作業は合成というより加工と表現した方が良さそうな気がします。



では、コンポジットトラックにアセットブラウザ(ウィンドウ→アセットブラウザ)に表示されているクロエ・ルメール_Anim_11_やったあ_vmdをドラッグアンドドロップします(ドキュメントにもやり方が載っています)。するとクロエが永遠とジャンプを繰り返します。



このアニメーションコンポジットは名前の通り、ジャンプの開始アニメーションを作成したいので、コンポジットトラックの上部分をクリックして詳細ウィンドウを表示させます。そこに表示されている開始時間、終了時間を変更することで好きなアニメーションを新たに作れます(これだけだと加工っぽい)。再生レート、ループ回数についてはデフォルトのままにしておきました。開始時間を0.0、終了時間を0.566にして保存しました。



JumpLoopAnimCompositでは、ジャンプ中のアニメーションを作成したいので開始時間を0.567、終了時間を0.567にします。



JumpEndAnimCompositでは、ジャンプの終了アニメーションを作成したいので開始時間0.568を、終了時間1.333333にします。



これで完成!!

アセットができたので、次章にてどのタイミングでクロエのアニメーションを切り替えるかを制御していきます。


 


5.アニメーションBPを作成する


5.1 ステートマシーンを作成する

アニメーションBP(ブループリント)はドキュメントによると、スケルタルメッシュのアニメーションを制御するグラフとのこと。アニメーションBPにはEventGraphAnimGraphという2つの主要コンポーネントがあって、この2つが連動して各フレームの最終アニメーションが作成されるとか。ではさっそく、アニメーションBPを作成したいコンテンツブラウザ上で右クリックして下図のアニメーションBPを選択します。



スケルトンを選択するよう促されるので対象のスケルトンを選択します。



作成したアニメーションBPを開くとAnimGraphが表示されているので、キャラクターの最終アニメーションポーズを決めるために、新しくステートマシーン(右クリック→stateと入力→新規のステートマシーンを追加)を追加します。



新しく追加したステートマシーンを最終アニメーションポーズへ繋いでおきます。この状態でコンパイルしてもState Machineの中身がないのでポーズは変わりません。ですので、ステートマシーンをダブルクリックして状態を作っていきます。



 


5.2 ステートを作成する

ステートマシーン内では、右クリックメニューからコメントを追加コンジットを追加ステートを追加の3つのみ追加が許されています。今回は単純なキャラクターの動きを作るだけなのでステートを追加のみ利用します。コンジットはドキュメントを見ると、同じ死亡アニメーションでも、何で殺されたかによってアニメーションを変えたいとき等に使えるよ、と書かれてます。クロエの状態としては、4章で作成した歩行モーション、ジャンプモーションが使いたいので、WaitJump/StartJump/LoopJump/Endという4つの状態が必要です。各ステートを追加したら繋いでいきます



まだ状態を追加しただけなので今度は状態の中身を作っていきます。Waitにはブレンドスペース1Dで作成した歩行モーションを使うのですが、アニメーションシーケンスを切り替えるための変数を用意しておく必要があります。これは、マウスでx軸を移動するとアニメーションが変わっていたものを変数によって切り替えるためです。画面下部のマイブループリントの変数項目から新しくspeed(Float型)を追加します。また、ジャンプをしているかどうかをチェックするためのinAirFlag(Bool型)も追加しておきます。



ステートの中にはデフォルトで最終アニメーションポーズが配置されています。ここに画面下部のアセットブラウザから、4章で作成した歩行モーションであるBlendSpace1Dをドラッグアンドドロップで配置して最終アニメーションポーズに繋ぎます。BlendSpace1Dには先ほど追加したspeedを繋ぎます。



次に、speedに値を格納していかなければならないのでタブからイベントグラフに切り替えます(イベントグラフタブがなければ画面下部のマイブループリントのグラフ項目内にあるのでダブルクリックで開きます)。実際、ここに書く内容はグレーマンに実装されているノード群と同じなので、Mannequin/Animations/ThirdPerson_AnimBPを開きイベントグラフの内容をコピーします。変数名が異なる場合は修正します。これにより、speedとinAirFlagに値を入れるための実装が終わりました。



再びアニムグラフに戻り、Jump/Startを実装していきます。Jump/Startステートをダブルクリックすると、こちらも最終アニメーションポーズだけ配置されているので、アセットブラウザからJumpStartAnimCompositeをドラッグアンドドロップして線で繋ぎます。実はデフォルトでループ再生のチェックが入れられているので、はずすことを忘れないようにします。同様に、Jump/LoopとJump/Endもアセットブラウザからコンポジットをドラッグアンドドロップで配置して線を最終アニメーションポーズに繋ぎます。



 


5.3 状態遷移条件を作成する

各ステートができたので、状態を遷移する条件を決めていきます。遷移する条件は、ステートとステートの間にあるアイコンをダブルクリックした中に書きます。画面上には4つアイコンがあるので4つ指定することになります。



始めに、WaitからJump/Startへの遷移条件を書きます。ジャンプの状態に遷移するためには、キャラクターが空中に浮いている必要があります。ですので、イベントグラフで追加したIs Falling関数で取得した値によって、キャラクターの状態を見極めます。



Jump/StartからJump/Loopへの遷移条件を書きます。グレーマンを参考に遷移条件を書いても問題ありませんでした。Time Remaingはアニメーションの残り時間を取得できるようです。



Jump/LoopからJump/Endへの遷移条件を書きます。こちらは、Jump/Startの逆の条件でキャラクターが空中に浮いていなければ遷移するという条件になります。



最後にJump/EndからWaitへの遷移条件を書きます。Jump/StartからJump/Loopへの遷移条件と同様、グレーマンを参考に遷移条件を書いても動作に問題はありませんでした。



これで全ての遷移条件が設定できたので保存してコンパイルしてみます。エラーなしであれば下図のように、コンパイルマークに緑のチェックが入り、Waitステートにいる時間がカウントされていきます。



 


6.マップにキャラクターを配置する


いよいよキャラクターをマップに配置します。まだアニメーションBPがキャラクターに設定されていないので、BluePrints/BluePrints/ThirdPersonCharacterを開き、クロエを選択した上でAnimation ModeをUse Animation Blueprint、Anim Blueprint Generated Classを5章で作ったアニメーションBPを設定します。これでビューポートに表示されているクロエも歩行モーション(待機モーション)を開始するはずです。



マップにBluePrints/BluePrints/ThirdPersonCharacterをドラッグアンドドロップして配置し、VRプレビューに変更して起動すると…



クロエを動かせるではありませんか(^o^)




安心してください、見えませんよ


 


7.まとめ


キャラクターの動きを作るのは結構時間がかかりました。しかし、一度作ってしまえば自由にマップを動きまわらせることができるので、その時の満足感は半端ではありませんね(^o^)マップを真面目に作れば簡単なゲームも作れてしまいそうです。今回は待機とジャンプの状態遷移のみしか使っていませんでしたが、攻撃の状態と状態遷移の条件を作ってしまえばすぐに攻撃もさせられるのですごく便利です(もちろんアニメーションが必要ですが。。)。VR上でクロエを見て違和感がなかったのも良かった点です。近づいたら視点をプレイヤーに向けたりすると本当にそこにいる感が増しました。


※元記事:https://tech.sge.cyberagent.co.jp/ue4-mmd-vr/


 


©CyberAgent, inc. All Riht Reserved


Copyright ©2016 VR Inside All Rights Reserved.

情報提供元: VR Inside
記事名:「 Unreal Engine4でMMDモデルをVRで見てみた