見出し画像

新学期でメタバースを開発する・後編

REALITYのR&D部門・GREE VR Studio Laboratoryの中野です!

前回「新学期でメタバースを開発する・前編」としてはキャラクターの設定などアート面の製作工程をご紹介いたしました。後編では『”Back to Metaver-School” - a blooming future of Metaverse in REALITY』(邦題:メタバースクールの新学期~REALITYの未来に咲く花)製作におけるUnityの技術的なポイントを各担当者に抜粋して紹介していきたいとおもいます。

見どころ・技術的挑戦

BRP vs URP・大人数アバターの表現

今回はTDを担当したやはぎです。今回はメタバース空間の学校が舞台となっているので、前回の動画とは違い、より多くのキャラクターが登場します。冒頭の部活動紹介シーンでは多くの人達が体育館に集まって見学しています。REALITY本体の機能にランダムな服装・見た目のアバターをVRMで出力すことができる機能があるので今回はこの機能を使って出力したVRMファイルを使用しています(PFの皆さんいつもありがとうございます)。

メタバースで学校を表現するためにはそれなりの人数が必要ですよね

このエーアイ達は実行後、事前のインポートではなく、VRMをランタイムでロードする実装になっています。ランタイムロードにすることによって、キャストの入れ替えやコンポーネントの設定を一括で管理することができ、製作の効率化に一役買っています。

なお今回のUnityプロジェクトにおけるレンダリングパイプラインはUniversal Render Pipeline (以下URP)を採用しており、VRMの標準のShaderであるMToonは使用していません(VRMがURPに対応していません)。今後も多様なVRプラットフォームや環境の変化に適応するため、ランタイムロード時にシェーダーを変更する技術を採用しています(VRM側で用意されています)。

  1. Byte配列からParseして読み込んだGltfDataをVRMDataに変換する

  2. VRMUrpMaterialDescriptorGeneratorを使ってmaterialGeneratorを用意する

  3. materialGeneratorとVRMDataをVRMImpoterContextで読み込む

  4. 読み込んだキャラクターにURPのUnlitShaderが適応される

UnlitShaderだとキャラクターに影が適応されませんがREALITYのアバターはもともとテクスチャに影が書き込んであるのである程度は問題になりません。MToonのURP対応が待ち遠しいですね。

テクスチャ比較(左:URP対応前/右:UnlitShader適応後)

リアルタイムに大量のアバターを表現する部分に関しても新たにコンポーネントを開発しています。今回の撮影はPCでのレンダリングを実施していますが、他にも、モバイル、HMD等でのベンチマークテストが行えるような構成になっています。また、URPでのレンダリングコストの特徴についてアバターの描画人数がどのぐらいか?どういう特性があるか?といった実験が多様に行えるようになったのも良かった点ですね。

エーアイさん40人のとき。FPSは20前後
エーアイさんが80人のとき。FPSは15前後

OculusQuestでの動作
VRStudioLabではHMDを使ったVR環境でのUXについても研究開発をすすめており、今回のプロジェクトをOculusQuest(初代)で動作させた場合のパフォーマンステストも行っています。
REALITY(スマホ版)のアバターを可能な限り互換性を維持したUXで動作させた時、最大どれくらいのメタバースシーンを表現できるか?を目的にFPS(フレームレート)で評価しています。OculusQuestでは体育館シーンのような高精細なテクスチャやライティング、上記で紹介したランタイムVRMロードすることは性能的に難しいため、検証ではVRMを事前にインポートし、シンプルなPlaneを1枚にDirectional Lightを1つだけ配置したシーンにて評価しています。

OculusQuest(無印)でのURPでの負荷検証用Scene
DirectionalLight1つとPlaneの上にアバターを生成して10秒毎の平均FPSを計測した。
キャラクター数によるFPSの推移

