はじめに

はじめまして、CyberHumanProductionでエンジニアとクリエイターをしている海木(@kaikiofkaiki)です。
FutureLive事業における合成、LED Studioにおける撮影、デジタルヒューマン事業におけるモーションキャプチャを担当しておりまして、日々スタジオでハードウェアとソフトウェアを行き来しながらシステムや映像を作っています。

05/28に開催されたCA BASE NEXTというイベントのVirtual Arenaの撮影技術全般を担当していまして、本記事では特にキャラクターのリアルタイム合成を行った黒木みつかさんのセッションについてザックリ解説したいと思います。話の分野が多岐に渡りつつ、単語の説明は省き気味で進めてしまうので「こういうのもあるんだな〜」くらいで読み流して頂くか、ご興味あれば調べてみて頂けると幸いです。

以下動画が今回解説する該当セッションになります。

このように、ARで合成されたCGのキャラクターとリアルの人間が同じ空間にいるように合成されています。

キャラクター合成されている集合画像

これから、

  • CGディレクションと組み込み
  • リアルタイムで動く仕組みの実装
  • 現場技術と合成

の3点に分けて使った技術を解説して行きます。

 

 

CGディレクションと組み込み

3Dモデル

今回、キャラクターモデルは社内で運用されているバーチャル社員である「黒木みつか」さんが起用されました。

この黒木みつかさんは実在社員が「中の人」を務めるバーチャル社員で、普段はDevelopers Connectというチームで技術勉強会の開催や、社内報での発信、社内限PodCastの運営など、サイバーエージェントのエンジニア同士の交流を加速するためにさまざまな活動を行っています。
活動に際して使用しているモデルはCGのクリエイターさんが作ったものではなく、2DのデザイナーさんがVroidで作ったもので、今回のイベント用に衣装はmocchimocchiさんのboothで購入したお洋服に着替えてもらいました。社内イベントなので、肌の露出は抑えつつ、可愛さも残したいという要望にうまくフィットしてくれたと思います。

Vroidの黒木みつか

VroidとBoothでのデータを使うことで特別3D技術者をアサインできなくても、モデルを用意することができて大変助かりました

 

合成システムへのモデルインポート

モデルのデータ形式はVRMなため、UE4で運用されている弊社の合成システムに入れ込むには一手間かかりました。
今回は以下のフローで取り込んでいます。

1.はるべえさんのVRM4U(The MIT License) を用いて一旦vrmをUE4にインポートしてマテリアルを生成し、モデルデータだけUE4のAssetsActionからfbxとして外部に抽出

2.UE4から抽出したfbxをBrenderで読み込み、モーションキャプチャ用に骨を調整(そのままだと軸が反転してしまっていたので)。fbxとしてエクスポート

3.再度UE4にインポートし、マテリアルをVRM4Uで生成した時のものに上書き

4.揺れものをおかずさんのKawaiiPhysics(The MIT License)で付け直し(骨を修正したことで揺れものがそのままでは正常に動作しないため)

 

データインポートフロー図

 

合成が馴染むようなルック調整

前述のような手順で、VRMをUnityの時と近い見た目でUE4に持ってくることができますが、いわゆるアニメ調なルックをしています。

このアニメ調なルックは大変可愛らしく、個人的にも好きなのですが、現実世界と整合性を保とうとしていくときに違和感を生み出しやすい要素でもあります。例えば、2値化した影は説得力のある現実世界のライティングから浮きやすく、平たい顔は自由に動くカメラアングルに耐えるのが難しいです。

 

ほぼ初期の黒木みつか
ほぼ初期の黒木みつか

ただ、この問題に対して銀の弾丸的な解決手法はないと考えていて、キャラクターのルック方針や現場美術、照明など様々な要因を考慮し、どういった要素を重要視してトレードオフを選んでいくかではないかと思います。

