Novos detalhes de Animal Well
O texto abaixo foi publicado no PlayStation.Blog brasileiro.
Animal Well é apenas mais um game indie de pixel art em 2D, então como é que ao mesmo tempo parece tão… diferente? Em uma entrevista da Summer Games Fest, Danny O’Dwyer (Noclip) disse tudo quando chamou Animal Well de “o game mais difícil de explicar porque gostei.” Definir o que há de diferente pode ser complicado, principalmente quando o seu cérebro te diz que o game parece ter vindo direto da era do Commodore 64. Hoje arrumei tempo para explicar um pouco sobre o trabalho que entra na criação de um único frame de Animal Well para que o jogo tenha a aparência que tem. O que segue é um tour breve e mais ou menos de alto nível, tudo que mostro poderia ser um blog separado, mas vamos pelo menos dar uma olhadinha por trás das cortinas, vai ser interessante.
Para começar, Animal Well é renderizado em muitas camadas diferentes, todas compostas de maneiras complicadas. Aqui você pode ver um relance dessas camadas, e de como são usadas juntas para renderizar a iluminação, antes da produção da imagem final.
Esta imagem é de logo no início do game, onde você pode usar fogos de artifício para espantar um fantasma que o persegue. Podemos dividi-la para ver alguns dos passos da renderização envolvidos.
Para ainda mais diversão, podemos também olhar para a mesma imagem com a iluminação desativada.
Na hora de renderizar, Animal Well faz várias coisas pequenas que somadas, criam o resultado final que você vê. Aqui estão apenas alguns exemplos.
Mapas Normais
Quando uma luz se move pelo cenário de fundo, ela o ilumina de maneira diferente, de acordo com a direção de onde a luz está vindo. Para obter esse efeito, estou usando mapas normais. Mapas normais são texturas que ajudam a definir pequenos detalhes geométricos em uma superfície, que de outra maneira pareceriam achatadas. A cor de cada pixel representa a ‘superfície normal’, que é um vetor que descreve o direcionamento da superfície. Isto é uma parte bem básica da criação de grande parte da arte 3D, mas é muito menos comum em games 2D. Eu desenho os mapas normais à mão, junto com o resto da arte do game.
A fonte de luz interagindo com os mapas normais
Efeitos de Fundo
Animal Well faz muitas coisas divertidas com os fundos. Neste exemplo, vemos muita geometria em 3D implícita sendo marcada por raios, o que depois inclui reflexos marcados com raios também! Geometria implícita é qualquer coisa que não seja definida por malhas 3D tradicionais. No caso de Animal Well, estou usando o que são conhecidas como “signed distance functions”, ou SDFs. Esta geometria é iluminada pelas fontes de luz definidas nas camadas à sua frente. As SDFs podem ser caras para renderizar (“caras” no sentido de usarem poder de processamento limitado), mas neste caso, o GPU do PS5 nem pisca.
Efeitos de Fluido
Animal Well possui uma camada dedicada a rodar uma simulação de fluido Navier Stokes constantemente. Ela é usada para vários efeitos pelo game, sendo água e fumaça os mais comuns. Os sprites podem ser desenhados nela como se fossem ‘tintura’, e depois os objetos do game também podem desenhar forças no campo, causando o fluido a reagir de maneira bem realista. Simulações como esta podem ser caras, pedindo várias iterações para computar um resultado preciso. Também tivemos cuidado especial para ter certeza que as cores se encaixam com o resto da pixel art.
Ferramentas
Grande parte do desenvolvimento não diz respeito ao game em si, e sim com a criação de ferramentas para criar o game. Eu mesmo desenvolvi a engine e o editor do jogo do zero, ao mesmo tempo em que a usava para criar o game.
Controle Midi
Quase qualquer variável da minha engine pode ser editada usando um controle midi que tenho acoplado ao meu computador. Assim o processo de sintonizar o gameplay fica bem mais rápido (e mais divertido!). Usando um controle midi eu posso literalmente sintonizar as configurações.
Usei uma versão modificada do programa conhecido Aseprite para desenhar e animar os sprites. Posso fazer mudanças no Aseprite, que utiliza um formato binário customizado de animação, e a engine instantaneamente as regarrega no game enquanto ele roda.
Latência Super Baixa
Da mesma forma que pode ser difícil articular como Animal Well é diferente de outros games de pixel art, é também difícil dizer porque é tão divertido jogar. Afinal, os controles são bem simples: mova-se para a esquerda e direita, salte, e use itens. É isso. Então o que Animal Well faz de diferente comparado a todos os outros games na história dos games? É tudo uma questão de latência de input.
Criar uma engine customizada do zero dá muito trabalho, e deve ser por isso que a maioria das pessoas não o faz. Existem várias engines que podem ser compradas prontas, de Unreal ou Unity até GameMaker e muitas outras. Games criados com engines compradas ficam no topo da camada de engines, o que cria um buffer entre a CPU e a GPU. Em Animal Well, assim que o jogador sequer toca o controle, o código do game pode informar a GPU imediatamente e diretamente o que fazer, o que significa que o game pode renderizar usando o seu input já na mesma frame, sem qualquer buffer. O caminho do cérebro → dedos → controle → game → display se torna quase instantâneo. Claro, ninguém nota isso conscientemente. O jogo apenas começa a parecer uma extensão da sua mente, e o controle parece desaparecer.
Gravado a 240 FPS em um display OLED, desacelerado aproximadamente 400%
Quando descrevo o processo de desenvolvimento de Animal Well, muitas vezes uso a frase “game pixel art de plataformas em 2D, de próxima geração”. Espero que esse tour pelos bastidores tenha mostrado um pouco o que quero dizer com isso.