Passar para o conteúdo principal

Análise técnica da Digital Foundry ao Unreal Engine 5.4!

Contudo, a estabilidade dos fotogramas, o stutter e a pré-compilação de shaders ainda precisam de ser melhorados.

unreal engine 5.4 shot of a city street
Crédito da imagem: Epic Games

O Unreal Engine 5 atingiu um novo marco importante, a versão 5.4. Juntamente com a tecnologia que estabelece as bases para futuras iterações do motor, a Epic Games promete melhorias substanciais de desempenho com uma melhor utilização da CPU, resolvendo potencialmente um problema comum que vimos no PC e nas consolas desta geração. Naturalmente, a nova versão também inclui melhorias visuais, incluindo o sistema de geometria Nanite e o aumento da Super Resolução Temporal (TSR). Testámos esta última atualização do motor para ver como tudo funciona e para ter uma ideia do tipo de melhorias de desempenho que podem ser possíveis na nova versão.

Por mais impressionante que fosse, a primeira demo de Matrix Awakens no Unreal Engine 5.0, em 2021, já mostrava os principais problemas de desempenho que a Epic está a tentar resolver com o 5.4. Percorrer a cidade da demonstração de Matrix a toda a velocidade na PlayStation 5 foi o suficiente para causar quedas abruptas de desempenho, à medida que o motor se debate com o carregamento em novas áreas. É claro que se trata apenas de uma demonstração e não de um jogo, mas as leituras abaixo dos 30 fps e as interrupções no tempo de fotogramas, juntamente com o redimensionamento dinâmico da resolução, sugerem uma limitação grave da CPU no hardware da consola. Este facto foi confirmado com a demo City Sample no PC em 2022, em que as métricas simples de utilização da CPU e da GPU mostram um estrangulamento grave da CPU, mesmo em CPUs modernas e potentes como o Ryzen 7 7800X3D.

Logicamente, isso faz sentido. Muitos dos recursos mais proeminentes do UE5 têm componentes de CPU significativos, como MetaHuman, streaming de mundo aberto, ray tracing por hardware e Nanite, e, portanto, exigem muito do desempenho da CPU. Mais importante ainda, tende a ser limitado pelo desempenho de um único thread, pelo que as CPUs com maior número de núcleos não são capazes de escalar de forma adequada distribuindo a carga por vários núcleos e threads. Tendo em conta que tanto os PCs económicos como as consolas tendem a ter contagens de núcleos na ordem dos seis a oito e que está a chegar ao mercado um número crescente de jogos com o Unreal Engine 5, há muito potencial de desempenho por explorar.

Aqui está a versão em vídeo deste artigo, criada para que te possas sentar e relaxar enquanto os tons suaves de Alex te envolvem. Ver no Youtube

Eis o Unreal Engine 5.4. Existem algumas mudanças, mas a maior e mais importante é a paralelização do renderizador - essencialmente dividindo o thread de renderização para melhor utilizar CPUs multi-core. Esta alteração tem um impacto profundo no desempenho quando se compara o benchmark da cidade do Unreal Engine entre as versões 5.0 e 5.4. Num cenário de CPU limitada num Ryzen 7 7800X3D, a taxa de fotogramas é 42% superior na versão 5.4.

Por outras palavras, passamos de uma situação em que não temos praticamente nenhuma hipótese de obter 60 fps numa das melhores CPUs para jogos - uma que nem sequer estava disponível quando a primeira demo do UE5 foi lançada! - para conseguir facilmente taxas de fotogramas na casa dos 80. É uma enorme melhoria no desempenho geral, apesar do conteúdo e das definições permanecerem os mesmos, e deve-se predominantemente a uma melhor utilização da CPU.

São óptimas notícias para o PC, mas também para as consolas. Apesar de não podermos executar a demo UE 5.4 nas consolas diretamente como podemos fazer no PC, podemos usar o nosso PC Frankenstein para ter uma ideia de como se comporta o hardware equivalente ao das consolas da geração atual. Este PC está equipado com uma AMD RX 6700, uma placa gráfica semelhante à da PS5, e um kit de desktop 4800S, que é a APU da Xbox Series X. Teoricamente, esta mistura deveria proporcionar um desempenho idêntico ao de uma consola da geração atual, mas, na realidade, as taxas de fotogramas estão muito abaixo do que poderíamos imaginar em definições "épicas".

