MakeHuman 0.9.1 RC1: un modelador del cuerpo humano

Imagen de javcus


UsoExportación a otros formatosLa compilación e instalación de makehuman

Editor de pose de makeHuman 0.91 RC1Editor de pose de makeHuman 0.91 RC1

Casi tan importante como disponer de un buen programa de modelado y animación 3D, como Blender, es poder disponer de herramientas que permitan acelerar el trabajo. Una de estas herramientas es la que se presenta: makeHuman, un modelador del cuerpo humano, alternativa libre a los programas Poser y Facegen.

Uso

El interfaz de esta versión, la 0.91 RC1, aunque quizá “cutre”, es muy intuitivo. En la figura de cabecera del artículo, se puede apreciar el aspecto general de la aplicación, junto con un render del trabajo realizado.

En la cabecera de la ventana, se pueden apreciar cuatro familias de iconos grandes. De izquierda a derecha, los primeros, que representan un disquette, con los de entrada/salida: cargar, salvar, exportar a formato Wavefront (OBJ) y exportar a formato COLLADA (DAE).

Selectores de makeHuman 0.91 RC1Selectores de makeHuman 0.91 RC1

La segunda familia de iconos, representados por una silueta humana, corresponden a: selectores de características generales (edad/sexo, masa corporal, pecho, forma corporal) en forma de diagrama de doble entrada para cada uno de ellos; selectores de detalle (boca, nariz, ojos, dedos…) y, por último, selectores de postura, por si se quiere que el modelo adopte una pose determinada. En la figura de la izquierda se muestra el aspecto que tiene cada una de estos selectores, por este orden de izq. a dcha.: de pose, de características generales (el que aparece en el arranque del programa) y de detalle. También puede apreciar en la figura de cabecera que, en los selectores de detalle, aparecen una serie de opciones paramétricas, a la derecha de la pantalla, cuyos valores se alteran al pulsar y arrastrar sobre el correspondiente icono.

Exportación a otros formatos

Objetos presentes en la exportación a Collada de makeHuman 0.91 RC1Objetos presentes en la exportación a Collada de makeHuman 0.91 RC1

Es posible la exportación a otros formatos, en particular Wavefront (extensión .obj) y COLLADA (.dae).

Ambos formatos son aptos para la importación en Blender. Sin embargo, existen diferencias entre ellos tanto en la malla del cuerpo importada como en los objetos presentes en los archivos.

La malla de mayor calidad es la de los Wavefront, al estar formada casi por completo por cuadriláteros (lo puede comprobar en modo edición seleccionando la malla y CtlAltShift5, que selecciona los triángulos presentes en la malla), que se comporta muchísimo más satisfactoriamente que la de triángulos con el algoritmo de subdivisión de Callmut-Clark y con el sombreado y cálculo de normales. Muchos de los triángulos “problemáticos” se sitúan en el plano de simetría, por lo que es fácil unirlos de dos en dos en un solo cuadrilátero (en modo edición, con AltJ).

En cambio, la del formato COLLADA está formada por triángulos, aparentemente creados por la subdivisión por la diagonal de los cuadriláteros de la malla original. Sin embargo, como se puede observar en la figura izquierda, contiene elementos muy interesantes, no presentes en el Wavefront, como son un esqueleto del modelo y un modelo de esqueleto humano. Es posible en Blender convertir la malla de triángulos en una de cuadriláteros (en modo edición y seleccionada la malla, con AltJ), pero posiblemente debido o a errores de redondeo en la precisión de las coordenadas de los puntos de la malla, o al algoritmo de conversión —que, por lo general, no funciona nada mal—, la malla resultante no es simétrica.

La compilación e instalación de makehuman

Si su distribución carece de binarios listos para la instalación —como es mi caso, que empleo OpenSuSE, una distribución excelente por su cuidado y muchísimo menos chapucera que otras más conocidas, pero que tiene menor riqueza de paquetes precompilados— tendrá que compilarlos desde las fuentes. Para ello tiene que desempaquetar los tres programas con tar xvfz archivo.tgz, leer los archivos INSTALL y seguir sus instrucciones, por lo demás bastante sencillas. Sin embargo, se han de compilar e instalar por este orden, los programas:

  • animorph 0.3,
  • mhgui 0.2, y
  • makehuman 0.9.1 RC1a
Problemas en la compilación de anymorph 0.3 y makehuman 0.9.1 RC1a con versiones modernas de gcc.

Como tuve que compilar el programa desde las fuentes, me tropecé con algunas incidencias menores, aunque engorrosas, al emplear gcc v. 4.1.1. El problema está en que en los últimos compiladores se ha reorganizado un tanto las dependencias de las cabeceras estándar (los #include) para que dependan menos entre sí, por lo que algunas que antes no eran necesarias se han de incluir explícitamente. Está explicado con detalle en el propio foro de MakeHuman al mostrar los parches, aunque le falta un detalle que explicaré al final. En general, si aparece un error que indica:

BodySettings.cpp:54: error: 'strlen' was not declared in this scope

es que falta la cabecera estándar <cstring>, en donde se declara la función strlen; si aparece algo como:

../include/animorph/util.h:169: error: 'atoi' is not a member of 'std'

es que falta <cstdlib>, que es donde se declara la función atoi; y si aparece algo como:

error: 'uint32_t' undeclared

es que falta <sys/types.h>, etc.

Cambios en animorph 0.3

En el directorio de cabeceras animorph-0.3/include/animorph/ se ha de añadir la directiva de preprocesamiento #include <cstring> en las siguientes cabeceras, justo a continuación de las líneas de cabeceras estándar:

  • BodySettings.h
  • FaceGroup.h
  • Hotspot.h

y lo mismo, pero añadiendo #include <cstdlib>, en:

  • util.h
Cambios en makehuman 0.9.1 RC1a

Lo mismo se puede decir de los archivos de cabeceras en makehuman-0.9.1-rc1a/src/. Se ha de añadir #include <algorithm> en:

  • BodyPanel.h
  • CharacterSettingPanel.h
  • ClothesPanel.h
  • FacePanel.h
  • HandsPanel.h
  • PosesBodyPanel.h
  • TeethPanel.h
  • ToolbarPanel.h
  • UtilitiesPanel.h
  • UtilitybarPanel.h,

las líneas

#include <cstring>
#include <cstdlib>

en:

  • FileTools.h

y la línea #include <sys/types.h> en:

  • utils.h