mapeamento espacialSpatial mapping

O mapeamento espacial fornece uma representação detalhada das superfícies do mundo real no ambiente em todo o HoloLens, permitindo que os desenvolvedores criem uma experiência de realidade misturada 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. Ao mesclar o mundo real com o mundo virtual, um aplicativo pode fazer com que os hologramas pareçam reais.By merging the real world with the virtual world, an application can make holograms seem real. Os aplicativos também podem se alinhar naturalmente com as expectativas do usuário, fornecendo comportamentos e interações do mundo real.Applications can also more naturally align with user expectations by providing familiar real-world behaviors and interactions.


Suporte a dispositivosDevice supports

RecursoFeature HoloLens (1ª geração)HoloLens (1st gen) HoloLens 2HoloLens 2 Headsets imersivosImmersive headsets
mapeamento espacialSpatial mapping ✔️✔️ ✔️✔️

Por que o mapeamento espacial é importante?Why is spatial mapping important?

O mapeamento espacial torna possível posicionar objetos em superfícies reais.Spatial mapping makes it possible to place objects on real surfaces. Isso ajuda a ancorar objetos no mundo do usuário e aproveita as indicações de profundidade do mundo real. Occluding seus hologramas com base em outros hologramas e objetos do mundo real ajudam a convencer o usuário de que esses hologramas estão na verdade em seu espaço.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. Os hologramas flutuam no espaço ou quando se movem com o usuário não se sentirão reais.Holograms floating in space or moving with the user won't feel as real. Quando possível, coloque os itens em conforto.When possible, place items for comfort.

Visualize superfícies ao colocar ou mover hologramas (use uma grade projetada).Visualize surfaces when placing or moving holograms (use a projected grid). Isso ajuda os usuários a saber onde eles podem posicionar melhor seus hologramas e mostra se o ponto em que eles estão tentando posicionar o holograma não está mapeado.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. Você pode "itens do mural" em direção ao usuário se eles acabarem em muito um ângulo.You can "billboard items" toward the user if they end up at too much of an angle.

Visão geral conceitualConceptual overview

Superfícies de malha que abrangem uma salaMesh surfaces covering a room
Um exemplo de uma malha de mapeamento espacial que abrange uma salaAn example of a spatial mapping mesh covering a room

Os dois tipos de objeto primários usados para o mapeamento espacial são o ' observador de superfície espacial ' e a ' superfície espacial '.The two primary object types used for spatial mapping are the 'Spatial Surface Observer' and the 'Spatial Surface'.

O aplicativo fornece o observador de superfície espacial com um ou mais volumes delimitadores para definir as regiões de espaço em que o aplicativo deseja receber dados de mapeamento espacial.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. Para cada um desses volumes, o mapeamento espacial fornecerá ao aplicativo um conjunto de superfícies espaciais.For each of these volumes, spatial mapping will provide the application with a set of Spatial Surfaces.

Esses volumes podem ser fixos (em um local fixo com base no mundo real) ou podem ser anexados ao HoloLens (eles se movem, mas não giram, com o HoloLens à medida que se movem pelo 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). Cada superfície espacial descreve as superfícies do mundo real em um pequeno volume de espaço, representado como uma malha de triângulo anexada a um sistema de coordenadas espaciaisbloqueados pelo mundo.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.

Como o HoloLens reúne novos dados sobre o ambiente e, à medida que ocorrem alterações no ambiente, as superfícies espaciais aparecerão, desaparecerão e serão alteradas.As the HoloLens gathers new data about the environment, and as changes to the environment occur, spatial surfaces will appear, disappear, and change.

Mapeamento espacial versus WorldMesh de compreensão da cenaSpatial Mapping vs. Scene Understanding WorldMesh

Para o HoloLens 2, é possível consultar uma versão estática dos dados de mapeamento espacial usando o SDK de compreensão da cena (configuração EnableWorldMesh).For HoloLens 2, it's possible to query a static version of the spatial mapping data using Scene understanding SDK (EnableWorldMesh setting). Aqui estão as diferenças entre duas maneiras de acessar os dados de mapeamento espacial:Here are the differences between two ways of accessing the spatial mapping data:

  • API de mapeamento espacial:Spatial Mapping API:
    • Intervalo limitado: os dados de mapeamento espacial disponíveis para aplicativos em um tamanho limitado em cache ' bolha ' em todo o usuário.Limited range: the spatial mapping data available to applications in a limited size cached 'bubble' around the user.
    • Fornece atualizações de baixa latência de regiões de malha alteradas por meio de eventos de Superfícieschanged.Provides low latency updates of changed mesh regions through SurfacesChanged events.
    • Nível variável de detalhes controlado por triângulos por parâmetro de medidor cúbico.Variable level of details controlled by Triangles Per Cubic Meter parameter.
  • SDK de compreensão da cena:Scene understanding SDK:
    • Intervalo ilimitado – fornece todos os dados de mapeamento espacial verificados dentro do raio de consulta.Unlimited range - provides all the scanned spatial mapping data within the query radius.
    • Fornece um instantâneo estático dos dados de mapeamento espacial.Provides a static snapshot of the spatial mapping data. Obter os dados de mapeamento espacial atualizados requer a execução de uma nova consulta para toda a malha.Getting the updated spatial mapping data requires running a new query for the whole mesh.
    • Nível consistente de detalhes controlado pela configuração de RequestedMeshLevelOfDetail.Consistent level of details controlled by RequestedMeshLevelOfDetail setting.

O que influencia a qualidade do mapeamento espacial?What influences spatial mapping quality?

Vários fatores, detalhados aqui, podem afetar a frequência e a severidade desses erros.Several factors, detailed here, can affect the frequency and severity of these errors. No entanto, você deve projetar seu aplicativo para que o usuário possa atingir suas metas mesmo na presença de erros nos dados de mapeamento espacial.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.

Cenários de uso comunsCommon usage scenarios

Ilustrações de cenários de uso de mapeamento espacial comum: posicionamento, oclusão, física e navegação

PosicionamentoPlacement

O mapeamento espacial fornece aos aplicativos a oportunidade de apresentar formas naturais e familiares de interação para o usuário; o que poderia ser mais natural do que colocar seu telefone na mesa?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?

Restringir o posicionamento de hologramas (ou mais geralmente, qualquer seleção de locais espaciais) para se situar em superfícies fornece um mapeamento natural de 3D (ponto no espaço) para 2D (ponto na superfície).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). Isso reduz a quantidade de informações que o usuário precisa fornecer ao aplicativo e torna as interações do usuário mais rápidas, fáceis e mais precisas.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. Isso é verdade porque a "distância" não é algo que estamos acostumados a se comunicar fisicamente com outras pessoas ou computadores.This is true because 'distance away' isn't something that we're used to physically communicating to other people or to computers. Quando apontamos para o dedo, estamos especificando uma direção, mas não uma distância.When we point with our finger, we're specifying a direction but not a distance.

Uma limitação importante aqui é que, quando um aplicativo infere distância da direção (por exemplo, fazendo uma Raycast ao longo da direção do olhar do usuário para encontrar a superfície espacial mais próxima), isso deve produzir resultados que o usuário pode prever de forma confiável.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. Caso contrário, o usuário perderá sua noção de controle e isso pode rapidamente se tornar frustrante.Otherwise, the user will lose their sense of control and this can quickly become frustrating. Um método que ajuda com isso é fazer várias raycasts em vez de apenas uma.One method that helps with this is to do multiple raycasts instead of just one. Os resultados agregados devem ser mais suaves e mais previsíveis, menos suscetíveis a influenciar de resultados transitórios "de exceção" (como pode ser causado por raios que passam por pequenos orifícios ou atingindo pequenos bits de geometria que o usuário não está ciente).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). A agregação ou a suavização também pode ser executada ao longo do tempo; por exemplo, você pode limitar a velocidade máxima na qual um holograma pode variar em distância do usuário.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. Simplesmente limitar o valor de distância mínimo e máximo também pode ajudar, de modo que o holograma que está sendo movido não acabe repentinamente na distância ou venha a falhar novamente na face do usuário.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.

