ケーススタディ-安定化平面を使用して holographic 乱気流を減らすCase study - Using the stabilization plane to reduce holographic turbulence

ホログラムを使用することは、難しい場合があります。Working with holograms can be tricky. 空間内を移動して、さまざまな角度からホログラムを表示できるという事実は、通常のコンピューター画面では得られない程度の immersion を提供します。The fact that you can move around your space and see your holograms from all different angles provides a level of immersion that you can’t get with a normal computer screen. これらのホログラムを適切に配置し、現実的に表示することは、Microsoft HoloLens ハードウェアと holographic アプリのインテリジェント設計の両方によって実現される技術的な方法です。Keeping these holograms in place and looking realistic is a technical feat accomplished by both the Microsoft HoloLens hardware and the intelligent design of holographic apps.

技術The tech

ホログラムを実際にスペースを共有しているかのように見えるようにするには、色を分離せずに、適切にレンダリングする必要があります。To make holograms appear as though they're actually sharing the space with you, they should render properly, without color separation. これは、一部のテクノロジに組み込まれている、HoloLens ハードウェアに組み込まれているテクノロジによって実現されます。これにより、安定化平面と呼ばれるものにホログラムが固定されます。This is achieved, in part, by technology built-in to the HoloLens hardware which keeps holograms anchored on what we call a stabilization plane.

平面はポイントと法線によって定義されますが、平面は常にカメラに接続する必要があるため、ここでは平面のポイントの設定についてのみ説明します。A plane is defined by a point and a normal, but since we always want the plane to face the camera, we're really just concerned with setting the plane's point. HoloLens は、その処理に焦点を当てることをポイントし、すべての要素が固定され安定した状態を維持するように指示できますが、このフォーカスポイントを設定する方法はアプリに固有であり、コンテンツに応じてアプリを作成または中断することができます。We can tell HoloLens which point to focus its processing on to keep everything anchored and stable, but how to set this focus point is app-specific, and can make or break your app depending on the content.

簡単に言うと、ホログラムは、安定化平面が適切に適用されている場合に最も効果的に機能しますが、実際には、作成しているアプリケーションの種類によって異なります。In a nutshell, holograms work best when the stabilization plane is properly applied, but what that actually means depends on the type of application you’re creating. HoloLens で現在利用できるアプリのいくつかについて、この問題に対処する方法を見てみましょう。Let’s take a look at how some of the apps currently available for HoloLens tackle this problem.

しくみBehind the scenes

次のアプリを開発するときに、プレーンを使用していない場合、オブジェクトは、ヘッドを移動したときにオブジェクトを sway にし、クイックヘッドまたはホログラムの移動によって色を分離することに気付きました。When developing the following apps, we noticed that when we didn't use the plane, objects would sway when our head moved and we'd see color separation with quick head or hologram movements. 開発期間中は、安定化平面を最適に使用する方法と、修正できない問題を回避するためにアプリを設計する方法について、試用とエラーについて学習しました。Over the course of the development timeframe, we learned through trial and error how to best use the stabilization plane and how to design our apps around the problems that it can't fix.

Galaxy エクスプローラー: 静止コンテンツ、3D インタラクティビティGalaxy Explorer: Stationary content, 3D interactivity

Galaxy エクスプローラーには、シーンに2つの主要な要素があります。宇宙コンテンツのメインビューと、宝石に続く小さい UI ツールバーです。Galaxy Explorer has two major elements in the scene: The main view of the celestial content and the small UI toolbar that follows your gaze. 安定化ロジックでは、各フレームで現在の宝石ベクトルと交差しているものを調べて、指定された衝突レイヤーでヒットしたかどうかを判断します。For the stabilization logic, we look at what your current gaze vector intersects with in each frame to determine if it hits anything on a specified collision layer. この場合、関心のあるレイヤーは惑星であるため、宝石が地球に当たると、安定化平面が配置されます。In this case, the layers we’re interested in are the planets, so if your gaze falls on a planet, the stabilization plane is placed there. ターゲット競合レイヤー内のどのオブジェクトもヒットしなかった場合、アプリはセカンダリの "plan B" レイヤーを使用します。If none of the objects in the target collision layer are hit, the app uses a secondary “plan B” layer. 何も gazed ない場合、安定化平面は、コンテンツでの処理時と同じ距離に保持されます。If nothing is being gazed at, the stabilization plane is kept at the same distance as it was when gazing at the content. UI ツールはプレーンターゲットとして残されています。これは、ほぼすべてのシーンの安定性を低く抑えることができるという点です。The UI tools are left out as a plane target as we found the jump between near and far reduced the stability of the overall scene.

