Configurações recomendadas do Unity
Unity fornece um conjunto de opções padrão que geralmente são o caso médio para todas as plataformas. No entanto, o Unity oferece alguns comportamentos específicos para a realidade mista que podem ser alternados através das configurações do projeto.
Configuração de ambiente com desempenho
Configurações de baixa qualidade
É importante modificar as configurações de Qualidade Unity para Muito Baixo para que seu aplicativo seja executado e tenha um bom desempenho na taxa de quadros apropriada, especialmente para o desenvolvimento do HoloLens. Para o desenvolvimento em headsets imersivos, dependendo das especificações do desktop que alimenta a experiência VR, ainda é possível alcançar a taxa de quadros sem os parâmetros de qualidade mais baixos.
No Unity 2019 LTS+, você pode definir o nível de qualidade do projeto indo para Editar>qualidade das configurações>do projeto e definindo o padrão clicando na seta para baixo para o nível de qualidade **Muito baixa.
Configurações de iluminação
Semelhante às configurações de cena de qualidade, é importante definir as configurações de iluminação ideais para seu aplicativo de realidade mista. No Unity, a configuração de Iluminação que geralmente terá o maior impacto de desempenho em sua cena é a Iluminação Global em Tempo Real. Você pode desativar a Iluminação Global acessando Configurações de Iluminação de Renderização>de Janelas>, Iluminação>Global em Tempo Real.
Há outro cenário de iluminação, Baked Global Illumination. Essa configuração pode fornecer resultados eficientes e visualmente impressionantes em fones de ouvido imersivos, mas não é aplicável ao desenvolvimento do HoloLens. Baked Global Illumination é calculado apenas para GameObjects estáticos, que não são encontrados em cenas HoloLens devido à natureza de um ambiente desconhecido e em mudança.
Leia Global Illumination da Unity para obter mais informações.
Observação
Realtime Global Illumination é definido por cena e, portanto, os desenvolvedores devem salvar essa propriedade para cada cena Unity em seu projeto.
Caminho de renderização de instância de passagem única
Em aplicativos de Realidade Mista, a cena é renderizada duas vezes: uma para cada olho. Em comparação com o desenvolvimento 3D tradicional, isso efetivamente dobra a quantidade de trabalho que precisa ser computada. É importante selecionar o caminho de renderização mais eficiente no Unity para economizar tempo de CPU e GPU. A renderização de instância de passagem única otimiza o pipeline de renderização Unity para aplicativos de realidade mista; Recomendamos que você habilite essa configuração por padrão para cada projeto.
Como habilitar esse recurso no seu projeto do Unity
- Abra as Configurações do OpenXR (acesse Editar>Configurações do Projeto>Gerenciamento de Plug-ins do XR>OpenXR).
- Selecione Instância de Passagem Única no menu suspenso Modo de Renderização.
Leia os seguintes artigos do Unity para obter mais detalhes sobre essa abordagem de renderização.
- Como maximizar o desempenho de RA e VR com a renderização avançada de estéreo
- Instância de passagem única
Observação
Um problema comum na renderização com uma instância de passagem única ocorre se os desenvolvedores já têm sombreadores personalizados existentes não escritos para a criação de instância. Depois de habilitar esse recurso, os desenvolvedores poderão perceber que alguns GameObjects são renderizados apenas em um olho. Isso ocorre porque os sombreadores personalizados associados não têm as propriedades apropriadas para a criação de instância.
Habilitar o compartilhamento de buffer de profundidade
Para obter uma melhor estabilidade do holograma a partir da percepção do usuário, é recomendável habilitar a propriedade Compartilhamento de buffer de profundidade no Unity. Ao ativar isso, o Unity compartilhará o mapa de profundidade produzido pelo seu aplicativo com a plataforma Windows Mixed Reality. A plataforma pode então otimizar melhor a estabilidade do holograma especificamente para sua cena para qualquer quadro que esteja sendo renderizado pelo seu aplicativo.
Como habilitar esse recurso no seu projeto do Unity
- Abra as Configurações do OpenXR (acesse Editar>Configurações do Projeto>Gerenciamento de Plug-ins do XR>OpenXR).
- Selecione Profundidade de 16 bits no menu suspenso Modo de envio de profundidade.
A configuração de buffer de profundidade de 16 bits é especialmente recomendada para o desenvolvimento do HoloLens. A seleção de 16 bits em comparação com 24 bits reduzirá significativamente os requisitos de largura de banda, pois menos dados precisarão ser movidos/processados. Dito isso, a otimização vem com certo custo. Certifique-se de entender as implicações mencionadas nas caixas Importantes abaixo.
Para que a plataforma Windows Mixed Reality otimize a estabilidade do holograma, ela depende do buffer de profundidade para ser precisa e corresponder a qualquer holograma renderizado na tela. Assim, com o compartilhamento de buffer de profundidade ativado, é importante ao renderizar cores também renderizar profundidade. No Unity, a maioria dos materiais Opaco ou TransparentCutout renderizará a profundidade por padrão, mas os objetos transparentes e de texto não renderizarão a profundidade, embora isso dependa de sombreadores e outros fatores.
Se estiver usando o sombreador Mixed Reality Toolkit Standard, para renderizar a profundidade de objetos transparentes:
- Selecione o material transparente que está usando o sombreador MRTK Standard e abra a janela do editor do Inspector
- Selecione o botão Corrigir agora no aviso de compartilhamento de buffer de profundidade. Isso também pode ser feito manualmente, definindo o Modo de Renderização como Personalizado, depois defina o Modo comoTransparente e, finalmente, defina Gravação de Profundidade como Ativado
Importante
Os desenvolvedores devem tomar cuidado com o Z-fighting ao alterar esses valores junto com as configurações de plano próximo/distante da câmera. Z-Fighting ocorre quando dois objetos de jogo tentam renderizar para o mesmo pixel e devido a limitações na fidelidade do buffer de profundidade (ou seja, profundidade z), Unity não consegue discernir qual objeto está na frente do outro. Os desenvolvedores notarão uma oscilação entre dois objetos de jogo enquanto lutam pelo mesmo valor de profundidade z. Isso pode ser resolvido alternando para o formato de profundidade de 24 bits, pois haverá uma faixa maior de valores para cada objeto a ser calculado para sua profundidade z da câmera.
No entanto, recomenda-se, particularmente para o desenvolvimento do HoloLens, modificar os planos próximos e distantes da câmera para um alcance menor e manter o formato de profundidade de 16 bits. A profundidade z é mapeada de forma não linear para a faixa de valores ao longo dos planos de câmera próximos e distantes. Isso pode ser modificado selecionando a Câmera Principal em sua cena e, em Inspetor, altere os valores de Plano de Recorte Próximo e Distante para reduzir seu alcance (ou seja, de 1000m para 100m ou outro valor x, etc.)
Importante
O Unity não cria um buffer de estêncil ao usar o formato de profundidade de 16 bits. Assim, alguns efeitos da interface do usuário Unity e outros efeitos necessários para estêncil não funcionarão, a menos que o formato de profundidade de 24 bits seja selecionado, o que criará um buffer de estêncil de 8 bits.
Construção para IL2CPP
O Unity substituiu o suporte para o back-end de script .NET e, portanto, recomenda que os desenvolvedores utilizem IL2CPP para suas compilações do Visual Studio UWP. Embora isso traga várias vantagens, a criação de sua solução de estúdio visual a partir do Unity para IL2CPP pode ser mais lenta do que o antigo método .NET. Assim, é altamente recomendável seguir as práticas recomendadas para criar IL2CPP para economizar no tempo de iteração de desenvolvimento.
- Aproveite a criação incremental criando seu projeto para o mesmo diretório sempre, reutilizando os arquivos pré-criados lá
- Desativar varreduras de software antimalware para seu projeto e pastas de compilação
- Abra a proteção contra vírus e ameaças em seu aplicativo de configurações do Windows 10
- Selecione Gerenciar configurações em Configurações de proteção contra vírus e ameaças
- Selecione Adicionar ou remover exclusões na seção Exclusões
- Selecione Adicionar uma exclusão e selecione a pasta que contém o código do projeto Unity e as saídas da compilação
- Usar um SSD para criar
Leia Otimizando tempos de compilação para IL2CPP para obter mais informações.
Observação
Além disso, pode ser benéfico configurar um Servidor de Cache, especialmente para projetos do Unity com uma grande quantidade de ativos (excluindo arquivos de script) ou que estejam constantemente alterando cenas/ativos. Ao abrir um projeto, o Unity armazena os ativos qualificados em um formato de cache interno no computador do desenvolvedor. Os itens precisam ser importados novamente e, assim, processados novamente quando modificados. Esse processo pode ser feito uma vez e salvo em um Servidor de Cache e, consequentemente, compartilhado com outros desenvolvedores para economizar tempo, em vez de todos os desenvolvedores processarem a nova importação de novas alterações localmente.
Propriedades de publicação
Tela inicial holográfica
O HoloLens tem uma CPU e GPU de classe móvel, o que significa que os aplicativos podem demorar um pouco mais para carregar. Enquanto o aplicativo está carregando, os usuários verão apenas preto e, portanto, podem se perguntar o que está acontecendo. Para tranquilizá-los durante o carregamento, você pode adicionar uma tela inicial holográfica.
Para alternar a tela inicial holográfica:
- Vá para a página Editar>Player de Configurações> do Projeto
- Selecione a guia Windows Store e abra a seção Imagem inicial
- Aplique sua imagem na propriedade Windows Holographic > Holographic Splash Image .
- Alternar a opção Mostrar tela inicial Unity ativará ou desabilitará a tela inicial da marca Unity. Se você não tiver uma licença Unity Pro, a tela inicial da marca Unity sempre será exibida.
- Se uma imagem inicial holográfica for aplicada, ela sempre será exibida se a caixa de seleção Mostrar tela inicial do Unity estiver habilitada ou desabilitada. A especificação de uma imagem inicial holográfica personalizada só está disponível para desenvolvedores com uma licença Unity Pro.
Mostrar tela inicial do Unity | Imagem Holográfica Splash | Comportamento |
---|---|---|
Ativado | Nenhum | Mostrar a tela inicial padrão do Unity por 5 segundos ou até que o aplicativo seja carregado, o que for mais longo. |
Ativado | Personalizado | Mostrar tela inicial personalizada por 5 segundos ou até que o aplicativo seja carregado, o que for mais longo. |
Desativado | Nenhum | Mostrar preto transparente (nada) até que o aplicativo seja carregado. |
Desativado | Personalizado | Mostrar tela inicial personalizada por 5 segundos ou até que o aplicativo seja carregado, o que for mais longo. |
Leia a documentação da Tela inicial do Unity para obter mais informações.
Controle de perda
Um fone de ouvido de realidade mista depende de ver o ambiente ao seu redor para construir sistemas de coordenadas bloqueados pelo mundo, que permitem que os hologramas permaneçam na posição. Quando o fone de ouvido é incapaz de se localizar no mundo, diz-se que o fone de ouvido perdeu o rastreamento. Nesses casos, a funcionalidade dependente de sistemas de coordenadas bloqueados pelo mundo, como estágios espaciais, âncoras espaciais e mapeamento espacial, não funcionam.
Se ocorrer uma perda de rastreamento, o comportamento padrão do Unity é parar de renderizar hologramas, pausar o loop do jogo e exibir uma notificação de rastreamento perdido que segue confortavelmente o olhar dos usuários. Notificações personalizadas também podem ser fornecidas na forma de uma imagem de perda de rastreamento. Para aplicativos que dependem do rastreamento para toda a sua experiência, é suficiente permitir que o Unity lide com isso inteiramente até que o rastreamento seja recuperado. Os desenvolvedores podem fornecer uma imagem personalizada para ser mostrada durante a perda de rastreamento.
Para personalizar a imagem perdida de rastreamento:
- Vá para a página Editar>Player de Configurações> do Projeto
- Selecione na guia Windows Store e abra a seção Imagem inicial
- Aplique sua imagem na propriedade Windows Holographic > Tracking Loss Image .
Desativação da pausa automática
Alguns aplicativos podem não exigir rastreamento (por exemplo, aplicativos somente de orientação, como visualizadores de vídeo em 360 graus) ou podem precisar continuar o processamento ininterrupto enquanto o rastreamento é perdido. Você pode desativar o comportamento padrão de perda de rastreamento, mas é responsável por ocultar/desabilitar quaisquer objetos, o que não seria renderizado corretamente em um cenário de perda de rastreamento. Na maioria dos casos, o único conteúdo que é recomendado para ser renderizado nesse caso é o conteúdo bloqueado pelo corpo, centrado em torno da câmera principal.
Para desativar o comportamento de pausa automática:
- Vá para a página Editar>Player de Configurações> do Projeto
- Selecione a guia Windows Store e abra a seção Imagem inicial
- Modifique a caixa de seleção Windows Holographic > On Tracking Loss Pause and Show Image (Pausa na perda de controle do Windows) e mostre a caixa de seleção .
Rastreando eventos de perda
Para definir o comportamento personalizado quando o rastreamento é perdido, manipule os eventos globais de perda de rastreamento.
Funcionalidades
Para que um aplicativo aproveite determinadas funcionalidades, ele deve declarar os recursos apropriados em seu manifesto. As declarações de manifesto podem ser feitas no Unity para que sejam incluídas em todas as exportações futuras de projetos.
Os recursos podem ser habilitados para um aplicativo de Realidade Mista ao:
- Vá para a página Editar>Player de Configurações> do Projeto
- Selecione a guia Windows Store, abra a seção Configurações de Publicação e procure a lista Recursos
Os recursos aplicáveis para habilitar as APIs comumente usadas para aplicativos holográficos são:
Funcionalidade | APIs que exigem capacidade |
---|---|
SpatialPerception | SuperfícieObservador |
Webcam | PhotoCapture e VideoCapture |
PicturesLibrary / VideosLibrary | PhotoCapture ou VideoCapture, respectivamente (ao armazenar o conteúdo capturado) |
Microfone | VideoCapture (ao capturar áudio), DictationRecognizer, GrammarRecognizer e KeywordRecognizer |
InternetClient | DictationRecognizer (e para usar o Unity Profiler) |