Os aplicativos também podem usar a forma e a direção das superfícies para orientar o posicionamento do holograma.Applications can also use the shape and direction of surfaces to guide hologram placement. Uma cadeira Holographic não deve penetrar através de paredes e deve ficar com o chão, mesmo que seja ligeiramente desigual.A holographic chair shouldn't penetrate through walls and should sit flush with the floor even if it's slightly uneven. Esse tipo de funcionalidade provavelmente dependeria do uso de colisões de física em vez de raycasts, mas questões semelhantes serão aplicadas.This kind of functionality would likely rely upon the use of physics collisions rather than raycasts, however similar concerns will apply. Se o holograma que está sendo posicionado tiver muitos polígonos pequenos que se desdobram, como os lados de uma cadeira, pode fazer sentido expandir a representação física desses polígonos para algo mais largo e suave, de forma que seja mais capaz de deslizar por superfícies espaciais sem realce em captura.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.

Em seu extremo, a entrada do usuário pode ser simplificada de maneira totalmente e as superfícies espaciais podem ser usadas para realizar o posicionamento totalmente automático do holograma.At its extreme, user input can be simplified away entirely and spatial surfaces can be used to do entirely automatic hologram placement. Por exemplo, o aplicativo poderia fazer um interruptor de Holographic em algum lugar na parede para que o usuário pressione.For example, the application could place a holographic light-switch somewhere on the wall for the user to press. A mesma limitação sobre previsibilidade se aplica duplamente; Se o usuário espera o controle sobre o posicionamento do holograma, mas o aplicativo nem sempre coloca os hologramas onde eles esperam (se a opção de luz aparecer em algum lugar que o usuário não consegue alcançar), essa será uma experiência 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. Na verdade, pode ser pior fazer o posicionamento automático que exige a correção do usuário, em vez de exigir que o usuário sempre faça o mesmo posicionamento; como espera-se um posicionamento automático bem-sucedido, a correção manual parece ser um fardo!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!

Observe também que a capacidade de um aplicativo de usar superfícies espaciais para posicionamento depende muito da experiência de verificaçãodo aplicativo.Note also that the ability of an application to use spatial surfaces for placement depends heavily on the application's scanning experience. Se uma superfície não tiver sido verificada, ela não poderá ser usada para posicionamento.If a surface hasn't been scanned, then it cannot be used for placement. Cabe ao aplicativo ficar claro para o usuário, para que eles possam ajudar a examinar novas superfícies ou selecionar um novo local.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.

Os comentários visuais para o usuário são de extrema importância durante o posicionamento.Visual feedback to the user is of paramount importance during placement. O usuário precisa saber onde o holograma é baseado na superfície mais próxima com efeitos de aterramento.The user needs to know where the hologram is based on the nearest surface with grounding effects. Eles devem entender por que a movimentação de seu holograma está sendo restrita (por exemplo, devido a colisões com outra superfície próxima).They should understand why the movement of their hologram is being constrained (for example, because of collisions with another nearby surface). Se eles não conseguirem colocar um holograma no local atual, os comentários visuais devem deixá-lo claro por que não.If they can't place a hologram in the current location, then visual feedback should make it clear why not. Por exemplo, se o usuário estiver tentando posicionar um Holographic sofá preso na parede, as partes do sofá que estão atrás da parede devem pulsater em uma cor irritado.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. Ou inversamente, se o aplicativo não conseguir encontrar uma superfície espacial em um local onde o usuário possa ver uma superfície do mundo real, o aplicativo deverá tornar isso claro.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. A ausência óbvia de um efeito de aterramento nessa área pode atingir essa finalidade.The obvious absence of a grounding effect in this area may achieve this purpose.

OclusãoOcclusion

Um dos principais usos das superfícies de mapeamento espacial é simplesmente para os hologramas occlude.One of the primary uses of spatial mapping surfaces is simply to occlude holograms. Esse comportamento simples tem um grande impacto sobre o realm de hologramas percebido, ajudando a criar um sensor de visceral que realmente inempolga o mesmo espaço físico que o usuário.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.

O oclusão também fornece informações para o usuário; Quando um holograma parece ser obstruídodo por uma superfície do mundo real, isso fornece comentários visuais adicionais sobre o local espacial desse holograma no mundo.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. Por outro lado, o oclusão também pode ocultar informações de forma útil do usuário; os hologramas occluding por trás das paredes podem reduzir a desordem Visual de uma maneira intuitiva.Conversely, occlusion can also usefully hide information from the user; occluding holograms behind walls can reduce visual clutter in an intuitive way. Para ocultar ou revelar um holograma, o usuário precisa apenas mover sua cabeça.To hide or reveal a hologram, the user merely has to move their head.

O oclusão também pode ser usado para obter as principais expectativas de uma interface do usuário natural com base em interações físicas familiares; se um holograma for obstruídodo por uma superfície, isso ocorre porque essa superfície é sólida e, portanto, o usuário deve esperar que o holograma colidirá com essa superfície e não passará por ela.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.

Às vezes, oclusão de hologramas é indesejável.Sometimes, occlusion of holograms is undesirable. Se um usuário precisar interagir com um holograma, ele precisará vê-lo-mesmo que esteja por trás de uma superfície do mundo real.If a user needs to interact with a hologram, then they need to see it - even if it is behind a real-world surface. Nesses casos, geralmente faz sentido renderizar esse holograma de forma diferente quando é obstruído (por exemplo, reduzindo seu brilho).In such cases, it usually makes sense to render such a hologram differently when it's occluded (for example, by reducing its brightness). Dessa forma, o usuário pode visualmente localizar o holograma, mas ainda saberá que está por trás de algo.This way, the user can visually locate the hologram, but they'll still know it's behind something.

FísicaPhysics

O uso da simulação de física é outra maneira na qual o mapeamento espacial pode ser usado para reforçar a presença de hologramas no espaço físico do usuário.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 minha bola de borracha Holographic se acumula Realistamente na minha mesa, passa pelo andar e desaparece sob o sofá, pode ser difícil acreditar que não está lá.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.

A simulação de física também oferece a oportunidade de um aplicativo usar interações baseadas em física e natural.Physics simulation also provides the opportunity for an application to use natural and familiar physics-based interactions. Mover uma peça de mobília de Holographic no chão provavelmente será mais fácil para o usuário se as mobília responderem como se estivessem deslizando em todo o andar com a inércia e a fricção apropriadas.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.

Para gerar comportamentos físicos reais, você provavelmente precisará fazer algum processamento de malha , como o preenchimento de buracos, a remoção de hallucinations flutuantes e a suavização de superfícies de ásperos.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.

Você também precisará considerar como a experiência de verificação do seu aplicativo influencia sua simulação física.You'll also need to consider how your application's scanning experience influences its physics simulation. Em primeiro lugar, as superfícies ausentes não colidirão nada; o que acontece quando a bola de borracha faz o corredor e o final do mundo conhecido?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? Em segundo lugar, você precisa decidir se continuará a responder às alterações no ambiente ao longo do tempo.Secondly, you need to decide whether you'll continue to respond to changes in the environment over time. Em alguns casos, você desejará responder o mais rápido possível; Digamos que se o usuário estiver usando portas e móveis como Barricades móveis em defesa contra uma Tempest de setas romanos de entrada.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. Em outros casos, no entanto, talvez você queira ignorar novas atualizações; dirigir seu carro Holographic em volta ao Racetrack em seu andar pode repentinamente não ser tão divertido se seu cão decidir ficar no meio do controle.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.

Os aplicativos podem usar dados de mapeamento espacial para conceder aos Holographic caracteres (ou agentes) a capacidade de navegar pelo mundo real da mesma maneira que uma pessoa real.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. Isso pode ajudar a reforçar a presença de caracteres Holographic restringindo-os ao mesmo conjunto de comportamentos naturais e conhecidos que os do usuário e seus amigos.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.

