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?
Respostas:
A mistura de animação de caracteres é mais geral e pode ser usada para:
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 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.
fonte
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 ...
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.
fonte