Galaxy エクスプローラーのデザインは、安定した状態を維持し、色の分離の効果を減らすためにも役立ちます。The design of Galaxy Explorer lends itself well to keeping things stable and reducing the effect of color separation. ユーザーは、このコンテンツを左右に移動するのではなく、その内容を移動して軌道で進めることをお勧めします。また、惑星の orbiting は、色の分離が目立たないほど遅くなります。The user is encouraged to walk around and orbit the content rather than move along it from side to side, and the planets are orbiting slowly enough that the color separation isn’t noticeable. また、定数 60 FPS が維持されます。これは、色の分離が行われないようにするための長い方法です。Additionally, a constant 60 FPS is maintained, which goes a long way in preventing color separation from happening.

これを自分で確認するには、 GitHub の Galaxy エクスプローラーコードで LSRPlaneModifier.cs という名前のファイルを探します。To check this out yourself, look for a file called LSRPlaneModifier.cs in the Galaxy Explorer code on GitHub.

HoloStudio: UI フォーカスを持つ静止コンテンツHoloStudio: Stationary content with a UI focus

HoloStudio では、ほとんどの時間を使用して、作業しているのと同じモデルを調べることができます。In HoloStudio, you spend most of your time looking at the same model you’re working on. 新しいツールを選択した場合や、UI 内を移動する場合を除き、お客様の宝石は大きくなりません。そのため、プレーンの設定ロジックを単純にしておくことができます。Your gaze doesn’t move a significant amount, except for when you select a new tool or want to navigate the UI, so we can keep the plane setting logic simple. UI を見ると、航空機は、宝石のある UI 要素に設定されます。When looking at the UI, the plane is set to whatever UI element your gaze snaps to. モデルを見るとき、平面は、ユーザーとモデルの間の既定の距離に対応する設定距離を設定します。When looking at the model, the plane is a set distance away, corresponding with the default distance between you and the model.

[ホーム] ボタンのユーザー gazes として HoloStudio で視覚化された安定化面

HoloTour と3D ビューアー: アニメーションとムービーを使用した静止コンテンツHoloTour and 3D Viewer: Stationary content with animation and movies

HoloTour と3D ビューアーでは、3D 効果が上に追加された、単独でアニメーション化されたオブジェクトまたはムービーを見ています。In HoloTour and 3D Viewer, you’re looking at a solitary animated object or movie with 3D effects added on top of it. これらのアプリの安定化は、現在表示している任意のものに設定されます。The stabilization in these apps is set to whatever you’re currently viewing.

また、HoloTour を使用すると、固定された場所に保持するのではなく、自分で移動することで、仮想環境から straying を離れてしまうのを防ぐことができます。HoloTour also prevents you from straying too far away from your virtual world by having it move with you instead of staying in a fixed location. これにより、のクリープに対する安定性の問題について、他のホログラムから十分な距離を確保できなくなります。This ensures that you won’t get far enough away from other holograms for stability issues to creep in.

この例では、HoloTour から、安定化平面が Hadrian の Pantheon のこの映画に設定されています。

RoboRaid: 動的なコンテンツと環境の相互作用RoboRaid: Dynamic content and environmental interactions

