ケース スタディ - Mixed Reality で穴から覗く

複合現実感やMicrosoft HoloLensで何ができるかを考えるとき、普通は "自分の部屋にどんなオブジェクトを追加できるか?""自分の空間の上に何を重ねることができるか?"といった質問に固執するのではないでしょうか。私は、同じ技術を使って、あなたの周りにある実際の物理的なオブジェクトを覗いたり、通したりする、本質的に魔法のようなトリックを検討できる別の領域に焦点を当てたいと思います。

テック

あなたが RoboRaid で宇宙人に壁を突破されたときに彼らと戦ったか、Fragments で壁金庫のロックを解除したか、または 2015 年の E3 での Halo 5 の体験で幸運にも UNSC インフィニティの格納庫を見ることができた場合は、私が今話しているものをそのときに見ているはずです。 この視覚的なトリックは、あなたの想像力次第で、乾式壁に一時的に穴をあけたり、緩んだ床板の下に世界を隠したりするのに使うことができます。

RoboRaid adds three-dimensional pipes and other structure behind your walls, visible only through holes created as the invaders break through.

RoboRaid は、壁の裏に立体的なパイプなどの構造物を設置し、侵略者が侵入してきたときにできる穴から見えるようにします。

HoloLens でこれらの固有のホログラムのいずれかを使用すると、現実が実際の窓を通して自身の姿を見せるのと同様に、アプリは壁の後ろに、または床を通過してコンテンツの錯覚を見せることができます。 自分が左側に動くと、右側にあるすべてのものを見ることができます。 もっと近づくと、すべてのことが少し詳しくわかります。 主な違いは、実際の穴が通過できるのに対して、この床では、決してその魔法のホログラフィック コンテンツにたどり着けるようにならないことです。 (バックログにタスクを追加しておきます。)

バックグラウンド処理

このトリックは 2 つの効果の組み合わせです。 最初に、ホログラフィック コンテンツは "空間アンカー" を使用して世界にピン留めされます。アンカーを使用してそのコンテンツを "ワールドロック" するということは、今見ているものが、あなたが動いたり、基になる空間マッピング システムによって部屋の 3D モデルが更新されたりした場合でも、その近くにある物理オブジェクトから視覚的に離れていかないことを示します。

2 番目に、そのホログラフィック コンテンツは非常に特殊なスペースに視覚的に制限されているため、現実にある穴を通してしか見ることができません。 その遮蔽は、このトリックの売りである論理的な穴、窓、または出入口を通してしか見えないようにするために必要です。 視界の大部分を遮るものがなければ、ジュラシック・ワールドの秘密の空間への裂け目は、ただの下手な恐竜の配置にしか見えないかもしれません。

This is not an actual screenshot, but an illustration of how the secret underworld from MR Basics 101 looks on HoloLens. The black enclosure doesn’t show up, but you can see content through a virtual hole. (When looking through an actual device, the floor would seem to disappear even more because your eyes focus at a further distance as if it’s not even there.)

これは実際のスクリーンショットではありませんが、MR 基本 101 の秘密の裏世界が HoloLens でどのように見えるかを示す図です。 黒いエンクロージは表示されませんが、仮想的な穴を通してコンテンツを見ることができます。 (実際のデバイスを通して見ると、目のピントがより遠くにあるものに合うため、床はまるでそこに存在しないように、さらに消えているように見えるでしょう。)

ホログラフィック コンテンツのワールドロック

Unity では、WorldAnchor コンポーネントの追加と同じくらい簡単に、ホログラフィック コンテンツをワールドロックされた状態に維持できます。

myObject.AddComponent<WorldAnchor>();

WorldAnchor コンポーネントは、自身を近くの物理オブジェクトを基準として安定した状態に維持するために、その GameObject (さらには、階層内でそのオブジェクトの下にある他のすべてのもの) の位置と回転を常に調整します。 コンテンツを作成する場合は、オブジェクトのルート ピボットが、この仮想的な穴の中心にくるように作成します。 (オブジェクトのピボットが壁の奥深くにある場合は、その位置と回転のわずかな調整が非常に目立つため、この穴がそれ程安定しているように見えなくなる可能性があります。)

仮想的な穴を除くすべてのものの遮蔽

壁で隠されるものに対して視界を選択的にブロックするには、さまざまな方法があります。 最も単純なものは、HoloLensが加算ディスプレイを使用していることを利用したもので、完全に黒い物体は見えないように見えるというものです。 Unity では、これを、特殊なシェーダーや素材のトリックを行うことなく実行できます。黒い素材を作成し、それをコンテンツがボックスに詰められたオブジェクトに割り当てるだけです。 3D モデリングを実行したくない場合は、少数の既定の Quad オブジェクトを使用し、それらをわずかに重複させるだけで済みます。 このアプローチにはいくつかの欠点がありますが、これは何かを機能させるための最も速い方法であり、後でそのリファクタリングが必要になる可能性が疑われる場合でも、忠実度の低い概念実証を機能させることは素晴らしいことです。

