Escolhendo taxas de quadros para animação de sprites

"Quantos fps minha animação deve ter?" costuma ser uma pergunta feita como se houvesse uma única resposta. Há duas respostas distintas — quantos quadros diferentes uma ação tem e com que velocidade esses quadros são reproduzidos. Confundir as duas é o que faz animações parecerem lentas mesmo com muitos quadros disponíveis, ou entrecortadas apesar da reprodução rápida.

Quantidade de quadros e velocidade de reprodução são decisões diferentes

Um ciclo de caminhada com 4 quadros reproduzidos a 8 quadros por segundo leva meio segundo por ciclo. Um ciclo com 8 quadros a 8fps leva um segundo inteiro, o dobro do tempo, com a mesma velocidade de reprodução. A quantidade de quadros determina quanto detalhe de movimento existe no ciclo; a velocidade de reprodução determina com que rapidez ele se repete. Você pode ter um ciclo detalhado de 12 quadros lento demais para parecer uma caminhada, ou um ciclo simples de 2 quadros na cadência exata que ainda comunica a ação com clareza, porque a percepção humana de movimento depende mais do tempo do que dos detalhes.

Isso importa na prática porque os dois controles se compensam dentro de um orçamento fixo de arte. Se você só pode desenhar 4 quadros de um ataque, não está condenado a uma animação ruim — ajuste a velocidade de reprodução e os tempos de pausa (mais sobre isso abaixo) até que os 4 quadros sejam percebidos corretamente, em vez de presumir que precisa de mais quadros para corrigir um problema de tempo.

Como 8, 12 e 24fps realmente se parecem

Esses números descrevem a frequência com que o quadro exibido muda, independentemente da taxa de quadros de renderização do próprio jogo.

  • 8fps — um novo quadro a cada aproximadamente 125ms. Movimento claramente em etapas; cada pose fica visível tempo suficiente para ser percebida individualmente antes da próxima. Parece deliberado, pesado ou intencionalmente retrô, não suave.
  • 12fps — um novo quadro a cada aproximadamente 83ms. A taxa tradicional "em dois" da animação desenhada à mão (desenhar novo conteúdo a cada dois quadros de um filme de 24fps). Suave o bastante para parecer um movimento fluido na maioria das ações de jogos, ainda com pouco trabalho de desenho.
  • 24fps — um novo quadro a cada aproximadamente 42ms, seguindo a taxa de quadros do cinema. O movimento parece totalmente suave, sem etapas perceptíveis. Precisa de aproximadamente o dobro do conteúdo de quadros de 12fps para preencher a mesma duração, ou da mesma quantidade reproduzida em metade do tempo.

Nenhuma dessas opções é objetivamente correta. A escolha depende do que você anima e da sensação que quer transmitir, por isso a próxima seção divide as recomendações por ação, em vez de dar um número para o jogo inteiro.

Três linhas de tiras do mesmo ciclo de caminhada: quatro quadros rotulados como 8 fps retrô entrecortado, seis quadros como 12 fps padrão e doze quadros como 24 fps suave e fluido
A mesma caminhada, desenhada de três formas. Observe que as linhas com taxas maiores não são uma animação melhor — são mais desenhos, o que representa um custo e também uma decisão de qualidade.

Por que jogos retrô usavam fps baixos — e por que agora isso é uma escolha de estilo

Consoles e PCs antigos que animavam a 6–10fps não faziam isso, em primeiro lugar, por uma escolha artística; trabalhavam sob um limite rígido de memória. Cada quadro adicional significava mais dados de sprite que precisavam caber na ROM do cartucho ou na RAM do sistema, ambas medidas em quilobytes. Um estúdio que animasse um personagem a 24fps em vez de 8fps precisava de aproximadamente três vezes mais espaço para quadros em cada ação do jogo, multiplicado por todos os personagens, e normalmente esse espaço não existia. A baixa quantidade de quadros era uma consequência direta dessa limitação, e os animadores ficaram muito bons em escolher quais quadros mais importavam dentro dela.

Essa restrição praticamente deixou de existir hoje — armazenamento e memória não são o que limita a quantidade de quadros de um jogo 2D. Escolher 8fps agora é uma decisão deliberada de estilo, normalmente para evocar o visual daquela época ou porque um movimento marcado, em etapas, realmente combina com o estilo de arte usado. Vale saber qual motivo se aplica ao seu projeto, porque "fps baixos por ser retrô" e "fps baixos porque acabou o orçamento de quadros" produzem a mesma saída com raciocínios muito diferentes, e só um deles é uma restrição que você pode ignorar livremente.

Taxas recomendadas por ação

AçãoQuantidade típica de quadrosReprodução típicaPor quê
Repouso2–44–8fpsMovimentos sutis (respirar, piscar) não precisam de velocidade para serem percebidos
Caminhada6–810–14fpsPrecisa de um ritmo claro; lento demais parece arrastado ou cambaleante
Executar6–1014–20fpsUma cadência mais rápida transmite velocidade mesmo com a mesma quantidade de quadros de uma caminhada
Ataque3–6Irregular, com ênfase na antecipação/impactoO impacto precisa acontecer em um único quadro, não se diluir entre vários
Transições de repouso para alerta2–38–12fpsUma mudança de estado rápida e clara importa mais do que a suavidade