今回の調整としては、トゥーン特有の影の2値化を捨て、SubsurfaceScatteringなシェーダにして、現実世界との馴染みを重視しました。写実世界を考えると肌の質感はPBRに寄せた方が合わせやすいですね。

トレードオフとして、アニメ的な可愛いから遠ざかってしまいましたが、細かくテクスチャとパラメータを調整して可能な限り可愛いを頑張りました。ここらへんは自分の思う可愛いをやる感覚だと思います。

これらの調整は基本的にVRM4Uのパラメータで調整し、どうしてもうまくいかない部分だけオリジナルでシェーダを作って割り当てました。

ある程度調整した黒木みつか
ある程度調整した黒木みつか

リアルタイムで動く仕組みの実装

ボディキャプチャ

今回は慣性式センサのモーションキャプチャスーツを使いました。

理由としては、オペレーションが簡易であること、それから場所に左右されにくいことです。精度では光学式には劣るところが多いですが、今回のコンテンツでは精度を高く重要視する必要がなかったことも大きかったです。

このモーションキャプチャスーツから得られるデータをリアルタイムでUE4にストリーミングしてCGキャラクターを動かす仕組みを実装しました。

モーションキャプチャの様子

ハンドキャプチャも本当はしたかったのですが、手の調整が満足いくレベルまで期間内に持っていけなかったので諦めました。ボディキャプチャに合うように一気に骨を調整すると指の骨だけうまくいかなくて、諸々難儀ででした…。

表情

アクターが社員かつモーションキャプチャが初めてで体も強い方ではなかったため、できるだけ負担は下げたく、フェイシャルキャプチャをすることはやめました。(ストレートにフェイシャルキャプチャをしようとするとカメラを首から下げる必要があり、首への負担が大きい。固定置きカメラも動きの予想が難しく、運用が困難そう。)

そのため、ボタンによるスイッチング方式で表情を切り替えています

表情の操作役も社員であったため誰でも初見で理解できるUIとデバイスを選びたく、iPhoneのアプリから表情の切り替えをできるようにしました。

表情操作インターフェース
表情操作インターフェース

ただ、表情操作を簡易化したために細かい表情変化の表現が難しくなったため、眼球微細運動や眉の変化など自然現象的な変化は自動で発生するようにしました。特に今回は対談コンテンツでキャラクターの顔をアップの絵に作ることが推測されたため、単純なスイッチング操作の繰り返しでも常に同じ表情ができないように気を付けています

表情変化も顔の左右でわざと歪みを付けたり、常に乱数要素を入れて速度や変化量で微妙に違う表情にしたりしています。

ップシンクはボイスアクターさんの音声から母音のフォルマント分析を行い、母音の口要素のパラメータを割り出してA,I,U,E,OのBrendShapeに割り当てて動かしています

これらのVTuberシステムの根幹といえるロジックはUE4のBlueprintで実装しました

キャラクター操作現場構成図

モーキャプ関係の現場の構成としては以下のように組みました。

現場構成

CGキャラクターはボイスアクター、表情操作、モーションアクターで分業してコントロールしていまして、アクターも含めて上記構成図の配置は全て社内の一般の社員で行っています

プロのアクターさんではないので圧倒的なクオリティというわけにはいきませんが、社員同士のセッションとして生の姿をそのまま表現できたかなと思います。

ただ、スケジュール上お互いのオペレーション練習時間を捻出することが難しく、阿吽の呼吸になるまでに時間がかかり、ぎこちない部分を拭い切れなかったのは今後の課題だと感じています。

 

図の中央波線は5mくらいの距離を表しており、これら図の全ては同じスタジオ内で構成されています

実際の人間がLED前に登壇するエリアとモーションキャプチャをするエリアは、実際にメジャーでゲストの椅子と返しモニターの位置を計測し、CGキャラクターも含めて鏡写しのような位置関係にあるようにしました。

現場構成
モーションキャプチャエリアを計測しながら作っていた時の様子

