【UE5】MetaHumanを使ってVTuber、Zoom、Teamsをやってみる

 コロナが流行り出してから一気に広まったビデオ会議ソリューション、Microsoft TeamsやZoomなど皆さん普通に使えてることと思います。最初のうちはカメラ写りを気にして照明を追加したうえ化粧をバッチリ決め込んだり、背景に観葉植物を置いてカッコいい部屋で仕事してる雰囲気を醸し出したり、グリーンバックを用意して汚い部屋の状態を隠したり、果てはマナー講師なるものがビデオ会議での「お作法」を作り出したりといろんな苦労もありました。しかし段々とビデオ会議に慣れてくると相手の顔なんかどうでもよくなってきます。特にオジサン同士の会議になると見飽きた顔に興味は薄れ、どうせパワポやエクセルの資料を出しながら喋るだけなんだからと音声会議になってしまいがちになります。

おっさんだらけのビデオ会議例

 単調なビデオ会議にもっと変化が欲しい

 とは言ってもそのような会議が続いてしまうとこれまた張り合いのないことにもなってしまいます。勝手なもので音声会話だけ続いてしまうと話し相手の表情もつい見たくなってしまうのも実情です。最近流行りのメタバースとかで使うアバターを作成して会議に使う方法もあります。早速作ってみましょう。

、、、、、、

 Z世代同士とかこういうキャラを使うことが許される業界であれば問題がなさそうですが一般企業でコレを使ってしまうと「ナメとんのか! ワレ!」と怒られたり、眉をひそめられたりしそうです。ここはもう少しリアルな造形にしたほうが無難です。(ちなみに上記キャラクターはVRoid Studioというソフトで作りました。)

 MetaHumanでリアルなアバターを作る

 MetaHumanとはEpic社が提供するゲームエンジン、Unreal Engineで使用するリアルCGキャラクター作成ソリューションです。

 Epic Unreal Engine MetaHuman  外部リンクへ

 上記リンクを辿ればわかると思いますが実写さながらの人物キャラクターを作成することが出来、Unreal Engine 上で自由に動かせるというものです。さらにはiPhoneのカメラを使ってリアルタイムに自身の顔の動きを読み取ってキャラクターに反映させるということも出来るようになっています。早速適当にキャラクターを作ってみます。上記のアニメ調のキャラクターと同様に顔をいじくったりヘアスタイルや髭などを決めていきます。変わったところではそばかすの量とか歯の歯垢の色なんてものまで変えることが出来ます。

 で、結局おっさんを作った、、

 結局無難なオジさんを用意することにしました。私とは似ても似付かぬ顔をしていますが表情の動きは上記の通り私そのものです。表情の他に首の振りもリアルタイムに反映されます。ビデオ会議であればこのくらいの画角で十分ではあるので首から下は動かさずにそのままでもいいのですがリアリティ度を上げるために僅かに動くようアニメーションを付けることにします。

 配信用PCへの繋ぎ方

 MetaHumanによるリアルアバターを作って動かすことが出来たら次にその映像をVTuberでよく使われるOBS Studioやビデオ会議のTeams、Zoomを動かすマシンへ転送する必要があります。Unreal Engine上で動作している映像を配信用マシンに持ってくる方法としてはビデオキャプチャデバイスがあります。ただデバイスの機種によってうまくいかなかったりするのと(主にドライバの関連で)自分が持っていないこともあって別な手を使うことにします。その手とはNewtek NDIという放送用プロトコルを使うことです。コレによりハードウェアを追加することなくソフトウェアベースでロイヤリティフリーのSDKを使うことによって放送品質の送受信が行えるようになります。

 Newtek NDI Tools  外部リンクへ   

 Newtek NDI SDK  外部リンクへ


 下の図が今回のシステム図です。複雑なことやっているように見えますが繋ぎ的には単純です。

 OBS Studio、Teams、Zoomを走らせる配信側PCにNewtek NDI Toolsを、Unreal Engine PCにNewtek NDI SDK for Unreal Engine をインストールします。配信側PCではNewtek NDI ToolsのうちNDI Virtual Inputアプリを起動しておきます。このアプリは外部からのNDIストリームを仮想的にハードウェアデバイスとしてOSに認識させるものです。ネットワーク上にNDIストリームを出力しているものがあればそれを認識して外部カメラ同様に選択することが出来ます。あとは各配信用アプリからその入力ソースを選ぶだけとなります。Unreal Engine側はプラグインを導入して画面がNDI出力出来るよう設定しておきます。