De qualquer forma, obtemos um aumento médio de 60 por cento na taxa de fotogramas quando corremos pelas ruas entre as versões 5.0 e 5.4, com tempos de fotogramas muito menos irregulares à medida que começamos a ficar limitados pela GPU. Quando voamos pela cidade, sobrecarregando mais a CPU, esse diferencial passa para 80%. Embora este teste não seja indicativo do desempenho real da consola, mostra que as melhorias da versão UE ajudam mais as configurações de gama baixa do que as de gama alta, em termos relativos.

Embora o Unreal Engine 5.4 mostre ganhos de desempenho médios convincentes, o motor ainda tem algum caminho a percorrer em termos de outros cenários de desempenho. Como já referi várias vezes em artigos da Digital Foundry, o UE tem um grande problema de stutter na compilação de shaders. Há muitas razões para isso, mas é possível ver o problema em grande escala quando se executa pela primeira vez a amostra da cidade de Matrix na versão 5.0 - picos enormes de tempo de fotogramas na ordem das centenas de milissegundos. Para resolver este problema, os programadores tendem a utilizar um passo de pré-compilação manual de shaders, mas este passo exige muito trabalho por parte do programador e requer uma abordagem minuciosa para selecionar todos os shaders.

Devido a este facto, a Epic passou a utilizar a pré-cache automática de shaders a partir da versão 5.1 do Unreal Engine, que compila shaders a pedido em threads de CPU em segundo plano. Este sistema automático elimina as interrupções mais incómodas com uma cache de shaders "a frio", mas continua a ser necessária uma pré-compilação de shaders adequada para maximizar o desempenho e minimizar as interrupções.

ue5.4 performance comparison between 'cold' and 'warm' shader caches
Embora o pré-cache automatizado de shaders seja uma óptima tecnologia, existe ainda uma grande diferença de desempenho e estabilidade entre caches de shaders "a frio" e "a quente". | Image credit: Digital Foundry

Apesar deste progresso, mesmo jogos como o Fortnite da Epic, que correm no UE 5.4 e utilizam a combinação do sistema de cache assíncrono automático e um passo de compilação de shaders, podem apresentar problemas. Ao jogar o jogo pela primeira vez num PC robusto com uma RTX 4090 e um Ryzen 7 7800X3D a 1080p para aliviar propositadamente a GPU, o jogo não fica a 60 fps perfeitos - e, de facto, as falhas são óbvias na nossa primeira partida de Fortnite, mesmo antes de sair do autocarro. Na verdade, demorei até ao oitavo jogo, ou cerca de uma hora de jogo, para deixar de ver grandes picos de tempo de fotogramas quando ia para novas áreas do mundo do jogo. Dado que um jogo desenvolvido com o apoio dos engenheiros da Epic UE5 e com um orçamento enorme continua a ter estes problemas num PC topo de gama, é evidente que continuam a existir alguns desafios inerentes.

A integridade dos fotogramas também poderia ser melhorada. Se voltarmos à demonstração da cidade em Matrix na versão 5.4, fica claro que ainda há picos na região de 33,3ms em intervalos de poucos segundos - que são visíveis até mesmo nos melhores monitores VRR que existem. De facto, os tempos de fotogramas com picos são subjetivamente piores do que os da mesma cidade na versão 5.0, devido à maior disparidade de tempos de fotogramas. Esta questão da movimentação pelo mundo do jogo e da obtenção de grandes picos no tempo de fotogramas é o que eu chamo de stutter transversal e é algo endémico a muitos jogos do Unreal Engine. O Unreal Engine 5.4, apesar de ajudar a aumentar as médias da taxa de fotogramas, não parece ajudar muito o stutter transversal, de acordo com a minha experiência.

Para além do desempenho, as actualizações do Unreal Engine desde o lançamento da versão 5.0 incluíram melhorias visuais interessantes. Um bom exemplo é a renderização dos vidros, que não inclui reflexos ray tracing na versão 5.0, mas inclui quando se utilizam definições mais elevadas no PC na versão 5.4 para um resultado visualmente mais consistente.

