空間マッピングSpatial mapping

空間マッピングは、HoloLens の周囲の環境内の現実世界の表面の詳細な表現を提供します。開発者は、説得力のある Mixed Reality エクスペリエンスを作成できます。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 supports

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

空間マッピングが重要な理由Why is spatial mapping important?

空間マッピングにより、オブジェクトを実際のサーフェスの上に配置できるようになります。Spatial mapping makes it possible to place objects on real surfaces. これは、ユーザーの世界でオブジェクトを固定するのに役立ち、実際の深さの手掛かりを利用します。他のホログラムや現実世界のオブジェクトに基づいてホログラムをオクルージョンすると、これらのホログラムが実際に空間内にあるとユーザーを説得するのに役立ちます。This helps anchor objects in the user's world and takes advantage of real world depth cues. Occluding your holograms based on other holograms and real world objects helps convince the user that these holograms are actually in their space. 空間に浮かんでいるホログラムや、ユーザーと一緒に移動するホログラムは、実際の感じにはならないでしょう。Holograms floating in space or moving with the user won't feel as real. 可能であれば、快適さのために項目を配置します。When possible, place items for comfort.

ホログラムを配置または移動するときにサーフェスを視覚化します (投影グリッドを使用します)。Visualize surfaces when placing or moving holograms (use a projected grid). これにより、ユーザーはホログラムを最適に配置できる場所を知り、ホログラムを配置しようとしている場所がマップされていないかどうかが表示されます。This helps users know where they can best place their holograms, and shows if the spot they're trying to place the hologram isn't mapped. ユーザーが角度を大きすぎる場合は、ユーザーに対して "ビルボードアイテム" を設定できます。You can "billboard items" toward the user if they end up at too much of an angle.

