Equilibrar fidelidade e desempenho com as limitações do hardware de dispositivos móveis pode ser um desafio. As seções a seguir detalham as configurações e as ferramentas que a Unreal Engine(UE) fornece para ajustar seu desempenho, incluindo variáveis de console que você pode definir nos perfis do dispositivo e dicas de como usá-las.
Plataformas de visualização
Sua plataforma de pré-visualização é a plataforma de destino que você deseja que o Unreal Editor imite em suas janelas de visualização. A plataforma de pré-visualização no editor é uma amostra de como seu aplicativo ficará em uma plataforma de destino. It is important that you test on the actual device, the Android emulator in Android Studio, or the iOS emulator in Xcode for more accurate testing. No entanto, a plataforma de pré-visualização dará uma ideia rápida de como seus elementos visuais devem ficar diretamente do editor.
Para definir sua plataforma de pré-visualização, siga estas etapas:
Click the Performance and Scalability button in the editor's main toolbar.
Destaque o submenu Pré-visualizar plataforma.
Select the platform whose rendering you want Unreal Editor to emulate.
A recompilação de shaders para a nova plataforma levará algum tempo no Unreal Editor. No entanto, quando terminar, os elementos visuais devem refletir o perfil do dispositivo para a plataforma de pré-visualização selecionada. Você também pode carregar um arquivo .json do seu dispositivo para obter uma pré-visualização ainda mais refinada com o perfil e as configurações específicas do dispositivo.
Para obter mais informações sobre como configurar sua plataforma de visualização, consulte a documentação Visualizador para Dispositivos Móveis.
Para desenvolvedores de Android e IHM, a UE é compatível com níveis de funcionalidade de renderização do Vulkan. Confira a página Renderizador para dispositivos móveis Android Vulkan para obter mais informações sobre a compatibilidade do Vulkan na UE.
Configurações de renderização
Esta seção detalha as configurações de renderização que você pode usar para ajustar o equilibrar do aplicativo entre desempenho e fidelidade. Isso resulta em uma grande perda na qualidade da renderização em escala, mas pode resultar em grandes melhorias na taxa de quadros e na estabilidade, pois podem reduzir a sobrecarga de renderização.
Porcentagem de tela
Porcentagem da tela controla quanta da resolução nativa da janela de visualização você está usando para renderizar quadros.
Por exemplo, digamos que a janela de visualização esteja renderizando em uma janela de 3840x2160:
Se você definir a porcentagem da tela como 100, ela usará a resolução total de 3840x2160 da janela de visualização.
Se você definir a porcentagem de tela como 50, ele usará apenas 50% disso, que resulta em 1920x1080
Porcentagem de tela em 15%, 50% e 100%.
Reduzir a porcentagem da tela fará com que seu aplicativo seja renderizado mais rápido, mas ficará visivelmente menos detalhado do que quando você usa a resolução máxima.
Você não pode definir a porcentagem de tela no modo editor ao executar o Unreal Editor. No entanto, você pode configurá-lo ao usar Jogar no Editor ou ao executar uma compilação empacotada.
Para alterar a porcentagem de tela no editor, abra o menu de escalabilidade durante o jogo e use a barra porcentagem da tela para alterá-la. Para configurar em tempo real com o console, use a variável r.ScreenPercentage. Um valor de 100 para essa variável equivale a 100%.
Cada configuração de escalabilidade tem uma porcentagem de tela padrão. Você pode substituir isso no tempo de execução conforme necessário para melhorar o desempenho ou a fidelidade da renderização.
Taxa de quadros máxima
Você pode definir uma taxa de quadros máxima alterando o CVar t.MaxFPS. Seu aplicativo só renderizará quadros por segundo até o valor que você definir. Por exemplo, t.MaxFPS 30 fará com que 30 quadros por segundo seja a taxa de quadros mais rápida que você permitirá que seu aplicativo execute.
Você pode alterar esse valor no tempo de execução para variar a velocidade de renderização. Por exemplo, se o aplicativo estiver ocioso e a tela estiver desligada, defina t.MaxFPS como 5 até que o usuário comece a interagir com a tela e, em seguida, defina novamente para uma taxa de quadros mais alta. Se o aplicativo estiver exibindo principalmente informações que chegam devagar, como dados de GPS, limite o FPS máximo a 30 ou menos sem afetar muito a experiência do usuário. Incentivamos a pensar criticamente sobre como e quando seu aplicativo requer uma taxa de quadros mais alta versus quando você pode reduzi-la estrategicamente.
Configurações de escalabilidade
As configurações de escalabilidade fornecem predefinições para funcionalidades de renderização na UE e são a maneira mais simples de ajustar o desempenho do projeto no editor. Cada configuração de escalabilidade pode ser alterada para uma predefinição que altera um subconjunto das configurações gráficas para favorecer maior ou menor fidelidade. A UE já vem com eles configurados com base no hardware existente no momento de cada lançamento.
Para visualizar as configurações de escalabilidade atuais no Unreal Editor:
Clique no botão Configurações na barra de ferramentas principal do editor.
Destaque o submenu Configurações de escalabilidade da Engine. Escolha o grupo de escalabilidade de sua preferência: Baixo Médio, Alto, Épico ou Cinematográfico.
As configurações de escalabilidade ajustadas no editor afetam apenas o comportamento do editor local, não as versões finais.
Saiba mais sobre as configurações de escalabilidade em
Iluminação e sombreamento
Os dispositivos móveis têm recursos especialmente limitados para processar iluminação e sombras. Portanto, é importante escolher o modo de sombreamento mais adequado para os ambientes em seu projeto. A chave consideração é quanto seu projeto depende de iluminação estática ou dinâmica.
Modos de sombreamento para dispositivos móveis
Os modos de sombreamento para dispositivos móveis fornecem implementações alternativas para uma variedade de efeitos de iluminação e sombreamento, otimizados especificamente para aproveitar o bloco de memória no hardware de dispositivos móveis.
Adiamento em dispositivos móveis: computa informações de iluminação em sua própria etapa após o processamento da geometria.
Isso fornece recursos de iluminação superiores e desempenho aprimorado em projetos que usam luzes dinâmicas, pois reduz muito o número de instruções de material que o renderizador processa.
Adiantamento em dispositivos móveis: computa informações de iluminação ao mesmo tempo que a geometria.
Isso resulta em menos flexibilidade com a iluminação, mas em projetos que usam luzes pré-computadas, isso proporciona um desempenho mais rápido e menos sobrecarga.
Para obter uma análise mais detalhada dos modos de sombreamento para dispositivos móveis, confira Rendering and Shading Modes. Recomendamos o adiantamento em dispositivos móveis para a maioria dos projetos, pois ele oferece o melhor desempenho e a maioria dos recursos de renderização do adiamento. Você deve investigar qual modo de sombreamento oferece o melhor desempenho e como isso afetará sua arte técnica.
Lumen e iluminação estática
O sistema de iluminação Lumen fornece iluminação global de alto desempenho para consoles de jogos e PCs gamers. Quando ativada, ela usa uma combinação de traçado de raios e efeitos de iluminação do espaço de tela para simular a luz em tempo real.
O Lumen está disponível para dispositivos móveis, mas é considerado experimental devido às altas demandas de recurso no hardware deles. Você pode experimentar, mas não recomendamos inicializar com o Lumen em qualquer contexto em que o desempenho seja uma prioridade.
Para obter mais informações sobre o Lumen, consulte Iluminação global e reflexões no Lumen. Confira Lumen em dispositivos móveis para obter informações específicas sobre como usar o Lumen no ambiente de um dispositivo móvel.
Materiais e shaders
A quantidade de IDs de material e a complexidade deles podem afetar o número de draw calls no projeto. Draw calls são pesquisas de ativos que ocorrem a cada quadro. Um grande número de draw calls é o que mais contribui para um baixo desempenho gráfico.
Na IHM, 100 draw calls é um bom valor em um Galaxy Tab S6, e menos de 50 é preferível. Você pode saída a contagem de draw calls com o comando do console Stat RHI.
Lembre-se de que a contagem de draw calls mudará conforme você estiver no JNE ou em um dispositivo.
As seções a seguir descrevem os fatores que afetam os draw calls e como atenuá-los.
Como reduzir a contagem de IDs de material
Você pode reduzir a contagem de IDs de material das seguintes formas:
Usando um programa externo, como Photoshop, Substance Painter ou Substance Designer, você pode combinar vários mapas de renderização baseados em física (rugosidade, especular, metálico e mais) em uma única textura. Isso geralmente é chamado de empacotamento de textura.
Usar máscaras para designar quais partes dos UV de uma malha recebem configurações diferentes. O mascaramento pode ser feito usando texturas alfa ou cor do vértice. A cor do vértice costuma ser mais eficiente, mas só oferece controle no nível do vértice.
Para obter mais informações sobre os diferentes métodos de aplicação de vários tipos de materiais a um único ativo, consulte Materiais.
Como reduzir a complexidade do material
A complexidade do material pode aumentar o custo de pixel de uma renderização. Quanto mais instruções houver para cada pixel, mais tempo de renderização será necessário.
Você pode reduzir a complexidade do material das seguintes maneiras:
Reduzir o número de funções matemáticas no material.
Reduza o número de nós de alto custo.
Uso seletivo de configurações de alto custo, como Neblina, Neblina por Pixel, Sombreamento Direto da Superfície, Dois lados, Reflexos do Espaço de Tela (SSRs), sombras e muito mais.
Uso seletivo de propriedades de material, domínios de material e modos de mesclagem de alto custo, como translucidez.
Você pode verificar a complexidade dos materiais clicando na aba Estatísticas no gráfico de material:
Para obter mais informações sobre propriedades de material, consulte Propriedades de material.
Como reduzir o tamanho da textura
Texturas de alta resolução exigem muito espaço para armazenamento em um dispositivo e na memória de texturas do dispositivo. Eles também exigem mais pixels para serem renderizadas e processadas. Por exemplo, dependendo da plataforma, mapas de normais de alta resolução podem ter um custo de desempenho mais alto do que um modelo de alta contagem de polígonos. O ideal é comprimir texturas de alta qualidade na engine para reduzir a sobrecarga e ainda alcançar a fidelidade desejada.
Para compactar texturas usando tamanho máximo de textura, siga estas etapas:
Abra a textura no Editor de Texturas.
No painel Detalhes, no cabeçalho Compressão, expanda Avançado.
Defina o tamanho máximo de textura como o número desejado.
Um método para mitigar esse problema é usar uma textura de depuração especial para determinar qual resolução é necessária para diferentes componentes de um ativo.
Para obter mais informações sobre esse método, consulte Otimização de renderização para dispositivos móveis
Como usar shaders de meia precisão e de precisão total
Por padrão, os dispositivos móveis processam operações matemáticas em materiais com metade da precisão que os computadores. Isso significa que há menos casas decimais para trabalhar durante os cálculos. Isso economiza memória e processamento, resultando em uma renderização mais rápida, mas também pode resultar em artefatos visuais, como faixas.
Para resolver esses problemas, abra o material e, no painel Propriedades do Material, habilite a configuração Use precisão total.
Isso forçará o material a usar o maior nível de precisão disponível no dispositivo móvel. Para garantir que seu aplicativo não comprometerá muito o desempenho, use essa configuração apenas para materiais importantes, cujos efeitos afetarão significativamente a experiência do usuário.
Armazenamento em cache do PSO
O armazenamento em cache do PSO armazena o estado do pipeline dos objetos renderizados no mundo para que os usuários não precisem reconstruir seus shaders durante o tempo de execução. Isso reduz problemas durante a reprodução.
Para obter mais informações sobre o armazenamento em cache do PSO para Android, confira PSO Caches.
Pós-processamento
A Unreal Engine oferece suporte para uma ampla variedade de efeitos de pós-processamento que podem aprimorar a aparência do seu aplicativo. No entanto, avalie e equilibre esses elementos cuidadosamente no contexto de dispositivos móveis. Esta seção fornece orientações sobre pós-processos que costumam resultar em gargalos de desempenho.
Oclusão de ambiente e oclusão de ambiente incorporada
A oclusão de ambiente (OA) é uma técnica que simula como a iluminação ambiente cria sombras indiretas em um objeto. Embora gere resultados de renderização mais realistas e visualmente atraentes, pode ser uma operação cara.
Uma alternativa mais barata é usar a oclusão de ambiente incorporada. Ferramentas de modelagem, como Maya, 3ds Max e Blender, têm a opção de produzir mapas de oclusão de ambiente. Você pode importar um mapa de oclusão de ambiente para a UE e incluí-lo em seus materiais para adicionar sombras de oclusão de ambiente a um objeto sem precisar processá-lo em tempo real.
Como configurar a oclusão de ambiente em dispositivos móveis
Independentemente do método usado para a oclusão de ambiente, você pode ajustar as configurações de oclusão de ambiente específicas do dispositivo móvel com as variáveis de console a seguir. Você pode defini-las nos arquivos de configuração ou nos perfis de dispositivo, conforme necessário.
| Variável do console | Descrição | Valores |
|---|---|---|
| Quando habilitada, usa uma amostra extra no shader de pixel da etapa-base para oclusão de ambiente. | 0: Desabilitado (Padrão) 1: Habilitado |
| Quando habilitada, a AO móvel usará os limites de profundidade para delimitar renderização pixels distantes durante a etapa da AO. Essa opção só é válida quando o caminho do shader de pixel é usado (confira | 0: Desabilitado (Padrão) 1: Habilitado |
| O nível de qualidade para a oclusão de ambiente de espaço de tela em plataformas de dispositivos móveis. | 0: Desabilitado 1: Baio 2: Médio 3: Alto |
| Escolhe o tipo de shader usado pela oclusão do ambiente de dispositivos móveis. | 0: Calcular shader 1: Calcular shader separado 2: Shader de pixel (padrão) |
| Escolhe entre oclusão de ambiente de verdade fundamental (GTAO) ou oclusão de ambiente de espaço de tela (SSAO). O GTAO é computacionalmente mais caro, mas fornece resultados de maior qualidade, enquanto SSAO é mais simples e tem um desempenho mais rápido. | 0: GTAO (padrão) 1: SSAO |
Antisserrilhado
Sem pós-processamento, as imagens rasterizadas têm bordas nítidas devido à forma como os pixels são exibidos na tela. Isso resulta em uma aparência "serrilhada", chamada de serrilhado. O antisserrilhado suaviza os pixels, suavizando as bordas nítidas dos objetos renderizados. Esse ajuste deixa as imagens mais realistas.
A UE é compatível com vários métodos de antisserrilhado, cada um com seus próprios benefícios, desvantagens e definições de configuração. Para obter mais informações sobre as opções de antisserrilhado da UE, confira Antisserrilhado e upscaling.
As seções a seguir são resumos dos tipos de antisserrilhado disponíveis para pipelines de renderização para dispositivos móveis.
Antisserrilhado temporal
O antisserrilhado temporal (TAA) suaviza bordas usando informações de quadros renderizados anteriores. Essa abordagem usa menos processamento do que o antisserrilhado de multiamostragem (veja abaixo), mas requer um pouco de memória para armazenar quadros anteriores. Isso é semelhante a como um efeito de pós-processamento de desfoque de movimento funciona, podendo adicionar um leve desfoque às imagens (chamado de efeito fantasma), especialmente se a taxa de quadros estiver baixa. Quanto mais mudanças acontecerem na tela, maior é a probabilidade de você ver fantasmas. A implementação do TAA na UE pode usar algoritmos antifantasma para limpar isso, embora com um custo de processamento adicional. Você também pode usar diversas configurações para ajustar o histórico de quadros.
Você pode usar as seguintes variáveis de console para configurar o TAA:
| Variável de console de antisserrilhado temporal | Descrição | Valores |
|---|---|---|
| Qualidade da etapa de antisserrilhado temporal principal. | 0: Desabilitar filtragem de entrada. 1: Habilitar filtragem de entrada. 2: Habilitar mais filtragem de entrada, bem como antifantasma baseado em movimento. (Padrão) 3: Filtro de entrada de nível 1 de qualidade, mas com antifantasma habilitado. |
| Força o antisserrilhado temporal a usar apenas um dos quadros que foram amostrados. | Valores maiores ou iguais a 0 determinam o índice do quadro de amostra a ser usado. O valor padrão é -1. |
| Porcentagem do tamanho da tela do histórico de antisserrilhado temporal. | 0-100, como |
| Se essa opção for habilitada, o antisserrilhado temporal usará um shader de computação para aumentar a qualidade. Se estiver desabilitado, usa o shader de pixel para economizar largura de banda para o FBC em GPUs baseadas em quadrados. | 0: (desabilitado) 1: (habilitado) |
| Determina se deve aumentar a porcentagem da tela principal com antisserrilhado temporal. | 0: Usa a etapa de aumento espacial independentemente do AA. 1: O antisserrilhado temporal realiza o aumento espacial e temporal como método de porcentagem da tela. (Padrão) |
| Escolhe o algoritmo de aumento de escala a ser usado com o antisserrilhado temporal. | 0: Força o upscaler temporal padrão do renderizador. 1: Usa |
| Escolhe se será usada a configuração antisserrilhado temporal para dispositivos móveis. Isso desabilita o cache compartilhado em grupo dos buffers de cor e profundidade. | 0: Desabilitado (Padrão) 1: Habilitado |
| Se essa opção for habilitada, usará um kernel de filtro catmull-rom, que deve ser mais nítido do que o kernel de filtro gaussiano padrão. | 0: Desabilitado (Padrão) 1: Habilitado |
| Peso da contribuição do quadro atual para o histórico. Valores mais baixos causam desfoque e efeito fantasma, valores altos não conseguem ocultar a trepidação. | 0-1. O valor padrão é 0,04. |
| Tamanho do kernel do filtro. | Ponto flutuante entre 0 e 1. Um valor de 1 é mais suave, porém desfocado. O valor 0 é mais nítido, porém com mais aliases. Ponto flutuante entre 0 e 1. Um valor de 1 é mais suave, porém desfocado. O valor 0 é mais nítido, porém com mais aliases. |
| Número de posições de instabilidade a serem usadas para antisserrilhado temporal. | São valores inteiro que são potências de dois, entre 4 e 64. O valor padrão é 8. |
| Determina se deve ou não ser dimensionado o número de posições tremidas para antisserrilhado temporal ao aumentar a resolução. Isso ajuda a manter uma densidade consistente. | 0: Desabilitado 1: Habilitado (padrão) |
Antisserrilhado de multiamostragem
O antisserrilhado de multiamostragem (MSAA) suaviza bordas fazendo a amostragem da imagem várias vezes e, em seguida, calculando a média de todas as amostras. Este modo é mais caro, mas produz resultados de alta qualidade. Você pode configurar o número de etapas do MSAA com a variável de console r.MSAACount, que assume valores entre 0 e 8. Quanto maior for o número de etapas do MSAA, maior será a quantidade de memória da GPU usada.
| Valor de r.MSAAConount | Descrição |
|---|---|
0 | MSAA desabilitado (antisserrilhado temporal habilitado) |
1 | MSAA desabilitado |
2 | Use 2x MSAA |
4 | Use 4x MSAA |
8 | Use 8x MSAA |
O antisserrilhado de multiamostragem só é suportado para o uso de renderização de adiantamento em dispositivos móveis, não adiamento.
Antisserrilhado aproximado rápido
O antisserrilhado aproximado rápido (FXAA) é uma técnica de antisserrilhado apenas espacial e um efeito de pós-processamento. Ele usa um filtro de alto contraste para encontrar bordas e suavizá-las ao mesclar (pontilhamento) entre as bordas dos pixels. Como o nome sugere, essa técnica é rápida de renderizar e adequada para computadores e dispositivos de baixo custo. Embora essa técnica seja rápida de ser renderizada, a imagem final pode perder fidelidade quando comparada a outras técnicas de antisserrilhado.
| r.FXAA.Quality | Descrição |
|---|---|
0 | Console |
1 | Pontilhamento médio no PC usando 3 amostras |
2 | Pontilhamento médio no PC usando 5 amostras |
3 | Pontilhamento médio no PC usando 8 amostras |
4 | Pontilhamento baixo no CP usando 12 amostras (padrão) |
5 | Pontilhamento extremo no PC usando 12 amostras |