Mapping spazialeSpatial mapping

Il mapping spaziale fornisce una rappresentazione dettagliata delle superfici reali nell'ambiente intorno alla HoloLens, consentendo agli sviluppatori di creare un'esperienza di realtà mista convincente.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. Unendo il mondo reale con il mondo virtuale, un'applicazione può sembrare reale.By merging the real world with the virtual world, an application can make holograms seem real. Le applicazioni possono anche essere allineate in modo più naturale con le aspettative degli utenti fornendo comportamenti e interazioni reali.Applications can also more naturally align with user expectations by providing familiar real-world behaviors and interactions.


Supporto del dispositivoDevice supports

FunzionalitàFeature HoloLens (prima generazione)HoloLens (1st gen) HoloLens 2HoloLens 2 Visori VR immersiveImmersive headsets
Mapping spazialeSpatial mapping ✔️✔️ ✔️✔️

Perché il mapping spaziale è importante?Why is spatial mapping important?

Il mapping spaziale consente di posizionare gli oggetti su superfici reali.Spatial mapping makes it possible to place objects on real surfaces. In questo modo è possibile agganciare gli oggetti nel mondo dell'utente e sfruttare i vantaggi offerti dai suggerimenti per la profondità del mondo reale. Occlusione gli ologrammi in base ad altri ologrammi e oggetti reali consentono di convincere l'utente che questi ologrammi si trovano effettivamente nello spazio.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. Gli ologrammi che galleggiano nello spazio o che si avvicinano all'utente non si sentono come reali.Holograms floating in space or moving with the user won't feel as real. Quando possibile, inserire gli elementi per comodità.When possible, place items for comfort.

Visualizzare le superfici quando si posizionano o si spostano gli ologrammi (usare una griglia proiettata).Visualize surfaces when placing or moving holograms (use a projected grid). Questo consente agli utenti di individuare il punto in cui possono posizionare i propri ologrammi e Mostra se la posizione in cui si sta tentando di collocare l'ologramma non è mappata.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. È possibile "Billboard Items" verso l'utente se terminano troppo di un angolo.You can "billboard items" toward the user if they end up at too much of an angle.

Panoramica dei concettiConceptual overview

Superficie mesh che copre una stanzaMesh surfaces covering a room
Esempio di mesh di mapping spaziale che copre una stanzaAn example of a spatial mapping mesh covering a room

I due tipi di oggetti primari usati per il mapping spaziale sono "osservatore della superficie spaziale" e "superficie spaziale".The two primary object types used for spatial mapping are the 'Spatial Surface Observer' and the 'Spatial Surface'.

L'applicazione fornisce l'osservatore della superficie spaziale con uno o più volumi di delimitazione, per definire le aree di spazio in cui l'applicazione desidera ricevere i dati di mapping spaziali.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. Per ognuno di questi volumi, il mapping spaziale fornirà all'applicazione un set di superfici spaziali.For each of these volumes, spatial mapping will provide the application with a set of Spatial Surfaces.

Questi volumi possono essere stazionari (in una posizione fissa basata sul mondo reale) oppure possono essere collegati a HoloLens (si spostano, ma non ruotano, con il HoloLens mentre si spostano nell'ambiente).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). Ogni superficie spaziale descrive le superfici reali in un piccolo volume di spazio, rappresentate come una mesh triangolare collegata a un sistema di coordinate spazialicon blocco globale.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.

Quando HoloLens raccoglie nuovi dati sull'ambiente e, quando si verificano modifiche all'ambiente, le superfici spaziali vengono visualizzate, scompaiono e modificate.As the HoloLens gathers new data about the environment, and as changes to the environment occur, spatial surfaces will appear, disappear, and change.

Confronto tra mapping spaziale e visione della scena WorldMeshSpatial Mapping vs. Scene Understanding WorldMesh

Per HoloLens 2, è possibile eseguire una query su una versione statica dei dati di mapping spaziale usando scene Understanding SDK (impostazione EnableWorldMesh).For HoloLens 2, it's possible to query a static version of the spatial mapping data using Scene understanding SDK (EnableWorldMesh setting). Di seguito sono riportate le differenze tra due modalità di accesso ai dati di mapping spaziale:Here are the differences between two ways of accessing the spatial mapping data:

  • API di mapping spaziale:Spatial Mapping API:
    • Intervallo limitato: i dati di mapping spaziale disponibili per le applicazioni in una dimensione limitata memorizzata nella cache ' Bubble ' intorno all'utente.Limited range: the spatial mapping data available to applications in a limited size cached 'bubble' around the user.
    • Fornisce aggiornamenti a bassa latenza delle aree di rete modificate tramite eventi SurfacesChanged.Provides low latency updates of changed mesh regions through SurfacesChanged events.
    • Livello variabile dei dettagli controllati da triangoli per ogni parametro del contatore cubo.Variable level of details controlled by Triangles Per Cubic Meter parameter.
  • Scenario di comprensione dell'SDK:Scene understanding SDK:
    • Intervallo illimitato: fornisce tutti i dati di mapping spaziale analizzati all'interno del raggio della query.Unlimited range - provides all the scanned spatial mapping data within the query radius.
    • Fornisce uno snapshot statico dei dati di mapping spaziali.Provides a static snapshot of the spatial mapping data. Per ottenere i dati di mapping spaziale aggiornati è necessario eseguire una nuova query per l'intera mesh.Getting the updated spatial mapping data requires running a new query for the whole mesh.
    • Livello di dettaglio coerente controllato dall'impostazione RequestedMeshLevelOfDetail.Consistent level of details controlled by RequestedMeshLevelOfDetail setting.

Che influenza la qualità del mapping spaziale?What influences spatial mapping quality?

Diversi fattori , descritti indettaglio, possono influenzare la frequenza e la gravità di questi errori.Several factors, detailed here, can affect the frequency and severity of these errors. Tuttavia, è consigliabile progettare l'applicazione in modo che l'utente possa raggiungere gli obiettivi anche in presenza di errori nei dati di mapping spaziali.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.

Scenari di utilizzo comuniCommon usage scenarios

Illustrazioni degli scenari comuni di utilizzo del mapping spaziale: posizionamento, occlusione, fisica e navigazione

Selezione hostPlacement

Il mapping spaziale offre alle applicazioni l'opportunità di presentare forme di interazione naturale e familiare con l'utente; che cosa potrebbe essere più naturale rispetto a collocare il telefono sulla scrivania?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?

Vincolando la posizione degli ologrammi (o più in generale, qualsiasi selezione di posizioni spaziali) a cui poggiano le superfici, viene fornito un mapping naturale da 3D (punto nello spazio) a 2D (punto sulla superficie).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). In questo modo si riduce la quantità di informazioni che l'utente deve fornire all'applicazione e rende più veloce, semplice e preciso le interazioni dell'utente.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. Questo è vero perché' distance away ' non è un elemento che viene usato per la comunicazione fisica con altri utenti o computer.This is true because 'distance away' isn't something that we're used to physically communicating to other people or to computers. Quando puntiamo al dito, viene specificata una direzione, ma non una distanza.When we point with our finger, we're specifying a direction but not a distance.

Un avvertimento importante è che, quando un'applicazione deduce la distanza dalla direzione, ad esempio eseguendo un Raycast lungo la direzione dello sguardo dell'utente per trovare la superficie spaziale più vicina, questo deve produrre risultati che l'utente può prevedere in modo affidabile.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. In caso contrario, l'utente perderà il proprio senso di controllo e questa operazione può diventare rapidamente frustrante.Otherwise, the user will lose their sense of control and this can quickly become frustrating. Un metodo che consente di eseguire questa operazione consiste nell'eseguire più raycasts anziché uno solo.One method that helps with this is to do multiple raycasts instead of just one. I risultati di aggregazione devono essere più uniformi e prevedibili, meno suscettibili a influenzare da risultati temporanei "outlier" (come può essere causato da raggi che passano attraverso piccoli buchi o colpendo piccoli bit di geometria di cui l'utente non è a conoscenza).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). L'aggregazione o l'uniformità può essere eseguita anche nel tempo; ad esempio, è possibile limitare la velocità massima a cui un ologramma può variare a distanza dall'utente.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. È anche possibile limitare la limitazione del valore minimo e massimo della distanza, in modo che l'ologramma spostato non entri improvvisamente nella distanza o venga arrestato di nuovo nel volto dell'utente.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.

