18/12/13

Sverchok: diseño paramétrico

Desde hace unos pocos años en el mundo de la arquitectura el diseño parámetrico ha ido tomando importancia. Cada vez aparecen más proyectos, sobretodo en los grandes despachos a nivel internacional, pero también en los más pequeños e innovadores, que integran el diseño parámetrico en sus procesos creativos.

Para entendernos por si hay alguien desubicado, el diseño paramétrico frente al diseño tradicional tiene la ventaja de que todos los elementos que dibujamos pueden tener relación entre ellos, de modo que una modificación sobre un elemento X puede tener repercusión sobre otro elemento Y cualquiera, sin la necesidad adicional de modificar tal elemento a posteriori.

A día de hoy, cuando hablamos de diseño paramétricco hay un software que es el claro destacado: Grasshopper. Más aún, me atrevería a decir que prácticamente tiene el monopolio, al menos cuando nos referímos a un diseño paramétrico formal. Existen otros softwares de diseño paramétrico, como Revit o Ecotec, sin embargo estos últimos no están enfocados a paramétrizar el diseño formal del edificio, sino otros aspectos relacionados con la economía o con la eficiencia energética.

Grasshopper no es un programa en si, sino que es un plugin que trabaja sobre Rhinoceros, programa de modelado basado en nurbs, es decir, formas basadas en modelos matemáticos. El principal problema de Grasshopper desde nuestro punto de vista es que es software privativo, que aunque gratuito, requiere de Rhino para trabajar, con el importante coste que supone la licencia del mismo, además de poder usarse sólo en Windows (existe una versión para OS X en desarrollo).


Hace unos tres meses Nikita Gorodetskiy junto a Alexander Nedovzin presentaron en el foro BlenderArtists una nueva herramienta en la que habían empezado a trabajar, Sverchok, que busca hacer posible un diseño paramétrico similar al que podría hacerse con Grasshopper, pero trabajando sobre Blender, software multiplataforma y de código abierto, programado en Python.

Gracias a esta filosofía y a que siempre nos ha interesado este tipo de herramientas, hace cosa de un mes nos pusimos a intentar desarrollar algunos nodos adicionales para Sverchok, tratando de facilitar ciertas acciones que en ese momento requerían una cantidad casi desproporcionada de nodos, como es por ejemplo hacer una línea o un plano seleccionando la cantidad de subdivisiones.


Desde ese momento y tras entablar contacto con Nikita, nos vimos envueltos en el proyecto y poco a poco hemos ido desarrollando nuevos nodos, principalmente de primitivas (linea, plano, círculo, esfera o cilindro), pero también otros que pueden resultar de gran utilidad, como el de hallar el área de cualquier polígono o el de evaluar el recorrido a lo largo de una línea.

Para entender cómo funciona y cómo trabajar con Sverchok será importante entender cómo funciona a nivel interno. La diferencia con Grasshopper radica principalmente en el software madre, aquel sobre el que crearemos la geometría. Es decir, Blender y Rhinoceros tratan de forma ligeramente distinta la geometría que generan.

En Sverchok tendremos principalmente tres categorías de datos: vértices, lados/polígonos y matrices.

- Lo primero es aclarar que un vértice o vector serán definidos de la misma manera, por sus coordenadas, de este modo: (0, 0, 0). Un conjunto de vértices se representaría de la siguiente manera, siendo siempre todos los valores números decimales:

Vertices = [(0.0 , 0.0 , 0.0), (1.0 , 0.0 , 0.0), (1.0 , 1.0 , 0.0), (0.0 , 1.0 , 0.0)]

- Los lados o aristas, al igual que los polígonos, simplemente son grupos de números enteros que hacen referencia al orden que los vértices poseen dentro de la lista de vértices. Es decir, como es lógico, no puede existir una línea o un polígono sin los vértices que los componen. Una arista siempre estará definida por parejas de números enteros: [0, 1]. En este caso estaríamos uniendo los vértices 0 y 1 de la lista anterior (0 siempre es la primera posición de la lista)

Lados = [ [0, 1], [1, 2], [2, 3], [3, 0] ]

