🏮

Quest Proの機能を最大限に活用した体験を実装した話

2023/06/16に公開

ヘッダ画像

概要

2023年5月20日に開催されたMESON主催のイベントARISE#4NEW REALITIES:新たな現実」にて用いるデモ体験として、Meta社のVRヘッドセットMeta Quest Pro(以降Quest Pro)で利用するアプリケーション、"Spatial Message"の一部開発を行いました。
本記事では実装を通して改めて感じたQuest Proの機能の凄さや魅力について語るとともに、それらを用いて実現できる体験の可能性を提示し、この記事を読んでくださる方々にQuest Proの魅力を最大限に伝えたいと思います!

筆者紹介:初めまして、おたりな といいます!ゲーム・XRの開発に興味があり、MESON, inc.にてエンジニアとしてインターンをさせていただいております。

Spatial Messageの内容

事前にSlackにて入力したメッセージをパスワードで呼び出してMR空間上に投稿し、また同イベントに参加した他の方々のメッセージも見ることができるアプリケーションです!メッセージの他にも、イベント会場の雰囲気に合わせた装飾・音楽が楽しめます。
SMOC

✌🏻 Credit
Direction / Design: マチルダ
Development: おたりなさくたま
Sound Design: おなか
Collaboration with development: えど

Meta Quest Proのここがスゴイ!

🖐️ ハンドトラッキング

従来のVRアプリケーションでは、コントローラーを手に持って遊ぶ体験が多いように思います。
しかし今回実装したSpatial MessageはQuest Proのハンドトラッキングをフル活用し、コントローラーを一切必要とせずに自身の手のみで操作が完結します。

パスワード入力
指で直接ボタンを押してパスワードを入力
メッセージ投稿
手でなぞりメッセージを投稿

ハンドトラッキングを用いることで、より自然なインタラクションが可能となり、没入感の高いリアルな体験をすることができます。
コントローラーを手放すデメリットとしては振動などのフィードバックがなくなってしまうことですが、将来的にハプティクスグローブなどの技術を用いて、リアルな触覚を含めたXR体験が可能になっていくのではないでしょうか。

工夫点

動画一つ目のパスワード入力に関しては、Metaによってデフォルトで提供されている手のモデルを利用し、人差し指先端のコライダー"Hand_Index3_CapsuleCollider"にのみボタンが反応するようにしています。反応対象のコライダーを限定することで、むやみやたらに入力が行われてしまわないようにしました。
ハンドプレハブ
OVRHandPrefabのコライダーの構造

🪑 ルーム設定

Quest Proのもう一つの機能として、ルーム設定があります。(2023年5月時点でのバージョンv46では試験機能)これは自身で壁・天井・床などの部屋情報や机などの家具を明示的に設定することで、部屋の構造を認識してくれる機能です。
Spatial Messageにおいてはこの機能を利用して、天井に穴を開け、その先に数々の装飾を表示させるといった演出を実装しました。

天井が開く様子
天井に穴が開くような演出

この機能を用いることで、現実世界の情報を利用・活かした体験を実装することが可能です。具体的には部屋のレイアウトや家具の位置に合わせてデジタルコンテンツを配置したり、今回のように天井や壁を抜いたような演出に見せることで現実世界のスペースを拡張したりすることができます。
また、現時点では手動での設定が必須ですが、将来的には自動的に現実世界の情報を取り込んで部屋の構造を理解してくれるのではと個人的に期待しています!

工夫点

ルーム設定を活かした今回の実装に関して、縁にパーティクルを散りばめ、区切りがはっきりとしすぎずバーチャルコンテンツがより現実世界に馴染むよう工夫しました。
縁のパーティクル_寄り
実装方法としてはシェーダーのステンシルを利用して現実世界をカットアウトするシェーダーとデジタル背景をカットアウトするシェーダーの二種類を用いました。

カットオフされるオブジェクトのシェーダー
Stencil {
    Ref x
    Comp NotEqual
    Pass Keep
}
カットオフするオブジェクトのシェーダー
Stencil {
    Ref x
    Comp Always
    Pass Replace
}

初めは現実世界をカットアウトするシェーダーのパーティクルのみを用いたのですが、画像(左)で見る通り縁が見えて不自然さが残りました。そこで相対するシェーダーのパーティクルを合わせることで、画像(右)のようにより自然な縁のぼかしを実現しました。
縁のパーティクル_比較
(左)現実世界上にのみパーティクルを表示    (右)現実・仮想空間のどちらにもパーティクルを表示

🌈 フルカラーのパススルー

Quest Proでは、フルカラーのパススルー機能が備わっており、VRだけでなくMRのコンテンツを楽しめます。

フルカラーパススルーの様子
フルカラーパススルーの様子

同社の製品であるQuest2はパススルーがモノクロになっており、あまりMR体験としての利用には向きません。しかしQuest Proではこの機能によって現実世界にも色がつくことで、カラーのデジタルコンテンツが浮くことなく自然に現実世界の背景と融合し、快適なMR体験を楽しむことができます。

👀 制限のない視野角

最後に紹介するのは、視野角の広さです。これは私が既存のMRのヘッドセットやグラスの中でQuest Proを最も推す理由でもあります!
従来の実機では視野角の制限がかなり狭いことが多く、それによってバーチャルコンテンツが見切れてしまったり、そもそもコンテンツの存在に気づくことができないといった現象が起こり得ました。コンテンツが見切れることによって視野角の限界が見えてしまうと、現実世界の中に実在している感が低くなってしまい、体験の没入感が激減します。そのため個人的には視野角の広さを重要視しており、コンテンツが見切れることのないQuest Proは非常に魅力的なデバイスだと考えています!
特に今回の体験では天井を利用し頭上に広く大きくバーチャルコンテンツが配置されているため、視野角が広いことがとても重要です。でなければ、視野角内では天井が抜けているが視野角外ではそのまま天井が写っているという、なんとも没入感の低い体験になってしまうのです。

