domingo, 14 de septiembre de 2014

Capri, ¡porque yo lo valgo!

Qué encontrarás en esta entrada?
  • Uso de partículas tipo "hair" (pelo) en Blender.
  • Animaciones de muestra.

No es la primera vez, y espero que tampoco la última, que hablamos en esta página de Blender, un fabuloso programa de diseño 3D multiplataforma y 100% abierto.

En las últimas versiones de este software hemos podido ver cómo se le ha dado más importancia a las características relacionadas con la física ("physics") y con las denominadas "partículas" ("particles"). Entre éstas últimas, hay unas de tipo "hair" (pelo) que presentan interesantes posibilidades.

Esta entrada no pretende ser un tutorial paso a paso sobre la creación de pelo, para ello os recomiendo que os empapéis de los múltiples videotutoriales que hay en YouTube al respecto.

Para crear un objeto peludo en la versión 2.71, tan sólo hay que acudir a la pestaña "particles" y añadir un nuevo conjunto de ellas. En "type" habrá que seleccionar el valor "hair" (pelo) y ya podremos ver cómo a nuestro objeto le crecen unos pelos perpendiculares bastante feos. Cambiando el número de ellos y su tamaño podemos empezar a afinar el resultado. Respecto al número, comentar que Blender trabaja con "padres" ("parents") e "hijos" ("childrens"): los padres marcan la guía principal que luego seguirán los hijos, por lo que si queremos 100 pelos, no hace falta que los 100 sean "padres" (todos "pelos-guía"), a lo mejor basta con utilizar 10 "padres", y 10 "hijos" por cada padre que les sigan. Esta forma de proceder puede aliviar el trabajo en la aplicación, puesto que mientras que estamos con ella podremos elegir se verlos todos, sólo los padres, o cierto porcentaje intermedio de los hijos.


Respecto a la dinámica, configurable desde el módulo "hair dynamics" (dentro de la misma pestaña "particles"), os recomiendo que veáis éste vídeo.

Con todo ello, ya podemos hacer nuestras primeras pruebas. Lo primero que se me ocurrió hacer, fue hierba mecida por el aire.


Y lo primero que descubrí, fue la gran pega de este proceso: aunque el resultado puede ser muy impresionante sin demasiado esfuerzo (ya que el pelo, o en este caso la hierba, se genera por sí sola siguiendo unos cuantos parámetros), el tiempo del renderizado se dispara, poniendo a prueba las características de tu equipo. En mi caso, he llegado a poner mis ocho procesadores al 100% y la CPU a 80ºC, necesitando colocar un ventilador grande frente al ordenador para mejorar la disipación de calor y trabajar con unas temperaturas más razonables.

Monitorización del sistema vía móvil durante el proceso de renderizado del vídeo anterior

En aquel caso eran medio millón de hierbas (500 padres x 1.000 hijos = 500.500) moviéndose a la vez y tardó en renderizar unas 8 horas.

El siguiente ejemplo que se me ocurrió fue hacer una bestia salvaje con su pelaje... aunque terminó desembocando en una especie de fauno atontado llamado "Capri". Véase a continuación su hipnótico movimiento de pelambrera.


En este caso hay varios cambios con respecto a lo anterior. En primer lugar, el objeto emisor de pelo se mueve, y se comprueba cómo al añadirle dinámica a las partículas, el pelo que brota de él adquiere una dinámica consecuente de manera automática. Tuve algunos problemas al intentar dotar al objeto de esqueleto, puesto que éste puede deformarlo, y comprobé que - al menos de forma automática -  el pelo que brota de un objeto no se adapta a la deformación del mismo: sólo a las rotaciones y translaciones rígidas de la pieza en conjunto.

Otro cambio con respecto al primer intento es que descubrí que puede haber varios sistemas de partículas asociadas al mismo objeto, incluso podemos elegir qué grupo de vértices se ven afectados por cada conjunto de partículas. Esto nos permite, por ejemplo, que la cabeza tenga un pelaje corto uniforme, pero que la parte asociada al crecimiento de la barba, además, tenga otro grupo de partículas con unas características particulares. En referencia a esto, os recomiendo el vídeo de este enlace.

Hagamos un recuento del pelo para Capri:

  • Cabeza: 1.000 padres x 300 hijos (301.000).
  • Oreja grande: 500 padres x 100 hijos (50.500).
  • Oreja pequeña: 500 padres x 50 hijos (25.500).
  • Barba: 100 padres x 10 hijos (1.100, con dinámica).
  • Párpados: 2 x 500 padres x 50 hijos (51.000).
  • Cuerpo: 1.000 padres x 300 hijos (301.000).

En total, Capri tiene 730.100 pelos, 1.100 de ellos en movimiento. No es de extrañar que tardase nada más ni nada menos que 12 horas y media horas en renderizar una secuencia de 10 segundos.

Monitorización de Blender a través de Hangouts (ver entrada "Render in Progess")

Por último, quería comentar la influencia del "anti-aliasing" en el tema del cabello en Blender. El "anti-aliasing", además de las consideraciones sobre las limitaciones de la representación digital de una señal analógica de cierta frecuencia, dada una frecuencia de muestreo, para lo que nos ocupa ahora es una especie de suavizado para que la transición entre píxeles no sea tan abrupta. En el caso del cabello, al estar hablando de finas hebras de material sobre un fondo dado, el suavizado de bordes puede tener cierta importancia sobre la textura que aparentan tener éstas.


En la imagen de arriba se puede ver que no hay mucha diferencia entre el anti-aliasing de 8 y el de 16 (la imagen ha sido escalada, pero en las imágenes originales la diferencia también era casi inapreciable). Sin embargo, la ausencia total de anti-aliasing produce una textura mucho más áspera para el caso que nos ocupa, incluso le da una tonalidad más oscura cuando se ve de lejos. El aumento del anti-aliasing hace aumentar a su vez los tiempos de renderización. Es por tanto necesario encontrar un equilibrio entre ambas consideraciones en función de nuestras necesidades.

No hay comentarios:

Publicar un comentario

Querido astarothista!,

Si te ha gustado la entrada y quieres dejar constancia de ello, tienes alguna sugerencia para completarla o corregirla, quieres mostrar tu opinión respecto a algo de lo que se haya hablado en esta entrada (con respeto) o simplemente quieres dejarme un mensaje a mi o a la comunidad, no dudes en comentar ;)!

Recuerda que también estamos en Facebook y en Google+.