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.
- - 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) .
- - Escala: esto determinará la escala de la malla en las tres direcciones del espacio, de una forma similar a lo anterior: (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:
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:
- http://nikitron.cc.ua/blend_scripts.html
- 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.