Os recursos de navegação também podem ser úteis para os usuários.Navigation capabilities could be useful to users as well. Depois que um mapa de navegação tiver sido criado em uma determinada área, ele poderá ser compartilhado para fornecer instruções de Holographic para novos usuários que não conhecem esse local.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. Esse mapa poderia ser criado para ajudar a manter o tráfego do básicos em trânsito sem problemas, ou para evitar acidentes em locais perigosos, como sites de construção.This map could be designed to help keep pedestrian 'traffic' flowing smoothly, or to avoid accidents in dangerous locations like construction sites.

Os principais desafios técnicos envolvidos na implementação da funcionalidade de navegação serão a detecção confiável de superfícies que poderão ser perfeitas (as pessoas não se movimentam nas tabelas!) e a adaptação normal às alterações no ambiente (as pessoas não percorrem as portas fechadas!).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!). A malha pode exigir algum processamento antes de ser utilizável para o planejamento e a navegação de caminho por um caractere virtual.The mesh may require some processing before it's usable for path-planning and navigation by a virtual character. Suavizar a malha e remover hallucinations pode ajudar a evitar que os caracteres se tornem presos.Smoothing the mesh and removing hallucinations may help avoid characters becoming stuck. Você também pode desejar simplificar drasticamente a malha para acelerar os cálculos de navegação e de planejamento de caminho do caractere.You may also wish to drastically simplify the mesh to speed up your character's path-planning and navigation calculations. Esses desafios receberam muita atenção no desenvolvimento da tecnologia de jogos de vídeo, e há uma infinidade de literatura de pesquisa disponível sobre esses tópicos.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.

A funcionalidade interna NavMesh no Unity não pode ser usada com superfícies de mapeamento espacial.The built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. Isso ocorre porque as superfícies de mapeamento espacial não são conhecidas até que o aplicativo seja iniciado, mas os arquivos de dados de NavMesh precisam ser gerados a partir dos ativos de origem antes do tempo.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. Observe também que, o sistema de mapeamento espacial não fornecerá informações sobre superfícies longe da localização atual do usuário.Also note that, the spatial mapping system won't provide information about surfaces far away from the user's current location. Portanto, o aplicativo deve "se lembrar" dessas superfícies se for criar um mapa de uma área grande.So the application must 'remember' surfaces itself if it's to build a map of a large area.

VisualizaçãoVisualization

Na maioria das vezes, é apropriado que as superfícies espaciais sejam invisíveis; para minimizar a desordem Visual e deixar o mundo real se falar de si mesmo.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. No entanto, às vezes é útil visualizar as superfícies de mapeamento espacial diretamente, apesar de suas contrapartes reais estarem visíveis.However, sometimes it's useful to visualize spatial mapping surfaces directly, despite their real-world counterparts being visible.

Por exemplo, quando o usuário está tentando colocar um holograma em uma superfície (colocando um gabinete Holographic na parede, digamos), pode ser útil "aterrar" o holograma ao converter uma sombra na superfície.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. Isso dá ao usuário um sentido muito mais claro da proximidade física exata entre o holograma e a superfície.This gives the user a much clearer sense of the exact physical proximity between the hologram and the surface. Este também é um exemplo da prática mais geral de ' Visualizar visualmente ' uma alteração antes de o usuário confirmá-la.This is also an example of the more general practice of visually 'previewing' a change before the user commits to it.

Ao visualizar as superfícies, o aplicativo pode compartilhar com o usuário sua compreensão do ambiente.By visualizing surfaces, the application can share with the user its understanding of the environment. Por exemplo, um jogo de tabuleiro de Holographic poderia visualizar as superfícies horizontais identificadas como "tabelas", de modo que o usuário saiba onde elas devem ir para interagir.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.

A visualização de superfícies pode ser uma maneira útil de mostrar os espaços próximos do usuário que estão ocultos na exibição.Visualizing surfaces can be a useful way to show the user nearby spaces that are hidden from view. Isso pode fornecer uma maneira de fornecer ao usuário acesso à sua cozinha (e a todos os seus hologramas contidos) a partir de sua sala de vida.This could provide a way to give the user access to their kitchen (and all of its contained holograms) from their living room.

As malhas de superfície fornecidas pelo mapeamento espacial podem não ser particularmente ' limpas '.The surface meshes provided by spatial mapping may not be particularly 'clean'. É importante visualizá-los adequadamente.It's important to visualize them appropriately. Os cálculos de iluminação tradicionais podem realçar erros em normalidades de superfície de maneira Visual, enquanto as texturas "limpas" projetadas na superfície podem ajudar a dar uma aparência mais organizada.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. Também é possível fazer o processamento de malha para melhorar as propriedades de malha, antes que as superfícies sejam renderizadas.It's also possible to do mesh processing to improve mesh properties, before the surfaces are rendered.

Observação

O HoloLens 2 implementa uma nova cena que entende o tempo de execução, que fornece aos desenvolvedores de realidade misturada uma representação de ambiente estruturada e de alto nível projetada para simplificar a implementação do posicionamento, oclusão, física e de navegação.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.

Usando o observador de superfícieUsing The Surface Observer

O ponto de partida para o mapeamento espacial é o observador de superfície.The starting point for spatial mapping is the surface observer. O fluxo do programa é o seguinte:Program flow is as follows:

  • Criar um objeto de observador de superfícieCreate a surface observer object
    • Forneça um ou mais volumes espaciais para definir as regiões de interesse em que o aplicativo deseja receber dados de mapeamento espacial.Provide one or more spatial volumes, to define the regions of interest in which the application wishes to receive spatial mapping data. Um volume espacial é simplesmente uma forma que define uma região de espaço, como uma esfera ou uma caixa.A spatial volume is simply a shape defining a region of space, such as a sphere or a box.
    • Use um volume espacial com um sistema de coordenadas espaciais bloqueados pelo mundo para identificar uma região fixa do mundo físico.Use a spatial volume with a world-locked spatial coordinate system to identify a fixed region of the physical world.
    • Use um volume espacial, atualizado cada quadro com um sistema de coordenadas espaciais bloqueadas pelo corpo, para identificar uma região de espaço que se move (mas não gira) com o usuário.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.
    • Esses volumes espaciais podem ser alterados posteriormente a qualquer momento, à medida que o status do aplicativo ou do usuário é alterado.These spatial volumes may be changed later at any time, as the status of the application or the user changes.
  • Usar sondagem ou notificação para recuperar informações sobre superfícies espaciaisUse polling or notification to retrieve information about spatial surfaces
    • Você pode ' sondar ' o observador de superfície para o status da superfície espacial a qualquer momento.You may 'poll' the surface observer for spatial surface status at any time. Em vez disso, você pode se registrar para o evento ' superfícies alteradas ' do observador de superfície, que notificará o aplicativo quando as superfícies espaciais forem alteradas.Instead, you may register for the surface observer's 'surfaces changed' event, which will notify the application when spatial surfaces have changed.
    • Para um volume espacial dinâmico, como o modo de exibição frustum ou um volume bloqueado por corpo, os aplicativos precisarão sondar as alterações em cada quadro definindo a região de interesse e, em seguida, obtendo o conjunto atual de superfícies espaciais.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.
    • Para um volume estático, como um cubo protegido por mundo que cobre uma única sala, os aplicativos podem se registrar para que o evento ' superfícies alteradas ' seja notificado quando as superfícies espaciais dentro desse volume podem ter sido alteradas.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.
  • Alterações de superfícies de processoProcess surfaces changes
    • Itere o conjunto de superfícies espaciais fornecido.Iterate the provided set of spatial surfaces.
    • Classifique as superfícies espaciais como adicionadas, alteradas ou removidas.Classify spatial surfaces as added, changed, or removed.
    • Para cada superfície espacial adicionada ou alterada, se apropriado, envie uma solicitação assíncrona para receber a malha atualizada que representa o estado atual da superfície no nível de detalhe desejado.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.
  • Processe a solicitação de malha assíncrona (mais detalhes nas seções a seguir).Process the asynchronous mesh request (more details in following sections).

Cache de malhaMesh Caching