Le applicazioni possono anche usare la forma e la direzione delle superfici per guidare la posizione degli ologrammi.Applications can also use the shape and direction of surfaces to guide hologram placement. Una poltrona olografica non dovrebbe penetrare tra le pareti e deve essere scaricata con il pavimento anche se è leggermente irregolare.A holographic chair shouldn't penetrate through walls and should sit flush with the floor even if it's slightly uneven. Questo tipo di funzionalità si basa probabilmente sull'uso di collisioni di fisica anziché raycasts, tuttavia si verificheranno problemi simili.This kind of functionality would likely rely upon the use of physics collisions rather than raycasts, however similar concerns will apply. Se l'ologramma posizionato presenta molti poligoni di piccole dimensioni, come le gambe su una poltrona, potrebbe essere utile espandere la rappresentazione fisica di tali poligoni in modo più ampio e più semplice, in modo che siano più in grado di scorrere le superfici spaziali senza sbavare.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.

All'estremo, l'input dell'utente può essere completamente semplificato e può essere usato per eseguire la selezione automatica degli ologrammi.At its extreme, user input can be simplified away entirely and spatial surfaces can be used to do entirely automatic hologram placement. Ad esempio, l'applicazione potrebbe posizionare un interruttore di luce olografico in un punto qualsiasi sul muro per fare in modo che l'utente prema.For example, the application could place a holographic light-switch somewhere on the wall for the user to press. La stessa avvertenza sulla prevedibilità si applica doppiamente. Se l'utente si aspetta di controllare la posizione degli ologrammi, ma l'applicazione non sempre posiziona gli ologrammi in cui si aspettano (se il Commuter viene visualizzato in un punto in cui l'utente non riesce a raggiungere), si tratta di un'esperienza frustrante.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. In realtà, è possibile che la selezione host automatica richieda la correzione dell'utente per un certo periodo di tempo, anziché richiedere che l'utente esegua sempre la selezione host. Poiché è previsto un posizionamento automatico corretto, la correzione manuale sembra un carico.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!

Si noti inoltre che la capacità di un'applicazione di utilizzare le superfici spaziali per la selezione host dipende molto dall' esperienza di analisidell'applicazione.Note also that the ability of an application to use spatial surfaces for placement depends heavily on the application's scanning experience. Se una superficie non è stata analizzata, non può essere usata per la selezione host.If a surface hasn't been scanned, then it cannot be used for placement. L'applicazione è in grado di rendere questa operazione chiara all'utente, in modo da consentire l'analisi di nuove superfici o la selezione di una nuova posizione.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.

Il feedback visivo all'utente è di importanza fondamentale durante la selezione host.Visual feedback to the user is of paramount importance during placement. L'utente deve essere in grado di individuare il punto in cui l'ologramma è basato sulla superficie più vicina con effetti di base.The user needs to know where the hologram is based on the nearest surface with grounding effects. Devono comprendere il motivo per cui lo spostamento del loro ologramma è vincolato, ad esempio a causa di collisioni con un'altra superficie vicina.They should understand why the movement of their hologram is being constrained (for example, because of collisions with another nearby surface). Se non riescono a collocare un ologramma nella posizione corrente, il feedback visivo dovrebbe renderlo chiaro perché non.If they can't place a hologram in the current location, then visual feedback should make it clear why not. Ad esempio, se l'utente sta tentando di collocare un divano olografico a metà strada nella parete, le parti del divano che si trovano dietro la parete dovrebbero pulsare in un colore arrabbiato.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. O viceversa, se l'applicazione non riesce a trovare una superficie spaziale in una posizione in cui l'utente può visualizzare una superficie reale, l'applicazione dovrebbe renderla chiara.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. L'assenza ovvia di un effetto di base in quest'area può raggiungere questo scopo.The obvious absence of a grounding effect in this area may achieve this purpose.

OcclusioneOcclusion

Uno degli usi principali delle superfici di mapping spaziale è semplicemente occludere gli ologrammi.One of the primary uses of spatial mapping surfaces is simply to occlude holograms. Questo semplice comportamento ha un notevole effetto sul realismo percepito degli ologrammi, contribuendo a creare un senso viscerale che si occupa effettivamente dello stesso spazio fisico dell'utente.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.

L'occlusione fornisce inoltre informazioni all'utente. Quando un ologramma sembra essere nascosto da una superficie reale, fornisce commenti visivi aggiuntivi relativi alla posizione spaziale di tale ologramma nel mondo.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. Viceversa, l'occlusione può anche nascondere le informazioni dall'utente. gli ologrammi occlusione dietro le pareti possono ridurre il disordine visivo in modo intuitivo.Conversely, occlusion can also usefully hide information from the user; occluding holograms behind walls can reduce visual clutter in an intuitive way. Per nascondere o rivelare un ologramma, l'utente deve semplicemente spostare l'intestazione.To hide or reveal a hologram, the user merely has to move their head.

L'occlusione può essere usata anche per le prime aspettative per un'interfaccia utente naturale basata su interazioni fisiche note. Se un ologramma è nascosto da una superficie, è perché la superficie è solida, quindi l'utente deve aspettarsi che l'ologramma entri in conflitto con tale superficie e non lo attraversi.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.

In alcuni casi, l'occlusione degli ologrammi è indesiderata.Sometimes, occlusion of holograms is undesirable. Se un utente deve interagire con un ologramma, deve visualizzarlo anche se è dietro una superficie reale.If a user needs to interact with a hologram, then they need to see it - even if it is behind a real-world surface. In questi casi, in genere è opportuno eseguire il rendering di un ologramma in modo diverso quando è nascosto (ad esempio, riducendo la luminosità).In such cases, it usually makes sense to render such a hologram differently when it's occluded (for example, by reducing its brightness). In questo modo, l'utente può individuare visivamente l'ologramma, ma saprà ancora che è dietro qualcosa.This way, the user can visually locate the hologram, but they'll still know it's behind something.

FisicaPhysics

L'uso della simulazione fisica è un altro modo in cui il mapping spaziale può essere usato per rafforzare la presenza di ologrammi nello spazio fisico dell'utente.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. Quando la palla di gomma olografica si sposta in modo realistico dalla mia scrivania, rimbalza sul pavimento e scompare sotto il divano, potrebbe essere difficile credere che non sia presente.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.

La simulazione fisica offre inoltre la possibilità per un'applicazione di usare interazioni naturali e familiari basate sulla fisica.Physics simulation also provides the opportunity for an application to use natural and familiar physics-based interactions. Lo spostamento di un pezzo di mobili olografici intorno al pavimento sarà probabilmente più semplice per l'utente se il mobile risponde come se fosse scorrevole in tutto il pavimento con l'inerzia e l'attrito appropriati.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.

Per generare comportamenti fisici realistici, è probabile che sia necessario eseguire alcune operazioni di elaborazione di mesh , ad esempio la compilazione di buchi, la rimozione di allucinazioni mobili e l'uniformità delle superfici ruvide.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.

Sarà inoltre necessario considerare il modo in cui l' esperienza di analisi dell'applicazione influisce sulla simulazione fisica.You'll also need to consider how your application's scanning experience influences its physics simulation. In primo luogo, le superfici mancanti non si scontrano con niente. cosa accade quando la palla di gomma si sposta verso il basso nel corridoio e al termine del mondo noto?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? In secondo luogo, è necessario decidere se continuare a rispondere alle modifiche nell'ambiente nel tempo.Secondly, you need to decide whether you'll continue to respond to changes in the environment over time. In alcuni casi, è opportuno rispondere il più rapidamente possibile; Supponiamo che l'utente usi porte e mobili come barriere mobili in difesa contro una tempesta di frecce romane in arrivo.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. In altri casi, tuttavia, potrebbe essere necessario ignorare i nuovi aggiornamenti; guidare le auto sportive olografiche in tutto il circuito può non essere così divertente se il cane decide di sedersi al centro della traccia.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.

Le applicazioni possono utilizzare i dati di mapping spaziale per concedere ai caratteri olografici (o agenti) la possibilità di esplorare il mondo reale nello stesso modo in cui una persona reale.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. Questo può contribuire a rafforzare la presenza di caratteri olografici limitando gli stessi allo stesso set di comportamenti naturali e noti di quelli dell'utente e dei relativi amici.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.

