Definições recomendadas para o Unity

O Unity fornece um conjunto de opções predefinidas que são geralmente o caso médio para todas as plataformas. No entanto, o Unity oferece alguns comportamentos específicos da realidade mista que podem ser alternados através das definições do projeto.

Configuração do ambiente de desempenho

Definições de baixa qualidade

É importante modificar as definições de Qualidade do Unity para Muito Baixa para que a sua aplicação seja executada e tenha um bom desempenho na velocidade de frame adequada, especialmente para o desenvolvimento do HoloLens. Para o desenvolvimento em headsets envolventes, dependendo das especificações do ambiente de trabalho que alimenta a experiência vr, ainda se pode alcançar a velocidade de frame sem os parâmetros de qualidade mais baixos.

No Unity 2019 LTS+, pode definir o nível de qualidade do projeto ao aceder a Editar>Qualidade dasDefinições> do Projeto e definir a Predefinição ao clicar na seta para baixo para o nível **Muito baixa qualidade.

Definições de iluminação

À semelhança das definições de cena de Qualidade, é importante definir definições de Iluminação ideais para a sua aplicação de Mixed Reality. No Unity, a definição Iluminação que normalmente terá o maior impacto no desempenho no seu cenário é a Iluminação Global em Tempo Real. Podedesativar> a Iluminação Global ao aceder aDefinições> de Iluminação de Composição de Janelas> IluminaçãoEm Tempo Real Iluminação Global.

Há outro cenário de iluminação, Iluminação Global Assada. Esta definição pode fornecer resultados apelativos e visualmente apelativos em headsets envolventes, mas não é aplicável para o desenvolvimento do HoloLens. A Iluminação Global Assada só é calculada para GameObjects estáticos, que não são encontrados em cenas do HoloLens devido à natureza de um ambiente desconhecido e em mudança.

Leia a Iluminação Global do Unity para obter mais informações.

Nota

A Iluminação Global em Tempo Real é definida por cenário e, por conseguinte, os programadores têm de guardar esta propriedade para cada cena do Unity no seu projeto.

Caminho de composição de instancing de passagem única

Em Mixed Reality aplicações, a cena é composta duas vezes: uma para cada olho. Em comparação com o desenvolvimento 3D tradicional, isto duplica efetivamente a quantidade de trabalho que precisa de ser calculada. É importante selecionar o caminho de composição mais eficiente no Unity para poupar no tempo da CPU e da GPU. A composição de instâncias de passe único otimiza o pipeline de composição do Unity para aplicações de realidade mista; recomendamos que ative esta definição por predefinição para cada projeto.

Para ativar esta funcionalidade no projeto do Unity

  1. Abra As Definições openXR (aceda a Editar>Definições> do ProjetoXR Gestão de Plug-ins>OpenXR).
  2. Selecione Single Pass Instanced (Instâncias de Passagem Única ) no menu pendente Modo de Composição .

Leia os seguintes artigos do Unity para obter mais detalhes sobre esta abordagem de composição.

Nota

Um problema comum com a Composição de Instâncias de Passagem Única ocorre se os programadores já tiverem sombreados personalizados existentes não escritos para instancing. Depois de ativar esta funcionalidade, os programadores podem reparar que alguns GameObjects são compostos apenas num olho. Isto deve-se ao facto de os sombreados personalizados associados não terem as propriedades adequadas para o instancing.

Veja Composição Estéreo de Passagem Única para HoloLens do Unity para saber como resolver este problema

Ativar a partilha da memória intermédia de profundidade

Para obter uma melhor estabilidade do holograma a partir da perceção do utilizador, recomenda-se ativar a propriedade Partilha de Memória Intermédia de Profundidade no Unity. Ao ativar esta opção, o Unity partilhará o mapa de profundidade produzido pela sua aplicação com a plataforma Windows Mixed Reality. Em seguida, a plataforma pode otimizar melhor a estabilidade do holograma especificamente para a sua cena para qualquer frame que esteja a ser composto pela sua aplicação.

Para ativar esta funcionalidade no projeto do Unity

  1. Abra As Definições openXR (aceda a Editar>Definições> do ProjetoXR Gestão de Plug-ins>OpenXR).
  2. Selecione Profundidade 16 Bits no menu pendente Modo de Submissão de Profundidade .

A definição da memória intermédia 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, uma vez que menos dados terão de ser movidos/processados. Dito isto, a otimização vem com um determinado 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, depende da memória intermédia de profundidade para ser precisa e corresponder a todos os hologramas compostos no ecrã. Assim, com a partilha da memória intermédia de profundidade ativada, é importante ao compor cor para também compor profundidade. No Unity, a maioria dos materiais Opaco ou TransparenteCutout compõem profundidade por predefinição, mas os objetos transparentes e de texto não compõem profundidade, embora isso dependa de sombreados e outros fatores.