概念の概要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 based on the real world) or they may be attached to the HoloLens (they move, but don't 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.

空間認識設計の概念のデモSpatial Awareness design concepts demo

空間認識設計の概念を理解したい場合は、以下の「 ホログラムと空間認識の設計 」のビデオデモをご覧ください。If you'd like to see Spatial Awareness design concepts in action, check out our Designing Holograms - Spatial Awareness video demo below. 完了したら、特定のトピックについてさらに詳しく説明します。When you've finished, continue on for a more detailed dive into specific topics.

このビデオは、「ホログラムの設計」 HoloLens 2 アプリから取得されました。 ここで完全なエクスペリエンスをダウンロードしてご利用いただけます。This video was taken from the "Designing Holograms" HoloLens 2 app. Download and enjoy the full experience here.

空間マッピングとシーンについて WorldMesh を理解するSpatial Mapping vs. Scene Understanding WorldMesh

HoloLens 2 の場合、 シーンを理解する SDK (EnableWorldMesh 設定) を使用して、空間マッピングデータの静的なバージョンを照会することができます。For HoloLens 2, it's possible to query a static version of the spatial mapping data using Scene understanding SDK (EnableWorldMesh setting). 空間マッピングデータにアクセスする2つの方法の違いを次に示します。Here are the differences between two ways of accessing the spatial mapping data:

  • 空間マッピング API:Spatial Mapping API:
    • 制限された範囲: ユーザーに対してキャッシュされた ' バブル ' のサイズで、アプリケーションが使用できる空間マッピングデータ。Limited range: the spatial mapping data available to applications in a limited size cached 'bubble' around the user.
    • SurfacesChanged イベントによって変更されたメッシュ領域の低待機時間の更新を提供します。Provides low latency updates of changed mesh regions through SurfacesChanged events.
    • 3次測定パラメーターあたりの三角形によって制御される詳細の可変レベル。Variable level of details controlled by Triangles Per Cubic Meter parameter.
  • シーンを理解する SDK:Scene understanding SDK:
    • 無制限の範囲-クエリ radius 内でスキャンされたすべての空間マッピングデータを提供します。Unlimited range - provides all the scanned spatial mapping data within the query radius.
    • 空間マッピングデータの静的なスナップショットを提供します。Provides a static snapshot of the spatial mapping data. 更新された空間マッピングデータを取得するには、メッシュ全体に対して新しいクエリを実行する必要があります。Getting the updated spatial mapping data requires running a new query for the whole mesh.
    • RequestedMeshLevelOfDetail の設定によって制御される詳細レベルの一貫性。Consistent level of details controlled by RequestedMeshLevelOfDetail setting.

空間マッピングの品質に影響を与えるのは何ですか?What influences spatial mapping quality?

ここで詳しく説明するいくつかの 要因は、これらのエラーの頻度と重大度に影響を与える可能性があります。Several factors, detailed here, can affect the frequency and severity of these errors. ただし、空間マッピング データにエラーが存在する場合でもユーザーが目標を達成できるよう、アプリケーションを設計する必要があります。However, you should design your application so that the user can achieve their goals even in the presence of errors in the spatial mapping data.

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

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


空間マッピングは、ユーザーに自然で使い慣れた対話形式を提示する機会をアプリケーションに提供します。電話をデスクに置くよりも自然とは何でしょうか。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 down your phone on the desk?

ホログラムの配置 (より一般的には、空間的な場所の選択) をサーフェス上に配置すると、3D (空間内のポイント) から 2D (表面上のポイント) への自然なマッピングが提供されます。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 makes the user's interactions faster, easier, and more precise. これは、"距離" は、他のユーザーやコンピューターとの物理的な通信に使用されるのではないので、当てはまるのです。This is true because 'distance away' isn't something that we're used to physically communicating to other people or to computers. 指で指を向ける場合は、方向を指定しますが、距離は指定します。When we point with our finger, we're specifying a direction but not a distance.

ここで重要な注意点は、アプリケーションが方向からの距離を予測する場合 (たとえば、ユーザーの視線方向に沿ってレイキャストを実行して最も近い空間サーフェスを見つける)、ユーザーが確実に予測できる結果を生成する必要がある点です。An important caveat here's that when an application infers distance from direction (for example by doing a raycast along the user's gaze direction to find the nearest spatial surface), this must yield results that the user can reliably predict. そうしないと、ユーザーはコントロールの感覚を失い、すぐに不満になる可能性があります。Otherwise, the user will lose their sense of control and this can quickly become frustrating. これをサポートする 1 つの方法は、1 つではなく複数のレイキャストを実行する方法です。One method that helps with this is to do 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 isn't 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 doesn't 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 shouldn't penetrate through walls and should sit flush with the floor even if it's slightly uneven. この種の機能は、raycasts ではなく、物理的な衝突の使用に依存する可能性がありますが、同様の懸念が適用されます。This kind of functionality would likely rely upon the use of physics collisions rather than 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're 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 do 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 doesn't always place holograms where they expect (if the light-switch appears somewhere that the user can't reach), then this will be a frustrating experience. 実際には、ユーザーが常に配置する必要があるのではなく、ユーザーによる修正を必要とする自動配置を行う方が悪いことがあります。自動配置が正常に行われることが 予想 されるため、手動による修正は負担のように感じられます。It can actually be worse to do automatic placement that requires user correction some of the time, than to just require the user to always do 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 hasn't been scanned, then it cannot be used for placement. アプリケーションでは、新しい画面をスキャンしたり、新しい場所を選択したりできるように、これをユーザーに対して明確にすることができます。It's 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 based on the nearest surface with grounding effects. ホログラムの動きが制約されている理由を理解する必要があります (たとえば、近くの別の表面との衝突など)。They should understand why the movement of their hologram is being constrained (for example, because of collisions with another nearby surface). ホログラムを現在の場所に配置できない場合は、視覚的なフィードバックによって理由が明確に示されます。If they can't place a hologram in the current location, then visual feedback should make it clear why not. たとえば、ユーザーがホログラフィック の掛け合いを壁の途中で突き詰めようとしている場合、壁の後ろにある側の一部は、お化け色で振動する必要があります。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 can't 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.


空間マッピング サーフェスの主な用途の 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 inhabits 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 extra 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 pass through it.

ホログラムのオクルージョンが望ましくない場合があります。Sometimes, occlusion of holograms is undesirable. ユーザーがホログラムを操作する必要がある場合は、実際の画面の背後にいる場合でも、ユーザーはそれを確認する必要があります。If a user needs to interact with a hologram, then they need to see it - even if it is behind a real-world surface. このような場合、通常は、occluded したときに (たとえば、明るさを下げることによって) このようなホログラムを別にレンダリングするのが理にかなっています。In such cases, it usually makes sense to render such a hologram differently when it's occluded (for example, by reducing its brightness). こうすることで、ユーザーはホログラムを視覚的に見つけることができますが、背後にあることがわかります。This way, the user can visually locate the hologram, but they'll still know it's behind something.


物理シミュレーションを使用するもう1つの方法として、空間マッピングを使用して、ユーザーの物理空間にホログラムの 存在 を補強することができます。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 ゴムボールは、机の上から離れたときに、床でバウンスされ、ソファの下に見えなくなったときに、それがないと信じられないかもしれません。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 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 の除去、ラフサーフェスのスムージングなど、 メッシュ処理 を行う必要があります。To generate realistic physical behaviors, you'll likely need to do some mesh processing such as filling holes, removing floating hallucinations and smoothing rough surfaces.

また、アプリケーションの スキャンエクスペリエンス が物理シミュレーションに与える影響についても考慮する必要があります。You'll also need to consider how your application's scanning experience influences its physics simulation. 最初は、不足しているサーフェスは何も競合しません。ゴムボールが corridor と、既知の世界の端から離れたときにどうなるでしょうか。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'll continue to respond to changes in the environment over time. 場合によっては、可能な限り迅速に対応する必要があります。たとえば、ユーザーがドアと家具を、barricades の tempest に対する防御の可動として使用しているとします。In some cases, you'll 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. ただし、場合によっては、新しい更新プログラムを無視することもできます。犬がトラックの途中に座っていると判断した場合、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.

アプリケーションでは、空間マッピング データを使用して、ホログラフィック文字 (またはエージェント) に、実際の人物と同じように現実世界を移動する機能を付与できます。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. これは、ホログラフィック文字をユーザーや友人と同じ自然で使い慣れた動作のセットに制限することで、ホログラフィック文字の存在を強化するのに役立ちます。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. 特定の領域にナビゲーション マップが構築された後、その場所に慣れていない新しいユーザーにホログラフィックの方向を提供するために共有できます。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's usable for path-planning and navigation by a virtual character. メッシュをスムージングし、覚えの除去を行うのは、文字がスタックしないようにするのに役立つ場合があります。Smoothing the mesh and removing hallucinations may help avoid characters becoming stuck. また、メッシュを大幅に簡略化して、キャラクターのパス計画とナビゲーションの計算を高速化したい場合があります。You may also wish to drastically simplify the mesh to speed up your character's path-planning and navigation calculations. これらの課題は、ビデオ ゲーム テクノロジの開発で大きな注目を集め、これらのトピックに関する豊富な研究資料があります。These challenges have received a great deal of attention in the development of video game technology, and there's a wealth of available research literature on these topics.

Unity の組み込みの NavMesh 機能は、空間マッピング サーフェスでは使用できません。The built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. これは、アプリケーションが起動するまで空間マッピング サーフェスは把握されていないが、NavMesh データ ファイルはソース資産から前もって生成する必要があるためです。This is because spatial mapping surfaces aren't known until the application starts, but NavMesh data files need to be generated from source assets ahead of time. また、空間マッピング システムでは、ユーザーの現在の場所から遠く離れたサーフェスに関する情報は提供されません。Also note that, the spatial mapping system won't provide information about surfaces far away from the user's current location. そのため、大きな領域のマップを構築する場合、アプリケーションはサーフェス自体を "記憶" する必要があります。So the application must 'remember' surfaces itself if it's to build a map of a large area.


ほとんどの場合、空間サーフェスを非表示にするのが適切です。見た目が乱雑にならないようにして、現実世界の声を聞くことができます。Most of the time it's appropriate for spatial surfaces to be invisible; to minimize visual clutter and let the real world speak for itself. ただし、実際の対応するものが表示されているにもかかわらず、空間マッピングサーフェイスを直接視覚化すると便利な場合があります。However, sometimes it's useful to visualize spatial mapping surfaces directly, despite their real-world counterparts being 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. これにより、ホログラムと 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 board ゲームでは、"tables" として識別された水平サーフェスを視覚化することができます。これにより、ユーザーが対話する場所を知ることができます。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 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'. それらを適切に視覚化することが重要です。It's important to visualize them appropriately. 従来の照明計算では、視覚的には見えない形で表面法線のエラーが強調表示されることがありますが、画面上に投影された "クリーン" テクスチャは、外観を提供するのに役立ちます。Traditional lighting calculations may highlight errors in surface normals in a visually distracting manner, while 'clean' textures projected onto the surface may help to give it a tidier appearance. また、 メッシュ処理 を実行して、サーフェイスがレンダリングされる前にメッシュのプロパティを向上させることもできます。It's also possible to do mesh processing to improve mesh properties, before the surfaces are rendered.


HoloLens 2 では、新しいシーンである ランタイムを実装しています。これは、配置、閉鎖、物理、およびナビゲーションの実装を簡略化するように設計された、構造化された高レベルの環境表現を使用して、Mixed Reality 開発者に提供します。HoloLens 2 implements a new Scene Understanding Runtime, that provides Mixed Reality developers with a structured, high-level environment representation designed to simplify the implementation of placement, occlusion, physics and navigation.

Surface オブザーバーの使用Using The Surface Observer

空間マッピングの開始点は、surface オブザーバーです。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 doesn't 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. 代わりに、サーフェス オブザーバーの "surface changed" イベントに登録できます。これは、空間サーフェスが変更された場合にアプリケーションに通知します。Instead, you may register for the surface observer's 'surfaces changed' event, which will notify the application when spatial surfaces have changed.
    • ビュー frustum や本文ロック ボリュームなどの動的空間ボリュームの場合、アプリケーションでは、関心領域を設定し、現在の空間サーフェスのセットを取得することで、各フレームの変更をポーリングする必要があります。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, to minimize the resources used for mesh processing and storage. このスキームでは、保持するメッシュと破棄するメッシュ、および各空間サーフェイスのメッシュをいつ更新するかを決定する必要があります。This scheme should determine which meshes to keep and which to discard, and 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.

Surface オブザーバーによって提供される "変化したサーフェイス" イベントを解釈する場合、基本的なメッシュキャッシュのロジックは次のようになります。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 hasn't 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's 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 isn't needed, if for example the application has permanently or temporarily 'frozen' its model of the environment, then it shouldn't 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 (based upon the design of the user experience), then it may be more efficient to keep 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 の新しい空間サーフェスに置き換えられる可能性があります。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. そのため、削除されたサーフェスを破棄しないアプリケーションでは、同じ場所をカバーする複数の非常に重なり合う空間サーフェス メッシュが作成されないので注意する必要があります。So, applications that choose not to discard a removed surface should take care not to end up with multiple highly overlapped spatial surfaces meshes covering the same location.
  • メッシュは、他の空間サーフェスに対して破棄する必要がありますか?Should mesh be discarded for any other spatial surfaces?
    • 空間サーフェスが存在している間でも、ユーザーのエクスペリエンスにとって役に立たなくなった場合は、破棄する必要があります。Even while a spatial surface exists, if it's 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's 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 many redundant processings.
  • 処理される変更の数を減らすために、アプリケーションは2つの空間サーフェスオブザーバーを使用します。1つは他方に含まれています。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 center is within 2.0 meters of the user.
  • 新規および更新された空間サーフェスメッシュは、常に小さい内部サーフェスオブザーバーから処理されますが、メッシュは大きな外部サーフェスオブザーバーから見えなくなるまでキャッシュされます。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 because of local user movement.
  • 空間サーフェスは追跡の損失によって一時的に消去されることもあるため、アプリケーションは、追跡の損失中に削除された空間サーフェスの破棄を延期することもあります。Since a spatial surface may also disappear temporarily because of 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.


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

  • Surface の視覚化の場合For surface visualization
    • 多くの場合、空間サーフェスを直接視覚化すると便利です。It's 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're placing holograms on surfaces.
    • 空間メッシュは、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 won't be as 'clean' as human-created topology, and the mesh will suffer from various errors.
    • 見た目の良い外観を作成するには、いくつかのメッシュ処理を行う必要があります。たとえば、穴や滑らかな表面の法線を塗り分ける場合などです。To create a pleasing visual aesthetic, you may want to do some mesh processing, for example to fill holes or smooth surface 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 doesn't 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's 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's closer to the camera than all previously rendered geometry.
    • ただし、特定のジオメトリがオクルージョンされている場合でも表示を維持し、ユーザーに視覚的なフィードバックを提供する方法として、オクルージョンされた場合の外観を変更すると便利な場合があります。However, it may be useful to keep certain geometry visible even when it's 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 while 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's further from the camera than all previously rendered geometry. 次に、DepthWriteMask を0に設定して、深度バッファーが変更されないようにします (深度バッファーは、カメラに 最も近い ジオメトリの深さを継続して表す必要があります)。Second, set the DepthWriteMask to zero, so that the depth buffer won't 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 won't affect pixel processing costs.
  • 錐のあるカリングを使用するUse 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's 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 のピクセル処理コストは、特に、可視ジオメトリのレイヤーが複数存在する場合 (空間サーフェスとその他のホログラムを含む) に大きくなる可能性があります。Pixel processing costs on the GPU can be high, especially in cases where there's 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 でのこの冗長な作業を減らすには、不透明なサーフェスを前から後ろの順序でレンダリングするのに役立ちます (先に、より離れた表面が最後に表示されます)。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). "不透明" とは、深度ステンシル状態の DepthWriteMask が 1 に設定 されているサーフェスを意味します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'll 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 do 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 do 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

