REALITY Avatar 2.0 開発話 Now in REALITY Tech #111
みなさんこんにちわ、アバターシステムチームの漫喫です。
最近のマイブームは近所のポケストップ(Pokémon GO)を増やすことです!
REALITY Avatar 2.0って?
REALITYのアバターカスタマイズを大幅にアップデートした機能リリースを2024年5月30日に行いました!下のトレーラーを見てわかる通り、REALITYのアバターらしさを残しつつより多様な姿を表現できるようになっております!より詳細な説明はこちらのサイトをご確認ください。
開発は主に1. 検証、2. 体型変更、3. 顔変更、4. アセットの制作、5.リリースの5つのフェーズに分かれており、それぞれについて簡単にご紹介したいと思います。
なおこの記事はたくさんの優秀なチームメンバーの成果を代表して書かせてもらっています。(Big Respect)
フェーズ1: 実現方法の検証
このプロジェクトは1枚のコンセプトアートから始まりました。
「こんなアバターが作れるようになりたい!」という絵をどうやってシステムに落とし込むのか、いろんな項目について複数の手法が検討され、それぞれの手法に対してカスタマイズの柔軟性やクオリティ、制作や運用のしやすさ、技術的な難易度など様々な観点でメリットデメリットを検討して決めていくのにかなりの時間をかけました。
例えばもともとREALITYでは鼻が1種類しかなかったのですが、様々な人種を表現するためには鼻の形状を自由に変えるのは必須で、そうなると鼻の形状にあわせてマスクのような顔にフィットするアイテムでメッシュが突き出てしまいます。それを防ぐためには、マスクのアイテムの形状を変更する機能をもたせる必要があるのですが、全てのアイテムに手作業で修正をすると制作コストがはねあがってしまいます。その修正作業を便利にするための機能を作ることでアイテムごとの修正コストを下げる、といったことが開発中期で行われたりしました。
コンセプトアートの絵が100%実現できたかというと、コストの観点で断念した部分もありますが、かなりの部分を実現できたのではないでしょうか。
実際にアプリを触って確かめてもらえると嬉しいです!
フェーズ2: 体型変更
もともとは身長の高さと胸の大きさのみが変更可能でしたが、REALITY Avatar 2.0ではこれに加えて3つの体型変更の設定ができるようになりました。
既存の身長変更の仕組みはボーンのTransformのスケールをいい感じに設定することによって実現する、というシンプルな仕組みでした。
この方法で細かくスケールを制御するとUnityの特性上、子の階層に値が伝播するため回転に応じて歪みが発生するという問題が発生します。
そこでMayaの機能であるセグメントスケール補正をUnityで実装することで子に伝播しない形でTransformにスケールをつけられるようにしました。
セグメントスケール補正をUnityで実現するためには一工夫が必要で、REALITYではボーンのHierarcyに1階層Transformを差し込み、その階層のスケール値に親の逆数を設定する、といった方法でセグメントスケール補正を実現しました。
真面目な話が続いたのでここで開発中の失敗例を挟んでおきます。
体型変更に関してはこれで終わりではなく、体型に応じてルームの家具を微調整したりエモートの動きを修正する必要がありました。
例えば下の図はブランコに乗れる家具に乗ったときの様子ですが、手が短くなるとブランコの手すりを掴んでくれない、みたいな問題がおきます。
これについては詳細は割愛しますが、アニメーション再生の仕組みに新しい能力を追加したり、家具の調整を行うための制作ツールを開発したり、全ての家具に対して地獄のような手作業の修正を行なったりして見た目が大きく破綻しないようにしました。(アセットの種類によっては完璧に調整できたとは言い難いですが…)
フェーズ3: 顔変更
顔については体型変更以上に様々な変更が入りました。
変更できるカテゴリが新たに6種類追加したり、目眉顎鼻の位置を微調整できる機能が追加、刈り上げ髪や立体的な髭を表示する機能などを追加しました。
顔変更に関する技術的な話をする前に、事前知識としてBlendShapeについて説明します。(知っている方は読み飛ばしてOK)
BlendShapeとは2つの形状の違うメッシュから中間状態を作る機能です。
以下の画像は鼻の高さを決めるBlendShapeの値を変えている様子ですが、鼻が低い状態Aと高い状態Bを合成してA→Bの中間を自由に指定することができます。
REALITY Avatar 2.0では顔のメッシュにBlendShapeを大量に追加することで様々な人種の顔を表現できるようになりました。
ただ、REALITYは光による3D的な陰をライティングで描画してないので、メッシュの形状を変形させるだけだと、下図のように正面から見たときの見た目の変化がありません。
そこで、肌の色に対して陰影を追加する仕組みをシェーダーに追加することで、目や鼻などの彫り深さなどを表現しました。
選択されたアイテムに応じてBlendShapeの値や陰影テクスチャを変更することで様々な顔の形状を表現しているというのが、顔変更に関するざっくりとした説明です。
フェーズ4: アセットの大量生産
ここからは主にArtチームの領域の仕事ですが、REALITY Avatar 2.0では600点を超えるアイテムを制作する必要がありました。(既存のアセットの作り直しも含みます)
制作方法をFixさせ、マニュアル化し、並行して制作を進めらる体制を作るのはとても大変そうでした (人ごと)。エンジニア観点だと、大量の新規アセットがシステム的に問題なさそうかをチェックするためにバリデーションツールを作り、ミスを自動で検知できるような仕組みを作ったりしてサポートを行いました。大きな機能開発のために作ったツールによって今後の制作が便利になっていくのは、なんか良いことだなぁと思いました (小学生並みの感想)。
ただ、システム的には異常はないが見た目がおかしいことはありうるので、最終的には人力で全て目視チェックすることにはなります。
フェーズ5: リリース
REALITY Avatar 2.0のリリースは2024年5月30日に行われましたが、アバターを表示する機能自体は実は1ヶ月以上前にリリースしたバージョンに含まれており、また5月30日のリリース直後にアプリを起動するとパッと見て何も変わっていないが、実は今回の仕組みに差し代わるにようになっています。今までのアバターの可愛さはそのままにしつつ、カスタマイズ幅を増やすというのが大事ですね。
この状態を実現するためにリリース方法についてはいろんな方法を検討し、安全にリリースできるように工夫をしました。
詳細については(わかりやすく説明するのを断念したので)省きますが、とっても大変でした。
さいごに
REALITYでアバターを表示する能力にここまで大きな変更を入れるのは初の試みです。無事リリースできたことに安心しつつ、「なりたい自分で、生きていく。」という会社のビジョンを実現するためにも、今後もより魅力的なアバターをユーザーの皆さんにお届けするために頑張りたいと思います!