Se estiver a utilizar o sombreado Mixed Reality Toolkit Standard, para compor a profundidade de objetos transparentes:

  1. Selecione o material transparente que está a utilizar o sombreado Padrão do MRTK e abra a janela do editor Inspetor
  2. Selecione o botão Corrigir Agora no aviso de partilha da memória intermédia de profundidade. Isto também pode ser executado manualmente ao definir o Modo de Composição como Personalizado; em seguida, defina Modo como Transparente e, por fim, defina Escrita de Profundidade como Ativado

Importante

Os programadores devem ter cuidado com a luta de Z ao alterar estes valores, juntamente com as definições de plano próximo/distante da câmara. O Z-Fighting ocorre quando dois gameobjects tentam compor para o mesmo píxel e devido a limitações na fidelidade da memória intermédia de profundidade (isto é, profundidade z), o Unity não consegue discernir que objeto está à frente do outro. Os programadores irão observar uma cintilação entre dois objetos de jogo enquanto lutam pelo mesmo valor de profundidade z. Isto pode ser resolvido ao mudar para o formato de profundidade de 24 bits, uma vez que existirá um intervalo de valores maior para cada objeto calcular para a respetiva profundidade z a partir da câmara.

No entanto, recomenda-se, especialmente para o desenvolvimento do HoloLens, modificar os planos próximos e distantes da câmara para um intervalo mais pequeno e manter o formato de profundidade de 16 bits. A profundidade z é mapeada de forma não linear para o intervalo de valores ao longo dos planos de câmara próximos e distantes. Isto pode ser modificado selecionando a Câmara Principal no seu cenário e, em Inspetor, altere os valores Plano de Recorte Distante & Próximo para reduzir o intervalo (ou seja, de 1000 m para 100 m ou outro valor x, etc.)

Importante

O Unity não cria uma memória intermédia de stencil ao utilizar o formato de profundidade de 16 bits. Assim, alguns efeitos da IU do Unity e outros efeitos necessários para o stencil não funcionarão, a menos que esteja selecionado um formato de profundidade de 24 bits que irá criar uma memória intermédia de stencil de 8 bits.

Edifício para IL2CPP

O Unity preteriu o suporte para o back-end de scripting .NET e, por isso, recomenda que os programadores utilizem IL2CPP para as respetivas compilações do Visual Studio UWP. Embora isto traga várias vantagens, a criação da sua solução do Visual Studio a partir do Unity para IL2CPP pode ser mais lenta do que o método .NET antigo. Assim, é altamente recomendado seguir as melhores práticas para criar IL2CPP para poupar no tempo de iteração de desenvolvimento.

  1. Tire partido da criação incremental ao criar sempre o seu projeto para o mesmo diretório, reutilizando os ficheiros pré-criados lá
  2. Desativar análises de software antimalware para o projeto & pastas de compilação
    • Abra a proteção contra ameaças contra vírus & na sua aplicação de definições de Windows 10
    • Selecione Gerir Definições em Definições de proteção contra ameaças de vírus &
    • Selecione Adicionar ou remover exclusões na secção Exclusões
    • Selecione Adicionar uma exclusão e selecione a pasta que contém o código do projeto do Unity e as saídas de compilação
  3. Utilizar um SSD para criar

Leia Otimizar os Tempos de Compilação para IL2CPP para obter mais informações.

Nota

Além disso, pode ser vantajoso configurar um Servidor de Cache, especialmente para projetos do Unity com uma grande quantidade de recursos (excluindo ficheiros de script) ou cenas/recursos em constante mudança. Ao abrir um projeto, o Unity armazena recursos elegíveis num formato de cache interna no computador do programador. Os itens têm de ser importados novamente e, por conseguinte, reprocessados quando modificados. Este processo pode ser feito uma vez e guardado num Servidor de Cache e, consequentemente, partilhado com outros programadores para poupar tempo, em vez de todos os programadores que processam a importaçã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 a aplicação está a ser carregada, os utilizadores apenas verão preto e, por isso, podem perguntar-se o que se passa. Para tranquilizá-los durante o carregamento, pode adicionar um ecrã inicial holográfico.