アプリケーションで空間サーフェスの raycasting および衝突機能を使用できるようにするために、物理 API (の場合は、等 ok) では、アプリケーションで物理 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.
  • これらは、"水にきつい" です。They're 'water-tight'. ソリッドであることを意図したサーフェスは、小さな穴を持つことはできません。表示できない穴が小さすぎる場合でも、問題が発生する可能性があります。Surfaces intended to be solid shouldn't have small holes in them; even holes too small to be visible can cause problems.
  • これらは、凸状 hulls に変換されます。They're converted into convex hulls. 凸状の hulls にはいくつかのポリゴンがあり、穴は不要であり、生の三角形メッシュよりも処理がはるかに効率的です。Convex hulls have few polygons and are free of holes, and they're much more computationally efficient to process than raw triangle meshes.

空間サーフェスに対して raycasts を実行する場合は、机のように、これらのサーフェイスが複雑で、乱雑ではなく、乱雑な形になることに注意してください。When doing raycasts against spatial surfaces, bear in mind that these surfaces are often complex, cluttered shapes full of messy little details - just like your desk! つまり、1つの 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's usually a good idea to do many raycasts within a small area and to use the aggregate results to derive a more reliable understanding of the surface. たとえば、平均 10 raycasts を使用して、表面にホログラムの配置を行うと、1つの raycast だけを使用して、はるかに滑らかで "ちらつき" の結果が得られます。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. 使用シナリオに応じて、(すべてのフレームで完了した) extra raycasts の計算コストを、 メッシュ処理 の計算コストと比較して、空間サーフェスの穴を滑らかにしたり削除したりする必要があります (空間メッシュが更新されたときに完了します)。Depending on your usage scenario, you should trade off the computational cost of extra raycasts (done every frame) against the computational cost of mesh processing to smooth and remove holes in spatial surfaces (done when spatial meshes are updated).