Le funzionalità di navigazione possono essere utili anche per gli utenti.Navigation capabilities could be useful to users as well. Una volta che una mappa di navigazione è stata compilata in un'area specifica, potrebbe essere condivisa per fornire indicazioni olografiche per i nuovi utenti che non hanno familiarità con tale località.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. Questa mappa può essere progettata per semplificare il flusso del traffico pedonale o per evitare incidenti in posizioni pericolose come i siti di costruzione.This map could be designed to help keep pedestrian 'traffic' flowing smoothly, or to avoid accidents in dangerous locations like construction sites.

Le principali problemi tecnici che interessano l'implementazione della funzionalità di navigazione sono il rilevamento affidabile di superfici a scorrimento (gli utenti non sono in grado di esplorare le tabelle) e l'adattamento normale alle modifiche nell'ambiente (gli utenti non passano attraverso le porte chiuse).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!). È possibile che la mesh richieda una certa elaborazione prima che sia utilizzabile per la pianificazione del percorso e la navigazione da parte di un carattere virtuale.The mesh may require some processing before it's usable for path-planning and navigation by a virtual character. La smussatura della rete e la rimozione delle allucinazioni possono aiutare a evitare che i caratteri rimangano bloccati.Smoothing the mesh and removing hallucinations may help avoid characters becoming stuck. È anche possibile semplificare notevolmente la rete per velocizzare i calcoli di spostamento e pianificazione dei percorsi dei caratteri.You may also wish to drastically simplify the mesh to speed up your character's path-planning and navigation calculations. Questi problemi hanno ricevuto una grande attenzione nello sviluppo della tecnologia di gioco video ed è disponibile una vasta gamma di documenti di ricerca su questi argomenti.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.

La funzionalità NavMesh incorporata in Unity non può essere usata con superfici di mapping spaziale.The built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. Questo perché le superfici del mapping spaziale non sono note finché l'applicazione non viene avviata, ma i file di dati NavMesh devono essere generati in anticipo dalle risorse di origine.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. Si noti inoltre che il sistema di mapping spaziale non fornirà informazioni sulle superfici lontani dalla posizione corrente dell'utente.Also note that, the spatial mapping system won't provide information about surfaces far away from the user's current location. Quindi, l'applicazione deve ricordare che si tratta di una superficie per creare una mappa di un'area di grandi dimensioni.So the application must 'remember' surfaces itself if it's to build a map of a large area.

VisualizzazioneVisualization

Nella maggior parte dei casi è opportuno che le superfici spaziali siano invisibili; per ridurre al minimo il disordine visivo e lasciare che il mondo reale parli per se stesso.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. Tuttavia, a volte è utile visualizzare direttamente le superfici del mapping spaziale, nonostante le loro controparti reali siano visibili.However, sometimes it's useful to visualize spatial mapping surfaces directly, despite their real-world counterparts being visible.

Ad esempio, quando l'utente tenta di posizionare un ologramma su una superficie (posizionando un cabinet olografico sulla parete), può essere utile per "macinare" l'ologramma proiettando un'ombreggiatura sulla superficie.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. Ciò offre all'utente un senso molto più chiaro della vicinanza fisica esatta tra l'ologramma e la superficie.This gives the user a much clearer sense of the exact physical proximity between the hologram and the surface. Questo è anche un esempio della pratica più generale di "anteprima" visiva di una modifica prima che l'utente ne venga eseguito il commit.This is also an example of the more general practice of visually 'previewing' a change before the user commits to it.

Visualizzando le superfici, l'applicazione può condividere con l'utente la conoscenza dell'ambiente.By visualizing surfaces, the application can share with the user its understanding of the environment. Ad esempio, un gioco della lavagna olografica potrebbe visualizzare le superfici orizzontali identificate come ' Tables ', in modo che l'utente sappia dove devono interagire.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.

La visualizzazione delle superfici può essere un modo utile per visualizzare gli spazi adiacenti dell'utente nascosti dalla visualizzazione.Visualizing surfaces can be a useful way to show the user nearby spaces that are hidden from view. Questo potrebbe fornire un modo per concedere all'utente l'accesso alla propria cucina (e a tutti gli ologrammi contenuti) dalla loro sala da vivere.This could provide a way to give the user access to their kitchen (and all of its contained holograms) from their living room.

Le mesh di superficie fornite dal mapping spaziale potrebbero non essere particolarmente "pulite".The surface meshes provided by spatial mapping may not be particularly 'clean'. È importante visualizzarli in modo appropriato.It's important to visualize them appropriately. I calcoli di illuminazione tradizionali possono evidenziare gli errori nelle normalità della superficie in modo visivo, mentre le trame "pulite" proiettate sulla superficie possono contribuire a fornire un aspetto ordinato.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. È anche possibile eseguire l' elaborazione mesh per migliorare le proprietà della mesh, prima che venga eseguito il rendering delle superfici.It's also possible to do mesh processing to improve mesh properties, before the surfaces are rendered.

Nota

HoloLens 2 implementa una nuova scena che comprende il runtime, che fornisce agli sviluppatori di realtà mista una rappresentazione dell'ambiente di alto livello strutturata progettata per semplificare l'implementazione di posizionamento, occlusione, fisica e navigazione.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.

Uso di Surface ObserverUsing The Surface Observer

Il punto di partenza per il mapping spaziale è l'osservatore della superficie.The starting point for spatial mapping is the surface observer. Il flusso di programma è il seguente:Program flow is as follows:

  • Creare un oggetto Observer di superficieCreate a surface observer object
    • Fornire uno o più volumi spaziali, per definire le aree di interesse in cui l'applicazione desidera ricevere i dati di mapping spaziali.Provide one or more spatial volumes, to define the regions of interest in which the application wishes to receive spatial mapping data. Un volume spaziale è semplicemente una forma che definisce un'area di spazio, ad esempio una sfera o una casella.A spatial volume is simply a shape defining a region of space, such as a sphere or a box.
    • Usare un volume spaziale con un sistema di coordinate spaziali con blocco globale per identificare un'area fissa del mondo fisico.Use a spatial volume with a world-locked spatial coordinate system to identify a fixed region of the physical world.
    • Usare un volume spaziale, aggiornare ogni frame con un sistema di coordinate spaziali con blocco del corpo per identificare un'area di spazio che si sposta (ma non ruota) con l'utente.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.
    • Questi volumi spaziali possono essere modificati in un secondo momento, in caso di modifica dello stato dell'applicazione o dell'utente.These spatial volumes may be changed later at any time, as the status of the application or the user changes.
  • Usare il polling o la notifica per recuperare informazioni sulle superfici spazialiUse polling or notification to retrieve information about spatial surfaces
    • È possibile eseguire il polling dell'osservatore della superficie per lo stato della superficie spaziale in qualsiasi momento.You may 'poll' the surface observer for spatial surface status at any time. Al contrario, è possibile registrarsi per l'evento "Surfaces changed" dell'osservatore di superficie che invierà una notifica all'applicazione quando vengono modificate le superfici spaziali.Instead, you may register for the surface observer's 'surfaces changed' event, which will notify the application when spatial surfaces have changed.
    • Per un volume spaziale dinamico, ad esempio la vista tronco o un volume con blocco del corpo, le applicazioni dovranno eseguire il polling delle modifiche per ogni frame impostando l'area di interesse e quindi ottenendo il set corrente di superfici spaziali.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.
    • Per un volume statico, ad esempio un cubo con blocco globale che copre un'unica stanza, è possibile che le applicazioni si registrino per l'evento "Surfaces changed" per ricevere una notifica in caso di modifica delle superfici spaziali all'interno di tale volume.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.
  • Modifiche alle superfici del processoProcess surfaces changes
    • Scorre il set di superfici spaziali fornito.Iterate the provided set of spatial surfaces.
    • Classificare le superfici spaziali come aggiunte, modificate o rimosse.Classify spatial surfaces as added, changed, or removed.
    • Per ogni superficie spaziale aggiunta o modificata, se appropriato, inviare una richiesta asincrona per ricevere una mesh aggiornata che rappresenta lo stato corrente della superficie al livello di dettaglio desiderato.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.
  • Elaborare la richiesta di mesh asincrona (altri dettagli nelle sezioni seguenti).Process the asynchronous mesh request (more details in following sections).

Caching meshMesh Caching