As superfícies espaciais são representadas por malhas de triângulo densas.Spatial surfaces are represented by dense triangle meshes. Armazenar, renderizar e processar essas malhas pode consumir recursos de computação e armazenamento significativos.Storing, rendering, and processing these meshes can consume significant computational and storage resources. Assim, cada aplicativo deve adotar um esquema de cache de malha apropriado às suas necessidades, para minimizar os recursos usados para processamento e armazenamento de malha.As such, each application should adopt a mesh caching scheme appropriate to its needs, to minimize the resources used for mesh processing and storage. Esse esquema deve determinar quais malhas manter e quais descartar e quando atualizar a malha para cada superfície espacial.This scheme should determine which meshes to keep and which to discard, and when to update the mesh for each spatial surface.

Muitas das considerações discutidas aqui informarão diretamente como seu aplicativo deve abordar o cache de malha.Many of the considerations discussed there will directly inform how your application should approach mesh caching. Você deve considerar como o usuário passa pelo ambiente, quais superfícies são necessárias, quando superfícies diferentes serão observadas e quando as alterações no ambiente devem ser capturadas.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.

Ao interpretar o evento "superfícies alteradas" fornecido pelo observador de superfície, a lógica de cache de malha básica é a seguinte:When interpreting the 'surfaces changed' event provided by the surface observer, the basic mesh caching logic is as follows:

  • Se o aplicativo vir uma ID de superfície espacial que ele não viu antes, ele deve tratá-lo como uma nova superfície espacial.If the application sees a spatial surface ID that it hasn't seen before, it should treat this as a new spatial surface.
  • Se o aplicativo vir uma superfície espacial com uma ID conhecida, mas com uma nova hora de atualização, ela deverá tratá-la como uma superfície espacial atualizada.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 o aplicativo não vir mais uma superfície espacial com uma ID conhecida, ele deverá tratá-lo como uma superfície espacial removida.If the application no longer sees a spatial surface with a known ID, it should treat this as a removed spatial surface.

Cabe a cada aplicativo, então, fazer as seguintes escolhas:It's up to each application to then make the following choices:

  • Para novas superfícies espaciais, a malha deve ser solicitada?For new spatial surfaces, should mesh be requested?
    • Geralmente, a malha deve ser solicitada imediatamente para novas superfícies espaciais, o que pode fornecer novas informações úteis ao usuário.Generally mesh should be requested immediately for new spatial surfaces, which may provide useful new information to the user.
    • No entanto, novas superfícies espaciais perto e na frente do usuário devem receber prioridade e sua malha deve ser solicitada primeiro.However, new spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Se a nova malha não for necessária, se, por exemplo, o aplicativo tiver ' congelado ' permanentemente ou temporariamente seu modelo do ambiente, ele não deverá ser solicitado.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.
  • Para superfícies espaciais atualizadas, a malha deve ser solicitada?For updated spatial surfaces, should mesh be requested?
    • As superfícies espaciais atualizadas perto e na frente do usuário devem receber prioridade e sua malha deve ser solicitada primeiro.Updated spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Também pode ser apropriado fornecer prioridade mais alta para novas superfícies do que para superfícies atualizadas, especialmente durante a experiência de verificação.It may also be appropriate to give higher priority to new surfaces than to updated surfaces, especially during the scanning experience.
    • Para limitar os custos de processamento, os aplicativos podem querer limitar a taxa na qual eles processam atualizações em superfícies espaciais.To limit processing costs, applications may wish to throttle the rate at which they process updates to spatial surfaces.
    • Pode ser possível inferir que as alterações em uma superfície espacial sejam secundárias, por exemplo, se os limites da superfície forem pequenos, caso em que a atualização pode não ser importante para ser processada.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.
    • As atualizações para superfícies espaciais fora da região atual de interesse do usuário podem ser ignoradas inteiramente, embora, nesse caso, seja mais eficiente modificar os volumes delimitadores espaciais em uso pelo observador de superfície.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.
  • Para superfícies espaciais removidas, a malha deve ser descartada?For removed spatial surfaces, should mesh be discarded?
    • Em geral, a malha deve ser descartada imediatamente para superfícies espaciais removidas, de forma que o holograma oclusão permaneça correto.Generally mesh should be discarded immediately for removed spatial surfaces, so that hologram occlusion remains correct.
    • No entanto, se o aplicativo tiver motivo para acreditar que uma superfície espacial reaparecerá em breve (com base no design da experiência do usuário), poderá ser mais eficiente mantê-la do que descartar sua malha e recriá-la mais tarde.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 o aplicativo estiver criando um modelo de grande escala do ambiente do usuário, talvez não queira descartar todas as malhas.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. No entanto, ele ainda precisará limitar o uso de recursos, possivelmente colocando em spool as malhas em disco, pois as superfícies espaciais desaparecem.It will still need to limit resource usage though, possibly by spooling meshes to disk as spatial surfaces disappear.
    • Alguns eventos relativamente raros durante a geração de superfície espacial podem fazer com que superfícies espaciais sejam substituídas por novas superfícies espaciais em um local semelhante, mas com IDs diferentes.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. Assim, os aplicativos que optam por não descartar uma superfície removida devem ter cuidado para não terminar com várias malhas de superfícies espaciais altamente sobrepostas que abrangem o mesmo local.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.
  • A malha deve ser descartada para outras superfícies espaciais?Should mesh be discarded for any other spatial surfaces?
    • Mesmo que exista uma superfície espacial, se ela não for mais útil para a experiência do usuário, ela deverá ser descartada.Even while a spatial surface exists, if it's no longer useful to the user's experience then it should be discarded. Por exemplo, se o aplicativo "substituir" a sala do outro lado de um porta com um espaço virtual alternativo, as superfícies espaciais nessa sala não serão mais importantes.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.

Aqui está um exemplo de estratégia de cache de malha, usando histerese espacial e temporal:Here's an example mesh caching strategy, using spatial and temporal hysteresis:

  • Considere um aplicativo que deseja usar um volume de interesse espacial em forma de frustum que segue o olhar do usuário à medida que eles buscam e percorrem.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.
  • Uma superfície espacial pode desaparecer temporariamente desse volume simplesmente porque o usuário fica longe da superfície ou das etapas mais distantes dela... apenas para olhar de volta ou se aproximar mais de um momento mais tarde.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. Nesse caso, descartar e recriar a malha para essa superfície representa muitos processos redundantes.In this case, discarding and re-creating the mesh for this surface represents many redundant processings.
  • Para reduzir o número de alterações processadas, o aplicativo usa dois observadores de superfície espacial, um contido dentro do outro.To reduce the number of changes processed, the application uses two spatial surface observers, one contained within the other. O volume maior é esférico e segue o usuário ' lentamente '; Ele só se move quando necessário para garantir que seu centro esteja dentro de 2,0 metros do usuário.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.
  • As malhas de superfície espacial novas e atualizadas são sempre processadas do observador de superfície interna menor, mas as malhas são armazenadas em cache até que desapareçam do observador de superfície externa maior.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. Isso permite que o aplicativo Evite processar muitas alterações redundantes devido à movimentação de usuário local.This allows the application to avoid processing many redundant changes because of local user movement.
  • Como uma superfície espacial também pode desaparecer temporariamente devido à perda de rastreamento, o aplicativo também adia a descartação de superfícies espaciais removidas durante a perda de rastreamento.Since a spatial surface may also disappear temporarily because of tracking loss, the application also defers discarding removed spatial surfaces during tracking loss.
  • Em geral, um aplicativo deve avaliar a compensação entre o processamento de atualização reduzido e o maior uso de memória para determinar sua estratégia de cache ideal.In general, an application should evaluate the tradeoff between reduced update processing and increased memory usage to determine its ideal caching strategy.

RenderizaçãoRendering

