ベストプラクティス 健康と安全に関する推奨事項 : 複合現実エクスペリエンスを構築する際、快適かつ安全なエクスペリエンスをユーザーに提供するため、開発者が自分のコンテンツを評価することを強くおすすめします。シーンを使ったアプリの設計と開発を始める前に、
健康と安全 および
設計 に関する各ガイドラインをお読みください。
シーンを使って構築すると、エクスペリエンスがさらに複雑なものとなります。このページでは、よくある問題について説明し、シーンを使う際のベストプラクティスも提供します。
シーンを読み込み、更新する方法を学ぶ。 ワールドロックを使用して、バーチャルコンテンツと物理世界の間のドリフトを処理する方法を理解する。 シーンメッシュを使う方法を学ぶ。 シーンと複合現実に取り組む際にトラッキング原点を選択する 開発するエクスペリエンスに最適なトラッキングの原点を選ぶ必要があります。例えば、エクスペリエンスにVRとMRが混在している場合、そのVRエクスペリエンスに最適なトラッキングの原点を選ぶことができます。MRエクスペリエンスにはステージを使うと良いでしょう。複合現実においては、アンカーを使ってバーチャル要素の位置を決めるのがベストプラクティスです。これには、カメラリグの位置合わせの基準となる空間アンカーを作成する方法、オブジェクトと個々の空間アンカーの間で親子関係を作る方法、オブジェクトとシーンアンカーの間で直接親子関係を作る方法があります。一例として、
Discoverアプリ を使用できます。これは、3つのアプローチを融合したものです。
アプリがシーンを読み込む、または新たにスペース設定を実行するのは、どのタイミングが適切でしょうか。 原則として、シーンモデルの読み込みは、それが必要になったタイミングで実行することが推奨されます。MRアプリは、複合現実の中で直接起動するため、起動時にシーンを読み込むことがあります。メインが没入型(VR)エクスペリエンスで、複合現実(MR)モードも含むアプリの場合は、ユーザーがMRモードに入ったときにシーンモデルを読み込むことをおすすめします。
シーンモデルが正常に読み込まれたら、ユーザーがシーン内にいるか、シーンから離れたところにいるかを特定します。後述のセクションを参照してください。
ユーザーがQuestデバイスを持って部屋から部屋へと移動する場合、アプリは現在のユーザーの場所から遠く離れたシーンや、別の階にあるシーンを受け取ることがあります。このようなシナリオには、簡単な手順で対応できます。
例えば、シーンを使って部屋の壁にバーチャル世界につながるポータルを設置したり、別の部屋からアプリを起動したユーザーをスカイボックスの中に入れることもできます。また、エクスペリエンスの設定が離れた部屋になっていることにユーザーが気づかない場合もあります。このようなアプリでは、キャプチャ済みの遠くの部屋を使うのではなく、今いる部屋をキャプチャするようユーザーに求めることが最善策だといえます。
この場合のベストプラクティスは、ユーザーが現在のシーンの外にいる場合は、新しいシーンをキャプチャするよう促すこと です。これにはいくつかの方法があります。
OVRSceneManagerを使う: [Active Rooms Only (アクティブな部屋のみ)] のチェックボックスをエディターで選択すると、上のようなロジックが実行されます。チェックを入れると、OVRSceneManagerはユーザーがそこにいる場合にのみシーンを読み込みます。ユーザーがそこにいない場合は、OVRSceneManagerがシーンキャプチャをトリガーします。Mixed Reality Utility Kitを使う: MRUKRoom.IsPositionInRoom(Vector3 pos) 関数を使って、カメラリグポーズが読み込まれたシーン内に存在するかどうかを確認できます。存在しない場合は、ユーザーに新しいシーンをキャプチャするよう提案します。シーンを直接使う: シーンの読み込み時にユーザーがその中にいるかどうかを確認します。これは例えば、カメラリグポーズから全方向(上、下、左、右、前方、後方)のシーン要素にレイキャストを実行することで確認できます。レイキャストがすべて結果を返した場合、ユーザーがそのシーンにいるということになります。シーンの外にいる場合は、OVRScene.RequestSceneCapture() を使って、新しいシーンをキャプチャすることを提案します。アプリやデバイスのセッション内やセッション間で、壁やテーブルなどのサーフェスが数センチずれる(ドリフトする)ことがあります。これは一般的にどのようなシーン要素にも起こる可能性があります。例えば、テーブルトップの表面が、シーンのサーフェスと現実世界のサーフェスで、数センチ上下にずれる場合があります。
MR Utility Kit を使ったワールドロックによってドリフトを処理し、仮想世界の座標が動かないようにすることができます。これは、ドリフトによって生じるわずかなズレに応じてカメラの位置を調整することで実現されます。ワールドロックを使用していない場合は、定期的にアンカーのポーズを更新することが重要です。システムが、スペース内のアンカーの相対位置を整合された状態で保持するため、1つのアンカーのポーズだけを取得し、それをルートトランスフォームとして使用することで処理を最適化できます。
開発中のエクスペリエンスで、壁やテーブルトップなどのサーフェス上にインタラクティブな要素を表示する場合は、そのサーフェスが物理的なテーブルや壁のサーフェスから数センチ下にずれたとしても、それらの要素がインタラクティブであり続けることは重要です。例えば、テーブル上に配置された仮想ボタンの「ヒットボックス」には、サーフェスが現実世界の表面から数センチ下であっても、クリックできるだけの高さがあるようにください。壁やいずれかのオブジェクト上にある仮想要素にも同じことが当てはまります。
アプリで防水ルームレイアウトが必要な場合は、シーン要素からそれを生成することができます。その方法を示す一例として、
参考アプリPhanto があります。
床に対応するシーンアンカーとして、
境界線 があります。それは、床と交差する部分の壁の線で構成される、2次元の閉じた線分群です。この境界線は、アイテムがルーム内にあるかどうかを確認するための多角形内部判定のために使用できます。また壁シーンアンカーの代用としても使えますが、トラッキングの精度を確保するため、個々の壁シーンアンカーを使うことをおすすめします。
シーンメッシュは、スペース内の自由空間と占有空間の境界を表現する、解像度は低いもののカバレッジの高いアーティファクトです。これはスペースの設定中に自動的に生成され、アプリからクエリできます。天井、床、壁に近いシーンメッシュは、正確にこれらのサーフェスにスナップします。オブジェクトに近いシーンメッシュは、できるだけ境界線をたどろうとします。
高速衝突 や障害物回避 には、シーンメッシュを使うようにしてください。跳ねるボールなどの接触時間が短い固体、発射体、粒子エフェクトオブジェクトを使うことで、バーチャルコンテンツと実際のオブジェクトの間のリアルな衝突を実現できます。シーンメッシュを使って交差チェックをすることにより、AIナビゲーションとコンテンツ配置の際に、スペースの中のどこに障害物があるかを正確に知ることができます。これらのユースケース以外にシーンメッシュを使用することも可能ですが、ユーザーの没入感を損ねる明らかなアーティファクトを取り入れないよう、慎重に実装する必要があるかもしれません。
シーンメッシュは、シーンモデル内の既存のジオメトリ(平面や立体)を置き換えるものではありません。単純な衝突には、平面と立体のジオメトリを使ってください。シーンメッシュはテーブルの上に物が散乱していることをキャプチャしますが、アプリではテーブルサーフェスの平面を使用したほうが良いかもしれません。
シーンメッシュでは、平面と立体のジオメトリを組み合わせることができます。アプリでの仮想と現実のインタラクションのほとんどが現実のテーブルの平面で発生する一方で、二次的仮想コンテンツとの衝突にはシーンメッシュを使うことができます。
スペースの設定中だけ、シーンメッシュをキャプチャできます。動的に移動するオブジェクト(椅子、ドア、人、ペット)は、シーンメッシュ内に焼き込まれており、キャプチャ後に更新されることはありません。キャプチャをユーザーが実行するよう誘導することにより、アプリがシーンメッシュを効果的に活用できるようにすることをおすすめします。アプリ起動時にメッシュを可視化し、必要とするカバー範囲を明確にすれば、静的シーンメッシュの制限が緩和されます。
高精度ジオメトリを必要とするタスクでシーンメッシュを使うことはおすすめしません。
視覚効果のためにメッシュを使わないようにしてください。 多くの場合、そのようにすると、不快感が生じ、エクスペリエンスを損なうことになります。現実のオブジェクトの正確な法線を得たり全体をカバーしたりすることには限界があるためです。床、天井、壁ではなくオブジェクトや家具の上にコンテンツを配置することは避けてください 。状況によってはよく見えることがありますが、容易に没入感が損なわれてしまい、何か欠けていることが視覚的に強調されてしまいます。パーティクルエフェクトは例外ですが、メッシュカバーの限界が目立ってしまわないようパーティクルが長時間残らないようにしてください 家具の上を登ったりジャンプしたりするのは避けてください。 シーンメッシュによりそれが可能になりますが、ホバークラフト、ドローン、飛行生物といった、サーフェスと接触しないようなキャラクターデザインにし、メッシュから安全な距離(>10 cm)を保つようおすすめします。脚のある生き物がメッシュを登るのは、信頼度が低く、説得力に欠ける可能性があります。法線の精度に頼らないようにしてください。 法線は、床、天井、壁のフリーエリアでは通常問題ありませんが、オブジェクト上では予測できない場合があります。サーフェスからの正確な跳ね返りが必要なゲームや、ゲームプレイの要素の向きを決めるのに法線を利用するゲームプレイは、プレイヤーの不満を招く可能性があります。高速衝突の代わりに低速衝突や接触定着を使用することは避けてください 。低速の衝突はリアリティに欠け、誤差のある箇所が目立ってしまうことがあります。一方、高速の衝突ではユーザーが気づきにくくなります。特に、コンテンツを長時間静止させたままにすることは避けてください。 ものが引っかかる可能性があります。 シーンメッシュに穴がないことが保証されていても、狭いスペースで固いボディが引っかかる可能性があります。そのような状況が発生することでプレイヤーのエクスペリエンスが損なわれないようにしてください。例えば、プレイヤーが重要なアイテムを呼び寄せたりテレポートできるようにしたり、オブジェクトが投げられると自動的に壊れるようにしたりできます。シーンを使用する際のベストプラクティスを理解したら、以下の分野について詳しく調べましょう。