Configurações recomendadas do UnityRecommended settings for Unity

O Unity fornece um conjunto de opções padrão que geralmente são o caso médio de todas as plataformas.Unity provides a set of default options that are generally the average case for all platforms. No entanto, o Unity oferece alguns comportamentos específicos para a realidade misturada que pode ser alternada por meio de configurações do projeto.However, Unity offers some behaviors specific to mixed reality that can be toggled through project settings.

Configuração de ambiente de alto desempenhoPerformant environment set-up

Configurações de baixa qualidadeLow quality settings

É importante modificar as configurações de qualidade do Unity para o seu ambiente para muito baixo.It is important to modify the Unity Quality settings for your environment to Very Low. Isso ajudará a garantir que seu aplicativo esteja executando o forma definitiva na taxa de quadros apropriada.This will help ensure your application is running performantly at the appropriate framerate. Isso é extremamente significativo para o desenvolvimento de HoloLens.This is extremely significant for HoloLens development. Para o desenvolvimento de headsets de imersão, dependendo das especificações do desktop capacitando a experiência VR, ainda é possível obter uma taxa de quadros sem os parâmetros de qualidade mais baixos.For development on immersive headsets, depending on the specs of the desktop powering the VR experience, one can still achieve framerate without the lowest quality parameters.

No Unity 2019 LTS +, o nível de qualidade do projeto pode ser definido indo para Editar > configurações do projeto > qualidade e definindo o padrão clicando na seta para baixo para o nível de qualidade muito baixo .In Unity 2019 LTS+, the project's quality level can be set by going to Edit > Project Settings > Quality and setting the Default by clicking on the downward arrow to the Very Low quality level.

Configurações de iluminaçãoLighting settings

De forma semelhante às configurações de cena de qualidade, é importante definir as configurações de iluminação ideais para seu aplicativo de realidade misturada.Similar to Quality scene settings, it is important to set optimal Lighting settings for your Mixed Reality application. No Unity, a configuração de iluminação que geralmente terá o maior impacto no desempenho em sua cena é a iluminação global em tempo real.In Unity, the Lighting setting that will usually have the greatest performance impact on your scene is Realtime Global Illumination. Isso pode ser desativado com a ativação de janela > Rendering > configurações de iluminaçãoem > tempo realpara iluminação global.This can be turned off by going under Window > Rendering > Lighting Settings > Realtime Global Illumination.

Há outra configuração de iluminação, inclusas global iluminação.There is another lighting setting, Baked Global Illumination. Essa configuração pode fornecer resultados de desempenho e visualmente surpreendentes em headsets de imersão, mas geralmente não é aplicável para o desenvolvimento de HoloLens.This setting can provide performant and visually striking results on immersive headsets but is generally not applicable for HoloLens development. Inclusas global Illumniation só é calculado para Gameobjects estáticos que geralmente não são encontrados em cenas de HoloLens devido à natureza de um ambiente desconhecido e em constante alteração.Baked Global Illumniation is only calculated for static GameObjects which are generally not found in HoloLens scenes due to the nature of an unknown and changing environment.

Leia a iluminação global do Unity para obter mais informações.Please read Global Illumination from Unity for more information.

Observação

A iluminação global em tempo real é definida por cena e, portanto, os desenvolvedores devem salvar essa propriedade para cada cena do Unity em seu projeto.Realtime Global Illumination is set per-scene and thus developers must save this property for every Unity scene in their project.

Caminho de renderização de instância única de passagemSingle pass instancing rendering path

Em aplicativos de realidade misturada, a cena é renderizada duas vezes, uma vez para cada olho para o usuário.In Mixed Reality applications, the scene is rendered twice, once for each eye to the user. Em comparação com o desenvolvimento 3D tradicional, isso efetivamente dobra a quantidade de trabalho que precisa ser computada.Compared to traditional 3D development, this effectively doubles the amount of work that needs to be computed. Portanto, é importante selecionar o caminho de renderização mais eficiente no Unity para economizar tanto na CPU quanto no tempo da GPU.Thus, it is important to select the most efficient rendering path in Unity to save both on CPU and GPU time. A renderização de passagem única em instância otimiza o pipeline de renderização do Unity para aplicativos de realidade misturada e, portanto, é recomendável habilitar essa configuração por padrão para cada projeto.Single pass instanced rendering optimizes the Unity rendering pipeline for Mixed Reality apps and thus it is recommended to enable this setting by default for every project.

