本内容は複数の記事で構成されています。検索などでこの記事に直接飛んできた方はまず以下の記事をご確認ください。
pafuhana1213.hatenablog.com
はじめに
ゲーム中にPrintStringなどで出力したデバッグ情報の確認やクラッシュ時の原因調査など、ログファイルはすごく便利で得られるものも多いです!
ということで、まずはログの確認、ファイル取得から。
本内容は複数の記事で構成されています。検索などでこの記事に直接飛んできた方はまず以下の記事をご確認ください。
pafuhana1213.hatenablog.com
ゲーム中にPrintStringなどで出力したデバッグ情報の確認やクラッシュ時の原因調査など、ログファイルはすごく便利で得られるものも多いです!
ということで、まずはログの確認、ファイル取得から。
この記事はUnreal Engine 4 Advent Calender 2018の13日目の記事です。
qiita.com
おかげさまでUE4モバイル案件が増えてきたということもあり、ネット上にあまり情報がないiOS開発時の実機デバッグ・プロファイリング方法についてまとめてみました。
…社内外含めて情報全然ない!がんばた!
なお、全て実機上でのデバッグ・プロファイリングについてです。UE4エディタ上で行う際はモバイルプレビュア機能をご活用ください。ただしあくまで疑似再現なので、ちゃんとデバッグ・プロファイリングするときは実機でしましょう!
api.unrealengine.com
また、stat関連とログ取得以外に関しては必ずMacが必要になります。
mac miniポチった pic.twitter.com/EUe5yyV3FO
— おかず (@pafuhana1213) October 31, 2018
Macと仲良くできるかはまた別問題だけどな!
皆さん大好きな証明書、プロビジョニングファイル、リモートビルドを含む開発環境の構築に関しては、わんちゃん( @WanchanJP )さんの神記事に全てが載っているのでご確認くださいまし…(本当に…本当にありがとうございます!)
soramame-games.com
この記事はこちらの記事の続きです
pafuhana1213.hatenablog.com
前回はOVRLipSyncのサンプルについて解説しました。しかし、サンプルに含まれるモデルはOVRLipSyncの仕様に超特化したものなので、そのまま他モデルに適用することはできません。
そこで、他モデルでOVRLipSyncを使うにはどうすればいいのかについて解説します。なお、今回の解説では皆大好きなGrayちゃんのモデル・ボイスをお借りしています。
3Dモデル:Grayちゃんモデルデータ – rarilog
ボイス:Grayちゃんボイスが、より扱いやすくなりました - Grayちゃん OFFICIAL WEBSITE
— おかず (@pafuhana1213) November 25, 2018
まずは公式サンプルプロジェクト( OVRLipSyncDemo )に含まれるOVRLipSyncプラグインを別プロジェクトで移植します。今回はGrayちゃんの3Dモデルに含まれるGrayChanProjectに移植します。
OVRLipSyncDemoにある Pluginsフォルダ を GrayChanProjectのルートフォルダ(GrayChanProject.uprojectがあるフォルダ)にコピペします
GrayChanProjectのConfigフォルダにある DefaultEngine.ini に 以下の文字列を追加します。これでマイクが使用可能になります。なお、事前に録音した音声しか使わない場合はこの設定追加は不要です。
[Voice] bEnabled=True [OnlineSubsystem] bHasVoiceEnabled=False
今回はマイク音声ではなく、事前に収録された音声であるGrayちゃんボイスを使ってみます。マイクを使用する場合でもBPによる実装内容は殆ど変わりないからです。準備周りはサンプルからコピペしましょう!
まずは使用する音声データをUE4にインポートし、右クリックメニューからOVRLipSync Frame Sequenceを生成します。(詳細は前回の記事で)
次に、ThirdPersonCharacterにOVRLipSyncPlaybackActorコンポーネントとAudioコンポーネントを追加します。
そして、OVRLipSyncPlaybackActorコンポーネントには先程作成したOVRLipSync Frame Sequenceを指定します。
また、Audioコンポーネントにはインポートした音声データ(SoundWave)を指定し、さらに勝手に自動再生されないように Auto ActivateをOFFにしておきます。
最後に、OVRLipSyncが解析した口パクをGrayちゃんモデルに渡す処理をBPで実装します。
まずは、ボイスとOVRLipSyncによる解析を開始する処理を書きます。今回は簡単に 1キー を押したら処理を開始するようにします。
次に、OVRLipSyncによる解析結果が更新される On Visemes Ready イベントにてGrayちゃんのモーフターゲットを制御する処理を実行します。
前回の記事で紹介した通り、OVRLipSyncはVisemsという音声解析を元にした口の形状パラメータの配列を返してくれます。
公式ドキュメント:Viseme Reference
そして、今回使用するGrayちゃんモデルには母音( a, i, u, e, o )用のモーフターゲットが用意されています。
ですので、Visemsの10番目から15番目のパラメータを各Visemに対応するモーフターゲットに渡す形になります。ちなみに、パラメータの順番はこんな感じ。
上記のように配列から一つずつ値を取得する感じで実装しても良いのですが、せっかくなのでシンプルに実装してみました!
コピペ用: https://blueprintue.com/blueprint/p-z2c6ys/
これで準備完了です。実行して 1キー を押すと 「はじめに」で載せた動画のように音声に合わせて口パクします!
これでサンプル以外のモデルでもOVRLipSyncを用いた口パクができるようになりました。しかし、改良の余地はまだまだまだまだあります。例えば、口をもっと大きく開くように補正処理をかけたり…
口パクパラメータ補正版 pic.twitter.com/epw1rZpyVo
— おかず (@pafuhana1213) November 25, 2018
アニメ的な表現を再現するために更新間隔を調整したりなどなど…色々あります!(ググると色々…モニョモニョ…)
是非色々カスタムしてみてください!
シーケンスレコーダーによるベイク処理を使って、OVRLipSyncによる口パクをアニメーションアセット化したい方がそれなりにいるかと思います。
しかし、Set Morph Targetでモーフターゲットを制御する場合はベイク処理の対象外になります。そのため、ベイク処理の対象にするためには、Animation BPのAnim Graphにて Modify Curveノードを使って各モーフターゲットの値を制御する必要があります。ご注意下さいまし。
おわり
2018/10/14のアンリアルフェスにて、UE4でVTuberをする方法について講演しました。
その中で「Oculus LipSyncはいいぞ!」ムーブをキメました(p94以降)が…具体的にどのように導入・使用するのかについて触れなかったので記事にまとめようと思います。
Oculus LipSync ( 以下、OVRLipSync ) はOculus社が提供しているリップシンク(口パク)ライブラリで、2018/10/5にリリースされた v1.30.0 でUE4に対応しました。そして、2018/11現在(v.1.30.0)ではUE4.20に対応しており、サンプルプロジェクトも用意されています(v.1.30.0、UE4.21でも一応動きました)。
このライブラリを使うことで、マイク音声または事前に収録した音声データ( SoundWavアセット )からリップシンク情報を取得することができます。つまり、セリフに合わせたキャラクタの口パクアニメーションを簡単に作ることができます!
( 表情用のMorph TargetをキャラのSkeletalMeshに用意する必要はありますが… )
サンプルでは、OVRLipSyncが検出した口形素( Viseme )をSkeletal MeshのMorph Targetに渡すBPが用意されています。Visemeは音声から唇の形状を分類したもので、全部で15パターン用意されています。( ただ一般的によく用いられるのは母音(a, i , u, e, o)なので、全てのパターンを使い分ける必要はないかと思います。)
Visemeに関するドキュメント:Viseme Reference
以降は、サンプルに含まれるBPについて簡単にですが解説します。
https://developer.oculus.com/documentation/audiosdk/latest/concepts/book-audio-ovrlipsync-unreal/
https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-ovrlipsync-using-unreal/
https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-ovrlipsync-precomputed-unreal/
https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-ovrlipsync-sample-unreal/
Windows上からMacをリモートで使ってiOSパッケージを作成するリモートビルドという機能がUE4にはあります。
そのリモートビルドが急に上手くいかなくなった時とかに試す証明書・プロビジョニングファイルの削除を
何度も何度も忘れるのでメモ。なお、自己責任でお願いします
Windows上での証明書・プロビジョニングファイルの作成手順
Unreal Engine | iOS クイックスタート
リモートビルドについて
Unreal Engine | Windows で iOS をビルドする
"C:\Users\
のファイルを全削除
突然ですが、UE4でVTuberムーブをキメることになったので、早速Ikinema Orionで遊び始めました!凄く楽しいです!!!
UE4 + Ikinema Orion、完全に理解した!(棒) #UE4 pic.twitter.com/uE08w60P9f
— おかず (@pafuhana1213) September 3, 2018
せっかくなので、メモ代わりに記事書いていきます。
今回はIkinema Orionの紹介と、Orionを使う上で必要なVive Trackerの購入、固定方法について説明します。
Vive Trackerを一定数以上繋いだ状態でUE4を起動するとクラッシュする、という不具合が報告されています… そこそこ本気でVTuberする上でこれは辛いので、修正方法を共有します…修正箇所は凄く少ないので対応コストは少ないです。
正式に入るのはUE4.21を予定しています。
関連issue
https://issues.unrealengine.com/issue/UE-54387
https://issues.unrealengine.com/issue/UE-63579 (申請が通れば公開されます)
\Engine\Plugins\Runtime\Steam\SteamVR\
Source\SteamVRController\Private\SteamVRController.cpp
30行目付近の MAX_TRACKED_DEVICES をコメントアウト
//#define MAX_TRACKED_DEVICES (int32)EControllerHand::Special_9 - (int32)EControllerHand::Left + 1
115行目付近のMaxControllers に入れる値を変更
/** Total number of motion controllers we'll support */
//static const int32 MaxControllers = MaxUnrealControllers * CONTROLLERS_PER_PLAYER;
// NOTE: This used to be MaxUnrealControllers * CONTROLLERS_PER_PLAYER, but we needed to support many more trackers than that
static const int32 MaxControllers = vr::k_unMaxTrackedDeviceCount;
#jira UE-63579 Assert when having too many VR devices
Increase max controllers to support more.
https://github.com/EpicGames/UnrealEngine/commit/01c783a907cffba11905dc8f15823b29d2b451d7
もしこの対応を入れてもクラッシュする場合はご連絡ください…