環境のスキャンエクスペリエンスThe environment scanning experience

空間マッピングを使用する各アプリケーションでは、"スキャンエクスペリエンス" を提供することを検討する必要があります。アプリケーションが正常に機能するために必要なサーフェイスをスキャンするためにアプリケーションがユーザーに指示するプロセス。Each application that uses spatial mapping should consider providing a 'scanning experience'; the process through which the application guides the user to scan surfaces that are necessary for the application to function correctly.

スキャンの例Example of scanning
スキャンの例Example of scanning

このスキャン エクスペリエンスの性質は、各アプリケーションのニーズによって大きく異なる場合がありますが、主に 2 つの原則が設計の指針になります。The nature of this scanning experience can vary greatly depending upon each application's needs, but two main principles should guide its design.

まず、ユーザー との明確な通信が主な関心事ですFirstly, clear communication with the user is the primary concern. ユーザーは、アプリケーションの要件が満たされているかどうかを常に認識する必要があります。The user should always be aware of whether the application's requirements are being met. 満たされていない場合は、その理由をユーザーにすぐに明確にし、適切なアクションを迅速に実行する必要があります。When they aren't being met, it should be immediately clear to the user why this is so and they should be quickly led to take the appropriate action.

次に、 アプリケーションは効率と信頼性のバランスを取る必要がありますSecondly, applications should attempt to strike a balance between efficiency and reliability. これを確実に行う可能性がある場合、アプリケーションは空間マッピング データを自動的に分析してユーザー時間を節約する必要があります。When it's possible to do so reliably, applications should automatically analyze spatial mapping data to save the user time. これを確実に実行できない場合は、代わりにアプリケーションで、ユーザーが必要な追加情報をアプリケーションに迅速に提供できる必要があります。When it isn't possible to do so reliably, applications should instead enable the user to quickly provide the application with the additional information it requires.

