MRで配信者をたくさん召喚してみた!REALITY Advent Calendar 2023
年末年始はドラクエモンスターズ3をめちゃくちゃやる予定の漫喫です。
アンド〜今年が寒すぎて年末年始は布団から出たくないタイ人のSui(前の記事は「デフォルトアバターじゃない者」の人)です。
開発合宿でMR版REALITYのプロトタイプを作ってみたので、それについて紹介したいと思います!
この記事は REALITY Advent Calendar 2023 の22日目となります。
インターン生と一緒にREALITYのVR版のプロトタイプを作ってから2年経ち、当時のQuest 2から大幅にスペックを進化させたQuest 3が販売されました。(※ VR版REALITYはリリースされておりません)
VR空間でガッツリ配信を見るのも良いのですが、普段アプリ版のREALITYをお使いの皆さんは手元のアプリで配信を見ながら家事や仕事(?)などの日常生活を行う方が多いのではないでしょうか?Quest 3では現実世界をヘッドセットの映像としてパススルーで見ることができるため、そこでREALITYの視聴ができればアプリと同じような体験ができますし、アプリでは体験できないようなスケール感と複数同時視聴ができたら楽しそうだよねと思い、MRのREALITYを作ることにしました。
作ったもの紹介!
Meta Quest 3のパススルーのMR機能を使って、REALITYの視聴できるプロトタイプ的なアプリを開発しました。作った機能をgifアニでご紹介したいと思います!
手を叩くことでその時配信している配信者をランダムでその場に呼ぶことができます。
別の場所に呼び出すことで空間にたくさん呼ぶことができ、近づくと声が大きくなります…!
さらに指ハートすることでいいねを送ることができます。
タワーギフトを手で持って渡すことも!
どうでしょうか?!実際に体験してみたところ複数の枠を同時に視聴できるのはかなり良かったし、たくさんの配信者に物理的に囲まれて最高でした!
※ いいねやタワーはあくまでプロトタイプの表現方法として実装しただけで、実際には情報を送信していません。
技術ブログ的な要素
REALITYのアプリでは配信者のモーション情報と音声情報を分けてWebSocketで送受信しており、モーションを扱うのはUnityレイヤーの実装で、音声情報はNativeレイヤーの実装となっております。今回のMR版REALITYでは全てUnityレイヤーで実装する必要があったため、音声部分の受信も一括で行い、受信した音声をデコードして再生する部分を追加で実装しました。REALITYでは音声の圧縮はOpusを使っているため、OpusのデコードをUnityで行うためのプラグイン「UnityOpus」を利用させていただきました。ハマりポイントとしては最新のmainブランチではApple Siliconに対応してないため(2023/12/18現在)、Pull RequestsのApple Silicon対応しているブランチをcheckoutした上で、Xcodeで再度ビルドし直す必要があります。
また前述した通り配信者を1人召喚するためにモーション用と音声用で2本のWebSocketに接続する必要があります。
音声に関しては遠くに配置された配信者の声は聞こえないようにするという機能を今回はシンプルにAudioSourceのMaxDistanceの距離を2mに設定するだけで実現しましたが、たくさん召喚するとどんどんWebSocket接続が増えていくため必要な配信者の音声だけ動的に接続を切り替える、など工夫の余地があります。
なお合宿の後日、1ルームのマンションにどれだけ配信者を召喚できるかテストしてくれたエンジニアがいますが、20人召喚してもなんとか動いたそうです。Quest 3すげー!
おまけ
開発合宿も今年で3回目を迎えますが毎年完徹をキメている僕は完徹後に朝ランするのが大好き。不健康の極みの中、朝ランという健康的な行為のカタルシスをみんなにも分かって欲しいのですが今年は誰も一緒に走ってくれませんでした。。。来年に期待!!
↑ โปรแกรมเมอร์ส่วนใหญ่เป็นพวกตื่นกลางคืน เช้าตรู่ไม่ตื่นกันหรอกนะ❤️ (*^ω^*) (From Sui)
明日のアドカレは…
次回アドカレ23日目は虹ゴリラさんがUnityのアプデのRTA頑張った話!Unity2022.2にアプデした際は大苦戦していましたが今回はどうなるのか楽しみですね!