UE4

UE4でVR空間にカノジョを錬金 25日目

メリークリスマス!!

UE4でVR空間にカノジョを錬金する Advent Calendar 2017 25日目、ついにUE4でVR空間にカノジョを錬金する Advent Calendar 2017ラストの記事です!

12/1~25日までに一人で、UE4を用いてサ○○レッスンとかVR○○ジョっぽいゲームを作って仮想彼女を生み出すことにチャレンジします。

ラスト、リップシンク実装の続きです。

ページの最後に25日時点での実装内容を、有料アセットを除いてソースをアップしていますので、もし気になる方がいればダウンロードしてみてください。

FloatCurve

最初に全FloatCurveデータでやる共通設定を行います。

FloatCurveの全項目を選択し、コンスタント補間を押します。
すると以下の画像の通りになると思います。これを全FloatCurveデータに実施します。
image.png

もし、最初が0から始まってない場合、時間0,値0のキーを打った後、コンスタント補間を実施してください。

リップシンク ロジック実装

リップシンクのロジック実装です。あらかじめユニティちゃんのBPにTagを付けます。
今回はUnityChanと名付けています。
image.png

まずユニティちゃんのBluePrintクラスにカスタムイベントを作成します。
ここではPlayLipと名付けています。

全体処理は以下のような感じです。
image.png

変数は以下の通りです。カスタムイベントで渡された各引数をこの変数にセットします。
image.png

image.png

変数をセットしたらタイムラインを20秒で20を返すFloatを作成します。
image.png
なぜ20秒なのかというと、再生するボイスデータが20秒を超えるものがないためです。

タイムラインをセット完了後、まずSetNewTimeでボイスデータのDurationをセットします。セット後、これをReverseで再生します。
image.png
タイムラインのUpdate経由で渡されるFloat値からボイスデータのDurationを引くことによって、現在の再生時間がわかるという仕組みです。

つづいてアニメーションBPに、リップシンク設定用の関数を作成します。これは外部で呼び出すのでPublicに設定します。
image.png

上記関数をユニティちゃんBPから各モーフターゲット値のFloatCurveから取得してから関数の引数にセットします。
image.png

これでモーフターゲットのロジック実装が終了です。
最後にこれをGameManagerのBlueprintから呼び出します。

GameManagerに以下の関数を追加します。ボイス再生とリップシンク再生イベント通知を行う関数です。ユニティちゃんに設定したタグをここで利用してコンポーネントを呼び出しています。
image.png

イベントグラフにて、ボイスを再生していたところを全て上記の関数を呼び出すように修正します。
image.png

全体としてはこのように実装しています。

image.png

これでリップシンク実装は完了です!

カノジョ錬金完了!

最低限一通り欲しい機能が実装できたので、早速動画に撮りました。

2日で作成した以下のプロトタイプに比べて、かなりカノジョが生き生きしているのを感じます。

これからの課題について

アドカレではこれで実装完了となりますが、ストアにリリースするには課題があります。

・FPSを90維持できていないのでCPU処理を見直す必要がある(重要)
→【最優先】90維持できないとストア審査に落ちるため
→最適化を入れていないため、解析ツールをみて処理負荷が高いところを修正していく
→必要ならマルチスレッドも検討にいれる

・チュートリアルが用意されてない(重要)
→【最優先】これがあるか否か、わかりやすいか否かでキーオンリー判定になる可能性があるため
→最初の選択肢でチュートリアルを入れる

・モデルに近づくと中身が見えてしまう
→判定用のコリジョンを用意し、近づいたらポストプロセスで画面を真っ黒にしてしまうとか

・表情が付いていない
→ボイス再生時にがんばって手付けするしか……

・手振りの実装できてない
→何かしらの形で手を振るアクションを入れたい

・アニメーションが基本動かない
→現状一つだけなので、ボイスにあわせてアニメーションポーズを切り替えてみようか……

・グレイちゃんがただのマスコットに
→ボイスも用意されているので、せっかくだからグレイちゃんルートも実装したい

・ニコニ立体ちゃんがただのマスコットに
→アニメーションのリターゲットに苦戦しているので、将来的に外すかも……

・キャラから視線をはずした時にボイスを言わせてみたい
視界を判定するロジックは実装できているので、これを応用した形で視線をはずしたときのボイスを再生されるように実装したい

ソース公開

ソースは以下にアップロードしています。
https://github.com/YuukiOgino/ChristmasKanojo/tree/master

ユニティちゃんライセンスとグレイちゃんの利用規約を継承していますので、利用する際は必ず守ってください。

まとめ

何とか書ききりました。完全に自己満足です。
昨年のリベンジが果たせてよかったです。

今年色々やりすぎて地獄しか見えなかったし、今回のでかなり満足したので、もう来年はやりませんw

・この内容は12/19に行われた「第2回UE4何でも勉強会 in 東京」のLTで先行公開しました。

以上でUE4でVR空間にカノジョを錬金する Advent Calendar 2017完走です!