Há três maneiras principais pelas quais as malhas de mapeamento espacial tendem a ser usadas para renderização:There are three primary ways in which spatial mapping meshes tend to be used for rendering:

  • Para visualização de superfícieFor surface visualization
    • Geralmente, é útil Visualizar superfícies espaciais diretamente.It's often useful to visualize spatial surfaces directly. Por exemplo, a conversão de ' Shadows ' de objetos em superfícies espaciais pode fornecer comentários visuais úteis ao usuário enquanto eles estão colocando hologramas em superfícies.For example, casting 'shadows' from objects onto spatial surfaces can provide helpful visual feedback to the user while they're placing holograms on surfaces.
    • Uma coisa a ser lembrada é que as malhas espaciais são diferentes para o tipo de malha que um artista 3D pode criar.One thing to bear in mind is that spatial meshes are different to the kind of meshes that a 3D artist might create. A topologia de triângulo não será tão "limpa" quanto a topologia criada por humanos, e a malha será afetada de vários erros.The triangle topology won't be as 'clean' as human-created topology, and the mesh will suffer from various errors.
    • Para criar uma estética visual agradável, talvez você queira fazer algum processamento de malha, por exemplo, para preencher buracos ou Normals de superfície suave.To create a pleasing visual aesthetic, you may want to do some mesh processing, for example to fill holes or smooth surface normals. Você também pode querer usar um sombreador para projetar texturas criadas pelo artista em sua malha, em vez de Visualizar diretamente a topologia de malha e os normais.You may also wish to use a shader to project artist-designed textures onto your mesh instead of directly visualizing mesh topology and normals.
  • Para os hologramas occluding por trás das superfícies do mundo realFor occluding holograms behind real-world surfaces
    • As superfícies espaciais podem ser renderizadas em uma passagem somente de profundidade, o que afeta apenas o buffer de profundidade e não afeta os destinos de renderização de cor.Spatial surfaces can be rendered in a depth-only pass, which only affects the depth buffer and doesn't affect color render targets.
    • Isso força o buffer de profundidade a occlude subsequentemente processará os hologramas por trás das superfícies espaciais.This primes the depth buffer to occlude subsequently rendered holograms behind spatial surfaces. A oclusão precisa dos hologramas melhora o sentido de que os hologramas realmente existem dentro do espaço físico do usuário.Accurate occlusion of holograms enhances the sense that holograms really exist within the user's physical space.
    • Para habilitar a renderização de profundidade, atualize seu estado de mesclagem para definir o RenderTargetWriteMask como zero para todos os destinos de renderização de cor.To enable depth-only rendering, update your blend state to set the RenderTargetWriteMask to zero for all color render targets.
  • Para modificar a aparência de hologramas obstruído por superfícies do mundo realFor modifying the appearance of holograms occluded by real-world surfaces
    • Normalmente, a geometria renderizada fica oculta quando é obstruído.Normally rendered geometry is hidden when it's occluded. Isso é feito definindo a função Depth em seu estado de estêncil de profundidade como "menor ou igual a", o que faz com que a geometria fique visível apenas onde está mais perto da câmera do que toda a geometria renderizada anteriormente.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.
    • No entanto, pode ser útil manter determinada geometria visível mesmo quando é obstruído e modificar sua aparência quando obstruído como uma forma de fornecer comentários visuais ao usuário.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. Por exemplo, isso permite que o aplicativo mostre ao usuário o local de um objeto, tornando-o claro que está por trás de uma superfície do mundo real.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.
    • Para conseguir isso, renderize a geometria uma segunda vez com um sombreador diferente que cria a aparência desejada de ' obstruído '.To achieve this, render the geometry a second time with a different shader that creates the desired 'occluded' appearance. Antes de renderizar a geometria pela segunda vez, faça duas alterações em seu estado de estêncil de profundidade.Before rendering the geometry for the second time, make two changes to your depth-stencil state. Primeiro, defina a função Depth como "maior que ou igual a" para que a geometria seja visível somente quando ela estiver além da câmera do que toda a geometria renderizada anteriormente.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. Em segundo lugar, defina DepthWriteMask como zero, para que o buffer de profundidade não seja modificado (o buffer de profundidade deve continuar a representar a profundidade da geometria mais próxima da câmera).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).

O desempenho é uma preocupação importante ao renderizar malhas de mapeamento espacial.Performance is an important concern when rendering spatial mapping meshes. Aqui estão algumas técnicas de desempenho de renderização específicas para renderizar malhas de mapeamento espacial:Here are some rendering performance techniques specific to rendering spatial mapping meshes:

  • Ajustar densidade do triânguloAdjust triangle density
    • Ao solicitar malhas de superfície espacial do seu observador de superfície, solicite a menor densidade de malhas de triângulo que será suficiente para suas necessidades.When requesting spatial surface meshes from your surface observer, request the lowest density of triangle meshes that will suffice for your needs.
    • Pode fazer sentido variar a densidade do triângulo em uma superfície por superfície, dependendo da distância da superfície do usuário e de sua relevância para a experiência do usuário.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.
    • Reduzir as contagens de triângulos reduzirá o uso de memória e os custos de processamento de vértice na GPU, embora não afete os custos de processamento de pixel.Reducing triangle counts will reduce memory usage and vertex processing costs on the GPU, though it won't affect pixel processing costs.
  • Usar a remoção de frustumUse frustum culling
    • A remoção de frustum ignora objetos de desenho que não podem ser vistos porque estão fora do frustum de exibição atual.Frustum culling skips drawing objects that cannot be seen because they are outside the current display frustum. Isso reduz os custos de processamento de CPU e GPU.This reduces both CPU and GPU processing costs.
    • Como a remoção é realizada em uma base por malha e as superfícies espaciais podem ser grandes, dividir cada malha de superfície espacial em partes menores pode resultar em uma remoção mais eficiente (na medida em que menos triângulos de fora da tela são renderizados).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). No entanto, há uma compensação; Quanto mais malhas você tiver, mais chamadas de desenho deverão ser feitas, o que pode aumentar os custos de CPU.There's a tradeoff, however; the more meshes you have, the more draw calls you must make, which can increase CPU costs. Em um caso extremo, os próprios cálculos de remoção de frustum podem até mesmo ter um custo de CPU mensurável.In an extreme case, the frustum culling calculations themselves could even have a measurable CPU cost.
  • Ajustar a ordem de renderizaçãoAdjust rendering order
    • As superfícies espaciais tendem a ser grandes, pois representam o ambiente inteiro do usuário em torno delas.Spatial surfaces tend to be large, because they represent the user's entire environment surrounding them. Os custos de processamento de pixel na GPU podem ser altos, especialmente em casos em que há mais de uma camada de geometria visível (incluindo superfícies espaciais e outros hologramas).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). Nesse caso, a camada mais próxima do usuário será occluding as camadas mais distantes, portanto, qualquer tempo de GPU gasto renderizando essas camadas mais distantes é desperdiçado.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.
    • Para reduzir esse trabalho redundante na GPU, ele ajuda a renderizar superfícies opacas na ordem de frente para trás (mais próximas primeiro, mais distantes).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). Por ' opaco ', queremos dizer superfícies para as quais o DepthWriteMask está definido como um em seu estado de estêncil de profundidade.By 'opaque' we mean surfaces for which the DepthWriteMask is set to one in your depth-stencil state. Quando as superfícies mais próximas são renderizadas, elas primem o buffer de profundidade para que as superfícies mais distantes sejam ignoradas com eficiência pelo processador de pixel na 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.

Processamento de malhaMesh Processing

Um aplicativo pode querer realizar várias operações em malhas de superfície espacial para atender às suas necessidades.An application may want to do various operations on spatial surface meshes to suit its needs. Os dados de índice e vértice fornecidos com cada malha de superfície espacial usam o mesmo layout familiar que os buffers de vértice e de índice usados para renderizar malhas de triângulo em todas as APIs de renderização modernas.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. No entanto, um fator importante a ser considerado é que os triângulos de mapeamento espacial têm uma ordem de vento no sentido anti-horário.However, one key fact to be aware of is that spatial mapping triangles have a front-clockwise winding order. Cada triângulo é representado por três índices de vértice no buffer de índice da malha e esses índices identificarão os vértices do triângulo em um pedido no sentido horário , quando o triângulo for exibido do lado frontal .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. O lado frontal (ou externo) de malhas de superfície espacial corresponde à medida que você esperaria para o lado frontal (visível) das superfícies do mundo real.The front side (or outside) of spatial surface meshes corresponds as you would expect to the front (visible) side of real world surfaces.

