Noções básicas de mistura de animação

23

Digamos que eu tenha uma estrutura com personagens que possam correr e andar e, é claro, ficar parados.

Estou certo ao pensar que a mistura de animações é o processo de transição suave entre elas, gerando animações dinâmicas em tempo de execução?

Em caso afirmativo, qual é a teoria básica de como isso funciona e como eu a implementaria?

SirYakalot
fonte
1
Eu acredito que é apenas interpolação linear entre cada um dos ossos, desde o último quadro de uma animação até o primeiro quadro da outra.
anonimamente
Ou interpolação linear com passo suave, se você quiser uma média ponderada (:
Gustavo Maciel
@ Gustavo-Gtoknu, você pode explicar mais sobre o que você acabou de dizer?
13269 SirYakalot
você faz uma interpolação linear em alfa dos dois quadros a serem mesclados, no inverso do outro. ambos em função do tempo. Você pode passar suavemente ou usar uma média ponderada na interpolação para ter um efeito diferente.
23133 Gustavo Maciel

Respostas:

18

A mistura de animação de caracteres é mais geral e pode ser usada para:

  • Computando transições suaves entre 2 clipes;
  • Criando animações completamente novas a partir das existentes (potencialmente mais de 2 ao mesmo tempo);
  • Atingir comportamentos do tipo IK;
  • etc.

A idéia básica é que, para dois esqueletos idênticos com clipes de animação diferentes, para cada rotação da junta, você calcule valores intermediários. Os clipes de animação são representados com rotações. Portanto, a interpolação linear não é o que você deve usar se desejar resultados precisos (mesmo se estiver usando ângulos de Euler). Você pode usar slerp, por exemplo, mas existem soluções mais complexas.

Este é um problema complexo com soluções complexas. Basicamente, se você tiver dois clipes de animação A e B:

  • Se A e B são completamente diferentes (mistura de salto e natação), é provável que você tenha resultados estranhos / engraçados;
  • Se A e B são semelhantes (dois clipes de animação ambulantes), primeiro você deve sincronizá-los para combiná-los quando os dois pés esquerdos estiverem no chão, por exemplo.
  • etc.

Se você estiver interessado, sugiro que comece lendo este artigo para entender melhor quais são as dificuldades: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Não é o mais atualizado, mas é fácil de ler.

Eu espero que isso ajude. Cumprimentos.

Korchkidu
fonte
5

Primeiro, suponho que você esteja falando sobre animação esquelética (especialmente gráficos 3D), já que a mistura de animações se aplica apenas à animação esquelética. Se você está falando sobre animações 2D baseadas em sprites (você não especificou na sua pergunta), pode esquecer praticamente a mistura de animações.

Com isso fora do caminho ...

Estou certo ao pensar que a mistura de animações é o processo de transição suave entre elas, gerando animações dinâmicas em tempo de execução?

Isso é basicamente o que o termo significa, sim. Essa frase "gerando animações dinâmicas" é um pouco enganadora; isso lembra a animação processual e não é exatamente isso que você está fazendo.

"Mistura de animação" é quando você faz a transição entre dois clipes de animação usando um pouco de ambas as animações, com a ponderação de um clipe subindo enquanto a ponderação do outro clipe diminui. Isso funciona melhor com a animação esquelética, para que a rotação de cada articulação seja definida no ponto médio entre a animação da articulação em dois clipes de animação diferentes, com a ponderação de cada clipe mudando com o tempo. Ou seja, você calcularia a rotação de cada junta da seguinte maneira:

rotCombined = weightA*rotA + weightB*rotB

Agora, enquanto a mistura de animação funciona melhor com animação esquelética, você também pode fazê-lo com animação de vértice (por exemplo, MD2). Isso é mais uma nota histórica, porque poucos mecanismos de jogo modernos usam animação de vértice, mas você pode definir as posições de vértice da mesma maneira, como uma ponderação entre a posição de vértice em duas animações diferentes. Isso pode resultar em algumas interpolações de aparência estranha (por exemplo, partes da malha entrando em colapso ou virando do avesso) se as duas animações forem muito diferentes, enquanto a animação esquelética garante que as várias partes da malha permaneçam inteiras.

jhocking
fonte
Quando você diz que não pode fazer isso com gráficos 2D, você quer dizer animação baseada em sprites? Estou tentando descobrir como misturar algumas animações 2D criadas no mecanim com base na posição e rotação de partes do corpo individuais, mas não vejo por que não é possível apenas porque são 2D.
mallardz
Porque não há como gerar novos quadros em uma animação de sprite. Na animação 3D, as imagens individuais não são geradas antes do tempo.
Jhocking 26/10/2014
Entendi, mas a animação 2D não precisa se basear apenas na alteração de todo o sprite. Você poderia compor um objeto de vários sprites e animar sua rotação e posição, etc. Eu estava tentando descobrir como fazer isso quando li sua resposta, e sua primeira linha me deixou triste :(! Mas, felizmente, parece que é muito fácil de fazer em Unity e imagino nada mais difícil do que mistura 3D para aqueles que rolar seus próprios motores.
mallardz
1
ah sim eu quis dizer animação baseada em sprite, eu vou editar a minha resposta
jhocking