O Samsung Galaxy XR chegou, com tecnologia Android XR! Este post do blog faz parte da Semana de Destaques do Android XR, em que oferecemos recursos, como posts do blog, vídeos, exemplos de código e muito mais, todos criados para ajudar você a aprender, criar e preparar seus apps para o Android XR.
Esta semana, a Samsung lançou o Galaxy XR, criado em colaboração com o Google e a Qualcomm. Este é um momento empolgante para os desenvolvedores, e queremos ajudar você a aproveitar ao máximo o desempenho do seu app de XR.
Embora o desempenho ruim em jogos e apps em dispositivos que não são de XR possa ser frustrante para o usuário, no mundo da XR, o desempenho não é apenas opcional, é fundamental para o sucesso do seu app. Se você não atingir a meta de frame rate na XR, isso pode causar problemas muito mais graves, como enjoo de movimento.
Neste guia, vamos mostrar as otimizações de desempenho essenciais que você precisa entender para o desenvolvimento no Android XR. Você vai aprender quais recursos oferecem os maiores ganhos de desempenho, quando usá-los e como eles funcionam juntos para ajudar você a atingir suas metas de frame rate.
Confira o que estamos buscando:
- Mínimo : 72 fps (parte das nossas diretrizes de qualidade de jogo)
- Opcional : 90 qps com um orçamento de 11 ms por frame
Para mais informações sobre por que é importante manter uma taxa de frames tão alta, confira nossas diretrizes de desempenho.
Recursos de desempenho específicos de XR
Vamos começar abordando dois recursos de desempenho específicos de XR: renderização foveada e subamostragem do Vulkan.
Renderização foveada
A renderização foveada é uma otimização que tem dois modos. O primeiro é um modo estático que renderiza o centro da tela em uma resolução mais alta e diminui progressivamente a resolução conforme você se afasta.
O segundo é o modo de acompanhamento ocular, que renderiza especificamente a área para onde você está olhando em detalhes, reduzindo a qualidade exibida na visão periférica. Ele basicamente imita o funcionamento da visão humana, em que só vemos detalhes finos na área específica em que estamos focando.
A renderização foveada reduz significativamente a carga de trabalho da GPU sem sacrificar a qualidade da imagem percebida pelo usuário. A beleza da renderização foveada é que os usuários não vão notar a qualidade reduzida na visão periférica, mas a GPU certamente vai notar a melhora no desempenho.
Imagine que você está criando uma experiência de museu com artefatos 3D complexos. Sem a renderização foveada, seria difícil manter 90 fps ao tentar renderizar tudo no campo de visão. Com ela, é possível manter os detalhes de alta resolução onde o usuário está olhando, mas o ambiente de fundo é renderizado com uma qualidade menor. Os usuários não vão notar a diferença, mas você terá espaço para adicionar mais detalhes à cena.
Subamostragem do Vulkan
A subamostragem do Vulkan é a melhor amiga da renderização foveada. Enquanto a renderização foveada decide o que renderizar em diferentes níveis de qualidade, a subamostragem do Vulkan lida com a renderização eficiente dos diferentes níveis de qualidade usando mapas de densidade de fragmentos.
Quando combinada com a renderização foveada, a subamostragem do Vulkan oferece um aumento de 0,5 ms no desempenho. Ele também ajuda a suavizar as bordas irregulares na sua visão periférica, deixando a imagem geral mais nítida.
Por exemplo, em um jogo de simulador de voo em que os usuários se concentram em instrumentos e controles, combinar a renderização foveada com a subamostragem do Vulkan significa que os controles detalhados são renderizados com nitidez, mas a estrutura periférica do cockpit usa menos recursos. Esse meio milissegundo extra pode não parecer muito, mas é a diferença entre ter espaço para um elemento interativo extra ou perder frames durante momentos intensos.
Recursos de GPU para cenas complexas
Além da renderização foveada e da subamostragem do Vulkan, existem alguns recursos de GPU que reduzem o esforço desnecessário por meio de instanciamento e descarte inteligentes. Eles são especialmente eficazes para cenas complexas com geometria repetida ou oclusão significativa.
Gaveta residente de GPU
O GPU Resident Drawer usa automaticamente a instanciação de GPU para reduzir as chamadas de desenho e liberar tempo de processamento da CPU. Assim, em vez de a CPU informar à GPU sobre cada objeto individualmente, a GPU agrupa objetos semelhantes.
Esse recurso é mais eficaz para cenas grandes com malhas repetidas, como árvores em uma floresta, móveis em um prédio de escritórios ou adereços espalhados por um ambiente.
Imagine uma cena de floresta com 200 árvores usando a mesma malha de base. Sem o GPU Resident Drawer, você tem 200 chamadas de desenho consumindo a GPU, o que libera a CPU. Quando você ativa esse recurso, a GPU instancia essas árvores de forma inteligente, o que reduz o número de chamadas de desenho para apenas 5 a 10. Isso representa uma enorme economia de GPU que você pode investir na lógica de jogabilidade ou em cálculos de física.
Oclusão de GPU
O GPU Occlusion Culling usa a GPU em vez da CPU para identificar e pular a renderização de objetos ocultos. Ele detecta automaticamente o que está oculto atrás de outros objetos, para que você não desperdice sua GPU com coisas que o usuário não pode ver.
Esse recurso é especialmente útil em espaços internos com vários cômodos, ambientes densos ou cenas arquitetônicas em que paredes, pisos e objetos bloqueiam a visão naturalmente.
Por exemplo, digamos que você esteja criando uma experiência de casa com vários ambientes. Quando o usuário está na sala de estar, por que desperdiçar ciclos de GPU renderizando a cozinha detalhada que está completamente escondida atrás de uma parede? O descarte de oclusão de GPU ignora automaticamente a renderização desses objetos ocultos, oferecendo mais montante de desempenho para o que está realmente visível.
Monitorar sua performance
Não basta apenas usar esses recursos. Você também precisa medir as otimizações para quantificar o impacto delas e verificar se as mudanças estão funcionando.
API Performance Metrics
A API Performance Metrics fornece monitoramento em tempo real do uso da memória, do desempenho da CPU e do desempenho da GPU dos seus apps. Ele fornece dados abrangentes das camadas de composição e de execução, para que você possa ver exatamente o que está acontecendo no seu aplicativo.
Estabeleça um valor de referência antes de fazer as mudanças, aplique uma otimização, meça o impacto e repita o processo. Essa abordagem orientada por dados significa que você sabe que está melhorando a performance, em vez de apenas adivinhar.
Antes de ativar a renderização foveada, o tempo para a renderização do frame da GPU pode ser de 13 ms, o que ultrapassa o limite de 11 ms. Ative a renderização foveada, meça novamente e, se tudo der certo, você vai ver o tempo cair para 9 ms. Isso significa que você ganhou 4 ms de margem para adicionar mais detalhes à cena, melhorar a qualidade visual em outros lugares ou simplesmente garantir um desempenho mais suave em uma variedade maior de conteúdo.
Sem essas métricas, você está otimizando às cegas. A API Performance Metrics mostra o que realmente está ajudando seu caso de uso específico.
Depurador de frames
O Frame Debugger é a ferramenta integrada do Unity para entender exatamente como sua cena está sendo renderizada, frame por frame. Ele mostra a sequência de chamadas de desenho e permite que você as percorra para verificar se as otimizações estão funcionando corretamente.
Quer confirmar se o SRP Batcher está funcionando? Procure entradas "RenderLoopNewBatcher" no Frame Debugger. Verificar se o lote do GPU Resident Drawer está sendo feito corretamente? Procure as entradas "Hybrid Batch Group". Essas confirmações visuais ajudam a entender se as configurações de otimização estão realmente funcionando.
Percorra as primeiras 50 chamadas de desenho da cena. Se você notar que objetos semelhantes estão sendo desenhados individualmente em vez de em lote, isso significa que a instanciação ou o lote não está funcionando corretamente. O Frame Debugger torna esses problemas imediatamente visíveis para que você possa resolvê-los.
Outras otimizações
Além das otimizações que abordamos acima, nosso guia de performance completo também aborda algumas outras otimizações adicionais. Confira um resumo rápido:
- Configurações do URP: desative o HDR e o pós-processamento para XR em dispositivos móveis. Esses recursos oferecem um impacto visual mínimo em comparação com o custo de desempenho no hardware móvel. Assim, você terá ganhos de desempenho mensuráveis com diferenças visuais quase imperceptíveis.
- SRP Batcher: reduz a sobrecarga da CPU em cenas com muitos materiais que usam a mesma variante de sombreador. Ao minimizar as mudanças de estado de renderização entre as chamadas de desenho, é possível reduzir significativamente o tempo de CPU gasto na renderização.
- Taxa de atualização da tela: ajuste dinamicamente entre 72 qps e 90 qps com base na complexidade da cena. Reduza o frame rate durante sequências complexas para manter a estabilidade e aumente-o em momentos mais simples para uma interação ultrafluida.
- Texturas de profundidade/opacas: desative-as, a menos que sejam especificamente necessárias para efeitos de sombreador. Eles causam operações de cópia de GPU desnecessárias que desperdiçam desempenho sem oferecer benefícios para a maioria dos aplicativos.
- Escala de renderização do URP : essa configuração permite renderizar em uma resolução reduzida para melhorar o desempenho ou aumentar a escala de renderização para melhorar a qualidade visual.
Para instruções detalhadas sobre essas e outras otimizações, consulte nosso Guia de Desempenho do Unity para Android XR.
Conclusão
O desempenho do seu app de XR não é apenas uma caixa de seleção técnica. É a diferença entre uma experiência confortável e envolvente e outra que faz os usuários se sentirem enjoados ou desconfortáveis. As otimizações que abordamos são seu kit de ferramentas para atingir essas metas críticas de frame rate nos dispositivos XR mais recentes.
Confira seu roteiro:
- Comece com a renderização foveada e a subamostragem do Vulkan. Esses recursos específicos de XR oferecem economia imediata e perceptível de GPU.
- Adicione o GPU Resident Drawer e o Occlusion Culling se você tiver cenas complexas com geometria repetida ou espaços internos.
- Monitore tudo com a API Performance Metrics para garantir que as mudanças realmente estão ajudando
- Conheça outras otimizações do URP para melhorar ainda mais a performance
É fundamental medir continuamente e iterar. Nem todas as otimizações beneficiam todos os projetos igualmente. Por isso, use a API Performance Metrics para ter uma ideia clara do que realmente ajuda seu caso de uso específico.
Próxima etapa: ampliar suas habilidades
Quer mais detalhes? Confira estes recursos (em inglês):
- Guia de desempenho do Unity para Android XR: instruções completas de implementação para todos os recursos abordados aqui.
- Começar a usar o Unity e o Android XR: configure seu ambiente de desenvolvimento e comece a criar.
- Documentação para desenvolvedores do Android XR: guias completos sobre todos os recursos do Android XR.
-
Notícias sobre produtosTemos o prazer de anunciar que o suporte oficial para o Unreal Engine e o Godot chegou ao Android XR. Também estamos lançando novas ferramentas para aumentar sua produtividade e oferecer novos recursos de XR: o Android XR Engine Hub e o Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Leitura de 4 min -
Notícias sobre produtosHoje, no Android Dev Summit, anunciamos a ampla disponibilidade de muitas ferramentas e APIs projetadas para remover o atrito diário e oferecer mais flexibilidade para criar ótimos apps Android.
Matthew McCullough • Leitura de 4 min -
Notícias sobre produtosO Android Studio Rabbit 2 já está estável e pronto para uso em produção. Esta versão inclui recursos importantes para melhorar seu desenvolvimento, como o Bring Your Own Agent, novos recursos do emulador de XR, uma atualização do LeakCanary, uma nova ferramenta de gerenciamento de habilidades do agente, revisão de código com IA e muito mais.
Matthew Warner • Leitura de 3 min
Receba os insights mais recentes sobre o desenvolvimento para Android na sua caixa de entrada toda semana.