
A Sucker Punch mergulha nos detalhes técnicos que ajudaram a dar vida à envolvente jornada de Atsu.
Ghost of Yōtei foi um trabalho feito por amor para a Sucker Punch, e ficamos felizes que tenha chegado ao público para que todos possam jogar. Agora que muitas pessoas já sentiram como é o jogo, achamos que seria uma boa oportunidade para falar um pouco sobre a tecnologia que nos ajudou a chegar aqui.
Partindo do que alcançamos com Ghost of Tsushima, a visão de projeto para Ghost of Yōtei deu mais ênfase à sensação de liberdade dos jogadores em uma natureza indomada. Isso significou buscar formas menos intrusivas de guiar os jogadores, lindas paisagens com horizontes mais amplos, combate com armas mais flexível, personagens memoráveis e com personalidade própria, além dos momentos narrativos emocionantes. Tentar fazer tudo isso enquanto se mantém uma boa taxa de quadros é um claro desafio.
Então, vamos explorar alguns aspectos da tecnologia que usamos para criar Ghost of Yōtei!
Andando por um mundo selvagem
Ao fazer o protótipo da nossa visão de exploração livre, achamos que seria mais eficaz se os jogadores pudessem olhar uma linda paisagem e seguir a curiosidade para encontrar seu jogo. De uma perspectiva técnica, capturar essa sensação exigiu linhas de visão mais amplas, o que significa melhor renderização para grama, terreno e montanhas à distância.
Melhoramos a aparência das montanhas distantes incluindo modelos e materiais de terreno detalhados nas texturas que podíamos exibir em mais detalhes. Também dobramos a quantidade de grama e itens renderizáveis que nosso renderizador com computação na GPU pode produzir. Nesta foto, as montanhas distantes com mais de um milhão de árvores, rochas e arbustos são reduzidas para cerca de 60 mil itens individuais que renderizamos para gerar G-buffers e formar a imagem final.
Nós usamos técnicas de autoria assistida procedural e nos aproveitamos da computação na GPU para processar todas essas instâncias eficientemente e sem envolver a CPU. Isso inclui sequências de tarefas de computação para realizar remoção por oclusão (occlusion culling), alocação de memória e preenchimento de registros de renderização antes de relermos essas informações na CPU para anexar às listas de comando finais para o quadro. Aqui temos uma animação de uma cena similar com toda a geometria de renderização da GPU animando corretamente para dar a você uma noção da escala envolvida. Também usamos essas técnicas para dados gerados na execução, como os campos vastos e as flores, e às vezes até para coisas como cordas e correntes.
Para dar um toque único a cada área do mundo, desenvolvemos sistemas de interação que ajudam a enfatizar os seus temas. Boa parte do mundo tem grama ou plantas pequenas e, além de elas se deformarem com o vento e movimentos da personagem, acrescentamos um sistema que renderiza movimentos amplos das armas em um “buffer de corte”. Então esse buffer é usado por geometrias cortáveis para gerar partículas com a geometria acima do corte. Isso permite que Atsu corte a maioria das gramas, flores e plantas pequenas no jogo.
Hokkaido tem os invernos mais extremos do Japão, então queríamos representar de forma realista a interação dos personagens com a neve profunda. Para auxiliar nisso, construímos um sistema de tesselação do terreno que aumenta a quantidade de detalhes que podem ser representados pelo solo e que pode sofrer deformação de forma dinâmica durante a execução. Para chegar a isso, as partículas e a geometria são renderizadas em um buffer de deslocamento (displacement buffer) quando os personagens andam, rolam e lutam nele. Isso era bem flexível, então estendemos para permitir que os personagens derrubassem neve de árvores e arbustos, gerando partículas de neve no processo. Quando combinamos isso com o novo efeito de brilho da neve usando ruído tela-espaço estável, acaba ficando assim.
Montanhas altas como o Monte Yōtei costumam ficar cobertas de nuvens, então tivemos que pensar numa forma de renderizar nuvens na frente de geometrias do mundo, o que não era possível na engine de Ghost of Tsushima. Também queríamos dar a impressão de um clima nebuloso e instável, aumentando a velocidade com que as nuvens se moviam. Para possibilitar movimentos mais rápidos das nuvens sem gerar artefatos indesejados, armazenamos a profundidade visível média de cada texel no mapa das nuvens (medido com a câmera), o que nos permitiu usar técnicas de mapeamento parallax enquanto rolávamos cada quadro das nuvens. (Também mesclamos três quadros de nuvens, em vez de dois, o que resulta em movimento ainda mais suave.) Ao armazenar o quadrado da profundidade visível no mapa de nuvens, podemos reconstruir uma simples distribuição estatística da opacidade das nuvens com cada raio. Isso nos permite computar o quanto as nuvens devem obscurecer geometrias do mundo, como montanhas.
Névoa e dispersão atmosférica eram um foco importante ao definir o estilo artístico de Ghost of Tsushima. Para Ghost of Yōtei, queríamos aproveitar isso adicionando suporte a volumes de névoa locais. Eles são computados de modo eficiente usando as instruções expandidas para GPU de pontos flutuantes de 16-bits do PS5. Como efeito colateral das nossas otimizações para nuvens, computamos um mapa de sombras de nuvens para luz-espaço, e isso nos permite ver raios crepusculares (“raios divinos”) em nossa névoa volumétrica, mesmo distante da câmera. Também deixamos os artistas colocarem “alvos para raios divinos” no mundo, para que fossem iluminados com mais frequência por uma abertura nas nuvens.
Personagens e movimento
Um de nossos principais objetivos era dar mais vida o mundo de Ghost of Yōtei. Queremos que tudo na tela se mova com o vento, incluindo todas as roupas dos personagens, as borlas nas armas e todos os tecidos pendurados nos povoados. Quando rolar pelo chão durante uma luta, queremos que poeira e folhas se levantem e você saia sujo de lama e sangue, para que sinta a realidade deste mundo.
As roupas complexas de Atsu só podem se mover de forma realista graças ao novo suporte a camadas que integramos ao nosso sistema para tecidos computados pela GPU de alta performance. Além de adicionar suporte para várias camadas de simulação de tecido (ver abaixo), demos suporte a colisão de roupas e usamos uma série de soluções ajustadas com cuidado para fazer grandes números de simulações de tecidos individuais de maneira eficiente. Aqui um exemplo de Atsu em uma de suas roupas mais complexas, cercada por tecidos móveis.
Partículas de GPU têm sido um dos fortes da Sucker Punch desde Infamous Second Son. Em Ghost of Yōtei, continuamos a adicionar nossos truques, permitindo que partículas usem material de terreno, deformações e correntes de água. Por exemplo, esta imagem mostra partículas pousando e correndo pelo rio.
Além de afetar o mundo, nós ancoramos os personagens fazendo o mundo bater de volta. Fazemos isso jogando informações em uma grade direcional deformada ao redor da personagem, que então usamos para sobrepor efeitos de textura para deixá-la molhada, suja de sangue e lama ou coberta de neve.
Também aproveitamos nossos sistemas de partículas para permitir que o jogador volte ao passado para explorar a história da família de Atsu. Para trocar entre passado e presente, mudamos o esqueleto e a geometria de Atsu enquanto mantemos seu estado de personagem e animação consistentes. Elementos de fundo e iluminação também são alterados na hora, graças à velocidade do SSD, com algumas pré-buscas escolhidas cuidadosamente. Isso é feito por trás de uma cortina de partículas animadas que usam uma cópia do buffer de quadros logo antes da transição.
Traçado de raio e aprimoramentos para o PS5 Pro
Como um jogo nativo de PS5, sabíamos que queríamos aprimorar a qualidade de imagem aproveitando algumas das novas tecnologias da plataforma. Com o lançamento do PS5 Pro, também queríamos tentar ir numa direção que nos ajudaria em jogos futuros. Com o apoio sólido das equipes centrais de tecnologia do PlayStation, investimos em duas grandes áreas: traçado de raio e upsampling de imagens com PSSR.
Como Ghost of Yōtei se passa nos ermos da Hokkaido do século XVII, não há tantas superfícies parecidas com espelhos que sirvam para reflexos de traçado de raio. Em vez disso, decidimos usar traçado de raio para melhorar a fidelidade da nossa solução de iluminação global. Atacamos isso em duas frentes: primeiro com um modelo de iluminação melhorado e mais automatizado, que então poderíamos aprimorar com iluminação global de traçado de raio (RTGI) de curto alcance. Isso exigiu mudanças significativas em nosso formato de streaming de meshs, permitindo descompactar dinamicamente as estruturas de aceleração usadas pelo hardware de traçado de raio. Usando o hardware de traçado de raios mais eficiente do PS5 Pro, os jogadores podem habilitar RTGI mirando 60 quadros por segundo nos consoles Pro.
Para Ghost of Yōtei, reconstruímos nosso sistema para usar um algoritmo de resolução dinâmica mais geral, com upsampling, em parte para que pudéssemos tirar proveito do PSSR. O PSSR funcionou muito bem para nós com apenas alguns ajustes, incluindo executar rasterização conservadora para partículas pequenas. Em comparação, nosso algoritmo de upsampling padrão requer auxílio de hinting e authoring para alcançar bons resultados. Uma amostra lado a lado. Se você aproximar muito (16x antes da compactação do gif), dá para ver que o PSSR reconstrói melhor detalhes finos de arquitetura e folhagem. Também é mais estável em movimento.
Velocidade de carregamento
Há muito tempo, a Sucker Punch se orgulha de colocar nossos jogadores em ação o mais rápido possível. Em Ghost of Yōtei, continuamos essa tradição melhorando ainda mais os tempos de carregamento rápidos.
Otimizamos o carregamento pré-processando dados para que só precisam de poucas leituras do SSD e conectando operações de acordo com localização ou bloco de terreno para carregar dados de jogo relevantes. Então, computamos e carregamos somente mips de textura e LODs de meshs necessários para renderizar o primeiro quadro, com uma leitura por elemento. Veja como é carregar do extremo sul ao extremo norte sem que a tela escureça. (Observe que isso é um pouco mais lento do que seria se não tivéssemos que renderizar o mundo o tempo todo.)
Durante o desenvolvimento, nós fizemos “comida de cachorro” com esses sistemas, em vez de usar um modelo de carregamento diferente das builds de lançamento. “Comida de cachorro” é a linguagem usada por programadores para se dirigir a todos os programadores, artistas e designers que testam o produto a ser lançado para melhorar sua qualidade.
Conclusão
Essa foi uma amostra do trabalho técnico que fazemos na Sucker Punch. Mas criar jogos é mais do que isso: é um esforço em equipe gigante, com a arte influenciando a tecnologia e a tecnologia influenciando a arte o tempo todo.
Quando começamos este projeto há cinco anos, nossa meta era criar um mundo de jogo em que os jogadores adorassem a experiência de ficarem imersos. Muitas de nossas decisões técnicas se ancoraram na fantasia principal de Ghost of Yōtei: a de uma guerreira andarilha passando a limpo os eventos de seu passado. Estamos muito felizes em testemunhar nossa visão ganhando vida e os jogadores compartilhando suas experiências, publicando capturas de tela e vídeos incríveis do jogo com o Modo Foto.
Estamos muito orgulhosos do resultado e esperamos que todos se divirtam vagando pela natureza de Ghost of Yōtei.
Se tiver interesse em mais informações sobre as tecnologias e o processo de desenvolvimento da Sucker Punch, dê uma olhada em nossas apresentações anteriores em conferências como GDC e SIGGRAPH. Queremos compartilhar mais em 2026.
Agradecimentos especiais para Jasmin Patry, Doug Davis e Eric Wohllaib, que me ajudaram a editar e preparar o conteúdo deste artigo, além de toda a galera da Sucker Punch que estou representando.
Participe da Conversa
Adicionar ComentárioMas não seja mala!