Os aplicativos só devem realizar a simplificação de malha se a densidade de triângulo mais grosseira fornecida pelo observador de superfície ainda for muito grande: esse trabalho é computacionalmente caro e já está sendo executado pelo tempo de execução para gerar os vários níveis de detalhes fornecidos.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.

Como cada observador de superfície pode fornecer várias superfícies espaciais desconectadas, alguns aplicativos talvez queiram recortar essas malhas de superfície espacial entre si e, em seguida, zipper-las em conjunto.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. Em geral, a etapa de recorte é necessária, pois as malhas de superfície espacial próximas geralmente se sobrepõem ligeiramente.In general, the clipping step is required, as nearby spatial surface meshes often overlap slightly.

Raycasting e colisãoRaycasting and Collision

Para que uma API física (como Havok) forneça um aplicativo com raycasting e funcionalidade de colisão para superfícies espaciais, o aplicativo deve fornecer malhas de superfície espacial para a API física.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. As malhas usadas para a física geralmente têm as seguintes propriedades:Meshes used for physics often have the following properties:

  • Eles contêm apenas pequenos números de triângulos.They contain only small numbers of triangles. As operações de física são mais intensivas em computação do que as operações de renderização.Physics operations are more computationally intensive than rendering operations.
  • Eles são ' d' água.They're 'water-tight'. As superfícies destinadas a serem sólidas não devem ter pequenos buracos; até mesmo os orifícios muito pequenos para serem visíveis podem causar problemas.Surfaces intended to be solid shouldn't have small holes in them; even holes too small to be visible can cause problems.
  • Eles são convertidos em convexa hulls.They're converted into convex hulls. Convexa hulls têm poucos polígonos e são livres de buracos, e são muito mais eficientes em termos de computação do que as malhas de triângulo brutos.Convex hulls have few polygons and are free of holes, and they're much more computationally efficient to process than raw triangle meshes.

Ao fazer raycasts em relação a superfícies espaciais, tenha em mente que essas superfícies são muitas vezes complexas, formas desorganizadas com detalhes de pouco confusos, assim como sua mesa!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! Isso significa que uma única Raycast geralmente é insuficiente para fornecer a você informações suficientes sobre a forma da superfície e a forma do espaço vazio perto dela.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. Geralmente, é uma boa ideia fazer muitas raycasts em uma pequena área e usar os resultados agregados para obter uma compreensão mais confiável da superfície.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. Por exemplo, usar a média de 10 raycasts para orientar o posicionamento do holograma em uma superfície produzirá um resultado muito mais suave e menos "tremulação" que usa apenas um único 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.

No entanto, tenha em mente que cada Raycast pode ter um alto custo computacional.However, bear in mind that each raycast can have a high computational cost. Dependendo do seu cenário de uso, você deve compensar o custo computacional de raycasts extra (feito a cada quadro) em relação ao custo computacional do processamento de malha para suavizar e remover buracos em superfícies espaciais (feitas quando as malhas espaciais são atualizadas).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).

A experiência de verificação do ambienteThe environment scanning experience

Cada aplicativo que usa o mapeamento espacial deve considerar a possibilidade de fornecer uma "experiência de verificação"; o processo pelo qual o aplicativo orienta o usuário a verificar as superfícies necessárias para que o aplicativo funcione corretamente.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.

Exemplo de verificaçãoExample of scanning
Exemplo de verificaçãoExample of scanning

A natureza dessa experiência de verificação pode variar muito dependendo das necessidades de cada aplicativo, mas dois princípios principais devem guiar seu design.The nature of this scanning experience can vary greatly depending upon each application's needs, but two main principles should guide its design.

Em primeiro lugar, a comunicação clara com o usuário é a principal preocupação.Firstly, clear communication with the user is the primary concern. O usuário deve estar sempre atento se os requisitos do aplicativo estão sendo atendidos.The user should always be aware of whether the application's requirements are being met. Quando eles não estão sendo atendidos, deve ser imediatamente claro para o usuário por que isso é feito, e eles devem ser rapidamente acionados para executar a ação apropriada.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.

Em segundo lugar, os aplicativos devem tentar um equilíbrio entre a eficiência e a confiabilidade.Secondly, applications should attempt to strike a balance between efficiency and reliability. Quando é possível fazer isso de forma confiável, os aplicativos devem analisar automaticamente os dados de mapeamento espacial para salvar a hora do usuário.When it's possible to do so reliably, applications should automatically analyze spatial mapping data to save the user time. Quando não é possível fazer isso de forma confiável, os aplicativos devem permitir que o usuário forneça rapidamente o aplicativo com as informações adicionais necessárias.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.

