A continuación os hablaremos de Integración y soporte de OpenSubdiv en Blender, puesto que a última sesión de control en el Curso de Especialización en Virtualización del Patrimonio estuvo centrada en aspectos generales acerca de Blender, que es la herramienta que vamos a utilizar en esta y otras  asignaturas a lo largo del curso. Durante la sesión de control surgió una duda sobre OpenSubdiv, una opción de la que algunos usuarios -dependiendo de la tarjeta gráfica de la que se disponga- se pueden aprovechar. Blender ofrece -en su versión más reciente, 2.76b- integración y soporte (aún en fase inicial) para OpenSubdiv.

Problemática actual

Antes de hablar de la herramienta, definamos cuál es el problema. Cuando vamos a llevar a cabo un proyecto de infografía relacionado con el patrimonio cultural, es muy probable que en algún momento tengamos que modelar (y animar) objetos que posean formas orgánicas. Con este término solemos hacer referencia a formas cuya geometría es altamente irregular y que probablemente presentará relieve, es decir, cuyas superficies no suelen ser planas, en oposición a objetos con superficies “duras” (hard surfaces); objetos con formas orgánicas son -por señalar algún ejemplo que podemos encontrar trabajando en arqueología- muros realizados con técnicas tradicionales, pavimentos de tierra batida o de opus signinum, mobiliario antiguo, elementos ornamentales o, por supuesto, personajes o animales. Existen diferentes modos de obtener un buen resultado a la hora de crear este tipo de objetos, aunque podríamos resumirlos en dos: el primero consiste en la  aplicación de mapas específicos (normal, bump, o parallax maps) sobre geometría con un número reducido de polígonos. De este modo limitamos la carga de trabajo (el volumen de cálculos) sobre el  hardware.

logo Blender

El segundo enfoque se centra en reproducir lo más fielmente posible la propia geometría de los objetos que vamos a representar y esto pasa por utilizar herramientas que, básicamente, subdividen la malla sobre la que trabajamos. En otras palabras: aumenta drásticamente el número de polígonos. Y el problema es que con esta estrategia debemos disponer de hardware capaz de soportar el volumen de cálculo necesario para representar escenas con cantidades elevadas de polígonos. Hasta el punto de que, dependiendo del nivel de subdivisión que apliquemos a los objetos (y de los recursos de los que dispongamos), llegará un momento en que nuestro equipo no será capaz de mostrar los resultados en pantalla (en el visor 3D) o sencillamente se bloqueará. Y esto simplemente para modelar un objeto o un personaje, ahora imaginemos cómo aumenta la dificultad si tenemos que animar esta geometría…

¿Qué es OpenSubdiv?

Para dar solución a este problema, optimizar el proceso de cálculo en este tipo de operaciones, y proporcionar a diseñadores y animadores una herramienta que permitiera visualizar en tiempo real (en fase de producción) la geometría generada y su comportamiento, Pixar desarrolló un conjunto de librerías opensource que “implementa una evaluación de alto rendimiento en superficies de subdivisión”, que -de hecho- ha empleado en sus propias producciones de animación. No es una aplicación, con su propia interfaz, sino un código que puede ser integrado en terceras aplicaciones. Así ha ocurrido con Blender, que a partir de la versión más reciente (actualmente 2.76b) ofrece por primera vez soporte (a nivel aún inicial) para OpenSubdiv.

Situación actual y perspectivas

El objetivo, tal y como se explica en la Página de Referencia para Desarrolladores de Blender, es sustituir completamente (progresivamente) el código actual responsable de las operaciones de subdivisión en Blender (CGCSubSurf.c code) por otro basado completamente en OpenSubdiv. Por ahora no hay, sin embargo, una previsión oficial de fecha o versión en la que tal sustitución sea completa.

Requisitos, recomendaciones de uso y limitaciones

Por el momento, podemos aprovechar el soporte inicial para probar y familiarizarnos con OpenSubdiv. Para ello, primero debemos dirigirnos a Preferencias de Usuario – Sistema, abriendo el desplegable situado junto a “OpenSubdiv compute” (fig.1) y escogiendo una de las opciones disponibles:

Integración y soporte de OpenSubdiv en Blender

Figura 1

  • None: desactiva OpenSubdiv, aconsejable si detectamos problemas o errores al utilizarla (recordemos que la integración dentro de Blender es aún inicial).
  • CPU: implementación monohilo (single threading) útil en casos en los que la utilización de CPU multihilo cause errores o problemas.
  • OpenMP: útil si la opción de GPU está desactivada (ocurrirá si nuestra tarjeta no cumple con los requisitos). Permite la utilización de CPU multihilo.
  • GLSL Transform Feedback: utiliza la GPU para realizar cálculos, pero con una carga mínima sobre nuestra tarjeta gráfica.
  • GLSL Compute: también utiliza la GPU, pero de un modo más eficiente que en la opción anterior. El problema si utilizamos esta opción es que necesitaremos una tarjeta gráfica más potente.

Los siguientes pasos son sencillos: simplemente debemos aplicar el modificador Subsurf a la geometría que deseemos animar, marcando la casilla “Use OpenSubdiv” dentro de los parámetros del propio modificador (fig. 2) y teniendo en cuenta una serie de recomendaciones a la hora de usarlo, como que el modificador Subsurf se encuentre en último lugar en la pila (stack) de modificadores, además de tener presente que vamos a apreciar los resultados sólo cuando lo apliquemos en animación de objetos y personajes que queremos visualizar en el Visor 3D, en tiempo real, no durante la fase de modelado de objetos y personajes, ni en esculpido digital.

Integración y soporte de OpenSubdiv en Blender

Figura 2

Recursos adicionales

En los siguientes enlaces se puede ampliar la información específica sobre OpenSubdiv y su integración y primeros resultados en Blender:

  1. Página de Referencia para Desarrolladores de Blender dedicada a OpenSubdiv
  2. Página de Pixar dedicada a OpenSubdiv 
  3. Demostración (vídeo) de la utilización de OpenSubdiv en Blender. Animación en fase de producción del dragón del cortometraje Sintel:  https://youtu.be/dzIl_S-qHIQ