Como habilitar esse recurso no seu projeto do UnityTo enable this feature in your Unity Project

  1. Abra Configurações de XR do Player (acesse Editar > Configurações do Projeto > Player > Configurações de XR)Open Player XR Settings (go to Edit > Project Settings > Player > XR Settings)
  2. Selecione Instância de Passagem Única no menu suspenso Método de Renderização de Estéreo (a caixa de seleção Realidade Virtual Compatível precisa estar marcada)Select Single Pass Instanced from the Stereo Rendering Method drop-down menu (Virtual Reality Supported checkbox must be checked)

Leia os artigos a seguir do Unity para obter mais detalhes com essa abordagem de renderização.Read the following articles from Unity for more details with this rendering approach.

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.One common issue with Single Pass Instanced Rendering occurs if developers already have existing custom shaders not written for instancing. Depois de habilitar esse recurso, os desenvolvedores poderão perceber que alguns GameObjects são renderizados apenas em um olho.After enabling this feature, developers may notice some GameObjects only render in one eye. Isso ocorre porque os sombreadores personalizados associados não têm as propriedades apropriadas para a criação de instância.This is because the associated custom shaders do not have the appropriate properties for instancing.

Confira Renderização de estéreo de passagem única para o HoloLens do Unity para saber como resolver esse problemaSee Single Pass Stereo Rendering for HoloLens from Unity for how to address this problem

Habilitar compartilhamento de buffer de profundidadeEnable depth buffer sharing

Para obter uma melhor estabilidade de holograma da percepção do usuário, é recomendável habilitar a propriedade de compartilhamento de buffer de profundidade no Unity.To achieve better hologram stability from the perception of the user, it is recommended to enable the Depth Buffer Sharing property in Unity. Ao ativar essa ação, o Unity compartilhará o mapa de profundidade produzido por seu aplicativo com a plataforma Windows Mixed Reality.By turning this on, Unity will share the depth map produced by your application with the Windows Mixed Reality platform. A plataforma então será capaz de otimizar melhor a estabilidade do holograma especificamente para sua cena para qualquer determinado quadro que esteja sendo renderizado pelo seu aplicativo.The platform will then be able to better optimize hologram stability specifically for your scene for any given frame being rendered by your application.

Como habilitar esse recurso no seu projeto do UnityTo enable this feature in your Unity Project

  1. Abra Configurações de XR do Player (acesse Editar > Configurações do Projeto > Player > Configurações de XR)Open Player XR Settings (go to Edit > Project Settings > Player > XR Settings)
  2. Marque a caixa de seleção para habilitar o compartilhamento de buffer de profundidade em SDKs da realidade virtual > Windows misto expansão de realidade (a caixa de seleçãocom suporte da realidade virtual deve estar marcada)Select the checkbox for Enable Depth Buffer Sharing under Virtual Reality SDKs > Windows Mixed Reality expansion (Virtual Reality Supported checkbox must be checked)

Além disso, é recomendável selecionar profundidade de 16 bits na configuração de formato de profundidade neste painel, especialmente para o desenvolvimento de HoloLens.Further, it is recommended to select 16-bit depth under the Depth Format setting in this panel, especially for HoloLens Development. A seleção de 16 bits em comparação a 24 bits reduzirá significativamente os requisitos de largura de banda, pois menos dados precisarão ser movidos/processados.Selecting 16-bit compared to 24-bit will significantly reduce the bandwidth requirements as less data will need to be moved/processed.