Para ativar/desativar o ecrã inicial holográfico:

  1. Acedaà páginaEditar>Leitor de Definições> do Projeto
  2. Selecione o separador Loja Windows e abra a secção Imagem do Splash
  3. Aplique a sua imagem na propriedade Windows Holographic Holographic > Splash Image .
    • Ativar ou desativar a opção Mostrar Ecrã Inicial do Unity irá ativar ou desativar o ecrã inicial da marca Unity. Se não tiver uma licença do Unity Pro, o ecrã inicial da marca Unity será sempre apresentado.
    • Se for aplicada uma Imagem splash holográfica , será sempre apresentada se a caixa de verificação Mostrar Ecrã Inicial do Unity está ativada ou desativada. Especificar uma imagem inicial holográfica personalizada só está disponível para programadores com uma licença do Unity Pro.
Mostrar Ecrã Inicial do Unity Imagem de Salpicos Holográficos Comportamento
Ativado Nenhuma Mostrar o ecrã inicial do Unity predefinido durante 5 segundos ou até a aplicação ser carregada, o que for mais longo.
Ativado Personalizado Mostrar ecrã inicial personalizado durante 5 segundos ou até a aplicação ser carregada, o que for mais longo.
Desativado Nenhuma Mostrar preto transparente (nada) até a aplicação ser carregada.
Desativado Personalizado Mostrar ecrã inicial personalizado durante 5 segundos ou até a aplicação ser carregada, o que for mais longo.

Leia a documentação do Ecrã Splash do Unity para obter mais informações.

Controlar a perda

Um headset de Realidade mista depende de ver o ambiente à sua volta para construir sistemas de coordenadas protegidos pelo mundo, que permitem que os hologramas permaneçam na posição. Quando o headset não se consegue localizar no mundo, diz-se que os auscultadores perderam o controlo. Nestes casos, as funcionalidades dependentes de sistemas de coordenadas com bloqueio mundial, tais como fases espaciais, âncoras espaciais e mapeamento espacial, não funcionam.

Se ocorrer uma perda de controlo, o comportamento predefinido do Unity é parar a composição de hologramas, colocar o ciclo do jogo em pausa e apresentar uma notificação de controlo perdida que segue confortavelmente o olhar dos utilizadores. As notificações personalizadas também podem ser fornecidas sob a forma de uma imagem de perda de controlo. Para aplicações que dependem do controlo para toda a sua experiência, é suficiente permitir que o Unity processe isto inteiramente até que o controlo seja recuperado. Os programadores podem fornecer uma imagem personalizada para ser apresentada durante a perda de controlo.

Para personalizar a imagem de controlo perdida:

  1. Acedaà páginaEditar>Leitor de Definições> do Projeto
  2. Selecione no separador Loja Windows e abra a secção Imagem do Splash
  3. Aplique a sua imagem na propriedade Windows Holographic > Tracking Loss Image .

Optar ativamente por não participar na pausa automática

Algumas aplicações podem não necessitar de controlo (por exemplo, aplicações apenas de orientação , como visualizadores de vídeo de 360 graus) ou podem ter de continuar a processar sem interrupções enquanto o controlo é perdido. Pode optar ativamente por não participar na perda predefinida do comportamento de controlo, mas é responsável por ocultar/desativar quaisquer objetos, o que não seria composto corretamente num cenário de perda de controlo. Na maioria dos casos, o único conteúdo recomendado para ser composto nesse caso é o conteúdo bloqueado pelo corpo, centrado em torno da câmara principal.

Para optar ativamente por não participar no comportamento de pausa automática:

  1. Acedaà páginaEditar>Leitor de Definições> do Projeto
  2. Selecione o separador Loja Windows e abra a secção Imagem do Splash
  3. Modifique a caixa de verificação Pausa de Perda do Windows Holographic > On Tracking e Mostrar Imagem .

Controlar eventos de perda

Para definir o comportamento personalizado quando o controlo é perdido, processe os eventos de perda de controlo global.

Capacidades

Para que uma aplicação tire partido de determinadas funcionalidades, tem de declarar as capacidades adequadas no seu manifesto. As declarações de manifesto podem ser feitas no Unity para que sejam incluídas em todas as exportações de projetos futuras.

As capacidades podem ser ativadas para uma aplicação Mixed Reality ao:

  1. Acedaà páginaEditar>Leitor de Definições> do Projeto
  2. Selecione o separador Loja Windows, abra a secção Definições de Publicação e procure a lista Capacidades

As capacidades aplicáveis para ativar as APIs utilizadas frequentemente para aplicações holográficas são:

Funcionalidade APIs que requerem capacidade
SpatialPerception SurfaceObserver
WebCam PhotoCapture e VideoCapture
PicturesLibrary/VideosLibrary PhotoCapture ou VideoCapture, respetivamente (ao armazenar o conteúdo capturado)
Microfone VideoCapture (ao capturar áudio), DictationRecognizer, GrammarRecognizer e KeywordRecognizer
InternetClient DictationRecognizer (e para utilizar o Unity Profiler)

Ver também