空間マッピングSpatial mapping

空間マッピングは、真に迫った複合現実エクスペリエンスを作成でき、HoloLens、周りの環境で現実世界のサーフェスの詳しい表現を提供します。Spatial mapping provides a detailed representation of real-world surfaces in the environment around the HoloLens, allowing developers to create a convincing mixed reality experience. 仮想世界で現実世界をマージすることで、アプリケーションは実際と思われるホログラムを行うことができます。By merging the real world with the virtual world, an application can make holograms seem real. アプリケーションも揃えることがより自然でユーザーの期待使い慣れた実際の動作と相互作用を提供することで。Applications can also more naturally align with user expectations by providing familiar real-world behaviors and interactions.


デバイスのサポートDevice support

機能Feature HoloLens (第 1 世代)HoloLens (1st gen)HoloLens 2HoloLens 2 イマーシブ ヘッドセットImmersive headsets
空間マッピングSpatial mapping ✔️✔️ ✔️✔️

概念の概要Conceptual overview

ルームをカバーするメッシュ サーフェスMesh surfaces covering a room
ルームをカバーする空間マッピング メッシュの例An example of a spatial mapping mesh covering a room

空間マッピングに使用される 2 つのプライマリ オブジェクトの種類には、' 空間画面のオブザーバー 'および' 空間画面 ' です。The two primary object types used for spatial mapping are the 'Spatial Surface Observer' and the 'Spatial Surface'.

空間マッピング データを受信するアプリケーションが望んでいる領域の領域を定義する 1 つまたは複数の外接するボリュームで空間画面オブザーバーは、アプリケーションに提供します。The application provides the Spatial Surface Observer with one or more bounding volumes, to define the regions of space in which the application wishes to receive spatial mapping data. これらのボリュームごとに、空間マッピングは一連の空間のサーフェスのアプリケーションを提供します。For each of these volumes, spatial mapping will provide the application with a set of Spatial Surfaces.

これらのボリュームが静止している (現実の世界に対して固定の場所) 内か、HoloLens (、移動しますが、回転しない、HoloLens のように、環境を移動するとき) に接続されている可能性があります。These volumes may be stationary (in a fixed location with respect to the real world) or they may be attached to the HoloLens (they move, but do not rotate, with the HoloLens as it moves through the environment). 各空間のサーフェスは、世界ロックにアタッチされている三角形メッシュとして表される領域のサイズの小さいボリューム内の実際のサーフェスを説明します。空間座標系します。Each spatial surface describes real-world surfaces in a small volume of space, represented as a triangle mesh attached to a world-locked spatial coordinate system.

HoloLens、環境に関する新しいデータを収集し、空間のサーフェスが表示されます、環境への変更が発生すると、非表示し、変更します。As the HoloLens gathers new data about the environment, and as changes to the environment occur, spatial surfaces will appear, disappear and change.

一般的な使用シナリオCommon usage scenarios

空間マッピングの一般的な使用シナリオの図。配置、オクルー ジョン、物理運動およびナビゲーション

配置Placement

空間マッピングは、ユーザーには相互作用のフォームを自然かつ使い慣れたをもたらすアプリケーションを提供します。ダウン、デスクに電話を配置するよりもより自然などのような可能性がありますか。Spatial mapping provides applications with the opportunity to present natural and familiar forms of interaction to the user; what could be more natural than placing your phone down on the desk?

ホログラムの配置の制約 (より一般的には、空間的な場所の選択) サーフェス上に存在するには、2 D (画面上のポイント) を 3D (空間内の点) から自然なマッピングを提供します。 します。Constraining the placement of holograms (or more generally, any selection of spatial locations) to lie on surfaces provides a natural mapping from 3D (point in space) to 2D (point on surface). これには、ユーザーがアプリケーションに提供する必要があるし、ことができ、ユーザーの操作より速くより簡単より正確な情報の量が削減されます。This reduces the amount of information the user needs to provide to the application and thus makes the user's interactions faster, easier and more precise. これは、機能は、'離れた距離' がないため物理的に他のユーザーまたはコンピューターの通信に提供されることに特に当てはまります。This is particularly true because 'distance away' is not something that we are used to physically communicating to other people or to computers. したのでポイントすると、指定するは、方向が距離ではありません。When we point with our finger, we are specifying a direction but not a distance.