Para que a plataforma Windows Mixed Reality Otimize a estabilidade do holograma, ela depende do buffer de profundidade para ser preciso e corresponder a qualquer holograma renderizado na tela.In order for the Windows Mixed Reality platform to optimize hologram stability, it relies on the depth buffer to be accurate and match any rendered holograms on screen. Portanto, com o compartilhamento de buffer de profundidade ativado, é importante ao renderizar a cor, para também renderizar a profundidade.Thus, with depth buffer sharing on, it is important when rendering color, to also render depth. No Unity, a maioria dos materiais opacos ou TransparentCutouts renderizará profundidade por padrão, mas os objetos de texto e transparente geralmente não renderizarão a profundidade, embora isso seja dependente de sombreador, etc.In Unity, most Opaque or TransparentCutout materials will render depth by default but transparent and text objects will generally not render depth although this is shader dependent, etc.

Se estiver usando o sombreador standard do kit de ferramentas do reality, para renderizar a profundidade para objetos transparentes:If using the Mixed Reality Toolkit Standard shader, to render depth for transparent objects:

  1. Selecione o material transparente que está usando o sombreador padrão MRTK e abra a janela do editor de InspetorSelect the transparent material that is using the MRTK Standard shader and open the Inspector editor window
  2. Selecione o botão corrigir agora dentro do aviso de compartilhamento de buffer de profundidade.Select the Fix Now button within the depth buffer sharing warning. Isso também pode ser executado manualmente definindo o modo de renderização como personalizado; em seguida, defina modo como transparente e, por fim, defina a gravação de profundidade como onThis can also be performed manually by setting the Rendering Mode to Custom; then set Mode to Transparent and finally set Depth Write to On

Importante

Os desenvolvedores devem ter cuidado com o combate ao Z ao alterar esses valores juntamente com as configurações de plano próximo/longe da câmera.Developers should beware of Z-fighting when changing these values along with the camera's near/far plane settings. O combate ao Z ocorre quando dois Gameobjects tentam renderizar para o mesmo pixel e devido a limitações na fidelidade do buffer de profundidade (ou seja,Z-Fighting occurs when two gameobjects try to render to the same pixel and due to limitations in fidelity of the depth buffer (i.e z Depth), Unity não pode distinguir qual objeto está na frente do outro.z depth), Unity cannot discern which object is in front of the other. Os desenvolvedores notarão uma cintilação entre dois objetos de jogo à medida que eles lutarem pelo mesmo valor de profundidade z.Developers will note a flickering between two game objects as they fight for the same z-depth value. Isso pode ser resolvido alternando para o formato de profundidade de 24 bits, pois haverá um intervalo maior de valores para cada objeto a ser calculado para a profundidade z da câmera.This can be solved by switching to 24-bit depth format as there will be a larger range of values for each object to calculate upon for their z-depth from the camera.

No entanto, é recomendável, especialmente para o desenvolvimento de HoloLens, modificar os planos próximos e distantes da câmera para um intervalo menor, em vez disso, manter o formato de profundidade de 16 bits.However, it is recommended, particularly for HoloLens development, to modify the camera's near and far planes to a smaller range instead and retain the 16-bit depth format. A profundidade z é mapeada de forma não linear para o intervalo de valores nos planos de câmera próximos e distantes.The z-depth is non-linearly mapped to the range of values along the near and far camera planes. Isso pode ser modificado selecionando a câmera principal em sua cena e, em Inspetor, alterar os valores de plano de recorte próximo & longe para reduzir seu intervalo (ou seja,This can be modified by selecting the Main Camera in your scene and under Inspector, change the Near & Far Clipping Plane values to reduce their range (i.e de 1000m para 100 ms ou outro valor x, etc.)from 1000m to 100m or other x value, etc.)

Importante

O Unity não cria um buffer de estêncil ao usar o formato de profundidade de 16 bits.Unity does not create a stencil buffer when using 16-bit depth format. Assim, alguns efeitos de interface do usuário do Unity e outros efeitos requeridos pelo estêncil não funcionarão a menos que o formato de profundidade de 24 bits esteja selecionado, o que criará um buffer de estêncil de 8 bits.Thus, some Unity UI effects and other stencil-required effects will not work unless 24-bit depth format is selected which will create an 8-bit stencil buffer.