適切なスキャン エクスペリエンスを設計するには、アプリケーションに適用できる可能性を次の中から検討してください。To help design the right scanning experience, consider which of the following possibilities are applicable to your application:

  • スキャンエクスペリエンスなしNo scanning experience

    • アプリケーションは、ガイド付きスキャンエクスペリエンスなしで完全に機能する場合があります。自然なユーザー移動の過程で観察される表面について学習します。An application may function perfectly without any guided scanning experience; it will learn about surfaces that are observed in the course of natural user movement.
    • たとえば、ホログラフィック スプレー ペイントを使用してユーザーがサーフェスに描画できるアプリケーションでは、ユーザーに現在表示されているサーフェスについての知識だけが必要です。For example, an application that lets the user draw on surfaces with holographic spray paint requires knowledge only of the surfaces currently visible to the user.
    • ユーザーが HoloLens の使用に既に多くの時間を費やしている環境の場合は、環境が既にスキャンされている可能性があります。The environment may be scanned already if it's one in which the user has already spent lots of time using the HoloLens.
    • ただし、空間マッピングで使用されるカメラでは、ユーザーの前の 3.1 m しか表示されないので、ユーザーが過去により近い距離からそれらを観察した場合を限り、空間マッピングはそれ以上離れた表面について知りません。Bear in mind however that the camera used by spatial mapping can only see 3.1 m in front of the user, so spatial mapping won't know about any more distant surfaces unless the user has observed them from a closer distance in the past.
    • そのため、ユーザーはスキャンされたサーフェスを理解します。アプリケーションは、この効果に視覚的なフィードバックを提供する必要があります。たとえば、スキャンされたサーフェスに仮想シャドウをキャストすると、ユーザーがそれらの表面にホログラムを配置するのに役立つ場合があります。So the user understands which surfaces have been scanned, the application should provide visual feedback to this effect, for example casting virtual shadows onto scanned surfaces may help the user place holograms on those surfaces.
    • この場合、空間サーフェスオブザーバーの境界ボリュームは、各フレームを本文ロックされた 空間座標系に更新して、ユーザーがフォローするようにする必要があります。For this case, the spatial surface observer's bounding volumes should be updated each frame to a body-locked spatial coordinate system, so that they follow the user.
  • 適切な場所の検索Find a suitable location

    • アプリケーションは、特定の要件を持つ場所で使用するように設計されている場合があります。An application may be designed for use in a location with specific requirements.
    • たとえば、アプリケーションでは、holographic kung-fu を安全に実行できるように、ユーザーの周囲に空の領域が必要になる場合があります。For example, the application may require an empty area around the user so they can safely practice holographic kung-fu.
    • アプリケーションでは、特定の要件をユーザーに事前に伝え、視覚的なフィードバックを明確にする必要があります。Applications should communicate any specific requirements to the user up-front, and reinforce them with clear visual feedback.
    • この例では、アプリケーションは必要な空の領域の範囲を視覚化し、このゾーン内の不要なオブジェクトの存在を視覚的に強調表示する必要があります。In this example, the application should visualize the extent of the required empty area and visually highlight the presence of any undesired objects within this zone.
    • この場合、空間サーフェスのオブザーバーの境界ボリュームは、選択した場所でワールドロックの 空間座標系 を使用する必要があります。For this case, the spatial surface observer's bounding volumes should use a world-locked spatial coordinate system in the chosen location.
  • サーフェイスの適切な構成を見つけるFind a suitable configuration of surfaces

    • アプリケーションでは、たとえば、2つの大規模なフラットな壁面の壁を作るために、特定のサーフェイスの構成が必要になる場合があります。An application may require a specific configuration of surfaces, for example two large, flat, opposing walls to create a holographic hall of mirrors.
    • このような場合、アプリケーションでは、空間マッピングによって提供されるサーフェスを分析して適切なサーフェイスを検出し、ユーザーに対してユーザーに指示する必要があります。In such cases, the application will need to analyze the surfaces provided by spatial mapping to detect suitable surfaces, and direct the user toward them.
    • アプリケーションのサーフェイス分析が信頼できない場合は、フォールバックオプションがユーザーに与えられている必要があります。The user should have a fallback option if the application's surface analysis isn't reliable. たとえば、アプリケーションで入室がフラットな壁として誤って識別される場合、このエラーを修正するための簡単な方法が必要になります。For example, if the application incorrectly identifies a doorway as a flat wall, the user needs a simple way to correct this error.
  • 環境の一部をスキャンするScan part of the environment

    • アプリケーションでは、ユーザーの指示に従って、環境の一部のみをキャプチャすることをお勧めします。An application may wish to only capture part of the environment, as directed by the user.
    • たとえば、アプリケーションは部屋の一部をスキャンするので、ユーザーが販売する家具用に分類された holographic 広告を投稿することができます。For example, the application scans part of a room so the user may post a holographic classified ad for furniture they wish to sell.
    • この場合、アプリケーションは、スキャン中にユーザーによって監視されているリージョン内の空間マッピングデータをキャプチャする必要があります。In this case, the application should capture spatial mapping data within the regions observed by the user during their scan.
  • 部屋全体をスキャンするScan the whole room

    • アプリケーションでは、ユーザーの背後にあるものも含め、現在の部屋にあるすべてのサーフェイスのスキャンが必要になる場合があります。An application may require a scan of all of the surfaces in the current room, including those behind the user.
    • たとえば、ゲームでは、何百人もの小さな Llliputian がすべての方向から近づく中で、ユーザーを Gulliver の役割に置く場合があります。For example, a game may put the user in the role of Gulliver, under siege from hundreds of tiny Lilliputians approaching from all directions.
    • このような場合、アプリケーションでは、現在の部屋のサーフェスの数を既にスキャン済みかどうかを判断し、ユーザーの視線入力を指示して大きなギャップを埋める必要があります。In such cases, the application will need to determine how many of the surfaces in the current room have already been scanned, and direct the user's gaze to fill in significant gaps.
    • このプロセスの鍵は、まだスキャンされていないサーフェスをユーザーに明確にする視覚的なフィードバックを提供する方法です。The key to this process is providing visual feedback that makes it clear to the user which surfaces haven't yet been scanned. たとえば、アプリケーションでは、距離ベースのスグを使用して、空間マッピング サーフェスでカバーされていない領域を視覚的に強調表示できます。The application could, for example, use distance-based fog to visually highlight regions that aren't covered by spatial mapping surfaces.
  • 環境の初期スナップショットを作成するTake an initial snapshot of the environment

    • アプリケーションでは、初期の "スナップショット" を取得した後で、環境内のすべての変更を無視することができます。An application may wish to ignore all changes in the environment after taking an initial 'snapshot'.
    • これは、ユーザーが作成したデータが中断され、環境の初期状態に緊密に結合されるのを回避するために適している場合があります。This may be appropriate to avoid disruption of user-created data that is tightly coupled to the initial state of the environment.
    • この場合、スキャンが完了したら、アプリケーションは空間マッピング データのコピーを初期状態にする必要があります。In this case, the application should make a copy of the spatial mapping data in its initial state once the scan is complete.
    • ホログラムが環境によって引き続き正しくオクルージョンされている場合、アプリケーションは空間マッピング データの更新を引き続き受信する必要があります。Applications should continue receiving updates to spatial mapping data if holograms are still to be correctly occluded by the environment.
    • 空間マッピング データを継続的に更新すると、発生した変更を視覚化し、環境の以前の状態と現在の状態の違いをユーザーに明確にできます。Continued updates to spatial mapping data also allow visualizing any changes that have occurred, clarifying to the user the differences between prior and present states of the environment.
  • 環境のユーザーが開始したスナップショットを取得するTake user-initiated snapshots of the environment

    • アプリケーションは、ユーザーから指示を受けた場合にのみ、環境の変化に対応することができます。An application may only wish to respond to environmental changes when instructed by the user.
    • たとえば、ユーザーは、異なる瞬間に自分の姿勢をキャプチャすることで、友人の複数の 3D の "子供" を作成できます。For example, the user could create multiple 3D 'statues' of a friend by capturing their poses at different moments.
  • ユーザーに環境の変更を許可するAllow the user to change the environment

    • アプリケーションは、ユーザーの環境で行われた変更にリアルタイムで応答するように設計されている場合があります。An application may be designed to respond in real time to any changes made in the user's environment.
    • たとえば、ユーザーが光線を描画すると、もう一方の側で行うホログラフィック再生の "シーンの変更" がトリガーされる可能性があります。For example, the user drawing a curtain could trigger 'scene change' for a holographic play taking place on the other side.
  • 空間マッピング データのエラーを回避するためにユーザーをガイドするGuide the user to avoid errors in the spatial mapping data

    • アプリケーションでは、環境のスキャン中にユーザーにガイダンスを提供することができます。An application may wish to provide guidance to the user while they're scanning their environment.
    • これにより、ユーザーは、sunlit のウィンドウやミラーを離れるなどして、 空間マッピングデータ内の特定の種類のエラーを回避できます。This can help the user to avoid certain kinds of errors in the spatial mapping data, for example by staying away from sunlit windows or mirrors.

