Diretrizes de desempenho para malha
Desempenho
Este artigo é uma introdução à compreensão da importância do desempenho ao criar conteúdo no Mesh. A taxa de quadros é a unidade mais fácil de racionalizar o desempenho. Normalmente, a taxa de quadros é medida em "quadros por segundo" (fps) ou quantas vezes seu aplicativo pode renderizar uma imagem por segundo. A experiência de um usuário pode ser bastante degradada se o conteúdo não for executado em uma taxa de quadros ideal. Para ajudá-lo a rastrear e obter uma taxa de quadros de qualidade, o Mesh fornece uma variedade de ferramentas e recomendações.
A tabela abaixo lista a taxa de quadros de destino por plataforma compatível com o Mesh.
Computador | Andróide (Quest) |
---|---|
Taxa de atualização do monitor (mínimo de 30 fps) | 72 fps |
Cenas simples vs complexas
Como em todo desenvolvimento 3D, no Mesh há uma troca entre fidelidade visual e desempenho. Dependendo da máquina que executa o Mesh, o usuário pode experimentar um desempenho reduzido, especialmente se sua cena for complexa.
Pense no desempenho como um orçamento financeiro. Se você tem $ 100 dólares para gastar, não pode gastar $ 60 renderizando um ambiente complexo, $ 40 simulando física avançada e $ 20 para scripts visuais - você acabaria gastando acima do seu orçamento. Como desenvolvedor, você precisa fazer concessões entre fidelidade visual, complexidade de interação, número de usuários e outros sistemas. A equipe do Mesh gerou uma lista de limites de desempenho não como regra, mas como um guia para o desenvolvimento.
Metodologia de criação de perfil
A criação de ambientes no Mesh geralmente envolve três etapas.
- Criar conteúdo no Unity
- Carregar no Microsoft Mesh
- Executar seu conteúdo no aplicativo Mesh
Durante a primeira etapa, recomendamos que você use uma mistura do Content Performance Analyzer (CPA) e do Performance Profiler encontrados no pacote do kit de ferramentas Mesh, que é necessário para qualquer projeto do Unity que esteja sendo usado para gerar um ambiente Mesh. Durante a etapa dois, a ferramenta CPA é executada automaticamente. Por fim, durante a etapa três final, a criação de perfil deve ocorrer por meio do Criador de perfil de desempenho integrado do Mesh.
Ferramentas para analisar o desempenho
Analisador de desempenho de conteúdo (CPA)
Recomendamos que você use o Content Performance Analyzer (CPA) para maximizar o desempenho da sua experiência com o Mesh. A ferramenta CPA pode analisar estaticamente seu conteúdo no momento da criação. Você pode usar o CPA para auditar contagens de triângulos, lotes, utilização de memória de textura e muito mais. Isso permite que você detecte problemas e oportunidades de otimização de conteúdo antes que o conteúdo seja carregado no Mesh.
Para executar a ferramenta CPA, selecione Mesh Toolkit>Content Performance Analyzer nos itens de menu.
Problemas e sugestões são relatados por meio de uma janela do editor no Unity.
Importante
Uma parte dos analisadores de CPA será executada automaticamente ao fazer upload de conteúdo para o Mesh. Como nem todos os testes podem ser executados automaticamente, é bom executar o CPA manualmente como parte do processo de desenvolvimento.
Performance Profiler
O Performance Profiler fornece uma janela simples para visualizar a taxa de quadros do seu projeto de malha, a complexidade da cena e o uso de memória em todas as plataformas. O Performance Profiler pode ser acessado no aplicativo Mesh e no kit de ferramentas Mesh.
Para exibir o Criador de Perfil de Desempenho no aplicativo Mesh, abra o painel de configurações e selecione Para desenvolvedores>: Criador de Perfil de Desempenho. O Criador de Perfil de Desempenho aparecerá na parte superior central da janela.
Ao usar o Performance Profiler, procure quadros perdidos, que aparecem como caixas vermelhas, marcadas com um 'x'. Os quadros perdidos indicam que seu conteúdo não está atingindo a taxa de quadros desejada do Mesh e pode precisar de trabalho de otimização. A complexidade da cena e o uso de memória são exibidos sob os indicadores de quadro perdido. Esses números podem indicar por que seu conteúdo não está atendendo à taxa de quadros desejada do Mesh.
O texto no Performance Profiler ficará vermelho quando uma métrica não atender ao limite de desempenho recomendado da malha. Mais detalhes sobre os limites de desempenho estão listados em uma seção de procedimentos.
Importante
Os lotes não podem ser exibidos no aplicativo Mesh. Eles estão disponíveis apenas no editor do Unity.
Você também deve ficar de olho na barra de memória inferior para garantir que o uso da memória não esteja mudando rapidamente ou se aproximando do limite de memória do aplicativo.
Para exibir o Performance Profiler no editor do Unity, certifique-se de ter o componente Configuração do emulador de malha em sua cena. Certifique-se de que a configuração Contagem inicial de telas seja zero. Se for um ou superior, você não poderá ativar o Criador de Perfil de Desempenho durante o jogo.
Clique no botão Reproduzir do Unity para entrar no modo de reprodução, ative o Performance Profiler por meio da tecla 'v' . O Criador de Perfil de Desempenho aparecerá na parte superior central da janela do jogo.
Importante
Ao visualizar o Performance Profiler no editor do Unity, você pode obter mais informações, como contagens de lotes e o tempo de milissegundos necessário para a execução de determinados subsistemas. Observe que essas métricas são uma aproximação relativa do desempenho e a criação de perfil final deve ocorrer no aplicativo Mesh.
Se você estiver curioso para saber o que os tempos de milissegundos na parte inferior do Criador de Perfil de Desempenho estão medindo, poderá encontrar essas informações na seção de limites de desempenho.
Outras ferramentas
Tanto o CPA quanto o Performance Profiler são personalizados para o Mesh, mas também há um punhado de ótimas ferramentas para criar perfis de conteúdo no Unity:
- Criador de perfil do Unity
- Depurador de quadros do Unity
- RenderDoc (IMPORTANTE: o RenderDoc só pode executar capturas do editor do Unity. As compilações de aplicativos de malha não funcionarão).
Limites de desempenho
A otimização para o desempenho pode ser um ato de equilíbrio, dependendo do cenário para o qual você está desenvolvendo e da experiência que deseja alcançar. A renderização de uma cena em Mesh é uma consequência direta de como o conteúdo do ambiente é criado. Abaixo estão sugestões de renderização para nossas plataformas atuais.
Limites de renderização do PC
Policontagem | Lotes de estoque | Pós-processamento |
---|---|---|
<~500k Triângulos | ~200 lotes | Desabilitadas |
Texturas | Mapas de luz | Resolução Skybox |
< ~160 MB | < ~ 80 MB | 2048x4096 |
Limites de renderização do Android (Quest)
Policontagem | Lotes de estoque | Pós-processamento |
---|---|---|
<~ 80k Triângulos | ~50 lotes | Desabilitadas |
Texturas | Mapas de luz | Resolução Skybox |
< ~16 MB | < ~20 MB | 1024x2048 |
Você pode observar que as restrições de sombreador não são especificadas nas tabelas acima. Como o Mesh usa o URP (Pipeline de Renderização Universal) do Unity, sugerimos que você use sombreadores URP prontos para uso mais baratos (como Universal Render Pipeline/Baked Lit ou Universal Render Pipeline/Simple Lit). Também entendemos o valor dos sombreadores personalizados. Em geral, tentamos manter nossos sombreadores personalizados para a maior parte do ambiente dentro dos limites abaixo:
Matemática de vértices | Fragmento matemático | Textura |
---|---|---|
< 30 operações | < 120 operações | < 2 pesquisas |
Importante
A contagem de operações de sombreador está em uma métrica imperfeita para calcular o desempenho do sombreador, um desenvolvedor de sombreador também deve criar o perfil de seu sombreador em execução no Mesh para verificar se ele é executado de forma eficiente.
Se você estiver curioso para saber como o pipeline de renderização do URP está configurado para o aplicativo Mesh, poderá inspecionar os renderizadores específicos da plataforma no diretório \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP do seu projeto.
Limites de script
O Mesh permite que você crie conteúdo interativo por meio de scripts visuais, scripts de nuvem, Mesh Physics e/ou WebSlate. Ao exibir o Performance Profiler no editor do Unity, o milissegundo (ms) que leva para determinados subsistemas serem executados é exibido na parte inferior do profiler. Quando o texto muda de verde para vermelho, isso indica que um subsistema pode estar acima do orçamento. A tabela abaixo fornece mais informações sobre esses orçamentos.
Nome do subsistema | Orçamento máximo de quadros | Descrição |
---|---|---|
Comportamento | N/D | Tempo de milissegundos necessário para atualizar todos os scripts MonoBehaviour locais (C# e Visual) |
Renderizar | 25% | Tempo de milissegundo para a renderização da CPU da cena |
Ardósia WebSlate | N/D | Tempo de milissegundos para atualizar e renderizar qualquer WebSlates na cena |
Sim Físico | 15% | Tempo de milissegundos para percorrer a simulação do PhysX |
Sincronização física | 15% | Tempo de milissegundos para sincronizar todos os corpos físicos |
Efeito físico | 10% | Tempo de milissegundos para atualizar comportamentos físicos personalizados |
Usuário VS | 15% | Tempo de milissegundo gasto em gráficos do Visual Script colocados na cena |
VS Env | 10% | Milissegundos de tempo gasto atualizando a infraestrutura do Visual Script |
VS Net | 10% | Milissegundos de tempo gasto sincronizando o estado de rede do Visual Script |
Os valores de "Porcentagem máxima de quadros" listados acima são recomendações baseadas em conteúdo genérico. Como desenvolvedor, cabe a você equilibrar esses sistemas para garantir que seu quadro possa ser atualizado no tempo alocado.
Recursos de desempenho e otimização
Fundamentos de desempenho gráfico https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
Pipeline de renderização universal (URP) https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html
Dosador SRP https://docs.unity3d.com/Manual/SRPBatcher.html
Renderização instanciada de passagem única e sombreadores personalizados https://docs.unity3d.com/Manual/SinglePassInstancing.html