comparing reflection quality settings in unreal engine 5.4
As definições de qualidade dos reflexos mais elevados que utilizam o ray tracing permitem melhorias significativas na fidelidade, muito para além das transparências de baixa qualidade e dos reflexos screen-space disponíveis no UE 5.0.
demo of higher-quality hit lighting in ue 5.4, with a small performance penalty: 60fps disabled and 52fps enabled
A iluminação de impacto proporciona reflexos de melhor qualidade com cor e sombras ray tracing - e a sua ativação também não é muito dispendiosa, com uma queda de desempenho de 13% em 4K nativo.
Image credit: Digital Foundry

Outra funcionalidade orientada para o PC que a Epic tem vindo a atualizar continuamente desde a versão 5.0 é a iluminação de impacto, que faz com que a iluminação nos reflexos pareça muito mais realista. Sem a iluminação de impacto, os objectos dinâmicos, como os modelos de personagens, não têm cor nos reflexos, pelo que pode ser uma melhoria impactante. Os reflexos da versão 5.4 também apresentam texturas e materiais mais detalhados e realistas nos reflexos, para além de sombras com ray tracing. Esta funcionalidade funciona agora bem e tem apenas um custo de desempenho de 13% numa RTX 4090 a 4K nativo - por isso, espera-se um impacto menor quando se usam upscalers como o DLSS ou resoluções mais baixas.

Outra atualização interessante do UE5 é a iluminação de emissão, que lida com as luzes artificiais noturnas da paisagem urbana na demonstração de Matrix com ray tracing Lumen. Isto foi significativamente melhorado entre as versões 5.0 e 5.4, com uma maior cobertura evidente na versão mais recente - embora à custa de mais cintilação de luzes de emissão muito pequenas à distância (e de fontes de luz em geral, que parecem um pouco menos estáveis nesta versão).

Ao olhar para o futuro, para além da versão 5.4, há algumas coisas interessantes a ter em conta, mas, para mim, a mais interessante é a extensão do Nanite para modelos de personagens. Esta funcionalidade é atualmente experimental, mas as imagens fornecidas pelo técnico da UE Dylan Browne da Model Farm são impressionantes. Permite obter detalhes geométricos quase infinitos, independentemente da proximidade da câmara à personagem e, neste caso, Dylan está a usar ruído 3D ligado ao UV que está a circular. Isto dá a aparência de uma superfície em movimento irregular e em ebulição em todo o modelo - muito fixe.

showing a normal and nanite triangle view of a character with Unreal Engine 5's Nanite enabled
Esta imagem, tirada de imagens fornecidas por Dylan Browne da Model Farm, mostra Nanite a ser usada num modelo de personagem. Isso permite obter um efeito assustador e altamente detalhado como o mostrado. | Image credit: Digital Foundry

É claro que se trata apenas de uma demonstração, mas é impressionante ver todo este pormenor a ser fornecido por uma geometria incrivelmente densa. É fácil imaginar o tipo de pormenor que isto poderia desbloquear para os jogos do futuro, como sistemas de danos em personagens de jogos de terror ou personagens que se transformam e mudam em tempo real.

É evidente que o Unreal Engine 5.4 é um lançamento importante, especialmente se o desempenho de cerca de 40% da CPU que vimos na demonstração de Matrix for algo indicativo do tipo de aumento que podemos ver nos jogos de lançamento. E, como vimos noutros casos, o UE 5.4 é mais bonito do que o 5.0 em muitas áreas, especialmente utilizando as predefinições de maior qualidade feitas para placas gráficas do PC.

É igualmente evidente que o UE também beneficiaria de mais melhorias de desempenho, especificamente no que diz respeito à estabilidade dos fotogramas. O shader caching também precisa de ser trabalhado, se o próprio jogo Fortnite da Epic for uma medida exacta - um jogo como este não deveria ter tantos problemas num CPU topo de gama. Também gostaria de ver uma abordagem mais sistémica para aliviar os stutters de travessia, uma vez que estes são encontrados em toda a demo de Matrix e em quase todos os jogos UE5 existentes.

Lê também