空間マッピング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 support

機能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. これは、オブジェクトをユーザーの世界に固定し、実際の深さの手掛かりを活用するのに役立ちます。他のホログラムや実際のオブジェクトに基づいてホログラムを Occluding することで、これらのホログラムが実際に空間にあることをユーザーに納得させることができます。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 will not feel as real. 可能な場合は、アイテムを快適に配置します。When possible, place items for comfort.

ホログラムを配置または移動するときにサーフェイスを視覚化します (単純な射影グリッドを使用します)。Visualize surfaces when placing or moving holograms (use a simple projected grid). これにより、ユーザーがホログラムを最適に配置できる場所を知ることができます。また、ホログラムを配置しようとしている場所がまだマップされていない場合は、ユーザーが表示されます。This will help the user know where they can best place their holograms, and shows the user if the spot they are trying to place the hologram hasn't been mapped yet. 角度が非常に多い場合は、ユーザーに "ビルボード項目" を設定できます。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 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.

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

HoloLens 2 では、 シーンを理解する SDK (EnableWorldMesh 設定) を使用して、空間マッピングデータの静的なバージョンを照会することができます。For HoloLens 2, it is possible to query a static version of the spatial mapping data using Scene understanding SDK (EnableWorldMesh setting). 空間マッピングデータにアクセスする2つの方法の違いを次に示します。Here are the differences between two way 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 is able to achieve their goals even in the presence of errors in the spatial mapping data.

一般的な利用シナリオ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?

サーフェイス上に配置されるホログラム (または、より一般的には、任意の空間位置の選択) の配置を制限すると、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 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つの方法は、1つだけではなく、複数の raycasts を実行することです。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つは、単にホログラムを occlude することです。One of the primary uses of spatial mapping surfaces is simply to occlude holograms. この単純な動作は、ホログラムのリアリティに大きな影響を与えるため、ユーザーと同じ物理空間をモックとする visceral sense を作成するのに役立ちます。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.

また、オクルージョンは、ユーザーに情報を提供します。occluded が本物の表面であると思われる場合、この方法では、世界中のホログラムの空間位置に関する追加の視覚的フィードバックが提供されます。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. 逆に、オクルージョンでは、ユーザーからの情報を 非表示 にすることもできます。壁の背後にある occluding ホログラムは、直感的な方法で視覚乱雑を軽減できます。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.

また、遮蔽を使用すると、使い慣れた物理的な対話に基づいて自然なユーザーインターフェイスの期待を達成することもできます。ホログラムがサーフェイスによって occluded されている場合、その表面はソリッドであるため、ユーザーは、ホログラムがその表面と 衝突 し、単に通過することを期待する必要があります。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. このような場合、通常は、occluded したときに (たとえば、明るさを下げることによって) このようなホログラムを別にレンダリングするのが理にかなっています。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

物理シミュレーションを使用するもう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 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. 最初は、不足しているサーフェスは何も競合しません。ゴムボールが 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 will continue to respond to changes in the environment over time. 場合によっては、可能な限り迅速に対応する必要があります。たとえば、ユーザーがドアと家具を、barricades の tempest に対する防御の可動として使用しているとします。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. ただし、場合によっては、新しい更新プログラムを無視することもできます。犬がトラックの途中に座っていると判断した場合、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. これらの課題は、videogame テクノロジの開発において非常に注意を払ってきました。これらのトピックには、豊富な研究資料があります。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 の組み込みのナビゲーションメッシュ機能は、空間マッピングサーフェイスでは使用できないことに注意してください。Note that the built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. これは、アプリケーションが開始されるまで空間マッピングサーフェイスが知られていないのに対して、ナビゲーションデータファイルは事前にソースアセットから生成する必要があるためです。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

ほとんどの場合、空間サーフェスを非表示にするのが適切です。見た目が乱雑にならないようにして、現実世界の声を聞くことができます。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. これにより、ホログラムと 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 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.