注意すべきもう1つの詳細な点は、空間マッピングデータの "範囲" が無制限ではないことです。One extra detail to be aware of is that the 'range' of spatial mapping data isn't unlimited. 空間マッピングでは、大きなスペースの永続的なデータベースが作成されますが、アプリケーションで使用できるのは、ユーザーの周囲のサイズが制限された ' バブル ' のデータのみになります。While spatial mapping does build a permanent database of large spaces, it only makes that data available to applications in a 'bubble' of limited size around the user. 長い corridor の先頭から開始して、最初から十分な距離が離れている場合は、最終的に空間サーフェスが先頭に戻ることがなくなります。If you start at the beginning of a long corridor and walk far enough away from the start, then eventually the spatial surfaces back at the beginning will disappear. これらのサーフェイスは、使用可能な空間マッピングデータから消滅した後で、アプリケーションにキャッシュすることで軽減できます。You can mitigate this by caching those surfaces in your application after they've disappeared from the available spatial mapping data.

メッシュ処理Mesh processing

これは、サーフェイス内の一般的なエラーの種類を検出し、必要に応じて空間マッピングデータをフィルター処理、削除、または変更するのに役立ちます。It may help to detect common types of errors in surfaces and to filter, remove or modify the spatial mapping data as appropriate.

空間マッピングデータは、実際のサーフェイスにできるだけ忠実として使用することを想定しているので、どのような処理を適用しても、画面が "真実" からさらに変化することに注意してください。Bear in mind that spatial mapping data is intended to be as faithful as possible to real-world surfaces, so any processing you apply risks shifting your surfaces further from the 'truth'.