どのアプリでも設定にあるカメラ項目でNewtek NDIを選択できます。

 ゲーム実況とか他の映像と組み合わせて合成することがあると思います。映像屋なのでアルファチャネル(合成用のマットチャネル)を使いたいところですが配信側のアプリはそれに対応していなくグリーンバックを使うことになります。これはUnreal Engine側でキャラの後方に仮想的にグリーンバックを置くということで対処します。(NDI自体はアルファチャネル出力に対応)


 音声に関しては配信側に入力されたPCマイクを使いますがUnreal Engine側の処理時間とのズレが出てきてしまいリップシンク(唇の動きと発声のタイミング)が合わなくなってしまいます。これを防ぐためにはマイク音声を遅延させる設定が必要になります。スタジオ設計ではよくあることなので高価なハードウェアデジタルミキサーを使って対処してしまいますが今回はちょっと大袈裟になるのでソフトウェアを使うことにします。OBSには音声遅延の設定項目があるのでそれを使えば良いのですがZoomやTeamsにはその設定が無いのでソフトウェアミキサーを利用します。

 上記のようにマイク入力を一旦ソフトウェアミキサーを経由して遅延の処理をしてからZoom、Teamsへ音声をルーティングさせます。
 ミキサーはWindowsなら Voice Meter、MacならAudio Hijack なんかが使えます。音声のルーティングには VB-AUDIOLOOPBACK が利用できます。マイク→ ソフトウェアミキサー → 仮想音声ルーティング → 配信/リモート会議アプリ といった繋ぎをします。

Audio Hijackの設定例。経路途中で音声遅延処理。

 実際にコンテンツを作る

 こうして出来たコンテンツをYoutubeにアップしておきました。エラーとか出てますが気にしないでください、、そのまんま収録しました。


 気が付いたこととしてMetaHumanは一般的な2Dアバターとは違って表情が細かく表現されます。いくらイケメンなキャラクターを用意したとしても本人がマヌケな表情をしてしまえばそのままそっくり反映されてしまいます。やってるときは気が抜けませんね。逆に言えばアバター越しでも人となりは滲み出てくるのでリアルなコミュニケーションは担保されのではないかと思われます。
 胴体の動きはありもののアニメーションデータを使っています。ネットからそのデータをダウンロードできるのでキャラクターに合わせて加工して使っています。適当に幾つかのモーションデータを組み合わせただけですがなかなかいい感じです。いかにも喋っている感じが出てます。もちろん最新のトラッカーを使って自身の動きをMetaHumanに当てはめても良いですし、音声入力レベルをUnrealEngineで検知してポーズを変えるといったこともできます。
 女性キャラ作ってボイスチェンジャーでおっさんが声変えてなんてこともできそうですが(最近バ美肉おじさんという言葉を知りました、、)用法、容量は正しく使っていきたいものです。


 ーNOTICEー
 作ってみて気になることをいくつか
・Live Link Faceを使うとスマホの発熱がスゴい
  顔の動きをUnrealEngineにデータを送るアプリですが使ってるとスマホが熱くなり、酷いときにはオーバーヒートしてしまいます。それを防ぐために自動的にフレームレートが60fps→30fpsに変更されます。上記の動画がちょっとぎこちないのはそのせいです。スマホを冷やす手立てを考える必要がありそうです。M1/M2 Mac上で動くようにしてくれないかなぁというのが希望です。

・UnrealEngine5でのNDI出力
  この原稿を書いている時点ではUnrealEngine5にまだ実装が完了されていない部分があるようです。グラフィクスAPIのDirectX12に完全に統合されていないため今回はVulkanで動作させています。 現在はDirectX12に対応しています(2022年8月28日) NDI出力でオーディオまだ未対応なのでマイク音声をUnrealEngine側に入れず、配信用PCに入れる繋ぎにしました。(入力はOK)
この辺はおいおい対応してくるものと思います。(というか希望します) 
 追記:有料のプラグインを利用するとオーディオもNDI出力可能になるようです。