Visualização 3D do movimento humano para aplicações em biomecânica Tiago Lousada Soares, J. G. Barbosa, Miguel V. Correia INEB Instituto de Engenharia Biomédica, Laboratório de Sinal e Imagem Faculdade de Engenharia, Univ. Porto (FEUP) Campus da FEUP Rua Dr. Roberto Frias, Edif. I - poente 4200-465 Porto, Portugal tiagolousadasoares@gmail.com, jbarbosa@fe.up.pt, mcorreia@fe.up.pt RESUMO Este artigo descreve o desenvolvimento de um sistema de visualização 3D do movimento humano, para uso em aplicações de biomecânica. O modelo humano é baseado em conjuntos esqueleto/malha poligonal e animação utilizando F.K.(forward kinematics). O movimento do modelo adapta-se aos dados reais previamente capturados. Para a descrição e implementação do movimento utilizou-se a biblioteca CAL3D, a qual a partir da descrição do esqueleto, de forma hierárquica, e key frames com transformações geométricas relativas, determina o movimento contínuo do modelo. Para desenvolver um modelo realista 3D do ser humano utilizou-se os dados reais do projecto Make::Human e o programa de modelação e animação tridimensional blender. Foi também desenvolvido um sistema capaz de importar dados de electromiografia, de modo a representar a contracção muscular durante a visualização. A aplicação de teste foi a análise de marcha, embora o trabalho possa ser usado para outros tipos de movimento. INTRODUÇÃO Com a evolução da capacidade de processamento dos computadores pessoais torna-se possível a utilização de programas com necessidades computacionais antes consideradas incomportáveis para algo que não fosse uma workstation dedicada. Um tipo de ferramenta que se enquadra nesta categoria são as aplicações de visualização tridimensional, da qual a face mais evidente é a prolífica indústria de videojogos, que com os processadores modernos e com a utilização de normas como o OpenGL passam grande parte da carga computacional para a placa gráfica tornando possível o rendering de dezenas de milhares de polígonos animados sem que o número de fotogramas por segundo seja incomodamente baixo. Dado este panorama este projecto propunha-se ao desenvolvimento de um sistema de visualização 3D para o movimento humano para uso em aplicações de biomecânica a partir de dados previamente capturados, de modo a fornecer uma alternativa a sistemas comerciais já existentes mas de custos mais elevados. À partida foi definido como objectivo que o resultado final gerasse gráficos de boa qualidade, e com bons modelos, por oposição à visualização de um conjunto de caixas dispostas de forma a transmitirem a ideia de uma pessoa. Dado este objectivo a solução passou por se procurar a utilização de um sistema de visualização baseado em conjuntos esqueleto/malha poligonal, e animação utilizando F.K., forward kinematics, à imagem do que é utilizado em grande número de pacotes profissionais de alto nível (3D Studio Max,Maya, Lightwave, etc). Para tal optou-se pela utilização da biblioteca CAL3D [2], um projecto open source desenvolvido para o uso em videojogos, para gerar a animação a partir de keyframes associadas a um esqueleto hierárquico que por sua vez é associado a um modelo polígonal. Para a criação de um modelo polígonal foi utilizado o projecto open source Make::Human [3], que é baseado em estudos fotográficos da fisionomia humana, que corre sobre a aplicação blender, uma aplicação de modelação e animação tridimensional open source. Para fazer a associação entre o modelo
tridimensional e esqueleto foi utilizado o 3D Studio MAX, outra aplicação de modelação e animação tridimensional, com o qual foi possível exportar o modelo e o esqueleto nos formatos necessários para o seu uso no CAL3D. CAL3D O CAL3D é uma biblioteca de animação baseada em esqueletos e escrita em C++ de modo a ser independente da plataforma e da API gráfica usada. Originalmente foi desenvolvida como um cliente 3D para o projecto worldforge, tendo posteriormente evoluído para um projecto independente de modo a poder ser utilizado separadamente noutros projectos. A base do CAL3D é a classe CalCoreModel, que representa uma personagem, contendo toda a informação referente á malha poligonal, esqueleto, animação e materiais (sendo esta informação guardada através de outras classes), esta estrutura apresenta-se representada na figura 1. Modelo Animação Esqueleto Malha poligonal Materiais Submeshes Figura 1 Estrutura do modelo. Alem da classe CalCoreModel as principais classes do CAL3D são CalCoreSkeleton, CalCoreAnimation, CalCoreMesh e CalCoreMaterial, sendo o papel de cada um deduzivel do seu nome. Relativamente à classe é de referir que a animação se encontra dividida em tracks que por sua vez contém as keyframes, cada track está associada a um osso. DESENVOLVIMENTO DOS MODELOS Make::Human e blender O projecto Make::Human tem como objectivo a criação de modelos humanóides tridimensionais realistas, utilizando para este fim o método de additive morphing. Utilizando uma malha poligonal base e vários morph targets consegue-se obter modelos humanos realistas com diversas características fisionómicas. Este projecto é implementado sobre a forma de um script escrito em Python que corre no software de modelação blender. Os modelos utilizados no visualizador foram desenvolvidos utilizando esta ferramenta tendo sido posteriormente trabalhados a nível da integração do esqueleto no 3D Studio Max. O blender é um software de modelação e animação tridimensional open source. Foi utilizado para em conjunto com o projecto Make::Human gerar as malhas poligonais e exportá-las de modo a facilitar o seu uso no 3D Studio Max. por exemplo posicionar os membros da figura humana de modo a facilitar o skinning no 3D Studio Max como é visível na figura 2. Nesta figura encontra-se do lado direito a figura na pose normal do Make::Human e á esquerda preparada para ser exportada. Para criar um modelo começa-se com o modelo base do Make::Human, alterando-o depois mudando os valores dos diversos parâmetros, que correspondem a morph targets, podendo atribuir ao modelo características tais como proporções femininas, mais cintada, peito masculino ou feminino, dimensão dos músculos, quantidade de gordura em cada área do corpo, etc. Com este nível de parametrização conseguiu-se, após alguma experimentação com
os diversos parâmetros, dois modelos, um masculino e um feminino, de aspecto bastante realista. Figura 2 Modelo obtido com o Make::Human em Blender (imagens obtidas por captura de ecrã no Blender) 3D Studio Max Após estarem criadas as malhas é necessário associa-las a um esqueleto para posteriormente exportar o conjunto de modo a ser utilizável pelo CAL3D. Para ter uma animação base de modo a poder prever o resultado final foi utilizada a biblioteca de movimentos obtidos por motion capture, a biblioteca Stockmoves da e-motek [4]. Para importar a animação do Stockmoves para o 3D Studio Max começou-se por criar um esqueleto bípede, utilizando o módulo Character Studio do 3D Studio Max, para poder fazer a importação dos dados de motion capture sobre ele. Figura 3 Encaixe dos ossos na malha (imagem obtida por captura de écran no 3D Studio MAX ) Agora que já dispomos da malha poligonal e do esqueleto é necessário fazer a associação entre os dois. Esta tarefa divide-se em duas partes: primeiro, no modo pose, a posição de descanso do esqueleto é alterada de modo a que os ossos coincidam com as partes do corpo
respectivas na malha poligonal, e em segundo é feito o skinning, que consiste na associação dos vértices da malha poligonal a ossos do esqueleto. Na primeira etapa é necessário fazer com que a rotação dos ossos em todos os eixos coincida com a que tem um osso real num indivíduo que se encontre na posição em que se encontra a malha. Esta etapa encontra-se representada na figura 3. Quanto ao skinning, este é feito ajustando as dimensões e a posição das zonas de influência de cada osso. Só depois desta operação é que as animações se apresentam coerentes com o movimento humano normal. Na figura 4 é visível a zona de influência do antebraço esquerdo, aparecendo os vértices afectados representados por cruzes. A cor destas varia dependendo se o vértice se encontra na zona de influência forte ou na zona de influência fraca, sendo como é visível, respectivamente representadas pelas cores preto e vermelho. Figura 4 Zona de influência do antebraço esquerdo depois de ajustada (imagem obtida por captura de écran no 3D Studio MAX ) Esta etapa precisou de ser repetida múltiplas vezes, redistribuindo as zonas de influência, até que a distribuição dos vértices pelos ossos resultasse numa animação coerente, não só pelo ajuste das áreas de modo a conterem todos os vértices mas especialmente nas zonas onde existe influência de mais do que um osso. Para que fosse possível animar os músculos das pernas de acordo com os dados de electromiografia, é necessário que cada um dos músculos seja uma submesh. Isto é conseguido seleccionando as faces do modelo que fazem parte desse músculo e aplicando um material, diferente do aplicado ao restante modelo, a essas faces. Cada material diferente vai corresponder a uma submesh diferente. ANIMAÇÃO PARA ELECTROMIOGRAFIA Para ser possível representar dados de electromiografia na animação é necessária criar uma estrutura que importe os dados e os torne visíveis quando a animação for reproduzida. Para este fim foi definida a classe Material. Esta classe contém toda a informação relativa á animação dos materiais, contendo todas as frames e mantendo um índice da posição na animação; contém também funções para actualizar os diversos valores dos materiais, efectuando uma interpolação linear para calcular os valores intermédios. Além desta classe foi definido também um formato de ficheiro, do tipo maf, que contem as intensidades da contracção muscular para cada frame. Notar que deve ser gerado com o mesmo tempo da animação do esqueleto já que o visualizador está programado para correr ciclicamente. Na utilização que foi feita no visualizador os únicos valores do material que variam em função da intensidade são o verde e o azul. A classe Material dispõe de funções que efectuam uma interpolação dos valores a atribuir ás componentes verde e azul baseados no instante do ciclo em que a animação se encontra, de modo a serem aplicados no material. Para uma
intensidade de contracção máxima (1) o material apresenta-se vermelho, e para uma intensidade de contracção mínima (0) apresenta-se a cor base da malha poligonal. VISUALIZADOR A principal aplicação criada neste projecto é o visualizador do movimento humano. Este programa foi baseado no código para visualização em OpenGL do CAL3D que utiliza o GLUT [5]. Sofreu no entanto diversos acrescentos e alterações dos quais o mais relevante é a adição da animação do material das submeshes referido anteriormente. Ao correr a animação a aplicação permite, utilizando o rato, que se efectue uma rotação em torno do modelo e a aproximação ou afastamento da câmara do mesmo. Figura 5 Captura de écran do visualizador A figura 5 ilustra o visualizador a correr uma animação de movimento típico de marcha. É de notar que são claramente visiveis no quadrícepe da perna direita e no gémeo da perna esquerda a alteração da cor, na zona correspondente ao músculo, representando a contração muscular. CONCLUSÕES Foi desenvolvida uma aplicação capaz de gerar uma visualização em 3D do movimento humano apresentando gráficos de boa qualidade, sendo que este era o principal objectivo deste projecto. Foi conseguida a integração da biblioteca 3D, ficando definido uma estrutura, modelo e esqueleto, capaz de representar dados definidos pelo formato de animação caf, que é o formato de animação da biblioteca CAL3D.
Será interessante que no futuro seja aproveitado o trabalho efectuado neste projecto juntandoo com outro já desenvolvido para a captura de movimentos. A integração de ambos numa só aplicação permitirá obter uma aplicação capaz de reproduzir o movimento humano em tempo real. BIBLIOGRAFIA [1] Richard S. Wright Jr., Michael R. Sweet. OpenGL SuperBible, Second Edition, Pearson Education 1999. [2] CAL3D, http://sourceforge.net/projects/cal3d [3] Make::Human, http://projects.blender.org/projects/makeh/ [4] Stockmoves, http://www.e-motek.com/entertainment/stockmoves/index.html [5] GLUT, http://www.opengl.org/resources/libraries/glut.html [6] Quaternions Mathworld, http://mathworld.wolfram.com/quaternion.html [7] Quaternions Gamedev, http://www.gamedev.net/reference/programming/features/qpowers/default.asp [8] Dam B. Erik, Koch Martin, Lillholm Martin, Quaternions, interpolation and animation, Technical report DIKU-TR9815, Department of Computer Science, University of Copenhagen, 1998. [9] Roman Filkorn, Marek Kocan, Simulation of Human Body Kinematics, Department of Computer Science and Engineering, Slovak University of Technology. [10] Steve Capell, Seth Green, Brian Curless, Tom Duchamp, Zoran Popovic, Interactive Skeleton-Driven Dynamic Deformations, Proceedings of ACM SIGGRAPH 2002. [11] Worldforge, http://www.worldforge.org