Maneira comum de animar 'movimento' para animações de ciclo de caminhada

13

Acabei de postar isso nos fóruns dos artistas do Blender antes de perceber que provavelmente obteria uma resposta melhor de um público mais específico para o desenvolvimento de jogos, então peço desculpas pela postagem cruzada! É pelas razões certas :)

Sou um programador tentando animar um personagem que caminha para um projeto de jogo usando o Ogre. Eu fiz um ciclo de caminhada muito simples no Blender e o exportei para o Ogre, e ele funciona muito bem. Por tudo, quero dizer que funciona, mas há pés terríveis deslizando. Isso porque eu apenas animei a caminhada no local (na origem) no Blender e, é claro, não sei a que "velocidade de caminhada" isso corresponde; portanto, quando movo o personagem no jogo, o movimento não é " necessariamente corresponde ao movimento dos pés na animação.

Então, minha pergunta é: qual é a abordagem normal para esse tipo de coisa? No trabalho, usamos o Maya, e os animadores animam um nó 'moveTrans' especial que representa a "posição" do personagem (ou o exportador o gera para eles a partir do movimento do nó raiz), então o jogo pode ler isso para saber com que rapidez a animação move o personagem. Portanto, no arquivo Maya, o personagem avançará por um ciclo e esse nó extra os acompanhará pelos pés. Não vi nada parecido em terras de código aberto, e certamente não há previsão para isso no script Ogre Exporter. O que você costuma fazer para isso?

Ben Hymers
fonte
1
Aqui está uma discussão com algumas explicações fantásticas do conceito: blog.wolfire.com/2011/08/…
Ben Hymers

Respostas:

10

Existem duas maneiras de fazer isso: movimento raiz ou "no código".

Com o movimento raiz, você tem basicamente exatamente o que está sugerindo com o nó "moveTrans". Você usa o movimento desse objeto para determinar com que rapidez reproduzir os ciclos de caminhada. Você pode fazer uma pesquisa inversa para descobrir que, se quiser estar na posição X, em qual quadro deve estar. Mas a vantagem real do movimento radicular é que, para obter animações realmente realistas, é necessário considerar o fato de que o movimento não é um caminho linear verdadeiro. Pessoas reais se movem a uma velocidade variável ao longo do tempo, ou talvez estejam mexendo um pouco para a esquerda e para a direita, ou o que seja.

Mixamo fez um bom exemplo com o controle de movimento de raiz usando o Unity. Há um vídeo dele aqui: http://vimeo.com/12052874

Agora, o movimento da raiz tem suas desvantagens. Pode ser complicado com coisas como tentar fazer com que a animação "caminhar" funcione nas escadas (idealmente, você teria um anim de subir escadas / escadas e fazer todo o movimento para isso na animação). Também não tenho muita certeza de como o IK realmente atua nisso, se é que realmente.

Agora, fazer isso "em código" é muito mais fácil do lado da programação. O que eu sugiro fazer é primeiro garantir que todas as suas unidades sejam consistentes. Por exemplo, 1 unidade no Maya e seu jogo é de 1 metro. Então você faz com que seus artistas animarem o caminhar de um personagem (completo com o movimento para frente). Use isso para descobrir a velocidade da animação e exportar a animação sem a velocidade de avanço. Use isso para descobrir com que rapidez reproduzir a animação. Portanto, se a animação de caminhada na velocidade 1x for de 5 m / s, e você quiser que o player corra a 7 m / s, basta reproduzir em 7/5 = velocidade de 1,4x. Se o seu modelo for escalado para cima ou para baixo, multiplique a taxa de reprodução da animação pelo inverso da escala. Um cara de meia altura terá que andar duas vezes mais rápido para mover a mesma taxa que um cara da escala 1x.

Tetrad
fonte
Eu não tinha visto o Root Motion Computer da Mixamo, nem o ouvi chamar assim, então obrigado pelo link e pela explicação! Então, basicamente, como eu pensava, animá-lo explicitamente ou gerá-lo automaticamente e em tempo de construção ou em tempo de execução. Acho que vou ter que codificar isso sozinho no script do exportador. Uma coisa que eu estou mega confusa agora é sobre o movimento que muda ao longo de um ciclo - como diabos você diria isso da jogabilidade? "Mover a 5m / s" agora significa outra coisa ... E as mudanças de direção serão um pesadelo para a IA! Talvez seja melhor usar o movimento de ageragem?
Ben Hymers
Ficaram sem personagens; Vou esperar um pouco antes de marcar como aceito para obter mais algumas opiniões. Obrigado pela sua resposta!
Ben Hymers
Para o movimento da raiz, você não controla a velocidade do player diretamente. Você só tem controle, realmente, da reprodução da taxa de animação e, em seguida, deixa que a animação controle diretamente o valor z de avanço. O exemplo de 5m / s que dei foi o modo tradicional de resolver o deslizamento de pés, que consiste em tentar combinar a taxa de reprodução com a rapidez com que você está se movendo e assumindo uma velocidade constante.
Tétrada
Como programador de jogabilidade, isso soa como um pesadelo completo :) Colocar os animadores no controle de algo tão importante quanto a velocidade de movimento de qualquer coisa animada? Não, obrigado! Prefiro extrair as informações para poder invertê-las e definir a velocidade de reprodução da animação com base na velocidade do movimento, e não o contrário. É por isso que o movimento não linear confunde o inferno fora de mim, e talvez essa seja uma boa razão para fazer o contrário.
Ben Hymers
Gah, amaldiçoe o Stack Exchange por entrar no comentário sobre tentar iniciar uma nova linha ... Eu estava prestes a dizer, mesmo se você deixar a animação impulsionar o movimento, ainda haverá um problema para, por exemplo, personagens de IA. E se eles estão tentando chegar a um ponto, mas a animação de movimento deles oscila de um lado para o outro (digamos, é uma animação cambaleante bêbada)? Como eles podem saber qual direção seguir?
Ben Hymers