Compilando para IL2CPPBuilding for IL2CPP

O Unity preteriu o suporte para o back-end de script do .NET e, portanto, recomenda que os desenvolvedores utilizem o IL2CPP para suas compilações do Visual Studio UWP.Unity has deprecated support for the .NET scripting backend and thus recommends that developers utilize IL2CPP for their UWP visual studio builds. Embora isso traga várias vantagens, a criação de sua solução do Visual Studio a partir do Unity para IL2CPP pode ser significativamente mais lenta do que o antigo método .net.Although this brings various advantages, building your visual studio solution from Unity for IL2CPP can be significantly slower than the old .NET method. Portanto, é altamente recomendável seguir as práticas recomendadas para a criação de IL2CPP para economizar em tempo de iteração de desenvolvimento.Thus, it is highly recommended to follow best practices for building IL2CPP to save on development iteration time.

  1. Aproveite a criação incremental criando seu projeto no mesmo diretório a cada vez, reutilizando os arquivos predefinidos aliLeverage incremental building by building your project to the same directory every time, re-using the pre-built files there
  2. Desabilitar verificações de software antimalware para seu projeto & criar pastasDisable anti-malware software scans for your project & build folders
    • Abra o vírus & proteção contra ameaças em seu aplicativo de configurações do Windows 10Open Virus & threat protection under your Windows 10 settings app
    • Selecione gerenciar configurações em vírus & ameaças proteção configuraçõesSelect Manage Settings under Virus & threat protection settings
    • Selecione Adicionar ou remover exclusões na seção exclusõesSelect Add or remove exclusions under the Exclusions section
    • Clique em Adicionar uma exclusão e selecione a pasta que contém o código do projeto de Unity e as saídas de compilaçãoClick Add an exclusion and select the folder containing your Unity project code and build outputs
  3. Utilizar um SSD para compilaçãoUtilize an SSD for building

Leia otimizando os tempos de compilação para IL2CPP para obter mais informações.Please read Optimizing Build Times for IL2CPP for more info.

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.Furthermore, it may be beneficial to setup a Cache Server, especially for Unity projects with a large amount of assets (excluding script files) or constantly changing scenes/assets. Ao abrir um projeto, o Unity armazena os ativos qualificados em um formato de cache interno no computador do desenvolvedor.When opening a project, Unity stores qualifying assets into an internal cache format on the developer machine. Os itens precisam ser importados novamente e, assim, processados novamente quando modificados.Items must be re-imported and thus re-processed when modified. 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.This process can be done once and saved in a Cache Server and consequently shared with other developers to save time, instead of every developer processing the re-import of new changes locally.

Propriedades de publicaçãoPublishing properties

Tela inicial do HolographicHolographic splash screen

O HoloLens tem uma CPU e uma GPU de classe móvel, o que significa que os aplicativos podem demorar um pouco mais para carregar.HoloLens has a mobile-class CPU and GPU, which means apps may take a bit longer to load. Enquanto o aplicativo estiver sendo carregado, os usuários verão apenas preto e, portanto, poderão imaginar o que está acontecendo.While the app is loading, users will just see black, and so they may wonder what's going on. Para assegurá-los durante o carregamento, você pode adicionar uma tela inicial do Holographic.To reassure them during loading, you can add a holographic splash screen.