これにより、モーションアクター/リアルのゲストともに自然に返し映像を見ながら進めれば、進行上正しい目線が構築されるように誘導しています現場構成:目線

モーションアクターが台本を見ようと前を見るとCGキャラクターは正面のカメラを見るような動きになり、スライドを見ようと後ろを見ればLEDに映る後方を見る動きになり、ゲストを見ようと合成映像の返しを見るとゲスト見つめるような動きになります。また、リアル世界のゲストは実際にCGキャラクターをその場では見ることができませんが、返し映像を見ることで自然と位置の確認をしつつ、キャラクターと目を合わすことができるようになっています。

目線が合っているゲストと黒木みつか
目線が合っているゲストと黒木みつか
黒木みつかとハイタッチするゲスト
黒木みつかとハイタッチするゲスト

キャラクターの実在性という点において、リアル世界との相互作用性は非常に強力でお互いを認識している感を表現したかったので、表現ができてよかったです。

ここの調整はカメラアングルとの闘いで大変でしたが頑張りました。

カメラの奥でバレてしまっている返し用モニター
カメラの奥でバレてしまっている返し用モニター。このポジションは却下になりました。

リアルゲストとモーションアクターのエリアを同じ空間に作ったのも意図がありまして、現場でのコミュニケーションを良くするためでした。

今回、若手中心として挑戦が多い現場だったので、コミュニケーション性をとにかく上げるのが命だと考えていました。

現場技術と合成

照明

今回、LED部分だけでなく照明も映すという方針であったため、いくらか制限もありました。そのため、シンプルに頭上と左右の照明だけで組んでいます。

細かい部分はデザイナーの方と相談しつつ、頭上の照明で空間的な明るさを作り、左右の照明はLEDの映像と連動するようにしてサイケデリックな雰囲気を醸し出す遊びとして活用しました。

現場照明はArt-Netで制御しており、CGと連動するシステムも組んでいましたが、結局CGの連動システムは今回使用しませんでした。現場照明を自分がコントロールしていたので把握が容易であったのと、場面に応じて照明が変わることもなく基本固定にしたため特にリアルタイムで連動する価値が薄かったためです。今回のパターンでは多少嘘表現を混ぜながらでもCG側に固定のライトを置いた方がうまくいきました

照明の強さとしては上手から下手に向かって光が強くなるように組んでいて、CG側もそれに合わせて組んでいます。分かりにくいかもしれませんが、以下画像でも現実世界で上手側からの照明が強く、キャラも後ろから光を浴びているように背中側の方が明るくなっるようにライティングされています。

影が後ろから当たっている様子

また、影はLEDからの光とLED上部の天井バトンに吊っている照明からできるだけ伸びるように組みました。またちょっと分かりにくいサンプルですが、足下から前に影がキャラと人ともに伸びていると思います。

影が下に伸びている様子

背面LED

背面LEDはバーチャルとリアルを混ぜ込むのに非常に大きな役割があります。

ARの合成で人の後ろにCGを持っていくことは非常に難しいのですが、LEDであれば物理なので人の背面に出ることはとても簡単にできます。

これにより、前面に出るARのCGと背面のLEDのCGで人を挟みこむことでバーチャルとリアルが混ざった表現が行いやすくなります。

LED背景の黒木みつか
寄ったアングルだともはやALL CGのようにも見える

このLEDの制御に関しては自分でオペレーションしないで進行できるように簡略化しました。

キーボードのショートカットで各シーン用の映像に切り替わり、スライド部分は別PCのパワーポイント画面をNDIで送信しています。なので、オペレータは単純に進行に合わせてキーボードを順々に押していくだけでよく、スライドの用意も普段通りパワーポイントを作ってもらうだけで済みました。

カメラ

カメラは3台設置しており、すべてバーチャルカメラとしてCGと連動するようにしていました。

