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?
Respostas:
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.
fonte