Le superfici spaziali sono rappresentate da mesh a triangolo denso.Spatial surfaces are represented by dense triangle meshes. L'archiviazione, il rendering e l'elaborazione di tali mesh possono utilizzare risorse di calcolo e di archiviazione significative.Storing, rendering, and processing these meshes can consume significant computational and storage resources. Di conseguenza, ogni applicazione deve adottare uno schema di Caching mesh appropriato per le proprie esigenze, per ridurre al minimo le risorse usate per l'elaborazione e l'archiviazione di mesh.As such, each application should adopt a mesh caching scheme appropriate to its needs, to minimize the resources used for mesh processing and storage. Questo schema deve determinare quali mesh tenere e quali rimuovere e quando aggiornare la mesh per ogni superficie spaziale.This scheme should determine which meshes to keep and which to discard, and when to update the mesh for each spatial surface.

Molte delle considerazioni illustrate in questo articolo indicheranno direttamente il modo in cui l'applicazione deve affrontare la memorizzazione nella cache.Many of the considerations discussed there will directly inform how your application should approach mesh caching. È necessario considerare il modo in cui l'utente si sposta nell'ambiente, quali sono le superfici necessarie, quando verranno osservate diverse superfici e quando le modifiche nell'ambiente devono essere acquisite.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.

Quando si interpreta l'evento "Surfaces changed" fornito da Surface Observer, la logica di base di caching della mesh è la seguente:When interpreting the 'surfaces changed' event provided by the surface observer, the basic mesh caching logic is as follows:

  • Se l'applicazione rileva un ID di superficie spaziale che non ha visto prima, deve considerarlo come una nuova superficie spaziale.If the application sees a spatial surface ID that it hasn't seen before, it should treat this as a new spatial surface.
  • Se l'applicazione rileva una superficie spaziale con un ID noto ma con una nuova ora di aggiornamento, deve considerarla come una superficie spaziale aggiornata.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.
  • Se l'applicazione non vede più una superficie spaziale con un ID noto, deve considerarla come una superficie spaziale rimossa.If the application no longer sees a spatial surface with a known ID, it should treat this as a removed spatial surface.

Ogni applicazione deve quindi effettuare le scelte seguenti:It's up to each application to then make the following choices:

  • Per le nuove superfici spaziali, è necessario richiedere la rete?For new spatial surfaces, should mesh be requested?
    • Generalmente la rete deve essere richiesta immediatamente per le nuove superfici spaziali, che possono fornire informazioni utili per l'utente.Generally mesh should be requested immediately for new spatial surfaces, which may provide useful new information to the user.
    • Tuttavia, è necessario assegnare la priorità alle nuove superfici spaziali vicino e davanti all'utente e la loro mesh deve essere prima richiesta.However, new spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Se la nuova mesh non è necessaria, se ad esempio l'applicazione ha "bloccato" in modo permanente o temporaneo il relativo modello di ambiente, non dovrebbe essere richiesto.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.
  • Per le superfici spaziali aggiornate, è necessario richiedere la rete?For updated spatial surfaces, should mesh be requested?
    • È necessario assegnare la priorità a una superficie spaziale aggiornata vicina e davanti all'utente e la loro mesh deve essere richiesta per prima.Updated spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Potrebbe anche essere opportuno assegnare una priorità più alta alle nuove superfici rispetto alle superfici aggiornate, soprattutto durante l'esperienza di analisi.It may also be appropriate to give higher priority to new surfaces than to updated surfaces, especially during the scanning experience.
    • Per limitare i costi di elaborazione, le applicazioni possono limitare la velocità con cui elaborano gli aggiornamenti delle superfici spaziali.To limit processing costs, applications may wish to throttle the rate at which they process updates to spatial surfaces.
    • Potrebbe essere possibile dedurre che le modifiche apportate a una superficie spaziale sono minori, ad esempio se i limiti della superficie sono ridotti, nel qual caso l'aggiornamento potrebbe non essere sufficientemente importante da elaborare.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.
    • Gli aggiornamenti alle superfici spaziali al di fuori dell'area di interesse dell'utente possono essere ignorati completamente, anche se in questo caso potrebbe essere più efficiente modificare i volumi di delimitazione spaziali in uso da parte dell'osservatore della superficie.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.
  • Per le superfici spaziali rimosse, il mesh dovrebbe essere scartato?For removed spatial surfaces, should mesh be discarded?
    • In genere, la mesh deve essere scartata immediatamente per le superfici spaziali rimosse, in modo che l'occlusione ologramma rimanga corretta.Generally mesh should be discarded immediately for removed spatial surfaces, so that hologram occlusion remains correct.
    • Tuttavia, se l'applicazione ha motivo di ritenere che una superficie spaziale verrà nuovamente visualizzata a breve (in base alla progettazione dell'esperienza utente), potrebbe essere più efficiente evitare di scartare la mesh e ricrearla in un secondo momento.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.
    • Se l'applicazione sta creando un modello su larga scala dell'ambiente dell'utente, potrebbe non voler eliminare alcuna rete.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. Sarà comunque necessario limitare l'utilizzo delle risorse, probabilmente mediante lo spooling di mesh su disco quando le superfici spaziali scompaiono.It will still need to limit resource usage though, possibly by spooling meshes to disk as spatial surfaces disappear.
    • Alcuni eventi relativamente rari durante la generazione della superficie spaziale possono causare la sostituzione delle superfici spaziali con nuove superfici spaziali in un percorso simile ma con ID diversi.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. Quindi, le applicazioni che scelgono di non rimuovere una superficie rimossa dovrebbero prestare attenzione a non finire con più mesh di superfici spaziali altamente sovrapposte che coprono la stessa posizione.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.
  • Il mesh deve essere scartato per qualsiasi altra superficie spaziale?Should mesh be discarded for any other spatial surfaces?
    • Anche quando esiste una superficie spaziale, se non è più utile per l'esperienza dell'utente, è consigliabile eliminarla.Even while a spatial surface exists, if it's no longer useful to the user's experience then it should be discarded. Se, ad esempio, l'applicazione sostituisce la stanza sull'altro lato di una porta con uno spazio virtuale alternativo, le superfici spaziali di tale spazio non sono più importanti.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.

Di seguito è riportato un esempio di strategia di Caching mesh, che usa l'isteresi spaziale e temporale:Here's an example mesh caching strategy, using spatial and temporal hysteresis:

  • Si consideri un'applicazione che vuole usare un volume spaziale a forma di tronco di interesse che segue lo sguardo dell'utente nel modo in cui si aggirano.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.
  • Una superficie spaziale può scomparire temporaneamente da questo volume semplicemente perché l'utente non è più in grado di uscire dalla superficie o da altri passaggi... solo per riprenderlo o ripeterlo più a breve.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 questo caso, l'eliminazione e la ricreazione della mesh per questa superficie rappresentano molti processi ridondanti.In this case, discarding and re-creating the mesh for this surface represents many redundant processings.
  • Per ridurre il numero di modifiche elaborate, l'applicazione utilizza due osservatori di superficie spaziale, uno contenuto all'interno dell'altro.To reduce the number of changes processed, the application uses two spatial surface observers, one contained within the other. Il volume maggiore è sferico e segue l'utente "pigramente"; si sposta solo quando necessario per garantire che il centro sia entro 2,0 metri dall'utente.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.
  • Le mesh di superficie spaziale nuove e aggiornate vengono sempre elaborate dall'osservatore della superficie interna più piccolo, ma le mesh vengono memorizzate nella cache fino a quando non vengono eliminate dal più ampio osservatore della superficie esterna.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. Ciò consente all'applicazione di evitare l'elaborazione di molte modifiche ridondanti a causa dello spostamento dell'utente locale.This allows the application to avoid processing many redundant changes because of local user movement.
  • Poiché anche una superficie spaziale può scomparire temporaneamente a causa di una perdita di rilevamento, l'applicazione rinvia anche le aree spaziali rimosse durante la perdita di rilevamento.Since a spatial surface may also disappear temporarily because of tracking loss, the application also defers discarding removed spatial surfaces during tracking loss.
  • In generale, un'applicazione deve valutare il compromesso tra l'elaborazione degli aggiornamenti ridotta e un maggiore utilizzo della memoria per determinare la strategia di memorizzazione nella cache ideale.In general, an application should evaluate the tradeoff between reduced update processing and increased memory usage to determine its ideal caching strategy.

RenderingRendering