RoboRaid での安定化面の設定は驚くほど簡単ですが、最も突然の動きを必要とするアプリでもあります。Setting the stabilization plane in RoboRaid is surprisingly simple, despite being the app that requires the most sudden movement. 平面は、壁または周囲のオブジェクトに隣接するように調整されており、遠く離れた場所から離れた位置に固定された距離でフローティングします。The plane is geared towards sticking to the walls or the surrounding objects and will float at a fixed distance in front of you when you’re far enough away from them.

RoboRaid は、安定化面を念頭に置いて設計されています。RoboRaid was designed with the stabilization plane in mind. Reticle はヘッドロックされているため最も多くを移動するため、赤と青だけを使用して色のにじみを最小限に抑えることができます。The reticle, which moves the most since it’s head-locked, circumvents this by using only red and blue which minimizes any color bleeding. また、これらの部分の間には少しの深さが含まれているので、既に予想されている視差効果を使用してマスクすることによって発生するすべてのカラー裁ち落としを最小化できます。It also contains a small bit of depth between the pieces, minimizing any color bleed that would occur by masking it with an already expected parallax effect. ロボットは、ごく短時間では移動せず、一定の間隔でのみ移動します。The robots don’t move very quickly and only travel short distances in regular intervals. これらは、既定で安定化が設定されている前に2メートル前後にある傾向があります。They tend to stay around 2 meters in front of you, where the stabilization is set by default.

フラグメントと Young Conker: 環境との対話による動的コンテンツFragments and Young Conker: Dynamic content with environmental interaction

でC++は Asobo Studio によって作成され、フラグメントと Young conker は、安定化平面を設定するための別のアプローチを採用しています。Written by Asobo Studio in C++, Fragments and Young Conker take a different approach to setting the stabilization plane. 関心のあるポイント (POI) は、コードで定義され、優先度に基づいて順序付けされます。Points of interest (POI) are defined in the code and ordered in terms of priority. Poi は、Young Conker の Conker モデル、メニュー、照準 reticle、ロゴなどのゲーム内のコンテンツです。POIs are in-game content such as the Conker model in Young Conker, menus, the aiming reticle, and logos. Poi はユーザーの宝石によって交差し、平面は最も優先順位の高いオブジェクトの中心に設定されます。The POIs are intersected by the user’s gaze and the plane is set to the center of the object with the highest priority. 積集合がない場合、平面は既定の距離に設定されます。If no intersection occurs, the plane is set to the default distance.

また、再生スペースとして以前にスキャンされたものの外部に移動した場合にアプリを一時停止することで、アプリを一時停止することで、ホログラムから straying になるように、フラグメントや若い Conker も設計されています。Fragments and Young Conker also design around you straying too far from the holograms by pausing the app if you move outside of what’s been previously scanned as your play space. そのため、最も安定したエクスペリエンスを提供するために、検出された境界内に保持されます。As such, they keep you within the boundaries that are found to provide the most stable experience.

自分でやってみるDo it yourself

HoloLens を所有していて、この記事内の概念を試したい場合は、テストシーンをダウンロードし、以下の演習を試すことができます。If you have a HoloLens and would like to play around with the concepts within this article, you can download a test scene and try out the exercises below. Unity の組み込みの gizmo API を使用しており、プレーンがどこで設定されているかを視覚化するのに役立ちます。It uses Unity’s built-in gizmo API and should help you visualize where your plane is being set. このコードは、このケーススタディでスクリーンショットをキャプチャするためにも使用されていました。This code was also used to capture the screenshots in this case study.

  1. MixedRealityToolkitの最新バージョンを同期します。Sync the latest version of MixedRealityToolkit-Unity.
  2. HoloToolkit-Examples/Utilities/シーン/StabilizationPlaneSettingシーンを開きます。Open the HoloToolkit-Examples/Utilities/Scenes/StabilizationPlaneSetting.unity scene.
  3. 生成されたプロジェクトをビルドして構成します。Build and configure the generated project.
  4. デバイスでを実行します。Run on your device.

演習1Exercise 1