役に立つ可能性があるさまざまな種類のメッシュ処理の例を次に示します。Here are some examples of different types of mesh processing that you may find useful:

  • 穴の塗りつぶしHole filling

    • ダークマテリアルで作成された小さなオブジェクトがスキャンに失敗した場合、周囲のサーフェイスに穴が残されます。If a small object made of a dark material fails to scan, it will leave a hole in the surrounding surface.
    • 穴はオクルージョンに影響します。ホログラムは、不透明な現実世界の表面に穴を表示できます。Holes affect occlusion: holograms can be seen 'through' a hole in a supposedly opaque real-world surface.
    • 穴は raycasts に影響します。ユーザーがサーフェイスを操作するために raycasts を使用している場合、これらの光線が穴を通過することは望ましくありません。Holes affect raycasts: if you're using raycasts to help users interact with surfaces, it may be undesirable for these rays to pass through holes. 軽減策の1つは、適切にサイズ設定されたリージョンをカバーする複数の raycasts のバンドルを使用することです。One mitigation is to use a bundle of multiple raycasts covering an appropriately sized region. これにより、"外れ値" の結果をフィルター処理して、1つの raycast が小さな穴を通過した場合でも、集計結果が引き続き有効になるようにすることができます。This will allow you to filter 'outlier' results, so that even if one raycast passes through a small hole, the aggregate result will still be valid. ただし、このアプローチには計算コストが伴います。However, this approach comes at a computational cost.
    • ホールは物理衝突に影響を与える:物理シミュレーションによって制御される物体が、床の穴から落ちて失われる可能性があります。Holes affect physics collisions: an object controlled by physics simulation may drop through a hole in the floor and become lost.
    • このような穴を表面メッシュにアルゴリズムによって塗り分けることができます。It's possible to algorithmically fill such holes in the surface mesh. ただし、ウィンドウや入り口などの "実際の穴" が埋め込み込みではなかからなく、アルゴリズムを調整する必要があります。However, you'll need to tune your algorithm so that 'real holes' such as windows and doorways don't get filled in. '実際の穴' と '虚数穴' を確実に区別するのは困難な場合があります。そのため、'size' や '境界形状' など、さまざまなヒューリスティックを試す必要があります。It can be difficult to reliably differentiate 'real holes' from 'imaginary holes', so you'll need to experiment with different heuristics such as 'size' and 'boundary shape'.
  • Hallucination の削除Hallucination removal

    • 反射、明るいライト、および移動するオブジェクトは、小さな残っている "回覚" を真ん中に浮かび上がって残す可能性があります。Reflections, bright lights, and moving objects can leave small lingering 'hallucinations' floating in mid-air.
    • 回覚はオクルージョンに影響を与えます。暗い図形が前を移動し、他のホログラムをオクルージョンすると、思い出が見える可能性があります。Hallucinations affect occlusion: hallucinations may become visible as dark shapes moving in front of and occluding other holograms.
    • 回覚はレイキャストに影響を与えます。レイキャストを使用してユーザーが表面と対話する場合、これらの光線は背後の表面ではなく、覚覚にヒットする可能性があります。Hallucinations affect raycasts: if you're using raycasts to help users interact with surfaces, these rays could hit a hallucination instead of the surface behind it. ホールと同様に、軽減策の 1 つは、1 つのレイキャストではなく多くのレイキャストを使用する方法ですが、この場合も計算コストがかかります。As with holes, one mitigation is to use many raycasts instead of a single raycast, but again this will come at a computational cost.
    • 多覚は物理の衝突に影響します。物理シミュレーションによって制御される物体は、覚覚に対してスタックし、一見明確な空間領域を移動できない可能性があります。Hallucinations affect physics collisions: an object controlled by physics simulation may become stuck against a hallucination and be unable to move through a seemingly clear area of space.
    • このような思い出を表面メッシュからフィルター処理することができます。It's possible to filter such hallucinations from the surface mesh. ただし、穴と同様に、電球台やドア ハンドルなどの実際の小さなオブジェクトが削除されなく、アルゴリズムを調整する必要があります。However, as with holes, you'll need to tune your algorithm so that real small objects such as lamp-stands and door handles don't get removed.
  • スムージングSmoothing

    • 空間マッピングでは、実際の対応するサーフェスと比較して、粗い、または "ノイズが多い" と思えるサーフェスが返される場合があります。Spatial mapping may return surfaces that appear to be rough or 'noisy' in comparison to their real-world counterparts.
    • 滑らかさは物理的な衝突に影響を与えます。床が大まかな場合、物理的にシミュレートされたボールが直線で滑らかに転がり出ない可能性があります。Smoothness affects physics collisions: if the floor is rough, a physically simulated golf ball may not roll smoothly across it in a straight line.
    • 滑らかさはレンダリングに影響します。サーフェスが直接視覚化された場合、粗い表面の法線が外観に影響を与え、"クリーン" な外観が中断される可能性があります。Smoothness affects rendering: if a surface is visualized directly, rough surface normals can affect its appearance and disrupt a 'clean' look. これを軽減するには、サーフェスのレンダリングに使用されるシェーダーで適切な照明とテクスチャを使用します。It's possible to mitigate this by using appropriate lighting and textures in the shader that is used to render the surface.
    • Surface メッシュでの粗さを滑らかにすることができます。It's possible to smooth out roughness in a surface mesh. ただし、これにより、対応する実際のサーフェイスから離れた場所にサーフェイスがプッシュされる可能性があります。However, this may push the surface further away from the corresponding real-world surface. 近接性を維持することは、正確なホログラムオクルージョンを生成し、ユーザーが holographic サーフェイスとの正確で予測可能な相互作用を実現できるようにするために重要です。Maintaining a close correspondence is important to produce accurate hologram occlusion, and to enable users to achieve precise and predictable interactions with holographic surfaces.
    • コスメティックの変更のみが必要な場合は、頂点の位置を変更せずに頂点の法線を滑らかにするだけで十分な場合があります。If only a cosmetic change is required, it may be sufficient to smooth vertex normals without changing vertex positions.
  • 平面の検索Plane finding

    • アプリケーションでは、空間マッピングによって提供されるサーフェイスに対して実行する必要のあるさまざまな形式の分析があります。There are many forms of analysis that an application may wish to perform on the surfaces provided by spatial mapping.
    • 単純な例の1つは、"平面検索" です。サーフェイスの境界領域、主に平面領域を識別します。One simple example is 'plane finding'; identifying bounded, mostly planar regions of surfaces.
    • 平面領域は、アプリケーションによって holographic コンテンツが自動的に配置される holographic のワークサーフェスとして使用できます。Planar regions can be used as holographic work-surfaces, regions where holographic content can be automatically placed by the application.
    • 平面領域では、ユーザーインターフェイスを制限して、ユーザーがニーズに最も合ったサーフェイスと対話できるようにします。Planar regions can constrain the user interface, to guide users to interact with the surfaces that best suit their needs.
    • 平面領域は、LCD 画面、テーブル、ホワイトボードなどの機能オブジェクトに対応する holographic のために、実際の世界のように使用できます。Planar regions can be used as in the real world, for holographic counterparts to functional objects such as LCD screens, tables or whiteboards.
    • 平面領域では、再生領域を定義して、ビデオゲームレベルの基礎を形成できます。Planar regions can define play areas, forming the basis of video game levels.
    • 平面領域を使用すると、仮想エージェントは、実際の人間が見ている可能性のあるフロアの領域を特定することで、実際の世界を移動できます。Planar regions can aid virtual agents to navigate the real world, by identifying the areas of floor that real people are likely to walk on.