Para ajudar a criar a experiência de verificação correta, considere quais das seguintes possibilidades são aplicáveis ao seu aplicativo:To help design the right scanning experience, consider which of the following possibilities are applicable to your application:

  • Nenhuma experiência de verificaçãoNo scanning experience

    • Um aplicativo pode funcionar perfeitamente sem nenhuma experiência de verificação guiada; Ele aprenderá sobre as superfícies observadas no decorrer do movimento de usuário natural.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.
    • Por exemplo, um aplicativo que permite que o usuário desenhe superfícies com tinta de irrigação Holographic requer conhecimento apenas das superfícies visíveis no momento para o usuário.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.
    • O ambiente pode ser verificado, já que é aquele em que o usuário já gastou muito tempo usando o HoloLens.The environment may be scanned already if it's one in which the user has already spent lots of time using the HoloLens.
    • No entanto, lembre-se de que a câmera usada pelo mapeamento espacial só pode ver 3,1 m na frente do usuário, portanto, o mapeamento espacial não saberá sobre nenhuma superfície mais distante, a menos que o usuário as tenha observado de uma distância mais próxima no passado.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.
    • Portanto, o usuário entende quais superfícies foram verificadas, o aplicativo deve fornecer comentários visuais para esse efeito, por exemplo, converter sombras virtuais em superfícies digitalizadas pode ajudar o usuário a posicionar os hologramas nessas superfícies.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.
    • Nesse caso, os volumes delimitados do observador de superfície espacial devem ser atualizados cada quadro para um sistema de coordenadas espaciaisbloqueadas pelo corpo, para que eles sigam o usuário.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.
  • Encontrar um local adequadoFind a suitable location

    • Um aplicativo pode ser projetado para uso em um local com requisitos específicos.An application may be designed for use in a location with specific requirements.
    • Por exemplo, o aplicativo pode exigir uma área vazia em todo o usuário para que possa praticar com segurança Holographic Kung-Fu.For example, the application may require an empty area around the user so they can safely practice holographic kung-fu.
    • Os aplicativos devem comunicar quaisquer requisitos específicos para o usuário antes e reforce-los com comentários visuais claros.Applications should communicate any specific requirements to the user up-front, and reinforce them with clear visual feedback.
    • Neste exemplo, o aplicativo deve Visualizar a extensão da área vazia necessária e realçar visualmente a presença de qualquer objeto indesejado nessa 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.
    • Para esse caso, os volumes delimitados do observador de superfície espacial devem usar um sistema de coordenadas espaciais bloqueados pelo mundo no local escolhido.For this case, the spatial surface observer's bounding volumes should use a world-locked spatial coordinate system in the chosen location.
  • Encontre uma configuração adequada de superfíciesFind a suitable configuration of surfaces

    • Um aplicativo pode exigir uma configuração específica de superfícies, por exemplo, duas paredes grandes e simples e opostas para criar um Holographic Hall de espelhos.An application may require a specific configuration of surfaces, for example two large, flat, opposing walls to create a holographic hall of mirrors.
    • Nesses casos, o aplicativo precisará analisar as superfícies fornecidas pelo mapeamento espacial para detectar superfícies adequadas e direcionar o usuário para eles.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.
    • O usuário deverá ter uma opção de fallback se a análise da superfície do aplicativo não for confiável.The user should have a fallback option if the application's surface analysis isn't reliable. Por exemplo, se o aplicativo identificar incorretamente um porta como uma parede simples, o usuário precisará de uma maneira simples de corrigir esse erro.For example, if the application incorrectly identifies a doorway as a flat wall, the user needs a simple way to correct this error.
  • Examinar parte do ambienteScan part of the environment

    • Um aplicativo pode desejar capturar apenas parte do ambiente, conforme indicado pelo usuário.An application may wish to only capture part of the environment, as directed by the user.
    • Por exemplo, o aplicativo examina parte de uma sala para que o usuário possa postar um anúncio Holographic classificado para móveis que desejam vender.For example, the application scans part of a room so the user may post a holographic classified ad for furniture they wish to sell.
    • Nesse caso, o aplicativo deve capturar dados de mapeamento espacial dentro das regiões observadas pelo usuário durante a verificação.In this case, the application should capture spatial mapping data within the regions observed by the user during their scan.
  • Verificar a sala inteiraScan the whole room

    • Um aplicativo pode exigir uma verificação de todas as superfícies no espaço atual, incluindo aquelas por trás do usuário.An application may require a scan of all of the surfaces in the current room, including those behind the user.
    • Por exemplo, um jogo pode colocar o usuário na função de Gulliver, sob o Siege de centenas de pequenas Lilliputians abordagens de todas as direções.For example, a game may put the user in the role of Gulliver, under siege from hundreds of tiny Lilliputians approaching from all directions.
    • Nesses casos, o aplicativo precisará determinar quantas superfícies na sala atual já foram verificadas e direcionar o olhar do usuário para preencher lacunas significativas.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.
    • A chave para esse processo é fornecer comentários visuais que o tornam claro para o usuário quais superfícies ainda não foram verificadas.The key to this process is providing visual feedback that makes it clear to the user which surfaces haven't yet been scanned. O aplicativo poderia, por exemplo, usar a neblina baseada em distância para realçar visualmente regiões que não são cobertas por superfícies de mapeamento espacial.The application could, for example, use distance-based fog to visually highlight regions that aren't covered by spatial mapping surfaces.
  • Tirar um instantâneo inicial do ambienteTake an initial snapshot of the environment

    • Um aplicativo pode desejar ignorar todas as alterações no ambiente depois de usar um ' instantâneo ' inicial.An application may wish to ignore all changes in the environment after taking an initial 'snapshot'.
    • Isso pode ser apropriado para evitar a interrupção de dados criados pelo usuário que estejam rigidamente acoplados ao estado inicial do ambiente.This may be appropriate to avoid disruption of user-created data that is tightly coupled to the initial state of the environment.
    • Nesse caso, o aplicativo deve fazer uma cópia dos dados de mapeamento espacial em seu estado inicial quando a verificação for concluída.In this case, the application should make a copy of the spatial mapping data in its initial state once the scan is complete.
    • Os aplicativos devem continuar recebendo atualizações para dados de mapeamento espacial se os hologramas ainda estiverem obstruídodos corretamente pelo ambiente.Applications should continue receiving updates to spatial mapping data if holograms are still to be correctly occluded by the environment.
    • Atualizações continuadas para dados de mapeamento espacial também permitem visualizar todas as alterações que ocorreram, esclarecendo ao usuário as diferenças entre os Estados anterior e o presente do 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.
  • Fazer instantâneos iniciados pelo usuário do ambienteTake user-initiated snapshots of the environment

    • Um aplicativo pode querer responder apenas a alterações ambientais quando instruído pelo usuário.An application may only wish to respond to environmental changes when instructed by the user.
    • Por exemplo, o usuário poderia criar várias ' Statues ' 3D de um amigo capturando suas poses em momentos diferentes.For example, the user could create multiple 3D 'statues' of a friend by capturing their poses at different moments.
  • Permitir que o usuário altere o ambienteAllow the user to change the environment

    • Um aplicativo pode ser projetado para responder em tempo real a quaisquer alterações feitas no ambiente do usuário.An application may be designed to respond in real time to any changes made in the user's environment.
    • Por exemplo, o usuário que desenha um Curtain poderia disparar a "mudança de cena" para uma reprodução de Holographic em andamento no outro lado.For example, the user drawing a curtain could trigger 'scene change' for a holographic play taking place on the other side.
  • Orientar o usuário para evitar erros nos dados de mapeamento espacialGuide the user to avoid errors in the spatial mapping data

    • Um aplicativo pode desejar fornecer orientações ao usuário enquanto eles estão verificando seu ambiente.An application may wish to provide guidance to the user while they're scanning their environment.
    • Isso pode ajudar o usuário a evitar determinados tipos de erros nos dados de mapeamento espacial, por exemplo, mantendo-se afastados das janelas sunlit ou dos espelhos.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.

Um detalhe extra a ser considerado é que o ' intervalo ' de dados de mapeamento espacial não é ilimitado.One extra detail to be aware of is that the 'range' of spatial mapping data isn't unlimited. Embora o mapeamento espacial crie um banco de dados permanente com espaços grandes, ele torna os dados disponíveis apenas para os aplicativos em uma "bolha" de tamanho limitado em relação ao usuário.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 você começar no início de um longo corredor e ir longe o suficiente do início, eventualmente as superfícies espaciais no início desaparecerão.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. Você pode mitigar isso armazenando em cache essas superfícies em seu aplicativo depois que elas desaparecerem dos dados de mapeamento espacial disponíveis.You can mitigate this by caching those surfaces in your application after they've disappeared from the available spatial mapping data.

Processamento de malhaMesh processing

Pode ajudar a detectar tipos comuns de erros em superfícies e filtrar, remover ou modificar os dados de mapeamento espacial conforme apropriado.It may help to detect common types of errors in surfaces and to filter, remove or modify the spatial mapping data as appropriate.

Tenha em mente que os dados de mapeamento espacial devem ser tão fiels quanto possível para superfícies reais, de modo que qualquer processamento que você aplique riscos mudará suas superfícies além da ' verdade '.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'.