注意

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:

  • Surface オブザーバーオブジェクトを作成する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
    • 空間サーフェスの状態については、いつでも surface オブザーバーを "ポーリング" できます。You may 'poll' the surface observer for spatial surface status at any time. また、surface オブザーバーの ' surface changed ' イベントに登録することもできます。これにより、空間サーフェスが変化したときにアプリケーションに通知されます。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つのルームをカバーするワールドロックキューブなどの静的ボリュームの場合、アプリケーションは、そのボリューム内の空間サーフェスが変更された場合に通知されるように "サーフェイス changed" イベントに登録できます。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.

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 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.
    • 現在のユーザーの関心領域外の空間サーフェスに対する更新は完全に無視される場合がありますが、この場合は、surface オブザーバーによって使用されている空間境界ボリュームを変更する方が効率的な場合があります。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つの空間サーフェスオブザーバーを使用します。1つは他方に含まれています。To reduce the number of changes processed, the application uses two spatial surface observers, one contained within the other. 大きいボリュームは球面で、ユーザーの ' 遅延 ' に従います。必要な場合にのみ移動し、そのセンターがユーザーの 2.0 metres 内にあることを確認します。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.
  • 新規および更新された空間サーフェスメッシュは、常に小さい内部サーフェスオブザーバーから処理されますが、メッシュは大きな外部サーフェスオブザーバーから見えなくなるまでキャッシュされます。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:

  • Surface の視覚化の場合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.
    • 空間メッシュは、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.
    • 見栄えの良いビジュアルを作成するには、穴や smooth surface の法線を塗りつぶすなど、 メッシュ処理を実行することが必要になる場合があります。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. また、メッシュトポロジや法線を直接視覚化するのではなく、シェーダーを使用して、アーティストによって設計されたテクスチャをメッシュに射影することもできます。You may also wish to use a shader to project artist-designed textures onto your mesh instead of directly visualizing mesh topology and normals.
  • 実際のサーフェイスの背後にある occluding ホログラムの場合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.
    • これにより、空間サーフェスの背後でレンダリングされるホログラムを occlude するための深度バッファーが primes されます。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.
    • 深度のみのレンダリングを有効にするには、blend の状態を更新して、すべてのカラーレンダーターゲットで RenderTargetWriteMask を0に設定します。To enable depth-only rendering, update your blend state to set the RenderTargetWriteMask to zero for all color render targets.
  • 実際のサーフェイスによるホログラム occluded の外観を変更するにはFor modifying the appearance of holograms occluded by real-world surfaces
    • 通常表示されるジオメトリは、occluded すると非表示になります。Normally rendered geometry is hidden when it is occluded. これを実現するには、深度ステンシルの 状態 の depth 関数を "次の値以下" に設定します。これにより、以前にレンダリングされたすべてのジオメトリよりもカメラに 近い 場所にのみジオメトリが表示されるようになります。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.
    • ただし、特定のジオメトリが occluded されていても表示されないようにしたり、視覚的なフィードバックをユーザーに提供する手段として occluded したときの外観を変更したりすると便利な場合があります。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.
    • これを実現するには、必要な ' occluded ' 外観を作成する別のシェーダーを使用して、ジオメトリをもう一度描画します。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. 次に、DepthWriteMask を0に設定して、深度バッファーが変更されないようにします (深度バッファーは、カメラに 最も近い ジオメトリの深さを継続して表す必要があります)。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 のピクセル処理コストが高くなる可能性があります。これは特に、可視ジオメトリのレイヤーが複数存在する場合 (空間サーフェスとその他のホログラムを含む) の場合に特に当てはまります。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 上のこの冗長な作業を減らすために、不透明なサーフェスを前方から後方にレンダリングするのに役立ちます (先に近い順にします)。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 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.

アプリケーションではメッシュの単純化のみを実行する必要があります。これは、surface オブザーバーによって提供される coarsest 三角形の密度がまだ粗いことがない場合に限ります。この作業は負荷が高く、ランタイムによって提供されるさまざまな詳細レベルを生成するために既に実行されています。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.

各サーフェイスオブザーバーは複数の未接続空間サーフェスを提供できるため、アプリケーションによっては、これらの空間サーフェスメッシュを相互にクリップし、それらをまとめて zipper ことが必要になる場合があります。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 と競合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 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! つまり、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 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 を使用して、表面にホログラムの配置を行うと、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. したがって、使用シナリオによっては、(すべてのフレームで実行される) 追加の raycasts の計算コストと メッシュ処理 の計算コストを比較して、空間サーフェスの穴を滑らかにしたり削除したりする必要があります (空間メッシュを更新したときに実行されます)。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).