Esistono tre modi principali in cui i mesh di mapping spaziale tendono a essere usati per il rendering:There are three primary ways in which spatial mapping meshes tend to be used for rendering:

  • Per la visualizzazione della superficieFor surface visualization
    • Spesso è utile visualizzare direttamente le superfici spaziali.It's often useful to visualize spatial surfaces directly. Ad esempio, il cast di ' Shadows ' da oggetti su superfici spaziali può fornire un utile feedback visivo all'utente mentre sta inserendo ologrammi sulle superfici.For example, casting 'shadows' from objects onto spatial surfaces can provide helpful visual feedback to the user while they're placing holograms on surfaces.
    • Un aspetto da tenere presente è che le mesh spaziali sono diverse dal tipo di mesh che può essere creato da un artista 3D.One thing to bear in mind is that spatial meshes are different to the kind of meshes that a 3D artist might create. La topologia triangolare non sarà' clean ' come topologia creata dall'uomo e la mesh soffrirà di diversi errori.The triangle topology won't be as 'clean' as human-created topology, and the mesh will suffer from various errors.
    • Per creare una gradevole estetica visiva, è possibile eseguire alcune operazioni di elaborazione della mesh, ad esempio per riempire buchi o normali superfici uniformi.To create a pleasing visual aesthetic, you may want to do some mesh processing, for example to fill holes or smooth surface normals. È anche possibile usare uno shader per proiettare le trame progettate dall'artista sulla mesh anziché visualizzare direttamente la topologia mesh e le normali.You may also wish to use a shader to project artist-designed textures onto your mesh instead of directly visualizing mesh topology and normals.
  • Per gli ologrammi occlusione dietro le superfici realiFor occluding holograms behind real-world surfaces
    • È possibile eseguire il rendering delle superfici spaziali in un passaggio solo Depth, che influisce solo sul buffer di profondità e non influisce sulle destinazioni di rendering dei colori.Spatial surfaces can be rendered in a depth-only pass, which only affects the depth buffer and doesn't affect color render targets.
    • In questo modo, il buffer di profondità viene sottoposto a rendering degli ologrammi in occludere in seguito alle superfici spaziali.This primes the depth buffer to occlude subsequently rendered holograms behind spatial surfaces. Una corretta occlusione degli ologrammi migliora il senso che gli ologrammi sono effettivamente presenti nello spazio fisico dell'utente.Accurate occlusion of holograms enhances the sense that holograms really exist within the user's physical space.
    • Per abilitare il rendering con solo profondità, aggiornare lo stato di Blend per impostare RenderTargetWriteMask su zero per tutte le destinazioni di rendering dei colori.To enable depth-only rendering, update your blend state to set the RenderTargetWriteMask to zero for all color render targets.
  • Per modificare l'aspetto degli ologrammi bloccati dalle superfici realiFor modifying the appearance of holograms occluded by real-world surfaces
    • In genere, la geometria sottoposta a rendering è nascosta quando è nascosta.Normally rendered geometry is hidden when it's occluded. Questa operazione viene eseguita impostando la funzione depth nello stato depth-stencil su "minore o uguale a", che fa sì che la geometria sia visibile solo quando è più vicina alla fotocamera rispetto alla geometria sottoposta a rendering precedente.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.
    • Tuttavia, può essere utile tenere visibile una determinata geometria anche quando è bloccato e modificarne l'aspetto quando è bloccato come un modo per fornire un feedback visivo all'utente.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. Questo consente, ad esempio, all'applicazione di mostrare all'utente la posizione di un oggetto e di renderlo chiaro che si trova dietro una superficie reale.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.
    • Per ottenere questo risultato, eseguire il rendering della geometria una seconda volta con un shader diverso che crea l'aspetto "nascosto" desiderato.To achieve this, render the geometry a second time with a different shader that creates the desired 'occluded' appearance. Prima di eseguire il rendering della geometria per la seconda volta, apportare due modifiche allo stato di stencil Depth.Before rendering the geometry for the second time, make two changes to your depth-stencil state. Per prima cosa, impostare la funzione depth su "maggiore o uguale a" in modo che la geometria sia visibile solo se è più lontana dalla fotocamera rispetto a tutte le geometrie precedentemente sottoposte a rendering.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. In secondo luogo, impostare DepthWriteMask su zero, in modo che il buffer di profondità non venga modificato (il buffer di profondità deve continuare a rappresentare la profondità della geometria più vicina alla fotocamera).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).

Le prestazioni sono un aspetto importante quando si esegue il rendering dei mesh di mapping spaziali.Performance is an important concern when rendering spatial mapping meshes. Di seguito sono riportate alcune tecniche di rendering specifiche per il rendering delle mesh di mapping spaziale:Here are some rendering performance techniques specific to rendering spatial mapping meshes:

  • Regola densità triangoloAdjust triangle density
    • Quando si richiedono mesh di superficie spaziale dall'osservatore della superficie, richiedere la densità minima di mesh triangolari che è sufficiente per le proprie esigenze.When requesting spatial surface meshes from your surface observer, request the lowest density of triangle meshes that will suffice for your needs.
    • Potrebbe avere senso variare la densità del triangolo in base alla superficie, a seconda della distanza della superficie dall'utente e della relativa pertinenza all'esperienza utente.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.
    • La riduzione dei conteggi di triangolo ridurrà i costi di utilizzo della memoria e di elaborazione dei vertici sulla GPU, anche se non influirà sui costi di elaborazione dei pixelReducing triangle counts will reduce memory usage and vertex processing costs on the GPU, though it won't affect pixel processing costs.
  • USA eliminazione troncoUse frustum culling
    • L'eliminazione di tronco ignora gli oggetti Drawing che non possono essere visualizzati perché sono al di fuori dell'tronco di visualizzazione corrente.Frustum culling skips drawing objects that cannot be seen because they are outside the current display frustum. In questo modo si riducono i costi di elaborazione della CPU e della GPU.This reduces both CPU and GPU processing costs.
    • Poiché l'abbassamento di livello viene eseguito in base a mesh e le superfici spaziali possono essere di grandi dimensioni, la suddivisione di ogni mesh della superficie spaziale in blocchi più piccoli può comportare un abbattimento più efficiente (in quanto viene eseguito il rendering di un numero inferiore di triangoli Offscreen).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). Tuttavia, esiste un compromesso; maggiore è il numero di mesh disponibili, maggiore è il numero di chiamate da creare, che possono aumentare i costi della CPU.There's a tradeoff, however; the more meshes you have, the more draw calls you must make, which can increase CPU costs. In un caso estremo, i calcoli per l'eliminazione di tronco possono anche avere un costo della CPU misurabile.In an extreme case, the frustum culling calculations themselves could even have a measurable CPU cost.
  • Modificare l'ordine di renderingAdjust rendering order
    • Le superfici spaziali tendono a essere di grandi dimensioni, perché rappresentano l'intero ambiente dell'utente che la circonda.Spatial surfaces tend to be large, because they represent the user's entire environment surrounding them. I costi di elaborazione dei pixel sulla GPU possono essere elevati, soprattutto nei casi in cui è presente più di un livello di geometria visibile, incluse le superfici spaziali e altri ologrammi.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). In questo caso, il livello più vicino all'utente occlusione i livelli più lontani, quindi qualsiasi tempo GPU dedicato al rendering di questi livelli più distanti viene sprecato.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.
    • Per ridurre questo lavoro ridondante sulla GPU, è possibile eseguire il rendering di superfici opache in ordine da primo a indietro (più vicine prima, più distanti le ultime).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). Per "opaque" si intende la superficie per la quale DepthWriteMask è impostato su uno nello stato depth-stencil.By 'opaque' we mean surfaces for which the DepthWriteMask is set to one in your depth-stencil state. Quando viene eseguito il rendering delle superfici più vicine, il buffer di profondità verrà preimpostato in modo che le superfici più remote vengano ignorate in modo efficiente dal processore pixel sulla 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.

Elaborazione meshMesh Processing

Un'applicazione potrebbe voler eseguire varie operazioni sulle mesh della superficie spaziale in base alle proprie esigenze.An application may want to do various operations on spatial surface meshes to suit its needs. I dati relativi a indici e vertici forniti con ogni mesh di superficie spaziale utilizzano lo stesso layout familiare dei vertex buffer e degli indici utilizzati per il rendering di mesh triangolari in tutte le moderne API di rendering.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. Tuttavia, un fatto fondamentale da tenere presente è che i triangoli di mapping spaziale hanno un ordine di avvolgimento in senso antiorario.However, one key fact to be aware of is that spatial mapping triangles have a front-clockwise winding order. Ogni triangolo è rappresentato da tre indici di vertice nel buffer di indice della mesh e questi indici identificano i vertici del triangolo in un ordine orario , quando il triangolo viene visualizzato dal lato anteriore .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. Il lato anteriore (o esterno) delle mesh della superficie spaziale corrisponde a quello previsto per il lato anteriore (visibile) delle superfici reali.The front side (or outside) of spatial surface meshes corresponds as you would expect to the front (visible) side of real world surfaces.