まず、描画の負荷を表現するDrawcallを比較したところ、BRPであるVRMのMToonが122、Unlitが66、URPのUnLitが38で、確かにURPのUnLitは負荷が少なそうです。一方でBRPとURPで描画エーアイさんを{5, 10, 20, 40}人と増やしていった時のQuest初代でのFPSの推移をチャートにしてみました。URPの方がSRP Bathcerの効果でFPSが向上していることがわかりますが、MToon→URP化によって極端にパフォーマンスが上がるわけではなく、5-10人ぐらいが一番差が大きいようです。これはメモリ転送などが原因していると考えます。特に各アバターの着ている服の多様性が原因と推測しています。ゲームにおけるモブやザコキャラのように同じテクスチャやマテリアルが再利用できる環境ならもっと効果はありそうですが、現状のMetaのハードウェア環境における、多様なアバターをもったREALITYのメタバースならではのパフォーマンス評価実験になったと考えます。

なお、今回のカメラワークの管理にはUnityのCinemachineとTimeLineを使用しています。TimeLineと組み合わせることで何秒から何秒まではこのカメラにするといった管理が非常に簡単にできます。Unityで映像制作をする上では不可欠です。またCinemachineExtensionでPostProcessingの管理をすることができます。これはURPにも対応しておりCinemachine Volume Settingsを使用することでカメラごとのProfileの管理が非常に楽にできます。

アバターのLookDev

皆さんお待ちかねのアバターのLookDevです。
今回はVRChatなどで使われることも多いlilToonRealToonとの評価を行いました。背景セットには相当PostEffectなどでルックを調整しているので、そことのマッチングも評価を行いました。シーンごとにある程度異なるトーンが反映されていますので味わってください。 最終的にはURP版での使用感と前回からの実績ベースでRealToonになりました。パラメーターが前回のクリスマス動画の時にある程度絞り込まれていたRealToonがパイプライン上は美しかったです。今回の主な背景シーンであるしていたリアリスティックな体育館の背景と教室の漫画っぽい背景との両方馴染むようなルックを作るためにRealToonを調整していきました。

体育館シーンでのルック。動的なフォーカスブラーとYahagi先輩の怪しさを表現。
近未来のメタバースにおけるUXと日本の学園アニメっぽいシーンの融合を表現。

リフティング

リフティングシーンより。動きが硬くなり過ぎないように時間をかけて作りました。

堀部です。今回の動画冒頭で目を引く「サッカー部の先輩によるリフティング」は、「In-Space-Play」という技術を開発しています。ボールは物理に従って動き、アバターは事前に準備されたアニメーションをベースに動きます。それぞれを別のアニメーションで動かすことはできますが、今回はアニメーションカーブにHumanoidでサポートされているIK(インバースキネマティックス)を協調的に動作させています。足以外に手もIKで物理的に多様なふるまいをするオブジェクトを制御することができるので、メタバース空間内でHMDやスマホ、PCデスクトップ互換の操作感で、多様なゲームプレイや多プレイヤー間の協調プレイなど、まだまだ表現できることは沢山ありそうです!
ちなみに余談ですが「サッカーのリフティング」は英語では”Juggling”と呼ばれているようです。「Freestyle Football Juggling」などがカッコいいので参考にしています。なお英語でリフティング(”lifting”)を検索すると、「持ち上げる」という意味からウェイトリフティング動画が出てくるかも?

ギターを曲に合わせて弾く

今回の技術的なチャレンジ「In-Space-Play」の中で一番大きい部分がギター演奏です。今回の楽曲にKMNZの「JOURNEY」を使わせていただけることになりました。動画として「この曲のどこがギターソロパートで使えるのか?どんなカットになるのか?」を監督(白井D)・助監督(中野)・楽曲演奏システム開発(みくさん)・アニメーションシステム開発(やはぎさん)、そして編集担当(セツナクリエイション・フジヨシさん)・音楽監修(加茂フミヨシさん)で何度も検討し、そのシーンのパート譜をアニメーション作業指示として生成しながら、各楽器において最適な音楽演奏技術を錬成していきました。

最終版の演奏シーンより。ギターの運指というとついつい左手に注目しがちですが、右手が正しいタイミングで動いているかがとても重要であるという気付きもありました。