アプリケーションの方向からの距離を推論するときに、重要な注意点は (に最も近いを検索するユーザーの視線入力方向の raycast を実行することなどによって空間画面)、このユーザーが確実に予測できる結果を生成する必要があります。An important caveat here is that when an application infers distance from direction (for example by performing a raycast along the user's gaze direction to find the nearest spatial surface), this must yield results that the user is able to reliably predict. それ以外の場合、ユーザーがコントロールの意味が失われ、これがすぐにイライラします。Otherwise, the user will lose their sense of control and this can quickly become frustrating. 1 つだけではなく複数 raycasts を実行することにより、この方法の 1 つです。One method that helps with this is to perform multiple raycasts instead of just one. 集計の結果より滑らかなより予測可能な (小さな穴に渡されるまたは少量のユーザーは認識しないジオメトリのヒット光線によって発生すること) と '外れ値' で一時的な結果に影響を与えるに受けにくくなりますがあります。The aggregate results should be smoother and more predictable, less susceptible to influence from transient 'outlier' results (as can be caused by rays passing through tiny holes or hitting small bits of geometry that the user is not aware of). 時間の経過とともに集計やスムージングを実行することもたとえば、ユーザーからの距離をホログラムはさまざま最大速度を制限できます。Aggregation or smoothing can also be performed over time; for example you can limit the maximum speed at which a hologram can vary in distance from the user. 距離の最小値と最大値を単に制限することができます、ので、移動されるホログラムが飛行距離にまたはユーザーの顔に絞めるして突然されません。Simply limiting the minimum and maximum distance value can also help, so the hologram being moved does not suddenly fly away into the distance or come crashing back into the user's face.

アプリケーションは、ガイド ホログラム配置する、図形とサーフェスの方向を使用できますも。Applications can also use the shape and direction of surfaces to guide hologram placement. Holographic 椅子は壁を通過する必要がありますいないと、少しでもない場合でも、フロアでフラッシュ配置する必要があります。A holographic chair should not penetrate through walls and should sit flush with the floor even if it is slightly uneven. このような機能は、ただしのような懸念事項が適用されます、単なる raycasts ではなく、物理運動の衝突の使用時に依存する可能性があります。This kind of functionality would likely rely upon the use of physics collisions rather than just raycasts, however similar concerns will apply. 配置されているホログラムが突き出した、椅子、足のような多くの小規模な多角形が賢明せず空間サーフェス上のスライドことができるようにも縦と横より滑らかなものにこれらの多角形の物理運動の表現を拡張するにはキャプチャします。If the hologram being placed has many small polygons that stick out, like the legs on a chair, it may make sense to expand the physics representation of those polygons to something wider and smoother so that they are more able to slide over spatial surfaces without snagging.

極端な場合、ユーザー入力を簡略化できます離れた完全と完全に自動化ホログラム配置を実行する空間のサーフェスを使用できます。At its extreme, user input can be simplified away entirely and spatial surfaces can be used to perform entirely automatic hologram placement. たとえば、アプリケーションでしたを置いて holographic のライトの切り替えを押すユーザーのウォールにします。For example, the application could place a holographic light-switch somewhere on the wall for the user to press. 二重ここでは予測可能性についてこの注意事項が適用されます。ユーザーが求めるホログラムの配置を制御、アプリケーションは常に設定されませんホログラム (ライトの切り替えでは、ユーザーに到達できない別の場所が表示されます) 場合が期待される場合は、フラストレーションにこのなります。The same caveat about predictability applies doubly here; if the user expects control over hologram placement, but the application does not always place holograms where they expect (if the light-switch appears somewhere that the user cannot reach), then this will be a frustrating experience. ユーザーの修正を必要とする自動配置を実行する悪い場合があります実際には、配置を自体は常に実行するユーザーに必要なだけよりも、時間の一部自動配置が成功したため予想負担のような気持ちに手動で修正。It can actually be worse to perform automatic placement that requires user correction some of the time, than to just require the user to always perform placement themselves; because successful automatic placement is expected, manual correction feels like a burden!

また、配置は、アプリケーションに大きく依存する場合は、空間のサーフェスを使用するアプリケーションの機能エクスペリエンスをスキャンします。Note also that the ability of an application to use spatial surfaces for placement depends heavily on the application's scanning experience. サーフェスがスキャンされていない場合は、配置に使用できません。If a surface has not been scanned, then it cannot be used for placement. これをユーザーにクリアようにする新しい画面をスキャンまたは新しい場所の選択がわかるか、アプリケーションの責任です。It is up to the application to make this clear to the user, so that they can either help scan new surfaces or select a new location.

ユーザーに視覚的なフィードバックは、配置時に最も重要です。Visual feedback to the user is of paramount importance during placement. ユーザーに最も近い画面関連ホログラムが場所がわかっている必要のある効果の接地します。The user needs to know where the hologram is in relation to the nearest surface with grounding effects. (たとえば、衝突と他の画面の近くにある) ため、ホログラムの動きが制約されている理由を理解する必要があります。They should understand why the movement of their hologram is being constrained (for example, due to collision with another nearby surface). 場合は、現在の場所、ホログラムを配置することはできません、し、視覚的なフィードバックする必要があります明確になる理由されません。If they cannot place a hologram in the current location, then visual feedback should make it clear why not. たとえば、配置しようとして、ユーザー holographic ソファ停止途中、壁に怒っている色で、壁の背後にある、カウチの部分が規則正しく必要がありますし、します。For example, if the user is trying to place a holographic couch stuck half-way into the wall, then the portions of the couch that are behind the wall should pulsate in an angry color. または、反対に、アプリケーションは、実際の画面を表示できる場所で空間のサーフェスを見つけることができない場合、アプリケーションでは、このクリアします。Or conversely, if the application cannot find a spatial surface in a location where the user can see a real-world surface, then the application should make this clear. この領域の接地効果の明確ながない場合は、この目的を達成可能性があります。The obvious absence of a grounding effect in this area may achieve this purpose.

オクルージョンOcclusion

空間マッピング サーフェスの主な用途の 1 つは、ホログラムがすることです。One of the primary uses of spatial mapping surfaces is simply to occlude holograms. この単純な動作は、ホログラムを本当に、ユーザーと同じ物理領域に存在する本能的な意味を作り出すためのユーザーの体感よりリアルに大きな影響を及ぼします。This simple behavior has a huge impact on the perceived realism of holograms, helping to create a visceral sense that really inhabit the same physical space as the user.

オクルー ジョン、ユーザーには情報も提供しますホログラムは、実際の画面によってオクルー ジョンするが表示されたら、この世界では、そのホログラムの所在地に関して追加の視覚的フィードバックを提供します。Occlusion also provides information to the user; when a hologram appears to be occluded by a real-world surface, this provides additional visual feedback as to the spatial location of that hologram in the world. 逆に、遮蔽ができますも有効を非表示にユーザーからの情報は、直感的な方法でビジュアルをすっきり壁が背後にある他ホログラムします。Conversely, occlusion can also usefully hide information from the user; occluding holograms behind walls can reduce visual clutter in an intuitive way. ホログラムを表示または非表示に、ユーザーは自分の頭を移動するだけですが。To hide or reveal a hologram, the user merely has to move their head.

重なりを使用して使い慣れた物理的な相互作用; に基づいて自然なユーザー インターフェイスに対する期待を準備することもできます。ホログラムがその画面が堅牢ですサーフェスによってオクルー ジョンされた場合、そのため、期待されるホログラムは衝突を画面し、だけでなく通過します。Occlusion can also be used to prime expectations for a natural user interface based upon familiar physical interactions; if a hologram is occluded by a surface it is because that surface is solid, so the user should expect that the hologram will collide with that surface and not simply pass through it.

場合によっては、オクルー ジョン ホログラムは望ましくありません。Sometimes, occlusion of holograms is undesirable. ホログラムと対話できるように、ユーザーに必要な場合は、実際の画面の内側にある場合でも - 表示できないようにする、必要があります。If a user needs to be able to interact with a hologram, then they need to be able to see it - even if it is behind a real-world surface. このような場合は、通常は理にかなって (たとえばは明るさを減らすこと) で、オクルー ジョンはときに、このようなホログラムを異なる方法でレンダリングします。In such cases, it usually makes sense to render such a hologram differently when it is occluded (for example, by reducing its brightness). これにより、ユーザーは、ホログラムを視覚的に見つけられませんされますが、何かの内側にあることに注意してくださいができます。This way, the user will be able to visually locate the hologram, but they will still be aware that it is behind something.

物理学Physics

物理運動のシミュレーションの使用は、別の方法を補強する空間マッピングを使用できます、プレゼンスホログラムでユーザーの物理的なスペースの。The use of physics simulation is another way in which spatial mapping can be used to reinforce the presence of holograms in the user's physical space. Holographic ゴム ボールみたいだったよは私の机から現実的にはロールし、フロア間 bounces、ソファでは表示されなくなります、ハードすることが本当に存在しないと思われる場合があります。When my holographic rubber ball rolls realistically off my desk, bounces across the floor and disappears under the couch, it might be hard for me to believe that it's not really there.

物理運動のシミュレーションには、自然かつ使い慣れた物理ベースの相互作用を使用するアプリケーションにとっての機会も提供します。Physics simulation also provides the opportunity for an application to use natural and familiar physics-based interactions. 床の上 holographic 家具の周囲の一部を移動する可能性がありますしやすくなります、ユーザーの家具が慣性による処理の適切な摩擦と床面の間で、スライディングされたかのように応答する場合。Moving a piece of holographic furniture around on the floor will likely be easier for the user if the furniture responds as if it were sliding across the floor with the appropriate inertia and friction.

実際の物理的な動作を生成するために必要がありますをいくつか実行メッシュ処理などの穴を入力するには、削除 hallucinations のフローティング、およびスムージング概要サーフェス。In order to generate realistic physical behaviors, you will likely need to perform some mesh processing such as filling holes, removing floating hallucinations and smoothing rough surfaces.

考慮する必要がありますも方法、アプリケーションのエクスペリエンスをスキャン物理運動のシミュレーションに影響を与えます。You will also need to consider how your application's scanning experience influences its physics simulation. まず、サーフェスが不足するいると競合しないものです。ラバー ボール長くて言い、回廊ダウンし、既知の世界の終わりと起こりますか。Firstly, missing surfaces won't collide with anything; what happens when the rubber ball rolls off down the corridor and off the end of the known world? 次に、時間の経過と共に、環境内の変更に応答する続けますかどうかを決定する必要があります。Secondly, you need to decide whether you will continue to respond to changes in the environment over time. 場合によっては、; できるだけ早く対応しますユーザーを使用しているドアや家具として移動可能な barricades Roman 受信の矢印のテンペストに対する防策であるとします。In some cases, you will want to respond as quickly as possible; say if the user is using doors and furniture as movable barricades in defense against a tempest of incoming Roman arrows. それ以外の場合は、する可能性がある; の新しい更新プログラムを無視します。floor、holographic スポーツ カー レースの周りを促進できない可能性がありますが突然あなたの愛犬がトラックの途中で配置を決定した場合にとても楽しいからです。In other cases though, you may want to ignore new updates; driving your holographic sports car around the racetrack on your floor may suddenly not be so fun if your dog decides to sit in the middle of the track.

アプリケーションでは、holographic の文字 (またはエージェント) は実在の人物と同じ方法で現実の世界を移動するのに機能を許可するのに空間のマッピング データを使用できます。Applications can use spatial mapping data to grant holographic characters (or agents) the ability to navigate the real world in the same way a real person would. こうと、同じユーザーとその友達の自然でなじみのある動作のセットに制限することによって holographic 文字の存在を強調します。This can help reinforce the presence of holographic characters by restricting them to the same set of natural, familiar behaviors as those of the user and their friends.

ナビゲーション機能は、ユーザーにも役立つことがあります。Navigation capabilities could be useful to users as well. ナビゲーションのマップが特定の領域にビルドされたら、その場所に新しいユーザーの未知の holographic の方向を提供する共有でした。Once a navigation map has been built in a given area, it could be shared to provide holographic directions for new users unfamiliar with that location. このマップは、フローを円滑に '歩行者 'トラフィックを保つために、またはサイトの構築のような危険な場所での事故を回避するために設計する可能性があります。This map could be designed to help keep pedestrian 'traffic' flowing smoothly, or to avoid accidents in dangerous locations like construction sites.

ナビゲーション機能の実装に関連するキーの技術的課題をウォークのサーフェス (人間は、テーブルのウォークはありません)。! (人間しない順を追ってドアが閉じられた!) 環境での変更を正常な適応の信頼性の高い検出となります。The key technical challenges involved in implementing navigation functionality will be reliable detection of walkable surfaces (humans don't walk on tables!) and graceful adaptation to changes in the environment (humans don't walk through closed doors!). メッシュには、いくつか必要があります処理パスの計画と仮想の文字でナビゲーション用に使用する前にします。The mesh may require some processing before it is usable for path-planning and navigation by a virtual character. メッシュをスムージングおよび hallucinations の削除により、スタックになる文字を避けることができます。Smoothing the mesh and removing hallucinations may help avoid characters becoming stuck. 文字のパスの計画およびナビゲーションの計算を高速化するには、メッシュを大幅に簡略化することもできます。You may also wish to drastically simplify the mesh in order to speed up your character's path-planning and navigation calculations. これらの課題がテレビ ゲームのテクノロジの開発に多くの注意を受信し、豊富なこれらのトピックの使用可能な研究文献があります。These challenges have received a great deal of attention in the development of videogame technology, and there is a wealth of available research literature on these topics.

空間マッピング サーフェスと Unity の組み込み NavMesh の機能を使用できないことに注意してください。Note that the built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. 空間マッピング サーフェスは、アプリケーションまで不明なので、これは事前に資産をソースから生成される NavMesh データ ファイルが必要ですが、起動します。This is because spatial mapping surfaces are not known until the application starts, whereas NavMesh data files need to be generated from source assets ahead of time. 空間マッピング システムで提供しないことに注意してくださいサーフェスを非常に離れたについてユーザーの現在の場所から。Also note that, the spatial mapping system will not provide information about surfaces very far away from the user's current location. アプリケーションする必要があります 'ことを思い出してください' サーフェス自体は非常に大きな領域のマップを作成する場合。So the application must 'remember' surfaces itself if it is to build a map of a very large area.

視覚エフェクトVisualization

ほとんどの場合、表示する空間のサーフェスに適していますvisual 煩雑さを最小限にし、実際には、世界は、自身の読み上げます。Most of the time it is appropriate for spatial surfaces to be invisible; to minimize visual clutter and let the real world speak for itself. 場合もありますが、実際の対応は既に表示されているにもかかわらず空間マッピングのサーフェスを直接、視覚化すると便利です。However, sometimes it is useful to visualize spatial mapping surfaces directly, despite the fact that their real-world counterparts are already visible.

ホログラム (配置 holographic キャビネット、壁になど) を表面に配置する、ユーザーが試みているときになど、画面上に影をキャストすることによって、ホログラムが 'アース' 立つことができます。For example, when the user is trying to place a hologram onto a surface (placing a holographic cabinet on the wall, say) it can be useful to 'ground' the hologram by casting a shadow onto the surface. これにより、ユーザーはわかりやすく納得ホログラムと、画面間の正確な物理的近接の。This gives the user a much clearer sense of the exact physical proximity between the hologram and the surface. これは、視覚的に 'プレビューの' を変更して、ユーザーがコミットする前より一般的なプラクティスの例でも。This is also an example of the more general practice of visually 'previewing' a change before the user commits to it.

サーフェスを視覚化することで、アプリケーションは、環境の内容を理解、ユーザーと共有できます。By visualizing surfaces, the application can share with the user its understanding of the environment. たとえばの holographic ボード ゲームは、ユーザーが対話する必要があります出るを認識できるようになどに、'テーブル' として特定された水平方向のサーフェスを視覚化します。For example, a holographic board game could visualize the horizontal surfaces that it has identified as 'tables', so the user knows where they should go to interact.

サーフェスを視覚化すると、近くの非表示にスペースをユーザーに表示する便利な方法を指定できます。Visualizing surfaces can be a useful way to show the user nearby spaces that are hidden from view. リビング ルーム、キッチン (とすべての包含ホログラムの) にユーザー アクセスを付与する簡単な方法を提供できます。This could provide a simple way to give the user access to their kitchen (and all of its contained holograms) from their living room.

空間マッピングによって提供される表面メッシュは、特に 'クリーン' できない可能性があります。The surface meshes provided by spatial mapping may not be particularly 'clean'. そのためそれらを適切に視覚化する重要なは。Thus it is important to visualize them appropriately. 従来のライティング計算が、視覚的に見ればよい方法での表面法線のエラーを選択するには、「クリーン」テクスチャが、画面に投影するのにして外観を若干見やすくしています中します。Traditional lighting calculations may highlight errors in surface normals in a visually distracting manner, whilst 'clean' textures projected onto the surface may help to give it a tidier appearance. 実行することもメッシュ処理サーフェスがレンダリングされる前に、メッシュのプロパティを向上させるためにします。It is also possible to perform mesh processing to improve mesh properties, before the surfaces are rendered.

画面のオブザーバーを使用します。Using The Surface Observer

空間マッピングの開始点は、画面のオブザーバーです。The starting point for spatial mapping is the surface observer. プログラム フローは次のとおりです。Program flow is as follows:

  • 画面のオブザーバー オブジェクトを作成します。Create a surface observer object
    • 空間マッピング データを受信するアプリケーションが望んでいる関心のある領域を定義する、1 つまたは複数の空間ボリュームを提供します。Provide one or more spatial volumes, to define the regions of interest in which the application wishes to receive spatial mapping data. 空間ボリュームとは、球または直方体などの領域の領域を定義する図形だけです。A spatial volume is simply a shape defining a region of space, such as a sphere or a box.
    • 世界がロックされている空間座標システムで空間ボリュームを使用すると、物理世界の固定領域を識別できます。Use a spatial volume with a world-locked spatial coordinate system to identify a fixed region of the physical world.
    • 空間ボリュームは、更新された各フレームの本文がロックされている空間座標系、領域を移動します (ただし、回転しません) の領域を識別するユーザーとを使用します。Use a spatial volume, updated each frame with a body-locked spatial coordinate system, to identify a region of space that moves (but does not rotate) with the user.
    • これらの空間ボリュームは、後で、アプリケーションまたはユーザーの変更の状態として、いつでも変更できます。These spatial volumes may be changed later at any time, as the status of the application or the user changes.
  • ポーリングまたは通知を使用して、情報空間のサーフェスを取得するにはUse polling or notification to retrieve information about spatial surfaces
    • 可能性があります 'ポーリングを続けた' 空間表面の状態のサーフェスのオブザーバー、いつでもできます。You may 'poll' the surface observer for spatial surface status at any time. 代わりに、空間サーフェスが変更されたときに、アプリケーションを通知する表面オブザーバーの 'サーフェスが変更された' イベント、登録可能性があります。Alternatively, you may register for the surface observer's 'surfaces changed' event, which will notify the application when spatial surfaces have changed.
    • 視錐台などの動的な空間ボリュームまたは本文ロックされたボリュームは、アプリケーションは、関心のある領域を設定し、空間のサーフェスの現在のセットを取得し、各フレームの変更をポーリングする必要があります。For a dynamic spatial volume, such as the view frustum, or a body-locked volume, applications will need to poll for changes each frame by setting the region of interest and then obtaining the current set of spatial surfaces.
    • 1 つの部屋をカバーする世界ロックされているキューブなどの静的なボリュームのアプリケーションはそのボリューム内の空間のサーフェスを変更したときに通知する 'サーフェスが変更された' イベント登録可能性があります。For a static volume, such as a world-locked cube covering a single room, applications may register for the 'surfaces changed' event to be notified when spatial surfaces inside that volume may have changed.
  • プロセスのサーフェスの変更Process surfaces changes
    • 空間表面の指定されたセットを反復処理します。Iterate the provided set of spatial surfaces.
    • 変更または削除として、追加の空間サーフェスを分類します。Classify spatial surfaces as added, changed or removed.
    • 該当する場合は、サーフェイスでの各追加または変更された空間、詳細の必要なレベルで、画面の現在の状態を示す更新されたメッシュを受信する非同期要求を送信します。For each added or changed spatial surface, if appropriate submit an asynchronous request to receive updated mesh representing the surface's current state at the desired level of detail.
  • 非同期のメッシュ要求 (次のセクションで詳細) を処理します。Process the asynchronous mesh request (more details in following sections).

キャッシュをメッシュします。Mesh Caching

空間のサーフェスは、高密度の三角形メッシュで表されます。Spatial surfaces are represented by dense triangle meshes. 大量のコンピューティングとストレージ リソースを使用できるは、格納、表示、およびこれらのメッシュを処理します。Storing, rendering and processing these meshes can consume significant computational and storage resources. そのため、各アプリケーションはキャッシュ スキームをメッシュの処理と保存に使用されるリソースを最小限に抑えるために、ニーズに適切なメッシュを採用する必要があります。As such, each application should adopt a mesh caching scheme appropriate to its needs, in order to minimize the resources used for mesh processing and storage. このスキームでは、するメッシュを保持して、破棄するだけでなく各空間のサーフェスのメッシュを更新するタイミングを判断します。This scheme should determine which meshes to retain and which to discard, as well as when to update the mesh for each spatial surface.

どのように、アプリケーションがキャッシュのメッシュを対応する必要がありますが説明する考慮事項の多くは直接通知します。Many of the considerations discussed there will directly inform how your application should approach mesh caching. 環境のユーザーの移動、ために必要なサーフェス、異なるサーフェスが発生する場合、環境の変更をキャプチャするかを検討してください。You should consider how the user moves through the environment, which surfaces are needed, when different surfaces will be observed and when changes in the environment should be captured.

画面のオブザーバーによって提供される 'サーフェス変更' のイベントを解釈するときにキャッシュ ロジックの基本的なメッシュのとおりです。When interpreting the 'surfaces changed' event provided by the surface observer, the basic mesh caching logic is as follows:

  • アプリケーションからは、以前に参照しない空間表面 ID は、新しい空間画面として扱う、この必要があります。If the application sees a spatial surface ID that it has not seen before, it should treat this as a new spatial surface.
  • アプリケーションから新しい更新時刻が既知の ID での空間画面は、更新の空間画面として扱う、この必要があります。If the application sees a spatial surface with a known ID but with a new update time, it should treat this as an updated spatial surface.
  • アプリケーションでは、既知の ID を持つ空間画面が表示されないは、削除空間画面として扱う、この必要があります。If the application no longer sees a spatial surface with a known ID, it should treat this as a removed spatial surface.

各アプリケーションを次の選択肢を加えることは。It is up to each application to then make the following choices:

  • 新しい空間サーフェスでは、メッシュを要求することですか。For new spatial surfaces, should mesh be requested?
    • 一般にメッシュは、新しい空間サーフェスは、ユーザーに役立つ新しい情報が示されていますすぐに要求する必要があります。Generally mesh should be requested immediately for new spatial surfaces, which may provide useful new information to the user.
    • ただし、新しい空間のサーフェスとも、ユーザーの近くに優先度を指定する必要があります、そのメッシュを最初に要求する必要があります。However, new spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • 新しいメッシュが必要でない場合、固定されている場合など、アプリケーションが永続的または一時的に' ' 環境のモデル、しにする必要がありますいないに必要です。If the new mesh is not needed, if for example the application has permanently or temporarily 'frozen' its model of the environment, then it should not be requested.
  • 更新された空間サーフェスでは、メッシュを要求することですか。For updated spatial surfaces, should mesh be requested?
    • 更新された空間のサーフェスとも、ユーザーの近くに優先度を指定する必要があり、そのメッシュを最初に要求する必要があります。Updated spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • 特にスキャン操作中に、サーフェスを更新するよりも新しい画面を優先的に適切な場合があります。It may also be appropriate to give higher priority to new surfaces than to updated surfaces, especially during the scanning experience.
    • 処理コストを制限するには、アプリケーションを空間のサーフェスを更新する処理率を調整する必要があります。To limit processing costs, applications may wish to throttle the rate at which they process updates to spatial surfaces.
    • 空間画面への変更はマイナー番号、たとえば、画面の境界は小さく、その場合、更新できない可能性がありますプロセスに十分な重要なことを推測できる場合があります。It may be possible to infer that changes to a spatial surface are minor, for example if the bounds of the surface are small, in which case the update may not be important enough to process.
    • ここではありますが、画面のオブザーバーによって使用空間外接するボリュームを変更する方が効率的に現在のユーザーの関心領域の外側の空間のサーフェスの更新プログラムは完全に無視できます。Updates to spatial surfaces outside the current region of interest of the user may be ignored entirely, though in this case it may be more efficient to modify the spatial bounding volumes in use by the surface observer.
  • 削除された空間サーフェスでは、メッシュを破棄しますか。For removed spatial surfaces, should mesh be discarded?
    • 一般にメッシュを破棄するすぐに削除された空間サーフェスでは、ホログラム遮蔽が正しいままように。Generally mesh should be discarded immediately for removed spatial surfaces, so that hologram occlusion remains correct.
    • ただし、アプリケーションにすると信じている理由がある場合空間画面は再表示すぐ (おそらくに基づいてユーザー エクスペリエンスの設計)、そのメッシュを破棄および後でもう一度再作成するよりも保持するより効率的な場合があります。However, if the application has reason to believe that a spatial surface will reappear shortly (perhaps based upon the design of the user experience), then it may be more efficient to retain it than to discard its mesh and recreate it again later.
    • 場合は、アプリケーションをビルドして、ユーザーの環境の大規模なモデルは、まったく任意のメッシュを破棄する可能性がありますされません。If the application is building a large-scale model of the user's environment then it may not wish to discard any meshes at all. リソース使用率を制限、可能性がありますをディスクにスプール メッシュによって空間のサーフェスに表示されなくなると、必要があります。It will still need to limit resource usage though, possibly by spooling meshes to disk as spatial surfaces disappear.
    • 空間表面の生成中に一部の比較的まれなイベントは、同様の場所が異なる Id の新しい空間サーフェスによって置き換えられる空間のサーフェスを引き起こす可能性のあるに注意してください。Note that some relatively rare events during spatial surface generation can cause spatial surfaces to be replaced by new spatial surfaces in a similar location but with different IDs. その結果、アプリケーションが削除されたサーフェイスを破棄しないように選択する必要があることに注意終了を複数高オーバー ラップした空間表面メッシュを同じ場所をカバーします。Consequently, applications that choose not to discard a removed surface should take care not to end up with multiple highly-overlapped spatial surface meshes covering the same location.
  • その他の任意の空間のサーフェスのメッシュを破棄しますか。Should mesh be discarded for any other spatial surfaces?
    • 破棄する必要がありますしはユーザーのエクスペリエンスを使用しない場合、空間のサーフェスが存在します中でも。Even while a spatial surface exists, if it is no longer useful to the user's experience then it should be discarded. たとえば場合アプリケーション '置き換えます' 戸口の相手側に空き領域別の仮想空間、ルーム内の空間のサーフェス不要になった関係します。For example, if the application 'replaces' the room on the other side of a doorway with an alternate virtual space then the spatial surfaces in that room no longer matter.

次に、例メッシュ キャッシュ戦略、空間、および時間的なヒステリシスを使用してを示します。Here is an example mesh caching strategy, using spatial and temporal hysteresis:

  • ユーザーの視線の先に依存して、少し調べてみるし、歩き回り関心のある視錐台の形の空間ボリュームを使用するアプリケーションを検討してください。Consider an application that wishes to use a frustum-shaped spatial volume of interest that follows the user's gaze as they look around and walk around.
  • 空間画面に表示されなく一時的にこのボリュームだけです、画面からを表示またはから出るの手順をさらにしています.振り返るにのみまたは近いもう一度少し後でに移動します。A spatial surface may disappear temporarily from this volume simply because the user looks away from the surface or steps further away from it... only to look back or moves closer again a moment later. この場合を破棄し、この画面のメッシュを再作成は、多くの冗長な処理を表します。In this case, discarding and re-creating the mesh for this surface represents a lot of redundant processing.
  • 処理された変更の数を減らすためには、アプリケーションは、2 つ空間表面のオブザーバーを他の内に含まれるいずれかを使用します。To reduce the number of changes processed, the application uses two spatial surface observers, one contained within the other. 大きなボリュームが球とユーザーを '遅延;' に従いますまた、2.0 メートル ユーザー内でそのセンターがあることを確認するために必要なときにだけ移動します。The larger volume is spherical and follows the user 'lazily'; it only moves when necessary to ensure that its centre is within 2.0 metres of the user.
  • 新規および更新された空間表面メッシュは常より小さな内部 surface、オブザーバーから処理が、メッシュがより大きな外部サーフェス オブザーバーこれらされなくなるまでにキャッシュされます。New and updated spatial surface meshes are always processed from the smaller inner surface observer, but meshes are cached until they disappear from the larger outer surface observer. これにより、ローカル ユーザーの移動のための多くの冗長な変更の処理を回避するためにアプリケーションができます。This allows the application to avoid processing many redundant changes due to local user movement.
  • 空間画面は、損失の追跡のため一時的に消えるもことがあります、ため、アプリケーションも損失の追跡中に破棄の削除された空間サーフェスを延期します。Since a spatial surface may also disappear temporarily due to tracking loss, the application also defers discarding removed spatial surfaces during tracking loss.
  • 一般に、アプリケーションでは、削減更新処理とその最適なキャッシュ戦略を決定する増加したメモリの使用状況のトレードオフを評価する必要があります。In general, an application should evaluate the tradeoff between reduced update processing and increased memory usage to determine its ideal caching strategy.

表示Rendering

レンダリングに使用する空間マッピング メッシュ傾向がある 3 つの主な方法はあります。There are three primary ways in which spatial mapping meshes tend to be used for rendering:

  • 画面の視覚化For surface visualization
    • 空間のサーフェスを直接視覚化すると便利です。It is often useful to visualize spatial surfaces directly. たとえば、サーフェイス ホログラムを配置するときに、キャスト 'shadows' を空間表面にオブジェクトからは便利な視覚的なフィードバックをユーザーに提供できます。For example, casting 'shadows' from objects onto spatial surfaces can provide helpful visual feedback to the user while they are placing holograms on surfaces.
    • 留意すべき 1 つは、空間メッシュが 3D アーティストを作成するメッシュの種類に異なることです。One thing to bear in mind is that spatial meshes are different to the kind of meshes that a 3D artist might create. 三角形のトポロジは、人間が作成したトポロジとして 'クリーン' とできないし、メッシュがから低下さまざまなエラーします。The triangle topology will not be as 'clean' as human-created topology, and the mesh will suffer from various errors.
    • 楽しませる visual 美学上を作成するために可能性がありますのでを実行するいくつかメッシュ処理塗りつぶし穴、または滑らかな表面の法線などにします。In order to create a pleasing visual aesthetic, you may thus want to perform some mesh processing, for example to fill holes or smooth surface normals. 直接メッシュ トポロジおよび normals の視覚化ではなく、メッシュにプロジェクトのアーティストが設計したテクスチャをシェーダーを使用することがあります。You may also wish to use a shader to project artist-designed textures onto your mesh instead of directly visualizing mesh topology and normals.
  • ホログラム現実世界のサーフェスの背後にある他のFor occluding holograms behind real-world surfaces
    • 空間のサーフェス レンダリングできる深さ専用パスでのみに影響する、深度バッファー色のレンダー ターゲットには影響しません。Spatial surfaces can be rendered in a depth-only pass which only affects the depth buffer and does not affect color render targets.
    • これは、空間のサーフェスの背後にある、その後表示ホログラムが深度バッファーを初期化します。This primes the depth buffer to occlude subsequently-rendered holograms behind spatial surfaces. ホログラムの正確なオクルー ジョン ホログラムが実際には、ユーザーの物理的な空間内に存在するという点が強化されます。Accurate occlusion of holograms enhances the sense that holograms really exist within the user's physical space.
    • 深さ専用のレンダリングを有効にする更新のブレンドの状態を設定する、 RenderTargetWriteMaskレンダー ターゲットですべての色を 0 にします。To enable depth-only rendering, update your blend state to set the RenderTargetWriteMask to zero for all color render targets.
  • 実際のサーフェスによってオクルー ジョン ホログラムの外観を変更します。For modifying the appearance of holograms occluded by real-world surfaces
    • 通常どおりにレンダリングされたジオメトリには、これは、オクルー ジョンされる場合は表示されません。Normally rendered geometry is hidden when it is occluded. これで、深度関数の設定で実現されます、深度ステンシルの状態に「以下」、それが原因でジオメトリを表示するがある場合は近いよりも前に表示されるすべてのカメラにジオメトリ。This is achieved by setting the depth function in your depth-stencil state to "less than or equal", which causes geometry to be visible only where it is closer to the camera than all previously rendered geometry.
    • ただし、オクルー ジョンすると場合でも特定のジオメトリを表示したままにし、ユーザーに視覚的なフィードバックを提供する手段としてオクルー ジョンとは、その外観を変更する便利な場合があります。However, it may be useful to keep certain geometry visible even when it is occluded, and to modify its appearance when occluded as a way of providing visual feedback to the user. たとえば、これにより、実際の画面の背後にあるユーザーが明確になりますを行って間オブジェクトの場所を表示するアプリケーションです。For example, this allows the application to show the user the location of an object whilst making it clear that is behind a real-world surface.
    • これを実現するには、2 回目に必要な '閉塞' 外観を作成するさまざまなシェーダー、ジオメトリをレンダリングします。To achieve this, render the geometry a second time with a different shader that creates the desired 'occluded' appearance. 2 回目のジオメトリを表示する前に 2 つの変更を行う、深度ステンシルの状態します。Before rendering the geometry for the second time, make two changes to your depth-stencil state. まず、深度関数を「より大きいまたは等しい」に設定できるように、ジオメトリ表示がある場合はさらにすべて以前にレンダリングされるジオメトリは、カメラから。First, set the depth function to "greater than or equal" so that the geometry will be visible only where it is further from the camera than all previously rendered geometry. 0 に、深度バッファーは変更しないように、DepthWriteMask を次に、設定 (ジオメトリの深さを表す、深度バッファーを続行する必要があります最も近いカメラに)。Second, set the DepthWriteMask to zero, so that the depth buffer will not be modified (the depth buffer should continue to represent the depth of the geometry closest to the camera).

パフォーマンス空間マッピングのメッシュをレンダリングするときに、重要な懸念事項は、します。Performance is an important concern when rendering spatial mapping meshes. 空間マッピングのメッシュをレンダリングする特定のレンダリング パフォーマンス テクニックを次に示します。Here are some rendering performance techniques specific to rendering spatial mapping meshes:

  • 三角形の密度を調整します。Adjust triangle density
    • 要求元の空間画面は、surface、オブザーバーからメッシュ、お客様のニーズにとって有益な三角形メッシュの最も低い密度を要求します。When requesting spatial surface meshes from your surface observer, request the lowest density of triangle meshes that will suffice for your needs.
    • 合理的です、ユーザーからのサーフェスの距離に応じての画面で画面ごとに密度を三角形を変更して、ユーザー エクスペリエンスに関連します。It may make sense to vary triangle density on a surface by surface basis, depending on the surface's distance from the user, and its relevance to the user experience.
    • 削減三角形の数は、ピクセル処理コストは変わりませんがメモリ使用量と、GPU で頂点処理コストを削減するは。Reducing triangle counts will reduce memory usage and vertex processing costs on the GPU, though it will not affect pixel processing costs.
  • カリングの視錐台を実行します。Perform frustum culling
    • 視錐台カリング現在ディスプレイの視錐台の外側にあるために表示できません描画オブジェクトをスキップします。Frustum culling skips drawing objects that cannot be seen because they are outside the current display frustum. これには、CPU と GPU の両方の処理コストが削減されます。This reduces both CPU and GPU processing costs.
    • カリングは、メッシュの単位で実行空間のサーフェスが大きくなるので、各空間表面メッシュを小さなチャンクに分割が原因でより効率的なカリング (このな少なくオフスクリーン三角形がレンダリングされる)。Since culling is performed on a per-mesh basis and spatial surfaces can be large, breaking each spatial surface mesh into smaller chunks may result in more efficient culling (in that fewer offscreen triangles are rendered). ただし; は、トレードオフがあります。ある複数のメッシュは、複数描画呼び出しおく必要があります、CPU コストを向上させることができます。There is a tradeoff, however; the more meshes you have, the more draw calls you must make, which can increase CPU costs. 極端な場合、自体の計算をカリングの視錐台はコスト測定可能な CPU のもができます。In an extreme case, the frustum culling calculations themselves could even have a measurable CPU cost.
  • レンダリング順序を調整します。Adjust rendering order
    • 空間のサーフェスは、ユーザーの周囲に環境全体を表すために大きくなる傾向があります。Spatial surfaces tend to be large, because they represent the user's entire environment surrounding them. ピクセル処理は GPU でコストが特に場合に、高できるため (空間サーフェスとその他のホログラムの両方を含む)、表示されている座標の 1 つ以上のレイヤーがあります。Pixel processing costs on the GPU can thus be high, especially in cases where there is more than one layer of visible geometry (including both spatial surfaces and other holograms). この場合、ユーザーに最も近いレイヤーがする occluding のレイヤーをさらに、ためより離れているレイヤーのレンダリング費やされる GPU 時間を浪費します。In this case, the layer nearest to the user will be occluding any layers further away, so any GPU time spent rendering those more distant layers is wasted.
    • GPU 上でこの冗長な作業を減らすためには、前から後ろの順序で不透明な画面を表示するために役立ちます (詳細の最後の 1 つより離れているもの)。To reduce this redundant work on the GPU, it helps to render opaque surfaces in front-to-back order (closer ones first, more distant ones last). 'Opaque' 意味のいずれかに設定されて、DepthWriteMask サーフェス、深度ステンシルの状態します。By 'opaque' we mean surfaces for which the DepthWriteMask is set to one in your depth-stencil state. 最も近いサーフェスが表示されると、遠くの表面が GPU でピクセル プロセッサによって効率的にスキップされるように、深度バッファーを準備、されます。When the nearest surfaces are rendered, they will prime the depth buffer so that more distant surfaces are efficiently skipped by the pixel processor on the GPU.

メッシュの処理Mesh Processing

アプリケーションが実行するさまざまな操作そのニーズに合わせて表面メッシュの空間にします。An application may want to perform various operations on spatial surface meshes to suit its needs. 各空間表面メッシュで提供されるインデックスと頂点のデータと同じ使い慣れたレイアウトを使用して、頂点バッファーとインデックス バッファーすべて最新レンダリング Api で三角形メッシュをレンダリングするために使用されます。The index and vertex data provided with each spatial surface mesh uses the same familiar layout as the vertex and index buffers that are used for rendering triangle meshes in all modern rendering APIs. ただし、1 つ注意すべき重要なことは、三角形の空間マッピングがあること、前面に時計回りにワインディングの順序します。However, one key fact to be aware of is that spatial mapping triangles have a front-clockwise winding order. 各三角形はメッシュのインデックス バッファー内の 3 つの頂点インデックスによって表され、これらのインデックス内の三角形の頂点を識別、時計回りから三角形を表示するときの順序、前面側です。Each triangle is represented by three vertex indices in the mesh's index buffer and these indices will identify the triangle's vertices in a clockwise order, when the triangle is viewed from the front side. 前面側 (または外部) 空間表面メッシュの現実の世界のサーフェスの (表示) の前面に期待どおりに対応します。The front side (or outside) of spatial surface meshes corresponds as you would expect to the front (visible) side of real world surfaces.

アプリケーションには、メッシュの単純化サーフェスのオブザーバーによって提供される最も粗い三角形の密度はまだが不十分な粗い - この作業は計算コストが高い場合と、さまざまなを生成するランタイムによって既に実行されているのみを実行する必要があります。詳細レベルを提供します。Applications should only perform mesh simplification if the coarsest triangle density provided by the surface observer is still insufficiently coarse - this work is computationally expensive and already being performed by the runtime to generate the various provided levels of detail.

一部のアプリケーションがクリップ空間これらにする場合がありますので、各画面のオブザーバーは、複数の接続されていない空間サーフェスを提供できます、表面メッシュ、他の各しジッパーに対してにまとめています。Because each surface observer can provide multiple unconnected spatial surfaces, some applications may wish to clip these spatial surface meshes against each other, then zipper them together. 一般に、クリッピング ステップは、空間表面メッシュの近くにある多くの場合、少しずつオーバー ラップ処理として必要です。In general, the clipping step is required, as nearby spatial surface meshes often overlap slightly.

レイキャストと衝突Raycasting and Collision

物理運動の API の順序で (などHavok) アプリケーション空間のサーフェスをレイキャストと衝突の機能を備えたアプリケーションを提供する空間画面は物理運動の API にメッシュを提供する必要があります。In order for a physics API (such as Havok) to provide an application with raycasting and collision functionality for spatial surfaces, the application must provide spatial surface meshes to the physics API. 多くの場合、物理運動のために使用するメッシュの次のプロパティがあります。Meshes used for physics often have the following properties:

  • 少数三角形のみにはが含まれます。They contain only small numbers of triangles. 物理操作は詳細の表示操作よりも負荷の高い。Physics operations are more computationally intensive than rendering operations.
  • 'Water 密' です。They are 'water-tight'. サーフェスをしっかり学ぶためのものには、; に小規模の穴はありません。偶数の穴を表示するには小さすぎる問題が発生することができます。Surfaces intended to be solid should not have small holes in them; even holes too small to be visible can cause problems.
  • 凸 hulls に変換されます。They are converted into convex hulls. 凸 hulls 多角形のいくつかあり、穴の自由し、生の三角形メッシュよりも処理するよりずっと計算に効率的です。Convex hulls have few polygons and are free of holes, and they are much more computationally efficient to process than raw triangle meshes.

少しややこしい - だけの完全な乱雑図形など、デスクの空間のサーフェスに対して実行する raycasts は、これらのサーフェスの多くの場合、複雑さも留意してくださいと。When performing raycasts against spatial surfaces, bear in mind that these surfaces are often complex, cluttered shapes full of messy little details - just like your desk! つまり、単一 raycast が多くの場合、不十分である、画面の近くに空の領域の図形の形状に関する十分な情報を提供します。This means that a single raycast is often insufficient to give you enough information about the shape of the surface and the shape of the empty space near it. これは通常多く raycasts 小さな領域内で実行して、画面の信頼性の高い理解の派生に集計の結果を使用することをお勧めではため。It is thus usually a good idea to perform many raycasts within a small area and to use the aggregate results to derive a more reliable understanding of the surface. たとえば、10 raycasts の平均値を使用して、画面でガイド ホログラム配置するが生成されますまでよりスムーズかつちらつく小さい結果 raycast は 1 つだけを使用しています。For example, using the average of 10 raycasts to guide hologram placement on a surface will yield a far smoother and less 'jittery' result that using just a single raycast.

ただし、各 raycast 高い計算コストがあることができますも留意してください。However, bear in mind that each raycast can have a high computational cost. そのため、使用状況シナリオに応じてする必要がありますのバランスを取る追加 raycasts の計算コスト (すべてのフレームが実行されます) の計算コストに対してメッシュ処理smooth および空間サーフェス (穴を削除するには実行空間メッシュが更新されたときに)。Thus depending on your usage scenario you should trade off the computational cost of additional raycasts (performed every frame) against the computational cost of mesh processing to smooth and remove holes in spatial surfaces (performed when spatial meshes are updated).

トラブルシューティングTroubleshooting

  • 表面メッシュを正しく向きにするためには、各 GameObject をそのメッシュを構築して、SurfaceObeserver に送信される前にアクティブにする必要があります。In order for the surface meshes to be orientated correctly, each GameObject needs to be active before it is sent to the SurfaceObeserver to have its mesh constructed. それ以外の場合、メッシュは奇妙な角度で回転がスペースに表示されます。Otherwise, the meshes will show up in your space but rotated at weird angles.
  • GameObject、SurfaceObserver と通信するスクリプトを実行するには、配信元に設定する必要があります。The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. それ以外の場合、オフセット、親ゲーム オブジェクトのオフセットに等しいすべて Gameobject を作成し、SurfaceObserver 構築、メッシュに送信するのになります。Otherwise, all of GameObjects that you create and send to the SurfaceObserver to have their meshes constructed will have an offset equal to the offset of the Parent Game Object. 何が起こってをデバッグする非常に困難になりますからいくつかのメーターを表示する、メッシュがあることがあります。This can make your meshes show up several meters away which makes it very hard to debug what is going on.

関連項目See also