環境のスキャンエクスペリエンス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 are not 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 is possible to do so reliably, applications should automatically analyze spatial mapping data to save the user time. 信頼性を高めることができない場合は、アプリケーションでは、アプリケーションに必要な追加情報を迅速に提供できるようにする必要があります。When it is not 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.
    • たとえば、ユーザーが holographic スプレーペイントを使用してサーフェイス上に描画できるようにするアプリケーションでは、ユーザーに現在表示されているサーフェイスの知識のみが必要です。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 completely scanned already if it is one in which the user has already spent a lot of time using the HoloLens.
    • ただし、空間マッピングによって使用されるカメラでは、ユーザーの前に 3.1 m しか表示されないことに注意してください。そのため、ユーザーが過去の距離を超えていない限り、空間マッピングは遠く離れたサーフェイスを認識しません。Bear in mind however that the camera used by spatial mapping can only see 3.1m in front of the user, so spatial mapping will not 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 is not completely 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.
    • たとえば、ゲームでは、すべての方向から何百もの Lilliputians が発生した場合に、ユーザーを 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 have not yet been scanned. アプリケーションでは、 距離ベースのフォグ を使用して、空間マッピングサーフェイスでカバーされていない領域を視覚的に強調することができます。The application could for example use distance-based fog to visually highlight regions that are not 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.
    • 環境によってホログラムが正しく occluded されていない場合、アプリケーションは空間マッピングデータへの更新の受信を続行する必要があります。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 ' statues ' を作成できます。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.
    • たとえば、curtain を描画したユーザーは、holographic play に対して "シーンの変更" をトリガーできます。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 are 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 additional detail to be aware of is that the 'range' of spatial mapping data is not unlimited. 空間マッピングでは、大きなスペースの永続的なデータベースが構築されますが、ユーザーの周囲のサイズが制限された ' バブル ' では、アプリケーションでそのデータを使用できるようになります。Whilst 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 の先頭から開始して、開始から十分な距離が得られない場合は、最終的に空間サーフェスが先頭に戻ることになります。Thus 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 of course mitigate this by caching those surfaces in your application after they have 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 are 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, be aware that 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.
    • Surface メッシュでは、このような穴をアルゴリズムに塗りつぶすことができます。It is possible to algorithmically fill such holes in the surface mesh. ただし、windows や doorways などの "実際のホール" が入力されないように、アルゴリズムを調整する必要があります。However, you will need to tune your algorithm so that 'real holes' such as windows and doorways do not get filled in. ' 実際のホール ' を ' 虚数穴 ' から確実に区別することは困難であるため、' size ' や ' 境界図形 ' などのさまざまなヒューリスティックを試してみる必要があります。It can be difficult to reliably differentiate 'real holes' from 'imaginary holes', so you will 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 への影響の影響: Hallucinations は、他のホログラムの前に移動するダークシェイプとして表示されることがあります。Hallucinations affect occlusion: hallucinations may become visible as dark shapes moving in front of and occluding other holograms.
    • Hallucinations は raycasts に影響します。 raycasts を使用してユーザーがサーフェイスを操作できるようにする場合、これらの光線は、背後にある表面ではなく hallucination にヒットする可能性があります。Hallucinations affect raycasts: if you are using raycasts to help users interact with surfaces, these rays could hit a hallucination instead of the surface behind it. 穴の場合と同様に、1つの raycast ではなく多くの raycasts を使用することができますが、この場合も計算コストが発生します。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 は、物理的な衝突に影響を与えます。物理シミュレーションによって制御されるオブジェクトは、hallucination に対してスタックし、一見した領域の領域を移動できなくなる可能性があります。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.
    • Surface メッシュからこのような hallucinations をフィルター処理できます。It is possible to filter such hallucinations from the surface mesh. ただし、穴の場合と同様に、照明とドアハンドルなどの実際の小さなオブジェクトが削除されないように、アルゴリズムを調整する必要があります。However, as with holes, you will need to tune your algorithm so that real small objects such as lamp-stands and door handles do not 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 is possible to mitigate this by using appropriate lighting and textures in the shader that is used to render the surface.
    • Surface メッシュでの粗さを滑らかにすることができます。It is 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.
    • 平面領域では、再生領域を定義して、videogame レベルの基礎を形成できます。Planar regions can define play areas, forming the basis of videogame 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 scenarios, capture spatial mapping data over the network from a live HoloLens, then save it to disk and reuse it in subsequent 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.
  • 実際のユーザー (および理想的には coached ではありません) でテストを実行することをお勧めします。これは、ユーザーが HoloLens またはアプリケーションをまったく同じ方法で使用しない可能性があるためです。It is a good idea to perform testing with real (and ideally un-coached) 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!

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

  • サーフェスメッシュを適切に配置するためには、各 SurfaceObserver オブジェクトをアクティブにしてから、メッシュが構築されるようにする必要があります。In order for the surface meshes to be orientated correctly, each GameObject needs to be active before it is sent to the SurfaceObserver to have its mesh constructed. そうしないと、メッシュはスペースに表示されますが、回転角度は変わってきます。Otherwise, the meshes will show up in your space but rotated at weird angles.
  • SurfaceObserver と通信するスクリプトを実行するオブジェクトは、オリジンに設定する必要があります。The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. そうしないと、メッシュを構築するために作成して SurfaceObserver に送信するすべてのゲームオブジェクトが、親 Game オブジェクトのオフセットと同じオフセットを持つことになります。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