Silent Hill 2 PC: mais um jogo Unreal Engine 5 estragado pelo stutter
Existe muita coisa a elogiar no trabalho da Bloober Team - mas o desempenho suave está novamente fora de questão.
Tal como acontece com muitos jogos Unreal Engine 5, Silent Hill 2 stutter e stutter muito. Porque é que isso acontece? Pode ser corrigido? À procura de respostas para isto, dei por mim a cair numa toca de coelho, com este jogo - e outros baseados no Unreal Engine 5 - a apresentar problemas ainda mais preocupantes do que grandes saltos no gráfico de tempo de fotogramas. Stutter na compilação de sombreadores? Isso não é um problema em Silent Hill 2. Stutter transversal? Bem, infelizmente é - e é altamente problemático. No entanto, à semelhança de Star Wars Jedi: Survivor, também há stutter de animação. Mesmo que se consiga estabilizar o desempenho, continua a ser impossível desfrutar de uma experiência suave e consistente em Silent Hill 2. Temos alguma ideia da razão pela qual isto acontece e até uma solução muito improvisada, mas, mesmo assim, o UE5 continua a apresentar problemas que se continuam a acumular à medida que jogo após jogo é afetado pela situação.
Antes de aprofundarmos este assunto, vamos falar do trabalho da Bloober Team de uma forma mais holística. Há muito para gostar e apreciar em termos da versão para PC de Silent Hill 2. As opções gráficas são geralmente boas e também há algumas surpresas - como o suporte de redimensionamento dinâmico da resolução ao estilo das consolas, embora esteja limitado apenas ao upscaler TSR da Epic. Ainda assim, há um escalonamento real para além da versão PlayStation 5 do jogo, o que é algo que não considero garantido hoje em dia. Por exemplo, as consolas tendem a utilizar o software Lumen para a iluminação global difusa e os reflexos, mas a versão acelerada por hardware é significativamente melhor. Muitas versões para PC nem sequer se dão ao trabalho de oferecer Lumen por hardware, mas Silent Hill fá-lo através da opção “ray tracing on/off”, produzindo obviamente reflexos muito superiores e uma iluminação indireta mais precisa. Isto é geralmente uma coisa boa, pois a implementação do Lumen de software do PC não parece oferecer o equivalente ao cenário épico do UE5.
Estou entusiasmado com o facto de o jogo oferecer caraterísticas RT únicas apenas encontradas na versão para PC, e muitas vezes achei que o jogo tinha um aspeto fantástico, mas também notei uma série de falhas visuais que merecem ser apontadas, caso possam ser corrigidas em futuras atualizações. Por exemplo, quase todos os tecidos do jogo que vi até agora correm a 30 fps, independentemente do objetivo da taxa de fotogramas, pelo que as cortinas ou bandeiras ao vento parecem estranhas e bastante pobres. O mesmo se passa com as cutscenes, que, surpreendentemente, se fixam nos 30 fps usando o limite de taxa de fotogramas do UE5. Isto nunca deveria ser uma “caraterística” numa versão para PC, mas, para piorar a situação, o ritmo inconsistente dos fotogramas está na ordem do dia se estivermos a utilizar o v-sync. Tanto quanto sei, isto também afeta a versão PS5 no seu modo de desempenho.
Embora o hardware da Lumen tenha geralmente melhor aspeto, também existem erros. A relva pode cintilar, enquanto toda a apresentação pode cintilar momentaneamente ao atravessar pontos consistentes, mas aparentemente arbitrários no mundo do jogo. Os reflexos do Lumen também sofrem de uma fraca denoising, apresentando efeitos óbvios de “ebulição”, enquanto as folhas em movimento podem “deixar” rastos atrás de si. Existem outras falhas e erros em todo o jogo, mas foi notável ver a comunidade PC tentar resolver o problema com mods. A reconstrução de raios DLSS foi transferida para o jogo, por exemplo, resolvendo de forma convincente o problema de denoising do Lumen, enquanto as trocas de .dll DLSS podem resolver o problema das folhas que se movem. Até eu entrei no espírito da coisa com ajustes .ini para adicionar reflexos de transparência ray tracing em vez de apenas sondas Lumen e reflexos screen-space, o que melhora muito a renderização de vidro. Como sempre, os modders de PC estão a tirar o melhor partido da situação, tentando melhorar o jogo - e esperemos que o Bloober se inspire nisto. Há muito daquilo a que gostamos de chamar “low-hanging fruit”: soluções fáceis que podem comprovadamente melhorar o jogo.
No entanto, não devíamos estar à espera que os modders resolvessem os eternos problemas de stutter do UE5 - e sim, há stutter que não se consegue resolver, quer estejamos a falar de mods, de ajustes .ini ou mesmo de usar o hardware de PC mais potente que existe. Estes são problemas contínuos e fundamentais do Unreal Engine que requerem uma correção de software. A boa notícia é que não há stutter na compilação de shaders: não haverá problemas porque o código de shader está a ser compilado em tempo real à medida que é necessário. A Bloober Team parece estar a colocar isto no processo de carregamento, onde as ferramentas de monitorização do PC mostram que a CPU está a atingir o máximo em todos os núcleos. Mas stutter transversal? Isso está aqui em abundância, com até mesmo um Ryzen 7 7800X3D topo de gama a oscilar momentaneamente para 16-24ms. O jogo pode correr consistentemente a mais de 100 fps, dependendo do hardware, por isso digamos uma média de 10 ms por fotograma. Ver os tempos de fotogramas duplicarem é notório e não pode ser evitado, e lembrem-se que isto acontece com a CPU mais rápida para jogos que o dinheiro pode comprar. Em algo como o mais popular Ryzen 5 3600 - uma CPU “clássica” - é possível duplicar esse valor.
Li online e vi muitas pessoas com a ideia errada de que a situação é muito melhor na PS5, mas infelizmente não é assim. Aí é mais difícil medir a duração exata dos stutters que ocorrem devido à interferência do v-sync, mas é fácil de ver que estão todos lá e são muito óbvios no modo de 30 fps do jogo. A diferença é que a taxa de fotogramas geral é muito mais baixa, pelo que o stutter transversal se apresenta como uma série de quedas de fotogramas, ao contrário da queda repentina do PC. Na PS5 também parece que o stutter transversal se espalha por um período de tempo mais longo - portanto, é mais uma série de stutters mais pequenos do que um grande pico, como se vê no PC.
Vimos algumas pessoas a tentar mitigar o stutter transversal seguindo um caminho semelhante ao das consolas: limitar artificialmente o jogo a uma taxa de fotogramas mais baixa e usar o desempenho superior da CPU para conter os stutters numa atualização de fotogramas. Por exemplo, se o Silent Hill 2 stutter até um máximo de 25ms numa determinada CPU, a limitação a 30fps (33,3ms por fotograma) deverá conter o problema numa atualização regular. Isto funciona, dando um novo fotograma a cada 33,3ms, mas não funciona, dando um desempenho suave e é aqui que encontramos outro problema chave com o Unreal Engine 5 que tem de ser resolvido: o stutter da animação. Com uma taxa de fotogramas limitada a 30 fps e novos fotogramas consistentemente entregues, a versão para PC de Silent Hill 2 continua a stutter (!) - desta vez é a atualização do jogo que é afetada. Recomendo que vejam o vídeo para ver o problema em ação e para uma descrição mais detalhada do que pensamos ser o problema.
O motor está a funcionar em “tempo delta”, o que, em teoria, deveria proporcionar a mesma velocidade de jogo independentemente da taxa de fotogramas. Se desativarmos isto através dos parâmetros de lançamento e forçarmos o Silent Hill 2 a correr a 30 fps, descobrimos que o problema desaparece completamente (infelizmente, não parece funcionar a 60 fps). Definir o jogo para um tique fixo significa que, se permitir que o jogo corra a uma taxa de fotogramas mais elevada, correrá a velocidades comicamente rápidas. Taxa de fotogramas mais baixa? Desaceleração literal ao estilo SNES. No entanto, se tiveres potência suficiente para correr a 30 fps, o problema é resolvido. Mais uma vez, o vídeo acima mostra alguns exemplos dramáticos.
O que este teste mostra é que algo está profundamente errado em Silent Hill 2. Tecnicamente - embora com aspas enormes - conseguimos “consertar” o jogo, mas limitar a 30 fps não é uma solução viável. Os problemas deste jogo levaram-me a uma toca de coelho onde descobri algo inesperado e ainda mais preocupante do que apenas “maus” tempos de fotogramas. Há algo de muito errado em Silent Hill 2, e o facto de também o ter visto em Star Wars Jedi: Survivor preocupa-me. É um problema do Windows? É um problema do jogo? Será um problema do Unreal Engine? Será uma combinação de problemas? Não faço ideia, mas certamente não me cabe a mim resolver este problema - só posso informar sobre ele e esperar que as produtoras de jogos e a própria Epic tomem consciência do problema e o eliminem.