Le applicazioni devono solo semplificare la rete se la densità del triangolo più grossolana fornita dall'osservatore di superficie è ancora insufficiente. questo lavoro è dispendioso dal punto di vista del calcolo ed è già eseguito dal runtime per generare i vari livelli di dettaglio forniti.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.

Poiché ogni osservatore di superficie può fornire più aree spaziali non connesse, alcune applicazioni potrebbero voler ritagliare le mesh della superficie spaziale tra loro, quindi riunirle.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 generale, il passaggio di ritaglio è necessario, in quanto le mesh della superficie spaziale sono spesso sovrapposte leggermente.In general, the clipping step is required, as nearby spatial surface meshes often overlap slightly.

Raycasting e collisioneRaycasting and Collision

Affinché un'API fisica, ad esempio Havok, fornisca un'applicazione con funzionalità di Raycasting e collisione per le superfici spaziali, l'applicazione deve fornire mesh di superficie spaziale all'API di fisica.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. Le mesh usate per la fisica hanno spesso le proprietà seguenti:Meshes used for physics often have the following properties:

  • Contengono solo un numero ridotto di triangoli.They contain only small numbers of triangles. Le operazioni di fisica sono più complesse dal punto di vista delle operazioni di rendering.Physics operations are more computationally intensive than rendering operations.
  • Si tratta di un "Water-Tight".They're 'water-tight'. Le superfici destinate a essere solide non devono contenere piccoli buchi; anche i buchi troppo piccoli per essere visibili possono causare problemi.Surfaces intended to be solid shouldn't have small holes in them; even holes too small to be visible can cause problems.
  • Sono convertite in gusci convessi.They're converted into convex hulls. Le gusci convessi hanno pochi poligoni e sono privi di buchi e sono molto più efficienti dal punto di vista del calcolo rispetto a mesh triangolari grezzi.Convex hulls have few polygons and are free of holes, and they're much more computationally efficient to process than raw triangle meshes.

Quando si esegue raycasts in base alle superfici spaziali, tenere presente che queste superfici sono spesso complesse e ingombranti di dettagli, come la propria scrivania.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! Ciò significa che un singolo Raycast è spesso insufficiente per fornire informazioni sufficienti sulla forma della superficie e sulla forma dello spazio vuoto vicino.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. È in genere consigliabile eseguire molti raycasts all'interno di una piccola area e usare i risultati di aggregazione per derivare una conoscenza più affidabile della superficie.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. Ad esempio, l'uso della media di 10 raycasts per guidare la posizione degli ologrammi su una superficie produrrà un risultato molto più semplice e meno "nervosa" che usa solo un singolo 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.

Tuttavia, tenere presente che ogni Raycast può avere un elevato costo computazionale.However, bear in mind that each raycast can have a high computational cost. A seconda dello scenario di utilizzo, è consigliabile comportare il costo di calcolo di raycasts aggiuntivi (eseguita ogni frame) rispetto al costo computazionale dell' elaborazione della rete per smussare e rimuovere i buchi nelle superfici spaziali (eseguite quando vengono aggiornate le mesh spaziali).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).

Esperienza di analisi dell'ambienteThe environment scanning experience

Ogni applicazione che usa il mapping spaziale deve considerare la possibilità di fornire un'esperienza di analisi. processo attraverso il quale l'applicazione guida l'utente per l'analisi delle superfici necessarie per il corretto funzionamento dell'applicazione.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.

Esempio di analisiExample of scanning
Esempio di analisiExample of scanning

La natura di questa esperienza di analisi può variare significativamente a seconda delle esigenze di ogni applicazione, ma due principi principali dovrebbero guidare la progettazione.The nature of this scanning experience can vary greatly depending upon each application's needs, but two main principles should guide its design.

In primo luogo, una comunicazione chiara con l'utente rappresenta il problema principale.Firstly, clear communication with the user is the primary concern. L'utente deve sempre tenere presente se i requisiti dell'applicazione vengono soddisfatti.The user should always be aware of whether the application's requirements are being met. Quando non vengono soddisfatte, dovrebbe essere immediatamente chiaro all'utente perché questo è così e dovrebbe essere portato rapidamente a intraprendere l'azione appropriata.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.

In secondo luogo, le applicazioni devono provare a trovare un equilibrio tra efficienza e affidabilità.Secondly, applications should attempt to strike a balance between efficiency and reliability. Quando è possibile eseguire questa operazione in modo affidabile, le applicazioni devono analizzare automaticamente i dati del mapping spaziale per salvare l'ora utente.When it's possible to do so reliably, applications should automatically analyze spatial mapping data to save the user time. Quando non è possibile eseguire questa operazione in modo affidabile, le applicazioni devono invece consentire all'utente di fornire rapidamente all'applicazione le informazioni aggiuntive necessarie.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.

