Observador de compreensão de cenas – MRTK2
O Scene Understanding devolve uma representação semântica de entidades de cena, bem como as suas formas geométricas no HoloLens 2 (o HoloLens 1.ª Geração não é suportado).
Alguns casos de utilização esperados desta tecnologia são:
- Colocar objetos na superfície mais próxima de um determinado tipo (por exemplo, parede e chão)
- Construir uma malha de navegação para jogos de estilo de plataforma
- Fornecer geometria amiga do motor físico como quads
- Acelere o desenvolvimento evitando a necessidade de escrever algoritmos semelhantes
O Scene Understanding é introduzido como uma funcionalidade experimental no MRTK 2.6. Está integrado no MRTK como um observador espacial chamado WindowsSceneUnderstandingObserver
. O Scene Understanding funciona tanto com o pipeline XR Legado como com o pipeline do SDK XR (openXR (a partir do MRTK 2.7) e o Plug-in do Windows XR). Em ambos os casos, o WindowsSceneUnderstandingObserver
é utilizado.
Nota
A utilização do Scene Understanding no Remoting só é suportada no MRTK 2.7.3 e superior. Apenas são suportados projetos com o OpenXR. Os projetos que utilizam o pipeline XR Legado ou o Plug-in do Windows XR não são suportados.
Descrição geral do Observador
Quando solicitado, o WindowsSceneUnderstandingObserver
devolverá SpatialAwarenessSceneObject com atributos úteis para que a aplicação compreenda o seu ambiente. A frequência de observação, o tipo de objeto devolvido (por exemplo, parede, piso) e outros comportamentos de observador dependem da configuração do observador através do perfil. Por exemplo, se a máscara de oclusão for pretendida, o observador tem de ser configurado para gerar quads. A cena observada pode ser guardada como um ficheiro serializado que pode ser carregado posteriormente para recriar a cena no modo de reprodução do editor.
Configuração
Importante
O Scene Understanding só é suportado no HoloLens 2 e no Unity 2019.4 e superior.
- Certifique-se de que a plataforma está definida como UWP nas definições de compilação.
- Adquira o pacote Deteção de Cenários através da Ferramenta de Funcionalidades do Mixed Reality.
Utilizar a Compreensão de Cenas
A forma mais rápida de começar a utilizar o Scene Understanding é ver a cena de exemplo.
Cena de exemplo de Compreensão de Cenas
No Unity, utilize o Project Explorer para abrir o ficheiro de cena no Examples/Experimental/SceneUnderstanding/Scenes/SceneUnderstandingExample.unity
e prima play!
Importante
Aplica-se apenas ao MRTK 2.6.0 - Ao utilizar a Ferramenta de Funcionalidades de Mixed Reality ou ao importar através do UPM, importe o exemplo Demos - SpatialAwareness antes de importar o exemplo Experimental - SceneUnderstanding devido a um problema de dependência. Veja este problema do GitHub para obter mais informações.
A cena demonstra o seguinte:
- Visualização de Objetos de Cena observados com na IU da aplicação para configurar o observador
- Script de exemplo
DemoSceneUnderstandingController
que mostra como alterar as definições do observador e ouvir eventos relevantes - Guardar dados de cena no dispositivo para desenvolvimento offline
- Carregar dados de cena guardados anteriormente (ficheiros.bytes) para suportar o fluxo de trabalho de desenvolvimento no editor
Importante
Por predefinição, a ShouldLoadFromFile
propriedade do observador está definida como falsa. Para ver a visualização de uma sala de exemplo serializada, consulte a secção configurar o serviço observador abaixo e defina a propriedade como verdadeira no editor.
Nota
A cena de exemplo baseia-se no pipeline XR Legado. Se estiver a utilizar o pipeline do SDK XR, deverá modificar os perfis em conformidade. O perfil do Sistema de Sensibilização Espacial () e os perfis do Scene Understanding Observer (DemoSceneUnderstandingSystemProfile
DefaultSceneUnderstandingObserverProfile
e DemoSceneUnderstandingObserverProfile
) são compatíveis com ambos os pipelines.
Nota
A cena de exemplo regista um There is no active AsyncCoroutineRunner when an action is posted.
aviso em determinadas circunstâncias devido à ordem de execução de inicialização/thread. Se conseguir confirmar que o AsyncCoroutineRunner
componente está anexado ao GameObject "Controlador de Demonstração" e o componente/GameObject permanecer ativado/ativo na cena (o caso predefinido), o aviso pode ser ignorado em segurança.
No entanto, ao criar uma nova cena com o Scene Understanding, certifique-se de que cria um GameObject vazio na raiz e anexa o AsyncCoroutineRunner
script à mesma, caso contrário, a Compreensão do Cenário poderá não funcionar corretamente.
Configurar o serviço de observadores
Selecione o objeto de jogo "MixedRealityToolkit" e verifique o inspetor.
Estas opções permitirão que alguém configure o WindowsSceneUnderstandingObserver
.
Script de exemplo
O script de exemplo DemoSceneUnderstandingController.cs demonstra os principais conceitos de trabalho com o serviço DemoSceneUnderstandingController.cs .
- Subscrever eventos do Scene Understanding
- Processar eventos de Compreensão de Cenas
- Configurar o
WindowsSceneUnderstandingObserver
no runtime
Os alternadores no painel na cena alteram o comportamento do observador de compreensão de cenas ao chamar as funções públicas deste script de exemplo.
Ativar o Instantiate Prefabs, irá demonstrar a criação de objetos com esse tamanho para se ajustarem a todos os SpatialAwarenessSceneObject, recolhidos cuidadosamente sob um objeto principal.
Notas de aplicação criadas
Crie e implemente no HoloLens da forma padrão. Uma vez em execução, deverá ser apresentado um número de botões para reproduzir com as funcionalidades.
Tenha em atenção que existem algumas falhas na realização de consultas ao observador. A configuração incorreta de um pedido de obtenção resulta num payload de eventos que não contém os dados esperados. Por exemplo, se não se pedir quads, não estarão presentes texturas de máscaras de oclusão. Tal como é sensato, nenhuma malha mundial aparecerá se o observador não estiver configurado para pedir malhas. O DemoSceneUnderstandingController
script trata de algumas destas dependências, mas não de todas.
Os ficheiros de cena guardados podem ser acedidos através do portal do dispositivo em User Folders/LocalAppData/[APP_NAME]/LocalState/PREFIX_yyyyMMdd_hhmmss.bytes
. Estes ficheiros de cena podem ser utilizados no editor ao especificá-los no perfil de observador encontrado no inspetor.