Para alternar a tela inicial do Holographic:To toggle the holographic splash screen:

  1. Ir para Edita página Editar configurações do > projeto > PlayerGo to Edit > Project Settings > Player page
  2. Clique na guia Windows Store e abra a seção imagem de aberturaClick the Windows Store tab and open the Splash Image section
  3. Aplique a imagem desejada na propriedade imagem de abertura do Windows Holographic > Holographic .Apply your desired image under the Windows Holographic > Holographic Splash Image property.
    • Alternar a opção Mostrar tela inicial do Unity habilitará ou desabilitará a tela inicial com marca do Unity.Toggling the Show Unity Splash Screen option will enable or disable the Unity branded splash screen. Se você não tiver uma licença do Unity pro, a tela inicial da marca do Unity será sempre exibida.If you do not have a Unity Pro license, the Unity branded splash screen will always be displayed.
    • Se uma imagem de abertura do Holographic for aplicada, ela sempre será exibida, independentemente de a caixa de seleção Mostrar tela inicial do Unity estar habilitada ou desabilitada.If a Holographic Splash Image is applied, it will always be displayed regardless of whether the Show Unity Splash Screen checkbox is enabled or disabled. A especificação de uma imagem de abertura Holographic personalizada só está disponível para desenvolvedores com licença do Unity pro.Specifying a custom holographic splash image is only available to developers with a Unity Pro license.
Mostrar tela inicial do UnityShow Unity Splash Screen Imagem de abertura do HolographicHolographic Splash Image ComportamentoBehavior
AtivadoOn NenhumNone Mostre a tela inicial do Unity padrão por 5 segundos ou até que o aplicativo seja carregado, o que for maior.Show default Unity splash screen for 5 seconds or until the app is loaded, whichever is longer.
AtivadoOn PersonalizadoCustom Mostre a tela inicial personalizada por 5 segundos ou até que o aplicativo seja carregado, o que for maior.Show Custom splash screen for 5 seconds or until the app is loaded, whichever is longer.
DesativadoOff NenhumNone Mostrar preto transparente (Nothing) até que o aplicativo seja carregado.Show transparent black (nothing) until app is loaded.
DesativadoOff PersonalizadoCustom Mostre a tela inicial personalizada por 5 segundos ou até que o aplicativo seja carregado, o que for maior.Show Custom splash screen for 5 seconds or until the app is loaded, whichever is longer.

Leia a documentação da tela inicial do Unity para obter mais informações.Please read Unity's Splash Screen documentation for more info.

Controle de perdaTracking loss

Um headset de realidade misturada depende da visualização do ambiente em relação a ele para construir sistemas de coordenadas com bloqueio mundial, que permitem que os hologramas permaneçam em posição.A Mixed reality headset depends on seeing the environment around it to construct world-locked coordinate systems, which allow holograms to remain in position. Quando o headset não consegue se localizar no mundo, diz-se que o fone de ouvido é considerado perdido.When the headset is unable to locate itself in the world, the headset is said to have lost tracking. Nesses casos, a funcionalidade dependente de sistemas de coordenadas bloqueados pelo mundo, como estágios espaciais, âncoras espaciais e mapeamento espacial, não funciona.In these cases, functionality dependent on world-locked coordinate systems, such as spatial stages, spatial anchors and spatial mapping, do not work.

Se ocorrer uma perda de controle, o comportamento padrão do Unity será parar de renderizar os hologramas, pausar o loop do jogoe exibir uma notificação de rastreamento perdido que siga confortavelmente os usuários olhar.If a loss of tracking occurs, Unity's default behavior is to stop rendering holograms, pause the game loop, and display a tracking lost notification that comfortably follows the users gaze. As notificações personalizadas também podem ser fornecidas na forma de uma imagem de perda de rastreamento.Custom notifications can also be provided in the form of a tracking loss image. Para aplicativos que dependem do acompanhamento de toda a sua experiência, é suficiente deixar que o Unity manipule isso totalmente até que o rastreamento seja readquirido.For apps that depend upon tracking for their whole experience, it's sufficient to let Unity handle this entirely until tracking is regained. Os desenvolvedores podem fornecer uma imagem personalizada a ser mostrada durante a perda de controle.Developers can supply a custom image to be shown during tracking loss.

Para personalizar a imagem perdida de rastreamento:To customize the tracking lost image:

  1. Ir para Edita página Editar configurações do > projeto > PlayerGo to Edit > Project Settings > Player page
  2. Clique na guia Windows Store e abra a seção imagem de aberturaClick on the Windows Store tab and open the Splash Image section
  3. Aplique a imagem desejada na propriedade de imagem de perda de > do Windows Holographic de rastreamento .Apply your desired image under the Windows Holographic > Tracking Loss Image property.