Per semplificare la progettazione dell'esperienza di analisi corretta, considerare quali delle seguenti possibilità sono applicabili all'applicazione:To help design the right scanning experience, consider which of the following possibilities are applicable to your application:

  • Nessuna esperienza di analisiNo scanning experience

    • Un'applicazione può funzionare perfettamente senza alcuna esperienza di analisi guidata; verranno fornite informazioni sulle superfici osservate nel corso del movimento naturale dell'utente.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.
    • Ad esempio, un'applicazione che consente all'utente di disegnare sulle superfici con la vernice spray olografica richiede solo le informazioni sulle superfici attualmente visibili all'utente.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.
    • L'ambiente potrebbe essere già stato analizzato se ne è uno in cui l'utente ha già impiegato molto tempo con HoloLens.The environment may be scanned already if it's one in which the user has already spent lots of time using the HoloLens.
    • Tenere presente, tuttavia, che la fotocamera usata dal mapping spaziale può visualizzare solo 3,1 m davanti all'utente, quindi il mapping spaziale non saprà altre superfici distanti, a meno che l'utente non abbia osservato da una distanza più vicina in passato.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.
    • Quindi, l'utente riconosce quali superfici sono state analizzate, l'applicazione deve fornire un feedback visivo a questo effetto, ad esempio il cast di ombre virtuali su superfici analizzate può aiutare l'utente a collocare gli ologrammi su tali superfici.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.
    • Per questo caso, i volumi di delimitazione dell'osservatore della superficie spaziale devono aggiornare ogni frame a un sistema di coordinate spazialicon blocco del corpo, in modo che seguano l'utente.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.
  • Trovare un percorso adattoFind a suitable location

    • Un'applicazione può essere progettata per essere utilizzata in una posizione con requisiti specifici.An application may be designed for use in a location with specific requirements.
    • Ad esempio, l'applicazione può richiedere un'area vuota per l'utente in modo da poter provare a utilizzare in modo sicuro il kung-fu olografico.For example, the application may require an empty area around the user so they can safely practice holographic kung-fu.
    • Le applicazioni devono comunicare i requisiti specifici per l'utente in primo piano e rinforzarli con un chiaro feedback visivo.Applications should communicate any specific requirements to the user up-front, and reinforce them with clear visual feedback.
    • In questo esempio, l'applicazione deve visualizzare l'ambito dell'area vuota richiesta e evidenziare visivamente la presenza di oggetti indesiderati all'interno di questa zona.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.
    • Per questo caso, i volumi di delimitazione dell'osservatore della superficie spaziale devono usare un sistema di coordinate spaziali con blocco globale nella posizione scelta.For this case, the spatial surface observer's bounding volumes should use a world-locked spatial coordinate system in the chosen location.
  • Trovare una configurazione adatta delle superficiFind a suitable configuration of surfaces

    • È possibile che un'applicazione richieda una configurazione specifica delle superfici, ad esempio due pareti grandi, piatte e contrapposte, per creare una sala olografica di mirror.An application may require a specific configuration of surfaces, for example two large, flat, opposing walls to create a holographic hall of mirrors.
    • In questi casi, l'applicazione dovrà analizzare le superfici fornite dal mapping spaziale per rilevare le superfici appropriate e indirizzare l'utente verso loro.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.
    • Se l'analisi della superficie dell'applicazione non è affidabile, l'utente deve disporre di un'opzione di fallback.The user should have a fallback option if the application's surface analysis isn't reliable. Se, ad esempio, l'applicazione identifica erroneamente un portale come un muro Flat, l'utente deve disporre di un modo semplice per correggere l'errore.For example, if the application incorrectly identifies a doorway as a flat wall, the user needs a simple way to correct this error.
  • Analizza parte dell'ambienteScan part of the environment

    • Un'applicazione può voler acquisire solo parte dell'ambiente, come indicato dall'utente.An application may wish to only capture part of the environment, as directed by the user.
    • Ad esempio, l'applicazione analizza parte di una stanza, in modo che l'utente possa pubblicare un annuncio olografico per la mobilia che desidera vendere.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 questo caso, l'applicazione deve acquisire i dati di mapping spaziali all'interno delle aree osservate dall'utente durante la relativa analisi.In this case, the application should capture spatial mapping data within the regions observed by the user during their scan.
  • Analizza l'intera stanzaScan the whole room

    • Un'applicazione può richiedere un'analisi di tutte le superfici nella stanza corrente, incluse quelle dietro l'utente.An application may require a scan of all of the surfaces in the current room, including those behind the user.
    • Ad esempio, un gioco può mettere l'utente nel ruolo di Gulliver, in assiege da centinaia di piccoli Lillipuziani che si avvicinano da tutte le direzioni.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 questi casi, l'applicazione dovrà determinare il numero di superfici presenti nella stanza corrente è già stata analizzata e indicare allo sguardo dell'utente di colmare gap significative.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.
    • La chiave per questo processo è fornire feedback visivo che rende chiaro all'utente quali superfici non sono ancora state analizzate.The key to this process is providing visual feedback that makes it clear to the user which surfaces haven't yet been scanned. L'applicazione potrebbe, ad esempio, usare la nebbia basata sulla distanza per evidenziare visivamente le aree non coperte dalle superfici di mapping spaziale.The application could, for example, use distance-based fog to visually highlight regions that aren't covered by spatial mapping surfaces.
  • Eseguire uno snapshot iniziale dell'ambienteTake an initial snapshot of the environment

    • Un'applicazione potrebbe voler ignorare tutte le modifiche apportate all'ambiente dopo aver eseguito uno snapshot iniziale.An application may wish to ignore all changes in the environment after taking an initial 'snapshot'.
    • Questa operazione può essere utile per evitare l'intralcio di dati creati dall'utente strettamente collegati allo stato iniziale dell'ambiente.This may be appropriate to avoid disruption of user-created data that is tightly coupled to the initial state of the environment.
    • In questo caso, l'applicazione deve creare una copia dei dati di mapping spaziale nello stato iniziale al termine dell'analisi.In this case, the application should make a copy of the spatial mapping data in its initial state once the scan is complete.
    • Le applicazioni devono continuare a ricevere gli aggiornamenti dei dati di mapping spaziale se gli ologrammi rimangono ancora correttamente bloccati dall'ambiente.Applications should continue receiving updates to spatial mapping data if holograms are still to be correctly occluded by the environment.
    • Gli aggiornamenti continui dei dati di mapping spaziali consentono inoltre di visualizzare le modifiche apportate, chiarendo all'utente le differenze tra gli stati precedenti e quelli presenti nell'ambiente.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.
  • Eseguire snapshot dell'ambiente avviati dall'utenteTake user-initiated snapshots of the environment

    • Un'applicazione può solo voler rispondere alle modifiche ambientali quando richiesto dall'utente.An application may only wish to respond to environmental changes when instructed by the user.
    • Ad esempio, l'utente può creare più "statue" 3D di un amico acquisendo le loro pose in momenti diversi.For example, the user could create multiple 3D 'statues' of a friend by capturing their poses at different moments.
  • Consenti all'utente di modificare l'ambienteAllow the user to change the environment

    • Un'applicazione può essere progettata in modo da rispondere in tempo reale a tutte le modifiche apportate nell'ambiente dell'utente.An application may be designed to respond in real time to any changes made in the user's environment.
    • Ad esempio, l'utente che disegna una tenda potrebbe attivare la "modifica della scena" per una riproduzione olografica che avviene sull'altro lato.For example, the user drawing a curtain could trigger 'scene change' for a holographic play taking place on the other side.
  • Guida dell'utente per evitare errori nei dati di mapping spazialeGuide the user to avoid errors in the spatial mapping data

    • Un'applicazione potrebbe voler fornire indicazioni all'utente durante l'analisi dell'ambiente.An application may wish to provide guidance to the user while they're scanning their environment.
    • Ciò consente all'utente di evitare determinati tipi di errori nei dati di mapping spaziali, ad esempio rimanendo fuori da finestre o mirror luminosi.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.

Un ulteriore dettaglio da tenere presente è che il ' intervallo ' dei dati di mapping spaziali non è illimitato.One extra detail to be aware of is that the 'range' of spatial mapping data isn't unlimited. Sebbene il mapping spaziale crei un database permanente di spazi di grandi dimensioni, rende solo i dati disponibili per le applicazioni in una "bolla" di dimensioni limitate per l'utente.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. Se si inizia dall'inizio di un lungo corridoio e si procede abbastanza lontano dall'inizio, infine le superfici spaziali all'inizio scompariranno.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. Per attenuare questo problema, è possibile memorizzare nella cache tali superfici nell'applicazione dopo che sono scomparse dai dati di mapping spaziali disponibili.You can mitigate this by caching those surfaces in your application after they've disappeared from the available spatial mapping data.

Elaborazione meshMesh processing

Potrebbe essere utile rilevare tipi comuni di errori nelle superfici e filtrare, rimuovere o modificare i dati del mapping spaziale in base alle esigenze.It may help to detect common types of errors in surfaces and to filter, remove or modify the spatial mapping data as appropriate.

Tenere presente che i dati di mapping spaziali sono destinati a essere il più fedele possibile a superfici reali, quindi qualsiasi elaborazione applicata rischia di spostare ulteriormente le superfici dalla "verità".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'.