Aqui estão alguns exemplos de diferentes tipos de processamento de malha que podem ser úteis:Here are some examples of different types of mesh processing that you may find useful:

  • Preenchimento de orifícioHole filling

    • Se um pequeno objeto formado por um material escuro falhar ao digitalizar, ele deixará um orifício na superfície ao redor.If a small object made of a dark material fails to scan, it will leave a hole in the surrounding surface.
    • Os buracos afetam o oclusão: os hologramas podem ser vistos "por meio de um buraco em uma superfície do mundo real opaca supostamente.Holes affect occlusion: holograms can be seen 'through' a hole in a supposedly opaque real-world surface.
    • Os buracos afetam o raycasts: se você estiver usando o raycasts para ajudar os usuários a interagir com as superfícies, pode ser indesejável que esses raios passem por buracos.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. Uma mitigação é usar um pacote de vários raycasts cobrindo uma região de tamanho adequado.One mitigation is to use a bundle of multiple raycasts covering an appropriately sized region. Isso permitirá que você filtre os resultados de "exceção", de modo que, mesmo que um Raycast passe por uma pequena brecha, o resultado da agregação ainda será válido.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. No entanto, essa abordagem vem com um custo computacional.However, this approach comes at a computational cost.
    • Os buracos afetam as colisões de física: um objeto controlado pela simulação física pode derrubar um orifício no chão e se tornar perdido.Holes affect physics collisions: an object controlled by physics simulation may drop through a hole in the floor and become lost.
    • É possível forma algorítmica o preenchimento desses buracos na malha da superfície.It's possible to algorithmically fill such holes in the surface mesh. No entanto, você precisará ajustar seu algoritmo para que "buracos reais", como Windows e doorways, não sejam preenchidos.However, you'll need to tune your algorithm so that 'real holes' such as windows and doorways don't get filled in. Pode ser difícil diferenciar de forma confiável ' buracos reais ' de ' buracos imaginários ', portanto, você precisará experimentar uma heurística diferente, como ' tamanho ' e ' forma de 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'.
  • Remoção de hallucinationHallucination removal

    • Reflexos, luzes brilhantes e movimentação de objetos podem deixar o ' hallucinations ' remanescente pequeno no ar médio.Reflections, bright lights, and moving objects can leave small lingering 'hallucinations' floating in mid-air.
    • Hallucinations afeta oclusão: hallucinations pode se tornar visível como formas escuras se movendo na frente e occluding outros hologramas.Hallucinations affect occlusion: hallucinations may become visible as dark shapes moving in front of and occluding other holograms.
    • Hallucinations afeta raycasts: se você estiver usando o raycasts para ajudar os usuários a interagir com superfícies, esses raios poderão atingir um hallucination em vez da superfície por trás dele.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. Assim como acontece com os buracos, uma mitigação é usar muitas raycasts em vez de um único Raycast, mas novamente isso será fornecido a um custo computacional.As with holes, one mitigation is to use many raycasts instead of a single raycast, but again this will come at a computational cost.
    • Hallucinations afetam as colisões de física: um objeto controlado pela simulação física pode ficar preso contra um hallucination e não pode passar por uma área de espaço aparentemente nítida.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.
    • É possível filtrar esses hallucinations da malha de superfície.It's possible to filter such hallucinations from the surface mesh. No entanto, assim como com os buracos, você precisará ajustar seu algoritmo para que os objetos reais pequenos, como a lâmpada e os identificadores de porta, não sejam removidos.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.
  • SuavizaçãoSmoothing

    • O mapeamento espacial pode retornar superfícies que parecem ser aproximadas ou "ruidosas" em comparação com suas contrapartes do mundo real.Spatial mapping may return surfaces that appear to be rough or 'noisy' in comparison to their real-world counterparts.
    • A suavidade afeta as colisões de física: se o piso for aproximado, uma bola de golfe fisicamente simulada poderá não ser organizada sem problemas em uma linha reta.Smoothness affects physics collisions: if the floor is rough, a physically simulated golf ball may not roll smoothly across it in a straight line.
    • A suavidade afeta a renderização: se uma superfície for visualizada diretamente, os Normals da superfície aproximada poderão afetar sua aparência e interromper uma aparência "limpa".Smoothness affects rendering: if a surface is visualized directly, rough surface normals can affect its appearance and disrupt a 'clean' look. É possível mitigar isso usando a iluminação e texturas apropriadas no sombreador que é usado para renderizar a superfície.It's possible to mitigate this by using appropriate lighting and textures in the shader that is used to render the surface.
    • É possível suavizar a áspero em uma malha de superfície.It's possible to smooth out roughness in a surface mesh. No entanto, isso pode empurrar a superfície para longe da superfície real correspondente.However, this may push the surface further away from the corresponding real-world surface. Manter uma correspondência próxima é importante para produzir oclusão de holograma precisos e para permitir que os usuários obtenham interações precisas e previsíveis com superfícies holographics.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 apenas uma alteração superficial for necessária, pode ser suficiente para suavizar Normals de vértice sem alterar as posições de vértice.If only a cosmetic change is required, it may be sufficient to smooth vertex normals without changing vertex positions.
  • Localização do planoPlane finding

    • Há muitas formas de análise que um aplicativo pode desejar executar nas superfícies fornecidas pelo mapeamento espacial.There are many forms of analysis that an application may wish to perform on the surfaces provided by spatial mapping.
    • Um exemplo simples é ' Localizar plano '; identificação das regiões de superfícies limitadas, em grande parte.One simple example is 'plane finding'; identifying bounded, mostly planar regions of surfaces.
    • As regiões planar podem ser usadas como superfícies de trabalho Holographic, regiões em que o conteúdo Holographic pode ser colocado automaticamente pelo aplicativo.Planar regions can be used as holographic work-surfaces, regions where holographic content can be automatically placed by the application.
    • As regiões planar podem restringir a interface do usuário, para orientar os usuários a interagir com as superfícies que melhor atendam às suas necessidades.Planar regions can constrain the user interface, to guide users to interact with the surfaces that best suit their needs.
    • As regiões planar podem ser usadas como no mundo real, para contrapartes Holographic a objetos funcionais, como telas de LCD, tabelas ou quadros de comunicações.Planar regions can be used as in the real world, for holographic counterparts to functional objects such as LCD screens, tables or whiteboards.
    • As regiões planar podem definir áreas de reprodução, formando a base dos níveis de jogos de vídeo.Planar regions can define play areas, forming the basis of video game levels.
    • As regiões planar podem ajudar os agentes virtuais a navegar pelo mundo real, identificando as áreas de piso que as pessoas realmente têm a probabilidade de acompanhar.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.

Protótipo e depuraçãoPrototyping and debugging

Ferramentas úteisUseful tools

  • O emulador do HoloLens pode ser usado para desenvolver aplicativos usando o mapeamento espacial sem acesso a um HoloLens físico.The HoloLens emulator can be used to develop applications using spatial mapping without access to a physical HoloLens. Ele permite simular uma sessão ao vivo em um HoloLens em um ambiente realista, com todos os dados que seu aplicativo normalmente consumiria, incluindo movimento de HoloLens, sistemas de coordenadas espaciais e malhas de mapeamento espacial.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. Isso pode ser usado para fornecer entradas confiáveis e reproduzíveis, que podem ser úteis para depurar problemas e avaliar alterações em seu código.This can be used to provide reliable, repeatable input, which can be useful for debugging problems and evaluating changes to your code.
  • Para reproduzir um cenário, Capture dados de mapeamento espacial pela rede de um HoloLens ao vivo e, em seguida, salve-os no disco e reutilize-os em sessões de depuração posteriores.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.
  • O modo de exibição 3D do portal de dispositivo do Windows fornece uma maneira de ver todas as superfícies espaciais disponíveis atualmente por meio do sistema de mapeamento espacial.The Windows device portal 3D view provides a way to see all of the spatial surfaces currently available via the spatial mapping system. Isso fornece uma base de comparação para as superfícies espaciais dentro de seu aplicativo; por exemplo, você pode identificar facilmente se alguma superfície espacial está ausente ou sendo exibida no local errado.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.

Diretrizes gerais de protótipoGeneral prototyping guidance

  • Como os erros nos dados de mapeamento espacial podem afetar seriamente a experiência do usuário, recomendamos que você teste seu aplicativo em uma ampla variedade de ambientes.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.
  • Não se preocupe com o hábito de testar sempre no mesmo local, por exemplo, em sua mesa.Don't get trapped in the habit of always testing in the same location, for example at your desk. Certifique-se de testar várias superfícies de diferentes posições, formas, tamanhos e materiais.Make sure to test on various surfaces of different positions, shapes, sizes, and materials.
  • Da mesma forma, embora os dados sintéticos ou registrados possam ser úteis para depuração, não se tornem muito dependentes dos mesmos casos de teste.Similarly, while synthetic or recorded data can be useful for debugging, don't become too reliant upon the same few test cases. Isso pode atrasar a localização de problemas importantes que os testes mais variados teriam detectados anteriormente.This may delay finding important issues that more varied testing would have caught earlier.
  • É uma boa ideia executar testes com usuários reais (e, teoricamente, iniguals), porque eles não podem usar o HoloLens ou seu aplicativo exatamente da mesma maneira que você.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. Na verdade, ele pode surpreender você como o comportamento, o conhecimento e as suposições das pessoas podem ser divergentes!In fact, it may surprise you how divergent people's behavior, knowledge, and assumptions can be!

Solução de problemasTroubleshooting

  • Para que as malhas de superfície sejam orientadosdas corretamente, cada gameobject precisa estar ativo antes de ser enviado para o SurfaceObserver para que sua malha seja construída.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. Caso contrário, as malhas serão exibidas no seu espaço, mas giradas em ângulos estranhos.Otherwise, the meshes will show up in your space but rotated at weird angles.
  • O gameobject que executa o script que se comunica com o SurfaceObserver precisa ser definido para a origem.The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. Caso contrário, todos os GameObjects que você criar e enviar para o SurfaceObserver ter suas malhas construídas terão um deslocamento igual ao deslocamento do objeto do jogo pai.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. Isso pode fazer com que suas malhas mostrem vários medidores de distância, o que dificulta a depuração do que está acontecendo.This can make your meshes show up several meters away, which makes it hard to debug what is going on.

Consulte tambémSee also