- Un polígono se compondrá por grupos de números enteros a partir de 3, que es el mínimo para formar un polígono (triángulo): [0, 1, 2, 3]. Este polígono estaría definido al unir los vértices 0, 1, 2 y 3, en ese orden concreto, de la lista de vértices anterior.

Polígonos = [ [0, 1, 2, 3] ] 


- Por último las matrices, que es quizá el elemento más complicado de entender. En Blender toda geometría tiene siempre asociadas unas propiedades adicionales a lo anterior. Son las siguientes: localización, escala y rotación.
  1. - Localización: las coordenadas de los vértices anteriores siempre son coordenadas locales, es decir, referidas a un centro (0, 0, 0) que puede no ser el centro global de la escena. Este centro global viene definido dentro de esta matriz. Si un vértice tiene coordenadas locales (1, 1, 0), pero su localización dentro de la matriz indica la posición (4, -1, 0), la posición global de este vértice será (5, 0, 0) .
  1. - Escala: esto determinará la escala de la malla en las tres direcciones del espacio, de una forma similar a lo anterior: (1, 1, 1).
  1. - Rotación: por último también definiremos la rotación de nuestra malla respecto a los 3 ejes de la misma forma, indicando la rotación en grados: (0, 0, 0)
En las siguientes imágenes iremos mostrando los nodos de los que se dispone a día de hoy:


Básicos: el nodo “Objects_in” nos sirve para capturar gemoetría que hayamos modelado previamente en Blender para trabajar a partir de ella. Los otros dos son nodos de visualización; el primero de visualización de geometría 3D, es decir, para obtener la vista de la geometría que estemos generando; además también podremos "bakear" o generar dicha geometría dentro de Blender.. El último nodo sirve para visualizar en forma de datos esta misma geometría, pudiendo acceder a las coordenadas de cada vértice, los lados o los polígonos que generemos.


Números: estos nodos son generadores matemáticos. Con ellos podemos generar cualquier tipo de número, entero o decimal, así como series de números, números aleatorios o conversión de decimales en enteros. Con los dos útlimos nodos podremos hacer cualquier tipo de operación matemática sobre los números generados. El nodo “Formula 2” nos permita también efectuar operaciones sobre vectores (recordar que en Sverchok los vectores y los vertices tienen las mismas características).


Listas: al trabajar con información y modelado paramétrico, las listas suelen ser un elemento muy importante. Por eso existen tantos nodos dedicados a trabajar con ellas. Con estos nodos se puede trabajar con cualquier tipo de elemento de entrada, por ejemplo un listado de vértices, y hacer operaciones sobre ellos, como ordenarlos en un orden u otro, hallar la cantidad de elementos, sumar todos ellos, elegir una cantidad concreta, etc. etc. También podremos unir diferentes listas o dividirlas según parámetros concretos.


Generadores: estas pilas están pensadas para ahorrar trabajo, consiguiendo hacer figuras que de otro modo resultarían muy complicadas. Además para cada una de ellas se ha pensado en ofrecer la mayor cantidad posible de opciones de configuración, permitiendo así por ejemplo el nodo círculo no sólo hacer círculos, sino también cualquier polígono regular seleccionando la cantidad de vértices.


Vectores: esta serie de nodos nos permite hacer operaciones sobre los vectores y las matrices. Desde los más básicos que nos permitirán componer o descomponer vectores/vértices en sus componentes cartesianas, hallar vectores perpendiculares o desplazarlos, hasta otros con los que podremos definir las matrices de las que hablabámos al principio, definiendo posiciones, escalas y rotaciones.


Modificadores: este es quizá el nombre menos adecuado de todas las categorías, pero, cómo hemos dicho, la herramienta está en pleno desarrollo. Aquí encontraremos un variado de utilidades. Por ejemplo tenemos nodos para hallar áreas, distancias y centros de polígonos. También podremos evaluar líneas a lo largo de su recorrido o unir múltiples vértices según ciertas condiciones. Por último los nodos “Adaptative Polygons” y “Cross Section” nos permitirán hacer operaciones algo más complejas; con el primero podremos adaptar y propagar una geometría dada sobre otra que será la receptora, mientras que con el segundo podremos seccionar cualquier tipo de geometría mediante cualquier cantidad de planos de matrices dados.