Di seguito sono riportati alcuni esempi di diversi tipi di elaborazione di mesh che possono risultare utili:Here are some examples of different types of mesh processing that you may find useful:

  • Riempimento foroHole filling

    • Se non è possibile eseguire l'analisi di un oggetto di piccole dimensioni con un materiale scuro, questo lascerà un foro nell'area circostante.If a small object made of a dark material fails to scan, it will leave a hole in the surrounding surface.
    • I buchi influiscono sull'occlusione: gli ologrammi possono essere visualizzati in un foro in una superficie reale opaca.Holes affect occlusion: holograms can be seen 'through' a hole in a supposedly opaque real-world surface.
    • I buchi influiscono su raycasts: se si usa raycasts per aiutare gli utenti a interagire con le superfici, potrebbe essere indesiderato che questi raggi attraversino buchi.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. Una mitigazione consiste nell'usare un bundle di più raycasts che coprono un'area opportunamente dimensionata.One mitigation is to use a bundle of multiple raycasts covering an appropriately sized region. Ciò consentirà di filtrare i risultati "outlier", in modo che anche se un Raycast passa attraverso un piccolo foro, il risultato dell'aggregazione sarà ancora valido.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. Tuttavia, questo approccio comporta un costo computazionale.However, this approach comes at a computational cost.
    • I buchi influiscono sui conflitti di fisica: un oggetto controllato dalla simulazione fisica può essere trascinato in una buca al pavimento e perso.Holes affect physics collisions: an object controlled by physics simulation may drop through a hole in the floor and become lost.
    • È possibile algoritmicamente colmare tali buchi nella mesh della superficie.It's possible to algorithmically fill such holes in the surface mesh. Tuttavia, sarà necessario ottimizzare l'algoritmo in modo che non vengano compilati ' buchi reali ', ad esempio Windows e porte.However, you'll need to tune your algorithm so that 'real holes' such as windows and doorways don't get filled in. Può essere difficile distinguere in modo affidabile ' buchi reali ' da' buchi immaginari ', quindi è necessario provare con euristiche diverse, ad esempio ' dimensioni ' è forma limite '.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'.
  • Rimozione delle allucinazioniHallucination removal

    • I riflessi, le luci luminose e gli oggetti mobili possono lasciare piccole "allucinazioni" fluttuanti a mezz'aria.Reflections, bright lights, and moving objects can leave small lingering 'hallucinations' floating in mid-air.
    • Le allucinazioni influiscono sull'occlusione: le allucinazioni possono essere visibili come forme scure che si avvicinano a e occlusione altri ologrammi.Hallucinations affect occlusion: hallucinations may become visible as dark shapes moving in front of and occluding other holograms.
    • Le allucinazioni influiscono su raycasts: se si usa raycasts per aiutare gli utenti a interagire con le superfici, questi raggi potrebbero raggiungere una allucinazione invece della superficie sottostante.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. Come per i buchi, una mitigazione consiste nell'usare molti raycasts invece di un singolo Raycast, ma anche in questo caso il costo di calcolo sarà elevato.As with holes, one mitigation is to use many raycasts instead of a single raycast, but again this will come at a computational cost.
    • Le allucinazioni influiscono sui conflitti di fisica: un oggetto controllato dalla simulazione fisica può rimanere bloccato contro un'allucinazione e non essere in grado di spostarsi in un'area di spazio apparentemente chiara.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.
    • È possibile filtrare tali allucinazioni dalla mesh della superficie.It's possible to filter such hallucinations from the surface mesh. Tuttavia, come per i buchi, sarà necessario ottimizzare l'algoritmo in modo da evitare la rimozione di oggetti di piccole dimensioni, ad esempio luci e maniglie degli sportelli.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.
  • Definizione di movimenti uniformiSmoothing

    • Il mapping spaziale può restituire superfici che sembrano essere ruvide o ' noisy ' rispetto alle controparti reali.Spatial mapping may return surfaces that appear to be rough or 'noisy' in comparison to their real-world counterparts.
    • La fluidità influiscono sui conflitti di fisica: se il piano è ruvido, una palla da golf simulata fisicamente potrebbe non essere posizionata senza intoppi in una linea retta.Smoothness affects physics collisions: if the floor is rough, a physically simulated golf ball may not roll smoothly across it in a straight line.
    • La fluidità influisce sul rendering: se una superficie viene visualizzata direttamente, le normali superfici ruvide possono influire sul proprio aspetto e interferire con l'aspetto "Pulisci".Smoothness affects rendering: if a surface is visualized directly, rough surface normals can affect its appearance and disrupt a 'clean' look. È possibile mitigare questo problema usando l'illuminazione e le trame appropriate nello shader usato per il rendering della superficie.It's possible to mitigate this by using appropriate lighting and textures in the shader that is used to render the surface.
    • È possibile smussare l'rugosità in una mesh di superficie.It's possible to smooth out roughness in a surface mesh. Questa operazione può tuttavia comportare la disattivazione della superficie dalla superficie reale corrispondente.However, this may push the surface further away from the corresponding real-world surface. La gestione di una corrispondenza di chiusura è importante per produrre un'occlusione olografica accurata e consentire agli utenti di ottenere interazioni precise e prevedibili con le superfici olografiche.Maintaining a close correspondence is important to produce accurate hologram occlusion, and to enable users to achieve precise and predictable interactions with holographic surfaces.
    • Se è necessaria solo una modifica cosmetica, può essere sufficiente per smussare i normali vertici senza modificare le posizioni del vertice.If only a cosmetic change is required, it may be sufficient to smooth vertex normals without changing vertex positions.
  • Ricerca del pianoPlane finding

    • Esistono diverse forme di analisi che un'applicazione può voler eseguire sulle superfici fornite dal mapping spaziale.There are many forms of analysis that an application may wish to perform on the surfaces provided by spatial mapping.
    • Un semplice esempio è' ricerca del piano '; identificazione delle aree delimitate, principalmente planari di superfici.One simple example is 'plane finding'; identifying bounded, mostly planar regions of surfaces.
    • Le aree planari possono essere usate come superfici di lavoro olografiche, aree in cui il contenuto olografico può essere inserito automaticamente dall'applicazione.Planar regions can be used as holographic work-surfaces, regions where holographic content can be automatically placed by the application.
    • Le aree planari possono vincolare l'interfaccia utente per guidare gli utenti a interagire con le superfici più adatte alle proprie esigenze.Planar regions can constrain the user interface, to guide users to interact with the surfaces that best suit their needs.
    • Le aree planari possono essere usate come nel mondo reale, per le controparti olografiche in oggetti funzionali quali schermi LCD, tabelle o lavagne.Planar regions can be used as in the real world, for holographic counterparts to functional objects such as LCD screens, tables or whiteboards.
    • Le aree piane possono definire aree di riproduzione, che costituiscono la base dei livelli di gioco video.Planar regions can define play areas, forming the basis of video game levels.
    • Le aree planari possono aiutare gli agenti virtuali a esplorare il mondo reale, identificando le aree del piano su cui è probabile che le persone reali possano procedere.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.

Prototipi e debugPrototyping and debugging

Strumenti utiliUseful tools

  • L' emulatore di HoloLens può essere usato per sviluppare applicazioni usando il mapping spaziale senza accedere a un HoloLens fisico.The HoloLens emulator can be used to develop applications using spatial mapping without access to a physical HoloLens. Consente di simulare una sessione in tempo reale in un HoloLens in un ambiente realistico, con tutti i dati normalmente utilizzati dall'applicazione, tra cui HoloLens Motion, sistemi di coordinate spaziali e mesh di mapping spaziale.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. Questo può essere usato per fornire un input affidabile e ripetibile, che può essere utile per il debug dei problemi e la valutazione delle modifiche apportate al codice.This can be used to provide reliable, repeatable input, which can be useful for debugging problems and evaluating changes to your code.
  • Per riprodurre uno scenario, acquisire i dati di mapping spaziali sulla rete da un HoloLens attivo, quindi salvarli su disco e riutilizzarli in sessioni di debug successive.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.
  • La visualizzazione 3D del portale per dispositivi Windows consente di visualizzare tutte le superfici spaziali attualmente disponibili tramite il sistema di mapping spaziale.The Windows device portal 3D view provides a way to see all of the spatial surfaces currently available via the spatial mapping system. In questo modo viene fornita una base di confronto per le superfici spaziali all'interno dell'applicazione. ad esempio, è possibile stabilire facilmente se eventuali superfici spaziali risultano mancanti o visualizzate nella posizione sbagliata.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.

Indicazioni generali sulla prototipazioneGeneral prototyping guidance

  • Poiché gli errori nei dati di mapping spaziali possono influire fortemente sull'esperienza dell'utente, è consigliabile testare l'applicazione in un'ampia gamma di ambienti.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.
  • Non rimanere intrappolato nell'abitudine di testare sempre nella stessa posizione, ad esempio nella propria scrivania.Don't get trapped in the habit of always testing in the same location, for example at your desk. Assicurarsi di eseguire il test su varie superfici di posizioni, forme, dimensioni e materiali differenti.Make sure to test on various surfaces of different positions, shapes, sizes, and materials.
  • Analogamente, mentre i dati sintetici o registrati possono essere utili per il debug, non dipendono troppo dagli stessi test case.Similarly, while synthetic or recorded data can be useful for debugging, don't become too reliant upon the same few test cases. Questo può ritardare la ricerca di problemi importanti che potrebbero essere rilevati in precedenza da più test.This may delay finding important issues that more varied testing would have caught earlier.
  • È consigliabile eseguire i test con utenti reali (e idealmente non allenati), perché non possono usare il HoloLens o l'applicazione esattamente come si fa.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 realtà, può sorprendere il comportamento, la conoscenza e le ipotesi delle persone divergenti.In fact, it may surprise you how divergent people's behavior, knowledge, and assumptions can be!

Risoluzione dei problemiTroubleshooting

  • Affinché le mesh della superficie siano orientate correttamente, ogni GameObject deve essere attivo prima di essere inviato al SurfaceObserver per costruire la mesh.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. In caso contrario, le maglie vengono visualizzate nello spazio, ma ruotate a angoli strani.Otherwise, the meshes will show up in your space but rotated at weird angles.
  • Il GameObject che esegue lo script che comunica con il SurfaceObserver deve essere impostato sull'origine.The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. In caso contrario, tutte le GameObject create e inviate al SurfaceObserver per la costruzione delle mesh avranno un offset uguale all'offset dell'oggetto del gioco padre.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. In questo modo, le mesh vengono visualizzate a diversi metri, il che rende difficile il debug di ciò che accade.This can make your meshes show up several meters away, which makes it hard to debug what is going on.

Vedere ancheSee also