Trate esses valores como ponto de partida, não como regra. O único teste real é assistir ao ciclo na escala e na velocidade reais do jogo — um número que parece certo em um programa de animação com uma prévia grande pode parecer completamente diferente quando o sprite tem 48 pixels de altura em uma tela em movimento.

Quadros mantidos e tempos

Nem todo quadro de uma sequência precisa ficar na tela pelo mesmo tempo. Um quadro mantido é uma pose exibida por mais tempo que os quadros ao redor — a preparação antes de um soco, o ponto mais alto de um salto, o instante antes de um golpe de espada atingir o alvo. Manter essas poses um pouco mais do que uma taxa uniforme daria permite ao espectador perceber a antecipação antes da parte rápida, o que é uma forma de suavização: o movimento raramente é linear, e seus tempos também não deveriam ser.

Na prática, isso significa que uma animação de ataque não é realmente N quadros com fps constante — é um quadro de preparação mantido por 150ms, dois quadros rápidos de transição de 40ms cada, um quadro de impacto mantido por 100ms e um de recuperação mantido por 200ms. A maioria dos sistemas de animação permite definir a duração por quadro, em vez de uma taxa global única, justamente por esse motivo. Se a ferramenta só aceita uma taxa fixa, você pode simular uma pausa duplicando o quadro que deseja manter, para que ocupe dois ou três intervalos em vez de um.

O fps da animação não é o fps do jogo

Um jogo pode renderizar a 60 ou 120fps enquanto uma animação de sprite é reproduzida a 12fps — esses números não têm relação direta. O loop de renderização do jogo desenha cada quadro de qualquer maneira; o sistema de animação decide com que frequência avançar para o próximo quadro do sprite dentro desse loop, normalmente acompanhando o tempo decorrido e trocando de quadro ao atingir um limite, em vez de vincular o avanço ao ciclo de renderização. Confundir os dois é um erro comum para quem está começando a animar sprites e vem de um contexto em que taxa de quadros significava uma coisa só.

Essa separação permite que um jogo com movimento de câmera e resposta aos comandos extremamente suaves a 60fps ainda exiba uma animação de personagem intencionalmente marcada a 8fps como escolha de estilo. É também por isso que mudar a taxa de quadros-alvo do jogo nunca deveria exigir reajustar os tempos das animações de sprites — se isso acontecer, o sistema de animação está vinculando as duas coisas incorretamente.

Onde isso fica nas engines mais comuns

  • Unity — o campo de taxa de amostragem da janela Animation define os quadros por segundo do clipe inteiro; quadros-chave individuais na linha do tempo ainda podem ter espaçamento irregular para criar pausas dentro dessa taxa.
  • Godot — AnimatedSprite2D e SpriteFrames permitem definir fps por animação e, separadamente, um multiplicador de duração por quadro para pausas em quadros individuais.
  • Personalizado/independente de engine — a maioria dos animadores de sprites feitos à mão acompanha um valor de tempo acumulado em relação a um array de durações por quadro, em vez de uma única constante de fps, a abordagem mais flexível se você estiver escrevendo o sistema.

Perguntas frequentes

Meu ciclo de caminhada tem muitos quadros, mas ainda parece rígido. Por quê?

Normalmente é um problema de tempo, não de quantidade de quadros. Confira se todos os quadros são reproduzidos pela mesma duração — caminhar de verdade tem uma distribuição desigual de peso, e uma taxa uniforme de reprodução elimina isso. Tente manter os quadros de contato (pé tocando o chão) um pouco mais longos que os quadros de passagem.

Existe uma quantidade mínima de quadros para que uma animação seja compreendida?

Não há mínimo fixo — uma piscada em repouso de 2 quadros ou um lampejo de ataque de 2 quadros podem ser perfeitamente claros com os tempos certos. O que importa é se a mudança de pose comunica a ação, não quantas etapas intermediárias existem.

Todas as minhas animações devem usar os mesmos fps para manter a consistência?

Não necessariamente. Um estilo de arte consistente se beneficia de uma quantidade de quadros ou linguagem de silhuetas consistente, mas ações diferentes naturalmente têm velocidades diferentes — forçar um ciclo de corrida a usar o mesmo fps de uma animação de repouso normalmente faz uma das duas parecer errada.

Como animo conteúdo recortado de uma folha de sprites gerada com quadros de tamanhos diferentes?

Adicione preenchimento a cada quadro para que todos tenham o mesmo tamanho de tela de imagem e um pivô consistente antes de montar a animação. Caso contrário, quadros com caixas delimitadoras diferentes parecerão tremer ou se deslocar, por mais bem ajustado que esteja o tempo. Corrija o posicionamento primeiro e depois ajuste os fps.

Obtenha quadros limpos e consistentes para animar

Os tempos só são percebidos corretamente se todos os quadros forem aparados e posicionados consistentemente primeiro. O Magic Slice do Recortador de folhas de sprites detecta os limites do conteúdo de cada sprite pelo canal alfa e adiciona preenchimento para igualar os quadros, para que uma arte de origem irregular não atrapalhe os tempos da animação. Funciona inteiramente no navegador.

Abrir Recortador de folhas de sprites