カメラの内訳としては、光学式トラッキングとギアにより、位置、回転、ズーム/フォーカスが取得できるカメラを1台、PTZ機能により回転、ズーム/フォーカスを取得できるカメラを2台にしました。(PTZカメラはほぼ固定だったのであまり意味はありませんでしたが、アングルハントで役に立ってくれました。)光学トラッキングをつけたカメラはカメラマンさんに入って頂き、オペレーションして頂きました。

光学トラッキングを付けたカメラはかなり良いカメラを使っていたので、PTZカメラと比べて絵の差がありましたが、合成システム上でリアルタイムカラコレをかけてできるだけ合うように調整しました。

LEDの大きさからして、CGの黒木みつか含む登壇者4人を綺麗にカメラのアングルに収めるのは苦労しました。

カメラをキャリブレーションとってる様子
光学センサが乗っかったカメラをキャリブレーションとってる様子

音響

配信に耐えうる音響機材を手元ですぐ用意するのが難しく、オペレーションの担当を僕ではなく別チームにお願いしました。

合成側ではキャラクター用の音声だけ貰い、リアルタイムリップシンクに使いました。

また、合成システムとキャラクターのリップシンクの処理でディレイがあるため音響チームに相談し、音声側にもディレイを入れてもらってリップの音ズレを潰してもらいました。

現場設計

どんな人が現場にいて、どの人がどこのポジションでオペレーションを行うか、その人にはどの音とどの映像を見えるようにする必要があるか、そういったことを念頭に置きながら作業机やモニターなどを設置して行きます。

現場を作っている時の写真
現場を作っている時の写真。まだ仮置きが多く配線が汚い。

現場からの要望も多く出やすい部分でありながらケーブルの配線や無線環境の配備など意外と頭を悩ませる要素は多く、なかなかセンスが問われる部分です。

合成

合成システムではロジックを合成しながらリアルタイムにノードベースで組むことができ、実際に今回使ったノードの最終版が以下のものです。AR合成のみで人のクロマキー抜きをしていないので、比較的さっぱりなノードですね。

この合成システム上でCGにポストプロセスをかけたり、カメラ映像にカラコレをかけたりできるので、最終的な絵の調整はここでしていました。

合成ノード
合成ロジックを記したノード
合成された映像
合成された映像

また、CGがキャラクターだけだと、せっかく3次元的に出しているのにその感覚があまり感じられなかったのでロゴも出しました。ロゴはPhotoShopで少し白に近い色に寄せ、合成ソフト上でポストプロセスをかけてぼんやり光るようにしました。(ここでリアル側でも足元にライトを足せると説得力高まりそうでしたが、カメラアングルの制約上置けず…)

パーティクルなどでエフェクトをつけることも考えましたが、CGの左右に照明などCGより前にある物体があり、天井も常設の機材が多く吊ってあり、全てのカメラでオクルージョンを正しく保つのが難しかったためやりませんでした。

(ビルの制約上スモークを焚けなかったのでARで焚きたかった)

最後に

今回はCA BASE NEXTで行ったバーチャルキャラクターとの合成技術について紹介しました。

様々な準備をしていただけに、今回技術的トラブルはほぼなく、タイムスケジュールもオンスケジュールで終えることができました。

ただ、表現に関してまだまだ改善点はあり、やりたいことは尽きません。運用していく中で随時進化させていこうと思っています。

 

実はサイバーエージェントにはこんな風変わりな現場テクニカルをしているエンジニアもいます。(かなり少数派ではありますが…)

同じようなワークスタイルを、と考えるとなかなかポジションを見つけるのは難しいと思いますが、強い情熱にはできる限りの誠意を持って答えてくれると思います。

もし、僕の記事を読んで「面白そうだ!」と思ってくれた人がいたらぜひ弊社へのインターンなども検討してみてください。

共に新しいワクワクを創造する仲間を探しています。

新卒採用エンジニアコース