実際にプロミュージシャンの永田範正さんに演奏していただいたビデオを元にタブ譜と画像からベースにフレットのどの部分を指で押さえるべきかGoogleスライド35枚分作りアニメーションを作成しました。

Tab譜と動画資料から指の動きを抽出。
ここが間違っていると正しいアニメーションが付けられないので注意して進める必要があります。

スライドに起こした指の動きをVeryAnimationを使ってキャラクターに付けていきます。ギター演奏時、左手は基本的にコードを押さえることになるので、一度作成した手の形はまた同じコードが出てきたときに使いまわすことができます。また、MIDIデータからどのコードがどのタイミングで出てくるのかは知ることができるので、MIDIを入力としてキャラクターにギターを演奏させるというのも面白そうです。ちなみに手以外では、音楽監修の加茂さんからギターはもっと体に近づけてと何回も指摘されました。近づけ過ぎるとキャラクターの体と干渉してしまうことがあり難しかったのですが、できる限り近づけることでリアリティのあるシーンに仕上がりました。

VeryAnimationを使用したアニメーション付けの様子。
動画資料と照らし合わせながら両手の動きを付けました。

合奏シーンとドラムへのこだわり

合奏シーンの担当・武政ミクです。

軽音部の練習がスタート。
前作「メタバース・クリスマス」から楽器が大幅に増えて賑やかな演奏シーンになりました。

前回のクリスマス動画「Metaverse Christmas」でもピアノは弾いていたのですが、これに加えて、ベース、ギター、ドラム演奏を追加しました。加茂さんに音楽監修をして頂いて、こちらの演奏シーンが完成しました。ギターでは、バックミュージックに合わせた正しい指の位置や腕の角度、ドラムではスティックの持ち方や8ビートの叩き方まで丁寧に教えていただきました。

ところでどっちが4ビートか、8ビートかわかりますか?
スロー動画を用意したので見抜いてみてください

こちらが4ビート(上の動画)
こちらが8ビート(下の動画)

おわかりいただけたでしょうか。
スネアドラムのアニメーションイベントと、ハイハットシンバル、バスドラムのアニメーションイベントがそれぞれ異なるタイミングでブレンドされているのですが「わかる人にはわかってしまう」という一例でした。

ところでドラムを叩いているDamivoちゃんは、設定では「小学校時代に鼓笛隊をやっていたのでドラムロールは叩けるが、ドラムセットは初めてでバスドラやハイハットの踏み方を知らない(裏設定)」という細かい設定がありました。楽しみながらも必死に叩くDamivoちゃんのドラム演奏、何が間違っていて何があっているのかは動画を目を皿のようにして見てください!
私の担当シーンはこのドラム演奏とピアノ演奏の「ラミレミ」それぞれ4秒しか使われていませんが、背景にあるIn-Space-Play技術の開発には数ヶ月の時間がかかっています。
アバターによる音楽表現のチャレンジの詳細は機会あればまた解説したいと思います。


通称「ラミレミ」、このカットを作るためにたくさんのMVを研究しました。
アニメーションだけでなくボケ味、表情、ライティングなど含めてお気に入りです。

さいごに

以上です。抜粋なのでもっとたくさんの紹介したい技術や、まだまだ開発中の要素などもありますがこのあたりで後編を締めたいと思います。クリスマス、新学期とこれまで2本のティザー動画を公開しましたが、これからもメタバースを強く意識した動画を公開していく予定です。続きに興味がある方はぜひこちら(https://j.mp/VRSYT)から「チャンネル登録」と動画のシェアをよろしくお願いします!

技術も映像製作も両方やる
GREE VR Studio Laboratory ですが、ご興味ある方はこちら[Web]も観ていただけるとありがたいです。研究開発や学会・国際会議などもたくさん発表があり、さらに現在、新作の開発が何本か進行しております。夏のインターンも募集中です。勤務形態はほぼリモートです。「自分もこんな動画を作ってみたい!」「僕のUnity力を高めたい!」「国際会議や学会で発表できるような技術に関わりたい!」と思った方はTwitter@VRStudioLabまでDMお願いします!