感想

Quest Proの魅力とは離れた話になりますが、今回の実装を通じての個人的な感想です!

技術面

以下技術的に印象に残った内容3点について軽く触れます。

1. シェーダー

細かいことはルーム設定にて触れたので総括的な話をします。
元々グラフィックス分野に興味がありつつも触れる機会がなく、今回はシェーダー言語というものに触れるとても良い機会でした!
期限が近かったためにかなり駆け足にはなってしまったのですが、短期間の中でも興味分野での新たな学びの種を得られたことはとてもありがたく、今後に活かしていく所存です。
夏休みあたりにでも、UnityGraphicsProgramming に取り組む予定(といいつつUnrealEngineも触りたいのでどうしよう)
https://github.com/IndieVisualLab/UnityGraphicsProgrammingSeries

2. 設計まわり: UnityEvent, Interface

今回の開発で、とにかく設計周りに関する知識と技術力が足りていないということを痛感させられ、今まで自分がどれだけ「とりあえず動くもの」を作ってきたかを思い知りました。
特に今回記憶に残っているのはUnityEventInterfaceです。
今までは他スクリプトのメソッド実行はとにかくInspector上でオブジェクトを参照させていたのですが、お互いに参照してしまったりチームで共有した際に参照が外れることがあったりと、好ましくないことに最近気づき始めました。また汎用性や依存関係に関しても今まであまり意識して来ず、結果スパゲッティコードが出来上がっていました。
本プロジェクトにおいてはこれらを用いようと試みたのですが、十分な理解には及ばず、期限もあることから断念しました。そのため悔しい気持ちが残っており、今後は「とりあえず動く」設計ではなく、綺麗な設計を意識してプロジェクトに取り組みたいと思います。

3. SoundManager

音源管理は今回とても満足のいく通りに実装できました!個人的なことですが実は以前、別のインターンでもSoundManagerを実装する機会があったのですが、その時には音源呼び出しをStringにしてしまい、typoで音源再生がうまくいかずチームメンバーに余計なストレスと時間をかけてしまったことがあり...今回はそのリベンジができました。
実装方法としては独自のクラスをつくり、enumで指定した音源タイプとオーディオクリップを合わせて管理しました。

SoundManager.cs
[SerializeField]
private class BgmData
{
    public BGM_Type type;
    public AudioClip audioClip;
}

[SerializeField] private BgmData[] bgmDatas;

SoundManager

まとめ

今回の実装では再度Quest Proの魅力を知り実装を楽しんだと同時に、エンジニアとしての課題点も多く知ることができました。改善したい点はすでに挙げたもの以外にもたくさんあるのですが...
ただ最終的には、イベントにて多くの方々に体験を楽しんでいただき、「すごい!」というような声をいただけたことが何より嬉しかったです!

最後に

一部実装を担当したSpatial Messageを挙げてQuest Proの魅力について紹介しました。改めてQuest Proの機能を振り返ると、「こんなことも実現できそう!」というアイディアが浮かんでくる方もいるのではないでしょうか?やはり個人的にQuest Proは既存のヘッドセットの中で最も"推せる"ため、本記事を通して同じ気持ちを共有できればと思います!
AppleがVision Proを発表したこともあり今後XRコンテンツに今以上にスポットライトが当たることが期待される中、現状として既にどのような体験ができるのか・実装できるのか ということの参考になれば幸いです。

おまけ 〜VisionProに関して

本記事では、ハンドトラッキング・ルーム設定・カラーパススルー・視野角の4つの点からQuestProの魅力をご紹介しましたが、先日Appleから発表されたVisionProに関しても非常に期待が高まります。
まずハンドトラッキングに関しては、VisionProはコントローラーを用いずアイトラッキングとハンドジェスチャー、そして音声入力で操作を行うと発表されていました。今回の実装・体験を踏まえて、やはり体験に対する没入感を高める上でハンドトラッキングを用いることは不可欠であると考えるため、コントローラーを完全に手放したVisionProの操作感には注目していきたいです。
また私が最も重要視している視野角に関しては、VisionProを先行体験した数少ない方々の一人であるMESONのCEO 小林さんが以下のようなツイートをされていました。

https://twitter.com/AR_Ojisan/status/1668230536719118336?s=20

多少懸念はあるものの、解像度が非常に高いという点もふまえるとデザインによってカバーできる範囲なのかなという印象を受けました。

値段等のハードルは残るものの、今後更にハードウェアが進化していくことで実装できる体験の幅も広がることが期待されます!

エンジニア絶賛募集中!

MESONではUnityエンジニアを絶賛募集中です! XRのプロジェクトに関わってみたい! 開発したい! という方はぜひご応募ください!

MESONのメンバーページからご応募いただくか、TwitterのDMなどでご連絡ください。

書いた人

おたりな

大田 莉奈(あだな:おたりな)
ゲームエンジニア志望の慶應義塾大学理工学部4年生。
ゲーム・XR開発に興味があり、MESONのエンジニアインターンに参加。

GitHub / Twitter / Portfolio

MESON Works

MESONの制作実績一覧もあります。ご興味ある方はぜひ見てみてください。

MESON Works

Discussion