上の "黒いボックス" のアプローチの 1 つの大きな欠点は、その写真がうまく撮れないことです。 その効果は HoloLens のディスプレイを通して完璧に見えるかもしれませんが、撮ったスクリーンショットには、残っている壁または床ではなく、大きな黒いオブジェクトが表示されます。 この原因は、物理ハードウェアとスクリーンショットでは、ホログラムと現実が異なる方法で合成されることです。 ちょっとの間、いくつかの偽の数学へ回り道しましょう...

偽の数学に関するアラート! これらの数値や数式は、どのような種類の正確なメトリックでもなく、要点を示すことを目的にしています。

HoloLens を通して表示される内容は次のとおりです。

( Reality * darkening_amount ) + Holograms

スクリーンショットやビデオで表示される内容は次のとおりです。

( Reality * ( 1 - hologram_alpha ) ) + Holograms * hologram_alpha

言葉による表現: HoloLens を通して表示される内容は、暗くなった現実 (サングラスなどを通して) と、アプリで表示しようとするすべてのホログラムの単純な組み合わせです。 しかし、スクリーンショットを撮ると、ピクセルごとの透明度の値に従って、カメラの画像がアプリのホログラムとブレンドされます。

これを回避するための 1 つの方法として、"黒いボックス" の素材を深度バッファーにのみ書き込むように変更し、その他のすべての不透明な素材と共に並べ替えます。 これの例については、GitHub 上の MixedRealityToolkit 内の WindowOcclusion.shader ファイル を確認してください。 関連する行が次にコピーされています。

"RenderType" = "Opaque"
"Queue" = "Geometry"
ColorMask 0

("Offset 50, 100" の行は、関連がない問題に対処するためのものであるため、それを除外することが妥当だと思われます。)

そのような表示されない遮蔽素材を実装すると、アプリでは、ディスプレイと複合現実のスクリーンショットに正しく表示されるボックスを描画できるようになります。 ボーナスポイントとして、見えないピクセルの描画をさらに少なくする工夫をして、このボックスのパフォーマンスをさらに向上させることもできますが、これは本当に厄介なことで、通常は必要ないでしょう。

Here is the secret underworld from MR Basics 101 as Unity draws it, except for the outer parts of the occluding box. Note that the pivot for the underworld is at the center of the box, which helps keep the hole as stable as possible relative to your actual floor.

MR Basics 101に登場する秘密の地下世界を、オクルーディングボックスの外側を除いてUnityが描いたものがこちら。 裏世界のピボットがこのボックスの中心にあることに注意してください。それは、この穴を実際の床を基準として、できるだけ安定した状態に維持するのに役立ちます。

自分で実行する

HoloLens があれば、この効果を自分自身で試してみたいと思いませんか? 実行できる最も簡単なこと (コーディングは必要ありません) は、無料の 3D ビューアー アプリをインストールし、GitHub に提供されているダウンロード用 .fbx ファイルを読み込んで自分の部屋に植木鉢モデルを表示することです。 HoloLens に読み込むと、錯覚が機能していることを確認できます。 このモデルの前にいるときは、小さな穴の中だけが見え、その他はすべて表示されません。 このモデルをその他の側から見ると、それは完全に消えます。 3D ビューアーの移動、回転、スケーリングの各コントロールを使用して、仮想的な穴を考えられる任意の垂直面に配置することにより、いくつかのアイデアを生み出してください!

Viewing this model in your Unity editor will show a large black box around the flowerpot. On HoloLens, the box disappears, giving way to a magic window effect.

このモデルを Unity エディターで見ると、植木鉢の周りに大きな黒いボックスが表示されます。 HoloLens では、このボックスが消え、マジック ウィンドウ効果が現れます。

この手法を使用するアプリをビルドする場合は、Mixed Reality のチュートリアルに含まれている MR 基本 101 のチュートリアルを確認してください。 第 7 章は、隠された裏世界を明らかにする床の爆発で終わります (上の図を参照)。 だれがチュートリアルは退屈でなければならないと言いましたか。

このアイデアを次にどこで入手できるかについての方法をいくつか次に示します。

  • 仮想的な穴の内側のコンテンツを対話的にするための方法を考えてください。 ユーザーが壁を超えて何らかの影響を及ぼすことができるようにすると、このトリックが提供できる不思議な感覚を実際に向上させることができます。
  • オブジェクトを通して元の既知の領域を見るための方法を考えてください。 たとえば、コーヒー テーブルにホログラフィックな穴を置き、その下の床を見るにはどうすればよいでしょうか。

筆者について

Picture of Eric Rehmeyer Eric Rehmeyer
シニア ソフトウェア エンジニア @Microsoft

関連項目