Animação de esqueletos em 2D

Continuando com a série de posts sobre animação de esqueletos em 2D, vou produzir uma pequena animação com um modelo aprimorado do esqueleto que usei no último artigo.

Foi usado o programa VideoPoint, que normalmente é usado em aplicações científicas. Ele permite que se marque a posição de um objeto ao longo de vários frames de vídeo, e nos dá uma lista de pontos e suas posições no intervalo com que se trabalhou. Você pode fazer um vídeo lateral como este no endereço https://www.youtube.com/watch?v=G8Veye-N0A4 e repetir o mesmo processo.

Foram marcados três pontos. Um na bacia, outro no joelho e outro no calcanhar. Dessa maneira, foi possível determinar os ângulos da coxa e da canela. Fiz um gráfico desse movimento e escolhi um trecho que parecia periódico. Este trecho está no gráfico abaixo. Os ângulos estão em graus. No programa, tive que convertê-los para radianos.

 

Caminhada

 

 

O resultado da animação é este:

Tem um pequeno lag causado pelo software de captura de vídeo. Espero que o leitor possa relevar esta pequena falha.

Foram necessárias poucas alterações no código do programa anterior. Basicamente, adicionei uma rotina que, dado um instante, retorna os ângulos das articulações correspondentes. Também adicionei código para iniciar a animação.

O código mais importante é este:

Na falta de um nome melhor, chamei a rotina de ‘movimento’. Ela está mal escrita, e se você fizer código sério, por favor, não a reproduza; não é um bom exemplo de boa programação. No entanto, é bem simples entender o que está acontecendo. Há uma sequencia de 21 instantes, e quatro ângulos correspondentes, dois para a perna esquerda e dois para a direita. As duas pernas são simétricas, então só precisei fazer um “shift” dos pontos. Usei o módulo Math::Spline, que, depois de inicializado, é capaz de interpolar os pontos e retornar um valor razoável para qualquer instante dentro do intervalo.

O código completo do programa está aqui:

A descrição do esqueleto usada para construir esta animação é este:

Concluindo, este é um exemplo bastante simples de como se faz uma animação usando dados obtidos a partir de movimentos reais. Eu usei interpolação com splines, mas para que a animação fique perfeita, o ideal é estabelecer o framerate que será usado e capturar o movimento com o intervalo entre frames correspondente. Dessa forma não é necessário gastar processamento fazendo cálculos. Também é possível recorrer a bibliotecas de animação, como as listadas na página http://alastaira.wordpress.com/2013/07/24/using-free-mocap-data-for-game-character-animation-in-unity/, mas há dois passos para usá-las: o primeiro é entender o(s) formato(s) de arquivo em que a animação está salva; o segundo é converter o movimento de 3D para 2D, já que em geral são encontrados em três dimensões.

Talvez fosse de interesse descrever o funcionamento da mistura de movimentos, como por exemplo juntar o movimento de levantar a mão com o de pular. Mas isso foge um pouco da finalidade desses textos, que é de introduzir o assunto.

Com esse artigo praticamente se fecha o assunto. Acredito que ele seja didático o suficiente para entender a ideia da animação de esqueletos. A partir de agora, é possível começar a imaginar como tudo funciona em três dimensões.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">