さまざまな向きでいくつかの白い点が表示されます。You'll see several white dots around you at different orientations. 前面には、深さが異なる3つの点が表示されます。In front of you, you’ll see three dots at different depths. エアタップを使用して、平面を設定するドットを変更します。Air tap to change which dot the plane is set to. この演習では、その他の2つについて、ドットでの入力中にスペースを移動します。For this exercise, and for the other two, move around your space while gazing at the dots. 頭を左、右、上、下に移動します。Turn your head left, right, up, and down. ドットから遠く離れた場所に移動します。Move closer to and farther from the dots. 安定化平面が異なるターゲットに設定されている場合に、それらがどのように反応するかを確認します。See how they react when the stabilization plane is set to different targets.

演習2Exercise 2

次に、2つの移動ドットが表示されるまで右に旋回します。1つは水平パスに、もう1つは垂直パスにあります。Now, turn to your right until you see two moving dots, one oscillating on a horizontal path and one on a vertical path. ここでも、エアタップを使用して、平面を設定するドットを変更します。Once again, air-tap to change which dot the plane is set to. 色の分離がどのように減少し、平面に接続されているドットに表示されるかに注目してください。Notice how color separation is lessened and appears on the dot that is connected to the plane. [平面] 設定関数でドットのベロシティを使用するには、もう一度タップします。Tap again to use the dot’s velocity in the plane setting function. このパラメーターは、オブジェクトの目的の動きについて HoloLens にヒントを提供します。This parameter gives a hint to HoloLens about the object’s intended motion. これを使用するタイミングを把握しておくことが重要です。1つのドットでベロシティが使用されている場合は、もう一方のドットの色の分離が表示されます。It’s important to know when to use this, as you’ll notice when velocity is used on one dot, the other moving dot will show greater color separation. アプリを設計するときは、この点に留意してください。オブジェクトの動きに対してまとまったフローを使用すると、アイテムが表示されないようにすることができます。Keep this in mind when designing your apps—having a cohesive flow to the motion of your objects can help prevent artifacts from appearing.

演習3Exercise 3

ドットの新しい構成が表示されるまで、もう一度右に切り替えます。Turn to your right once more until you see a new configuration of dots. この場合、距離にドットがあり、その前にドット spiraling が1つずつあります。In this case, there are dots in the distance and one dot spiraling in and out in front of them. エアタップを使用して、平面のドットを変更し、背面のドットとモーションのドットを交互に切り替えます。Air tap to change which dot the plane is set to, alternating between the dots in the back and the dot in motion. 平面の位置とベロシティを spiraling dot の値に設定すると、アイテムがどこに表示されるかに注意してください。Notice how setting the plane position and the velocity to that of the spiraling dot makes artifacts appear everywhere.


  • プレーンの設定ロジックを単純にします。Keep your plane setting logic simple. 既に説明したように、イマーシブエクスペリエンスを実現するための複雑なプレーン設定アルゴリズムは必要ありません。As you’ve seen, you don’t need complex plane setting algorithms to make an immersive experience. 安定化平面は、パズルの1つの部分にすぎません。The stabilization plane is only one piece of the puzzle.
  • 可能な限り、ターゲット間で平面をスムーズに移動します。When at all possible, always move the plane between targets smoothly. 遠くのターゲットを瞬時に切り替えると、シーンが視覚的に中断される可能性があります。Instantly switching distant targets can visually disrupt the scene.
  • 平面の設定ロジックで、非常に具体的なターゲットにロックするオプションを使用することを検討してください。Consider having an option in your plane setting logic to lock onto a very specific target. そうすることで、必要に応じて、ロゴやタイトル画面などのオブジェクトでプレーンをロックすることができます。That way, you can have the plane locked on an object, such as a logo or title screen, if needed.

執筆者紹介About the author

Picture of Ben Strukus Ben StrukusBen Strukus
ソフトウェアエンジニア @MicrosoftSoftware Engineer @Microsoft

See also