Indudablemente hay mucho trabajo por delante para llegar a conseguir lo que puede hacerse con Grasshopper. Sin embargo la cantidad de nodos que tenemos empieza a ser importante y su uso puede derivar en asombrosos resultados imposibles de pensar hace muy poco tiempo.

Como arquitectos nos resulta realmente interesante tener la posibilidad de crear herramientas propias. Tanto Blender como Python son muy abiertos y existe una gran cantidad de documentación sobre ellos, por lo que integrar dentro de Sverchok tus propios nodos para conseguir acelerar y optimizar tu proceso creativo, está realmente al alcance de tu mano.

Si queréis algo más de información aquí os dejamos la web de Nikita (en ruso) y el enlace a la web del addon en Blender:
  1. http://nikitron.cc.ua/blend_scripts.html
  2. http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Nodes/Sverchok
En un futuro probablemente crearemos más post para mostrar cómo va evolucionando la herramienta o incluso para enseñar proyectos en los que empecemos a usarla.

10 comentarios:

  1. Великолепно, продолжай.

    ResponderEliminar
  2. Gracias por documentar en español me gusta mucho este proyecto espero poder apoyar en algo saludos d desde Mexico

    ResponderEliminar
  3. Pero como se empieza a usar... tengo documentación completa, pero no sé como se abre sverchok, y se empieza a usar.

    ResponderEliminar
  4. @Xavi, lo más sencillo es descargarte el addon de la página de Github del proyecto:

    https://github.com/nortikin/sverchok/

    A la derecha abajo donde pone "Download ZIP". Abres Blender y lo instalas como cualquier addon en un zip: User Preferences/Add-ons/Install from file, y una vez instalado lo activas.

    Una vez activado, en la ventana de nodos verás que te ha aparecido un nuevo botoncito junto al de composición/texturas/material, lo pulsas, después le das al botón "new" y listo, en el panel de la izquierda tendrás todos los nodos para empezar a usarlos.

    http://www.pasteall.org/pic/show.php?id=91914

    Si tienes alguna otro problema, no dudes en preguntar!!

    Saludos.

    ResponderEliminar
    Respuestas
    1. Ningun problema con la instalación.
      Incluso en el panel de la izquierda de Default aparece una pestaña que pone SV y tiene 4 botones Scan for props, Update all, hard clean y Clean layouts... que por cierto no sé aun para que van a servir.

      Respecto a lo que dices... es puro problema mio de orientación... Entiendo que cuando dices "la ventana de nodos" te refieres al Compositing ¿Cierto? Creo que ya localicé un icono que parece una molecula de ADN aprieto y aparece a mi derecha una ventana que pone grease pencil y tres pestañas: SV Groups Beta, SV Import/export y SV 0.5.5.5... Supongo que con eso ya puedo empezar... voy a ver al rato. ¿Voy por buen camino?

      Eliminar
    2. Perfecto - ya puedo empezar... y no, estaba equivocado, los nodos son parte de Compositing, pero son eso, el editor de nodos en la pestaña de abajo de la ventana... de nuevo gracias.

      Eliminar
    3. Perfecto Xavier! Mucho ánimo con ello!!

      Eliminar
  5. Alguno sabe como puedo renderizar algo como esto http://1.bp.blogspot.com/-9oaKw-58A8A/UsjOTifiu_I/AAAAAAABEA4/NjlmouMWNmg/s1600/sverchok_038.png lo hice en sverchok pero como solo esta hecho con una linea de alguna forma no sale en el renderizado, no tiene material y aun si le aplico uno tampoco ¿es por lo delgado de la linea?

    ResponderEliminar
  6. Hola, tendrás que convertirlo en un objeto de Blender para poder renderizarlo. Tendrás que "bakearlo" y aun así, si es sólo una línea, te costará renderizarlo. Lo mejor es que le des un grosor, conviertas a objeto de Blender y después renderices.

    ResponderEliminar