Recusa de pausa automáticaOpt-out of automatic pause

Alguns aplicativos podem não exigir acompanhamento (por exemplo, aplicativos somente de orientação , como visualizadores de vídeo de 360 graus) ou talvez precisem continuar o processamento ininterrupto enquanto o rastreamento é perdido.Some apps may not require tracking (e.g. orientation-only apps such as 360-degree video viewers) or may need to continue processing uninterrupted while tracking is lost. Nesses casos, os aplicativos podem recusar a perda padrão de comportamento de controle.In these cases, apps can opt out of the default loss of tracking behavior. Os desenvolvedores que escolhem isso são responsáveis por ocultar/desabilitar todos os objetos que não são renderizados corretamente em um cenário de perda de rastreamento.Developers who choose this are responsible for hiding/disabling any objects which would not render properly in a tracking-loss scenario. Na maioria dos casos, o único conteúdo que é recomendado para ser renderizado nesse caso é o conteúdo de corpo bloqueado, centralizado em toda a câmera principal.In most cases, the only content that is recommended to be render in that case is body-locked content, centered around the main camera.

Para recusar o comportamento de pausa automática:To opt out of automatic pause behavior:

  1. Ir para a página Editaro > Project Settings > Player de configurações do projetoGo to the Edit > Project Settings > Player page
  2. Clique na guia Windows Store e abra a seção imagem de aberturaClick the Windows Store tab and open the Splash Image section
  3. Modifique a caixa de seleção > do Windows Holographic na pausa de controle de perda e mostrar imagem .Modify the Windows Holographic > On Tracking Loss Pause and Show Image checkbox.

Rastreando eventos de perdaTracking loss events

Para definir o comportamento personalizado quando o rastreamento é perdido, manipule os eventos de perda de controleglobal.To define custom behavior when tracking is lost, handle the global tracking loss events.

FuncionalidadesCapabilities

Para que um aplicativo aproveite determinadas funcionalidades, ele deve declarar os recursos apropriados em seu manifesto.For an app to take advantage of certain functionality, it must declare the appropriate capabilities in its manifest. As declarações de manifesto podem ser feitas no Unity para que elas sejam incluídas em todas as exportações de projeto subsequentes.The manifest declarations can be made in Unity so they are included in every subsequent project export.

Os recursos podem ser habilitados para um aplicativo de realidade misturada:Capabilities can be enabled for a Mixed Reality application by:

  1. Ir para Edita página Editar configurações do > projeto > PlayerGo to Edit > Project Settings > Player page
  2. Clique na guia Windows Store , abra a seção configurações de publicação e procure a lista de recursosClick the Windows Store tab, open the Publishing Settings section and look for the Capabilities list

Os recursos aplicáveis para habilitar as APIs comumente usadas para aplicativos Holographic são:The applicable capabilities for enabling the commonly used APIs for Holographic apps are:

FuncionalidadeCapability APIs que exigem capacidadeAPIs requiring capability
SpatialPerceptionSpatialPerception SurfaceObserverSurfaceObserver
IntegradaWebCam VideoCapture e fotocapturaPhotoCapture and VideoCapture
PicturesLibrary / VideosLibraryPicturesLibrary / VideosLibrary VideoCapture, respectivamente (ao armazenar o conteúdo capturado)PhotoCapture or VideoCapture, respectively (when storing the captured content)
MicrofoneMicrophone VideoCapture (ao capturar áudio), DictationRecognizer, GrammarRecognizer e KeywordRecognizerVideoCapture (when capturing audio), DictationRecognizer, GrammarRecognizer, and KeywordRecognizer
InternetClientInternetClient DictationRecognizer (e para usar o criador de perfil do Unity)DictationRecognizer (and to use the Unity Profiler)

Consulte tambémSee also