5. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
idea modelo implementación
matemático (código fuente)
(leyes de relación
entre objetos)
6. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
información
idea modelo implementación
matemático (código fuente)
(leyes de relación
entre objetos)
resultados
7. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
2 paradigmas
- diseño paramétrico
- diseño discriminativo
8. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
datos datos
algoritmo
resultados
proceso de
diseño paramétrico
9. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
datos datos
algoritmo
resultados
algoritmo de
evaluación
selección no
sí
proceso de resultados
diseño discriminativo
11. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
01 diseño del proceso y no de un resultado concreto.
02 posibilidad de gestionar complejidad de datos.
03 generación de soluciones adaptadas a condiciones de contorno.
13. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
¿qué es Grasshopper?
01 plug-in para Rhinoceros.
02 entorno de programación visual.
03 intérprete.
algunas recomendaciones en el uso de Grasshopper
01 higiene visual.
02 esquema de flujo de datos antes de empezar.
03 sacar paneles informativos.
04 hacer comentarios de lo que se vaya haciendo.
05 personalizar nombres de componentes y poder hacer búsquedas.
14. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
ejercicio práctico
00. objetivo del ejercicio
El objetivo de este ejercicio es introducirse en el uso de Grasshopper como
herramienta de diseño generativo, pasando por las utilidades fundamentales
del programa. Utilizaremos colecciones y funciones numéricas para dibujar
una superficie que, a continuación, panelizaremos. Y, una vez panelizada, la
analizaremos con un vector solar básico para poder optimizarla.
15. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
01. trabajar con colecciones numéricas
A. Dibujar una matriz de puntos con dominios y un rangos.
B. Afectar las coordenadas Z de esa matriz de puntos por una función.
C. Dibujar la superficie a partir de esos puntos.
A. Dibujar una matriz de puntos con dominios y rangos.
Un dominio es un tramo continuo de la recta real, es decir, representa la colec-
ción de todos los números entre esos dos valores. Dominio (domain) es un com-
ponente cuya entrada son dos valores reales A y B y cuya salida es un intervalo
continuo de la recta real y se escribe “A To B”.
A B
Rango (range) se utiliza para generar valores diescretos a partir de un dominio
continuo. Es un componente cuyas entradas son un dominio y un valor N, y cuya
salida son valores numéricos. Es decir, toma un dominio continuo D y lo divide N
veces, generando una colección de N+1 valores discretos.
N divisiones
A c d e B
N+1 valores
Conectamos la salida del rango a las entradas X e Y de PointXYZ y dibujará una
hilera de puntos que tienen la coordenada X igual a la Y, puesto que las dos
listas de números provienen del mismo rango:
(1,1) (2,2) (3,3) (4,4) (5,5) ....
Ahora, si nuestra intención es hacer una matriz de puntos, debemos cruzar
estas coordenadas. Para ello, hacemos clic con el botón derecho en la parte
central del componente Point, y seleccionamos Cross Reference. Esto quiere
decir que a cada coordenada X (1, 3, 5, 7..) Grasshopper le va a hacer corre-
sponder todas las coordenadas Y (1, 3, 5, 7..) produciendo una lista de pares de
coordenadas de la siguiente manera:
(1,1) (1,2) (1,3) (1,4) (1,5) ...
(2,1) (2,2) (2,3) (2,4) (2,5) ...
16. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
B. Afectar las coordenadas Z de la matriz de puntos por una funcón.
Descomponemos los puntos de la malla cuadrada base con Decompose Point
y los “recomponemos” en otro punto XYZ (esta vez sin cross reference activo),
tomando las coordenadas X e Y. La coordenada Z se generará en una función de
n variables (f(n)) en la que introducimos, haciendo click con el botón derecho en
la banda central del componente en edit expression, la ecuación del parabolide
hiperbólico. El número de variables se define, también haciendo click con el
botón derecho en la parte central del componente y luego yendo a input manager
Tomaremos, por ejemplo, una suma de seno y coseno con la siguiente forma:
(sin(b+(t*a))+cos(c+(t*d)))*f
En este caso, la variable t representarán todos los “momentos” por los que
queremos que pase nuestra superficie, así que le pasaremos otro dominio, de
tal manera, que podemos controlar la altura máxima y mínima de la superficie,
y un rango para fijar el número de puntos, que tienen que ser tantos como
puntos tengamos en la base. Puesto que el rango devuelve N+1 valores,
pasaremos la cantidad de punto (list length) menos uno.
C. Dibujar la superficie a partir de esos puntos
Dibujaremos la superficie a partir de los puntos anteriores con surface grid o
surface from point. La entrada P será la última lista de puntos XYZ y U la cantidad
de puntos en cualquiera de las direcciones de la superficie (esta superfice sólo
funciona con plantas cuadradas) , que será la N del rango de la planta + 1.
17. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
02. deformación de geometría: panelización de superficies
A. Dibujar la geometría que se quiere utilizar para panelizar la superficie.
B. Dividir el dominio bidimensional asociado a la superficie.
C. Replicar y deformar la geometría original sobre la superficie.
A. Dibujar la geometría que se quiere utilizar para panelizar la superficie.
Dibujamos, en Rhino o Grasshopper, cualquier geometría para replicarla por las
subdivisiones de la superficie original, en este caso, una superficie plana (Plane
Surface). Dicha geometría se replicará mapeando una caja de referencia sobre
dichas subdivisiones. Podemos tomar, también, cualquier caja de referencia. En
este caso utilizamos el componente Bounding Box para encerrar la geometría
que replicar en su volumen capaz alineado en el plano universal XY.
B. Dividir el dominio bidimensional asociado a la superficie.
Necesitamos dividir el dominio bidimensional de la superficie con divide domain2.
Las entradas U y V del divide domain2 se refieren a las coordenadas locales
propias de la superficie.
C. Replicar y deformar la geometría original sobre la superficie.
Para panelizar la superficie utilizamos el componente Surface Morph, que
toma una geometría contenida en una caja de referencia y la replica sobre una
superficie deformándola de acuerdo a las coordenadas locales de la superficie.
U y V las tomaremos de la división del dominio bidimensional y W corresponderá
a la altura de la caja de destino sobre la que se mapeará la caja de referencia.
En caso de utilizar más de una geometría para replicar, no debemos olvidarnos
de activar la referencia cruzada para todas las geometrías cross reference.
18. iniciación al Guillermo Ramírez Camarero
diseño generativo Miguel Vidal Calvet
con Grasshopper www.frikearq.com
03. análisis solar de la superficie y visualización de resultados
1. Definir un vector en coordenadas polares.
2. Dibujar y dividir una superficie.
3. Comparar vectores y asignar color.
4. Visualizar.
1. Definir un vector en coordenadas polares.
Con el componente Point Polar dibujamos un punto que gira en torno al Origen.
Uniendo con Vector Two Points el Origen y el punto polar, obtenemos la dirección
de nuestro sencillo vector solar, con vector display podemos visualizarlo.
Aquí estamos utilizando un vector solar muy básico, puesto que el objetivo del
ejercicio es puramente didáctico. Dicho vector prodremos sustituirlo simplemente
subreescribiendo la entrada del componente por otro más preciso, en caso de
que necesitemos un análisis solar riguroso.
2. Dibujar y dividir la superficie.
Referenciamos con dos Curve (icono de borde hexagonal) dos curvas dibujadas
en Rhino, y conectamos ambos a la entrada S de un componente Loft. Con
Divide Surface dividimos la superficie en puntos en los cuales conocemos el
vector normal (salida N del Divide Surface). Un Flatten en las salidas N y P del
Divide Surface nos libra de las sublistas.
3. Comparar vectores y asignar color.
Con un Angle comparamos los vectores normales (salida N del Divide Surface)
con el vector solar (salida L de Line). A estos valores de ángulo les tenemos
que asignar un color. Esto se consigue con Gradient. Con la paleta de Gradient
definimos el espacio de color que vamos a hacer corresponder con los valores
de ángulo, este espacio queda determinado entre los límites L0 y L1. Un ángulo
de 0 radianes será rojo, uno de Pi será rojo también, y, en Pi/2, cuando los los
vectores sean perpendiculares, la luz será rasante y le asignaremos el color
verde.
4. Visualizar.
El último componente, Preview, sirve para colorear: le asigna color a geometría.
Nuestra información de color sale del Gradient, y la geometría a colorear son
todos los puntos que salen del flatten de la salida P de Surface Divide.