プロトタイプとデバッグPrototyping and debugging

便利なツールUseful tools

  • Hololens エミュレーターは、物理的な hololens にアクセスせずに空間マッピングを使用するアプリケーションを開発するために使用できます。The HoloLens emulator can be used to develop applications using spatial mapping without access to a physical HoloLens. これにより、hololens でのライブセッションをリアルな環境でシミュレートし、アプリケーションが通常使用するすべてのデータ (HoloLens モーション、空間座標系、空間マッピングメッシュなど) を使用することができます。It allows you to simulate a live session on a HoloLens in a realistic environment, with all of the data your application would normally consume, including HoloLens motion, spatial coordinate systems, and spatial mapping meshes. これを使用すると、信頼性のある反復可能な入力を提供できます。これは、問題をデバッグし、コードの変更を評価するのに役立ちます。This can be used to provide reliable, repeatable input, which can be useful for debugging problems and evaluating changes to your code.
  • シナリオを再現するには、ライブ HoloLens からネットワーク経由で空間マッピングデータをキャプチャし、それをディスクに保存して、後のデバッグセッションで再利用します。To reproduce a scenario, capture spatial mapping data over the network from a live HoloLens, then save it to disk and reuse it in later debugging sessions.
  • Windows デバイス ポータルの 3D ビューでは、空間マッピング システムを介して現在使用可能なすべての空間サーフェスを表示する方法が提供されます。The Windows device portal 3D view provides a way to see all of the spatial surfaces currently available via the spatial mapping system. これにより、アプリケーション内の空間サーフェスの比較の基礎が提供されます。たとえば、空間サーフェスが見つからないか、間違った場所に表示されているのかを簡単に確認できます。This provides a basis of comparison for the spatial surfaces inside your application; for example, you can easily tell if any spatial surfaces are missing or are being displayed in the wrong place.

一般的なプロトタイプ作成ガイダンスGeneral prototyping guidance

  • 空間マッピング データ のエラーはユーザーのエクスペリエンスに大きく影響する可能性があるから、さまざまな環境でアプリケーションをテストすることをお勧めします。Because errors in the spatial mapping data may strongly affect your user's experience, we recommend that you test your application in a wide variety of environments.
  • デスクなど、常に同じ場所でテストする習慣に閉じ込めはされません。Don't get trapped in the habit of always testing in the same location, for example at your desk. 位置、形状、サイズ、素材が異なるさまざまな表面でテストしてください。Make sure to test on various surfaces of different positions, shapes, sizes, and materials.
  • 同様に、合成データや記録されたデータはデバッグに役立ちますが、同じいくつかのテスト ケースに依存しすぎずに済ましてください。Similarly, while synthetic or recorded data can be useful for debugging, don't become too reliant upon the same few test cases. これにより、より多様なテストが以前に発生した重要な問題の発見が遅れる可能性があります。This may delay finding important issues that more varied testing would have caught earlier.
  • HoloLens またはアプリケーションをまったく同じ方法で使用しない可能性がある実際の (理想的には、アクセスできない) ユーザーを使用してテストを実行するとよい方法です。It's a good idea to perform testing with real (and ideally uncoached) users, because they may not use the HoloLens or your application in exactly the same way that you do. 実際、人の行動、知識、仮定がどれだけ異なる可能性があるのか、驚く可能性があります。In fact, it may surprise you how divergent people's behavior, knowledge, and assumptions can be!


  • サーフェス メッシュを正しく指向するには、各 GameObject をアクティブにしてから SurfaceObserver に送信し、メッシュを構築する必要があります。In order for the surface meshes to be orientated correctly, each GameObject needs to be active before it's sent to the SurfaceObserver to have its mesh constructed. そうしないと、メッシュは空間に表示されますが、変な角度で回転します。Otherwise, the meshes will show up in your space but rotated at weird angles.
  • SurfaceObserver と通信するスクリプトを実行する GameObject を、オリジンに設定する必要があります。The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. それ以外の場合、メッシュを構築するために SurfaceObserver に作成して送信する GameObject はすべて、親ゲーム オブジェクトのオフセットと等しいオフセットになります。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 hard to debug what is going on.

関連項目See also