Configurações recomendadas para Unity
Unity fornece um conjunto de opções padrão que geralmente são o caso médio para todas as plataformas. No entanto, 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 de 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 fones de ouvido 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 até o nível de qualidade **Muito baixo.
Configurações de iluminação
À semelhança das definições de cena de Qualidade, é importante definir as definições de Iluminação ideais para a sua aplicação de Realidade Mista. No Unity, a configuração de iluminação que geralmente terá o maior impacto no desempenho da sua cena é a iluminação global em tempo real. Pode desativar a Iluminação Global acedendo a Definições de Iluminação de Renderização de Janelas>>>em Iluminação Global em Tempo Real.
Há outro cenário de iluminação, Baked Global Illumination. Essa configuração pode fornecer resultados de desempenho e visualmente impressionantes em fones de ouvido imersivos, mas não é aplicável para o 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.
Nota
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 instanciação em uma única passagem
Em aplicações 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 calculado. É importante selecionar o caminho de renderização mais eficiente no Unity para economizar tempo de CPU e GPU. A renderização com 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.
Para habilitar esse recurso em seu projeto Unity
- Abra Configurações do OpenXR (vá para Editar>Configurações do>Projeto XR Plugin Management>OpenXR).
- Selecione Single Pass Instanced 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 RV com renderização estéreo avançada
- Instanciação de Passe Único
Nota
Um problema comum com a renderização de instância de passagem única ocorre se os desenvolvedores já tiverem sombreadores personalizados existentes não escritos para substituição. Depois de ativar esse recurso, os desenvolvedores podem notar 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 instancing.
Habilitar o compartilhamento de buffer de profundidade
Para obter uma melhor estabilidade do holograma a partir da perceção do usuário, é recomendável habilitar a propriedade Depth Buffer Sharing 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.
Para habilitar esse recurso em seu projeto Unity
- Abra Configurações do OpenXR (vá para Editar>Configurações do>Projeto XR Plugin Management>OpenXR).
- Selecione Profundidade de 16 bits no menu suspenso Modo de envio de profundidade.
A configuração do buffer de profundidade de 16 bits é especialmente recomendada para o desenvolvimento do HoloLens. Selecionar 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 isto, a otimização vem com um certo custo. Certifique-se de que compreende 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 do buffer de profundidade ativado, é importante ao renderizar cores também renderizar a profundidade. No Unity, a maioria dos materiais Opaque ou TransparentCutout renderizará profundidade por padrão, mas objetos transparentes e de texto não renderizarão profundidade, embora isso dependa de sombreadores e outros fatores.
Se estiver usando o sombreador Mixed Reality Toolkit Standard, para renderizar profundidade para objetos transparentes:
- Selecione o material transparente que está usando o sombreador MRTK Standard e abra a janela do editor do Inspetor
- Selecione o botão Corrigir agora dentro do aviso de compartilhamento de buffer de profundidade. Isso também pode ser feito manualmente, definindo o Modo de renderização como Personalizado, depois defina Modo como Transparente e, finalmente, defina Profundidade de gravação como Ativado
Importante
Os desenvolvedores devem ter cuidado com o Z-fighting ao alterar esses valores, juntamente com as configurações do 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 cintilação entre dois objetos de jogo enquanto lutam pelo mesmo valor de profundidade z. Isso pode ser resolvido mudando para o formato de profundidade de 24 bits, pois haverá uma faixa maior de valores para cada objeto para calcular 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 intervalo menor e manter o formato de profundidade de 16 bits. A profundidade z é mapeada não linearmente 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 do plano de recorte próximo ou distante para reduzir seu alcance (ou seja, de 1000m a 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.
Construindo para IL2CPP
O Unity preteriu o suporte para o back-end de script .NET e, portanto, recomenda que os desenvolvedores utilizem IL2CPP para suas compilações do estúdio visual UWP. Embora isso traga várias vantagens, a criação de sua solução de estúdio visual a partir do Unity for IL2CPP pode ser mais lenta do que o antigo método .NET. Assim, é altamente recomendável seguir as melhores práticas para construir IL2CPP para economizar tempo de iteração de desenvolvimento.
- Aproveite a construção incremental criando seu projeto para o mesmo diretório sempre, reutilizando os arquivos pré-construídos lá
- Desative as verificações de software antimalware para o seu projeto & compilar pastas
- Abra a Proteção contra Vírus e ameaças no 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 de compilação
- Use um SSD para construir
Leia Otimizando tempos de compilação para IL2CPP para obter mais informações.
Nota
Além disso, pode ser benéfico configurar um servidor de cache, especialmente para projetos Unity com uma grande quantidade de ativos (excluindo arquivos de script) ou cenas / ativos em constante mudança. Ao abrir um projeto, o Unity armazena ativos qualificados em um formato de cache interno na máquina do desenvolvedor. Os produtos devem ser reimportados e, por conseguinte, transformados 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 cada desenvolvedor processar a reimportação de novas alterações localmente.
Propriedades de publicação
Ecrã inicial holográfico
O HoloLens tem uma CPU e GPU de classe móvel, o que significa que as aplicações podem demorar um pouco mais a carregar. Enquanto o aplicativo está carregando, os usuários verão apenas preto, e assim eles 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>Configurações>do Projeto Player
- Selecione o separador Loja Windows e abra a secção Imagem inicial
- Aplique sua imagem sob a propriedade Windows Holographic > Holographic Splash Image .
- Alternar a opção Mostrar tela inicial Unity ativará ou desativará 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 de abertura holográfica for aplicada, ela sempre será exibida se a caixa de seleção Mostrar tela inicial de unidade estiver ativada ou desativada. 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 | Nenhuma | 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 ecrã inicial personalizado durante 5 segundos ou até a aplicação ser carregada, consoante o que for mais longo. |
Inativo | Nenhuma | Mostrar preto transparente (nada) até que o aplicativo seja carregado. |
Inativo | Personalizado | Mostrar ecrã inicial personalizado durante 5 segundos ou até a aplicação ser carregada, consoante o que for mais longo. |
Leia a documentação da tela inicial do Unity para obter mais informações.
Perda de rastreamento
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 funciona.
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 perda de rastreamento 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 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>Configurações>do Projeto Player
- Selecione no separador Loja Windows e abra a secção Imagem inicial
- Aplique sua imagem sob a 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 de 360 graus) ou podem precisar continuar o processamento ininterruptamente enquanto o rastreamento é perdido. Você pode desativar a perda padrão do comportamento de rastreamento, mas é responsável por ocultar/desabilitar quaisquer objetos, que não seriam renderizados 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>configurações>do projeto Player
- Selecione o separador Loja Windows e abra a secção Imagem inicial
- Modifique a caixa de seleção Windows Holographic On Tracking Loss Pause and Show Image (Pausar e Mostrar imagem) holográfica > do Windows.
Rastreando eventos de perda
Para definir o comportamento personalizado quando o rastreamento é perdido, manipule os eventos de perda de rastreamento global.
Capacidades
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 de projetos futuros.
Os recursos podem ser habilitados para um aplicativo de Realidade Mista:
- Vá para a página Editar>Configurações>do Projeto Player
- Selecione o separador Loja Windows, abra a secção Definições de Publicação e procure a lista Capacidades
Os recursos aplicáveis para habilitar as APIs comumente usadas para aplicativos holográficos são:
Funcionalidade | APIs que exigem capacidade |
---|---|
Perceção Espacial | SurfaceObserver |
WebCam | PhotoCapture e VideoCapture |
ImagensBiblioteca / VídeosBiblioteca | 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) |