INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
PROFESOR ADOLFO NADAL SERRANO MÓDULO DE DISEÑO
PARAMÉTRICO
EXPLÍCITO
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Los problemas de diseño no pueden ser resueltos sin la ayuda de un computador, siendo la maquina un complemento y no un substituto del talento creativo, la computadora mientras no pueda inventar, puede explorar relaciones muy rápida y sistemáticamente de acuerdo a reglas preestablecidas. El computador funciona como una extensión natural de la habilidad analítica del hombre. Chermayeff, Community and Privacy (1963:166)
1. OBJETIVOS DEL CURSO Los objetivos del curso son, por un lado, conseguir la familiaridad del alumno con sistemas y software de modelado tridimensional, y, por otro, la introducción de metodologías innovadoras de diseño por medio de plataformas integradas diseño paramétrico explícito. El CAD no es una tecnología estática, y que, una vez aplicada, proporciona todas sus posibilidades a los equipos de diseño de forma definitiva. Sus capacidades van evolucionando con el tiempo, al mismo ritmo que los equipos se hacen más potentes y se abaratan, permitiendo que los desarrolladores de aplicaciones incorporen nuevas características y funcionalidades a sus productos. De este modo, estos continuos avances permiten conceptualizar mejor los diseños, estimular y predecir el comportamiento de nuevas soluciones, realizar estimaciones de costes y compartir diseños con clientes y empresas del sector. Además, es posible hacer numerosas simulaciones virtuales de instancias de diseño desde fases muy iniciales de proyecto. En definitiva, hemos de responder de manera efectiva y eficiente a las tendencias del sector mediante un pensamiento creativo: - A través de la simplificación de las tareas no críticas, tales como las tradicionales de diseño y dibujo (muros, ventanas, pilares, escaleras,...). - El diseño en tres dimensiones debe ser una obviedad. Esto implica obtener grandes mejoras de productividad y calidad a través del diseño espacial. - La automatización de procesos generativos de forma. - La posibilidad de testar numerosas instancias formales respondiendo automáticamente a parámetros cambiantes. 2. PLANIFICACIÓN Y MÓDULOS 2.1. Módulo básico El módulo básico trata de conseguir el dominio básico de la herramienta en dibujo 3D, diseño tridimensional, y la creación de listados de propiedades de objetos y elementos constructivos, así como creacición de listados.
El módulo constará de 18 horas lectivas distribuidas durante 6 semanas de la siguiente manera: a. Bloque 1: Introducción a la interfaz y diseño 2D - Día 1 (20 de junio, 1.5 horas): Introducción a la interfaz y navegación. - Día 2 (21 de junio, 1.5 horas): Introducción a modelado y vistas. Trabajo y modificación de un modelo existente (I), cotas, muros. Paleta de propiedades y “Edit Type”. - Día 3 (27 de junio, 1.5 horas): Introducción a modelado y vistas. Trabajo y modificación de un modelo existente (II), grupos, herramientas copiar, mover, rotar, alinear, matriz. [Mobiliario y grupos si procede] - Día 4 (28 de junio, 1.5 horas): Introducción al diseño esquemático de masas. Importación de archivos de croquis, uso de planos de referencia. Introducción a listados. - Día 5 (4 de julio, 1.5 horas): Diseño esquemático de masas (II). Modificación de geometría en 3D, asignaciones de niveles, plantas de masa y plantas reales. Ajuste interactivo de volumetrías y presentación básica de listados. b. Bloque 2: introducción a modelado tridimensional y visualización - Días 6-8 (5, 11 y 12 de julio, 4.5 horas): Muros: tipos. Muros básicos y muros cortina. Delimitación asociativa de espacios y habiitaciones. Edifición de huecos, edición de perfiles y muros curvos. Trabajo con muros cortina: perfiles, paneles y jerarquía. Comienzo de trabajo de proyecto personal. - Día 9 (18 de julio, 1.5 horas): Suelos, techos, cubiertas (I) - Día 10 (19 de julio, 1.5 horas): Suelos, techos, cubiertas (II). Aplicación de cubiertas y suelos al modelado de una vivienda como proyecto personal.
[ 2 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Día 11 (25 de julio, 1.5 horas): Elementos de circulación: escaleras, rampas (I) - Día 12 (26 de julio, 1.5 horas): Elementos de circulación: escaleras, rampas (II) - Extra: · edición de familias 2D y 3D [3 horas] · preparación de documentación gráfica [1.5 horas] · renderizado y animaciones [1.5 horas]
[ 3 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
INTERFAZ DE GRASSHOPPER
[ 4 ]
[ 5 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
I. INTERFAZ DE GRASSHOPPER 1. La pantalla de Grasshopper Grasshopper divide la pantalla en áreas que proporcionan información o solicitan la introducción de datos, contando con numerosas ventanas interactivas y contextuales que cambian en función del elemento seleccionado o el comando en ejecución. · Barra de menú: Permite acceder a los comandos, las opciones y la ayuda. · Contenedores y widgets: en función del tipo seleccionado (Params, Maths, Sets, Vector, Curve, Surface, Mesh, Intersect, Transform, PanelingTools), muestra las opciones de contenedores (“comandos”) displonibles agrupadas por subtipos. · Área gráfica: Muestra la definición actual de Grasshopper asociada al modelo, así como otras ayudas al mismo (brújula). Asimismo se muetra el tipo genérico de previsualización de objetos (ninguno, wireframe, shaded) · Barra de estado: Muestra el autoguardado y la versión de Grasshopper. Título de definición
Pestañas de menú
Pestañas tipo de contendores Contenedores y widgets Menú general guardado/vista Modo de previsualización
Markov widget Brújula
Versión
[Fig 1. Interfaz de Grasshopper]
2. Barras de menús Las barras se clasifican según tipos, que agrupan funciones (contenedores) de uso semejante. Dichos contenedores, a su vez, están clasificados según subcategorías, lo que ayuda a su localización de manera más sencilla. Esta barra muestra los diferentes comandos agrupados en pestañas de la siguiente manera: - Params, que contiene los siguientes subgrupos, de izquierda a derecha: · Geometry: contenedores para asociar o referenciar puntos, vectores, y otra geometría sencilla desde el modelo. · Primitive: booleanas, números, strings y otro tipo de datos primitivos · Input: sliders, panels (informativos) · Util: utilidades extra como gráficas y otras.
[ 6 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Maths: incluye herramientas de análisis matemático, fundamentales en diseño generativo y paramétrico. · Domain: operaciones con dominios · Matrix: matrices · Operators: operadores lógicos y sencillos · Polynomials: funciones matemáticas básicas · Script: muy importante, contiene herrramientas para definir funciones, expresiones, y scripts en varios lenguajes de programación. · Trig: trigonometría, incluye seno, coseno y otras conocidas funciones y relaciones trigonométricas · Util: utilidades
[Fig 2. Subgrupo Geometry dentro del tipo Params mostrando todas las posibles funciones (contenedores)]
- Sets: referente a elementos de información y estructuras de datos. · List: gestión de listas de información, fundamental · Sequence: especialmente importantes las referentes a eliminación de datos (Cull) · Sets · Strings · Tree - Vector: · Color · Field · Grid · Plane: importante para la definición de figuras en planos de trabajo diferentes al z=0 · Point: operaciones con puntos · Vector: operaciones con vectores - Curve: · Analysis · Division · Primitive: creación de todo tipo de curvas primitivas, desdelíneas hasta círculos y arcos · Spline · Util: equivalente a las herramientas de edición de curvas en rhino
[ 7 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Surface: · Analysis: área, volumen, curvatura... · Freeform: creación de superficies de forma libre · Primitive: cilindros, conos, y otros · Util: - Mesh: · Analysis · Primitive · Triangulation · Util. - Intersect: · Mathematical · Physical · Region (BREPs, Boundary Representations) · Shape - Transform · Afine · Euclidean · Morph · Util - Pestañas agragadas por plugins o extensiones: Paneling Tools y otros. En el caso de Paneling Tools podrás encontrar los siguientes grupos: · Curve · Grid · Grid Attractors · Grid utility · Panel 2D · Panel 3D · Panel Utility · Utility II. NAVEGANDO Y WORKFLOW DE TRABAJO DE GRASSHOPPER El workflow de Grasshopper está inevitablemente unido a Rhinoceros, y a los objetos de éste. De esta manera, una definición de Grasshopper siempre estará asociada a un objeto o grupo de objetos de rhino, sin los cuales no tendría sentido. En la mayoría de los casos, querrás comenzar modelando algo muy sencillo en rhinoceros para posteriormente explorar posibilidades de diseño por medio de Grasshopper. Esto permite explorar en poco tiempo numerosas variaciones de diseño a partir de unas condiciones iniciales determinadas. Por esta razón, cada una de las herramientas tiene una serie de opciones que Grasshopper muestra de manera contextual, es decir, dependiente del tipo de objeto o componente que pretendas usar.
Así pues, los pasos a seguir son: - Crear geometría base en rhinoceros - Utilizar dicha geometría mediante referenciación en Grasshopper - Modificar o ampliar la geometría en la definición (previsualización) - Convertir la geometría previsualizada en pobjetos reales mediante el comando “Bake”
1. Navegación en Grasshopper La navegación en Grasshopper es muy sencilla e intuitiva. Puedes hacer zoom/pan con el botón central del ratón y el botón derecho, respectivamente. - Barra espaciadora: muestra menú contextual - Botón izquierdo: selección
[ 8 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Alt+Ctrl + Botón Izq: muestra la localización de un contenedor dentro de las barras de menús - Doble click: menú contextual de búsqueda de contenedores
2. Workflow De manera genérica, abriremos las definiciones de Grasshopper mediante el comando _grasshopper en rhinoceros. Asegúrate de tener la última versión del plugin instalada en tu ordenador. Crearemos entonces una serie de objetos en rhinoceros que asociaremos explícitamente en grasshopper para su definición y modificación. A partir de dichos objetos podremos modificar su geometría, o crear geometría nueva de manera completamente interactiva. III. INICIACIÓN AL WORKFLOW DE GRASSHOPPER: COMPONENTES Y ASOCIACIÓN DE GEOMETRÍA Abre el archivo del tutorial en Rhino (si estás usando Grasshopper, es razonable pensar que eres un usuario avanzado de Rhino, por lo que no se explicará aquí en ningún caso ninguna metodología referente a Rhino). Encontrarás tres líneas. Estas líneas son rectángulos redondeados en sus esquinas de diferentes tamaños y a diferentes alturas. La razón de los mismos es crear un contexto a partir del cual modelar un estadio de fútbol absolutamente paramétrico. Abre ahora Grasshopper (es muy recomendable disponer de dos monitores simultáneamente para poder visualizar las modificaciones en el modelo provocadas en Grasshopper) y el archivo del tutorial. 1. Abrir y preparar el archivo Abre el archivo en menú File>Open Document o directamente en el icono situado en la esquina superior izquierda del Canvas. Una vez que lo hayas abierto, deberías ver una serie de “pilas” o contenedores interconectados por líneas. Los contenedores son funciones y las conexiones muestran las relaciones entre ellos. Contenedor asociado a geometría
Contenedor tipo función
Nombre de grupo
Conexión 1
Conexión 2
Slider
Área de grupo [Fig 3. Interfaz de Grasshopper mostrando componentes]
2. Tipos y estructura de componentes En principio, hay varios tipos básicos de contenedores en Grasshopper - Componentes asociados a geometría básica del modelo (geometry o primitive) - Componentes tipo función, con input/s) y output(s) que no necesariamente han de coincidir en número (de alguno de los tipos y subtipos mencionados anteriormente). - Panels: Notas o displays de información - Sliders: controlan dinámicamente valores numéricos
[ 9 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Por la simplicidad de los componentes, nos centraremos básicamente en los comportamientos básicos de los mismos:
a. Display de información Los componentes albergan información de diferentes tipos, bien geométrica, numérica, alfabética o de otra índole. En el caso de contener geometría, ésta se previsualiza de diferentes modos en la ventana de rhino, en función de si es geometría propia de Rhino o creada dentro del entorno de Grasshopper. Así, los puntos se representan como cruces para diferenciarlos de los puntos de Rhino. · La geometría en rojo es geometría creada en Grasshopper pero no activa (es decir, que el componente que la ha creado no está seleccionado en ese momento) · La geometría en color verde es geometría seleccionada · La geometría que se muestra en azul es aquélla que está siendo seleccionada actualmente por el usuario. Geometría inicial Geometría final Rhino Grasshopper
Puntos
Curvas
Puntos seleccionados
[Fig 4. Comparación de geometría en rhino y grasshopper]
b. Edición Todos los componentes muestran un menú de edición contextual si pulsas sobre ellos con el botón derecho. · Sobre los sliders, ésto te permitirá editar el tipo de número que contiene, así como sus valores máximos y mínimos. · Sobre los paneles, te permitirá controlar qué y cómo se muestra la información, así como el color de los mismos · Sobre las funciones, además de los genéricos ya explicados, podrás controlar los distintos inputs y outputs de manera directa. Para conectar componentes, sencillamente arrastra el ratón desde el punto blanco del output de uno al input correspondiente del siguiente. Por favor, sé consciente de la consistencia de información (es decir, no unas una curva a un lugar donde se supone que debe haber un texto). · Sobre los componentes de asociación de geometría, podrás seleccionar directamente si quieres relacionar el componente a uno o varios elementos del modelo. En función del estado de los componentes, podrás encontrar alguna de las siguientes situaciones: · Color negro: parámetro con contenido (es decir, con referencia activa a geometría de modelo). Marcado con la letra A en la figura 5. · Color naranja: parámetro correcto que precisa de una referencia de geometría o de datos. Letras B y E. Es posible que dicho color implique la presencia de Avisos o Warnings. Éstos indican posibles problemas con el componente o los datos, pero funcionan a pesar de ello. Esto es, los avisos no tienen que ser corregidos necesariamente. · Color verde: un componente seleccionado o activo (la geometría en la ventana de rhino también se mostrará verde). Letra C. · Color gris: componente normal y en funcionamiento. Letra D. · Color rojo: un componente con errores (posiblemente input inconsistente). Letra F. · Conexión entre componentes. Letra G. Las conexiones pueden tener varios tipos de displays en función del tipo de datos que contengan. Así, serán dobles para listas de datos.
[ 10 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[Fig 5. Casos de componentes en función de su estado. Fuente: Grasshopper Premier 2nd edition, LIFT Architects]
Nombre Input
Output
Conexión in
Conexión out
Conexión in
Conexión out
Conexión in
Conexión out
Procesamiento de datos
Nueva conexión
[Fig 6. Divide: ejemplo de un componente función con todos sus elementos]
c. Gestión de input y output La conexión de componentes se realiza mediante “dragging” o arrastre del puntero del ratón entre los diferentes componentes. Para ello, sitúa el cursor sobre el semicírculo blanco correspondiente a la salida de un componente y arrastralo hasta la entrada correspondiente del siguiente componente. Verás que se crea una previsualización con una flecha que indica qué inputs/outputs has relacionado. Puedes añadir múltiples entradas manteniendo pulsado el botón shift. Para eliminar una conexión, sencillamente pulsa el botón control y selecciona qué conexión quieres eliminar. También puedes pulsar sobre dicha conexión con el botón derecho y seleccionar la opción correspondiente. d. Edición avanzada mediante zoom-in Algunos componentes muestran controles avanzados. Para acceder a ellos, haz zoom hasta que aparezcan. Algunos de ellos pueden incluir: · Modificación del número de inputs y outputs. · Alineación de texto y otras configuraciones de visualización
[ 11 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[Fig 7. Menú contextual habitual. Fuente: Grasshopper Premier 2nd edition, LIFT Architects]
3. Receptores inalámbricos Hasta Grasshopper 0.0.6. se tenía también la capacidad de transmitir información inalámbrica mediante el uso de receptores, que podían encontrarse en la subcategoría especial dentro de la categoría/etiqueta de Parámetros. De este modo, se realizaba la conexión normalmente para después ver cómo desaparecía automáticamente. Esto ocurría porque los receptores mostraban la conexión únicamente cuando estaban seleccionados, si bien dicha configuración por defecto podía cambiarse a “always” o “never”. Como cualquier otro componenete, se podía conectar el receptor a tantos otros inputs como necesites. En versiones más recientes de Grasshopper, los receptores han desaparecido para ser adaptados (absorbidos, realmente) en el modo de visualizacion de las conexiones. De esta manera, en vez de usar un emisor, puedes configurar la visualización de la conexión de un determinado input para que no muestre un cable, sino unas ondas que representan la conexión inalámbrica a distancia. Pulsa el botón derecho sobre el componente y selecciona el tipo de visualización “Wire Display”, tal y como puedes ver en la figura 8.
[Fig 8. Configuración de la conexión para visualización inalámbrica]
[ 12 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 13 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
MODELADO PARAMÉTRICO DE UN EDIFICIO: VECTORES, CURVAS Y SUPERFICIES
[ 14 ]
[ 15 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
I. DESCRIPCIÓN DEL PROYECTO 1. Objetivo El objetivo del proyecto es mostrar de manera sencilla y eficaz el modo de trabajo con grasshopper mediante un ejemplo que crece en complejidad y trata con geometría preexistente para posteriormente modificarla y añadir componentes de manera progresiva. - Se tratan los siguientes tipos de geometría: · Puntos y vectores · Curvas · Superficies simples
- El resultado final será el modelo paramétrico de un estadio en el cual podrán controlarse: · Altura de graderíos · Forma y disposición de la cubierta · Cantidad de componentes en cubierta · Triangulación y huecos
2. Punto de partida: curvas base en rhinoceros Dibuja tres rectángulos con “vértices redondeados” en Rhino. Dichos rectángulos serán la base de nuestro edificio y se corresponden vagamente con los perímetros interiores del graderío de un estadio. Asimismo, la curva inferior se usará más adelante para definir el tamaño del campo y la superior para la geometría de la cubierta. Aunque en la figura 1 se han incluido las dimensiones, éstas son relativamente irrelevantes, dado el carácter paramétrico que el modelo irá adquiriendo.
Curva superior: CrvUp Curva media: CrvMed Curva inferior: CrvDown
[Fig 9. Configuración de la conexión para visualización inalámbrica]
Abre ahora Grasshopper desde la ventana de Rhino mediante el commando “_Grasshopper”. Verás que aparece el plug-in con la ventana vacía. Ya que lo primero que vamos a hacer es asociar geometría existente en el modelo a la definición de Grasshopper, necesitamos unos contenedores (en forma de componentes) que puedan albergar dicha información. Ve a Params>Geometry y selecciona “Crv”. Haz click sobre cualquier punto del lienzo para situar el componente vacío o arrastra el icono. Una vez hayas esto tendrás el componente en el lienzo, y deberás asociar geometría al mismo. Para hacer esto, pulsa con el botón derecho sobre el componente y selecciona la opción “Set One Curve”. A continuación selecciona la primera de las curvas. Nombra los componentes de manera clara y concisa para entender perfectamente el contenido de las mismas. Puedes usar, por ejemplo, “CrvDown”, “CrvMid” y “CrvUp” para definir las curvas inferior, media y superior, respectivamente. Estas curvas van a servir para crear los graderíos y la cubierta.
[ 16 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
3. Crear la superficie del campo a partir de la curva inferior Para crear la superficie del campo de juego vamos a utilizar la herramienta “offset”, que crea curvas desplazadas desde la original a una distancia determinada. Tomaremos como base la curva inferior CrvDown y haremos un offset hacia dentro (con distancia negativa, al tener como partida una curva cerrada). Cuando tengamos la nueva curva, podremos crear las superficies correspondientes al anillo exterior y al campo, de dos maneras diferentes, que se describen en los apartados b. y c. a. Crear las curvas por desplazamiento:
[Fig 10. Offset en Curves>Utils]
Ve a la pestaña de curvas, selecciona utilidades y dentro de ellas, offset: curves>util>offset. Como hemos dicho, para definir un desplazamiento de curva “offset”, se necesitan los siguientes inputs: - Curva base para desplazar (“Base Curve”, C): en este caso CrvDown - Distancia de desplazamiento (“Offset Distance”, D): una distancia que puede ser variable, en función de nuestros intereses. En este sentido podemos parametrizar ya la curva desplazada. - Plano base de desplazamiento (“Base Plane”, P): el plano sobre el cual se realiza el desplazamiento, por defecto el World XYZ - Tipo de esquina (“Corner Type”, C): con diferentes opciones, (0) none, (1) sharp, (2) round, (3) smooth, (4) chamfer. Slider
Panel
Base Plane
Offset distance
Corner type
Base Curve
Result Curve
[Fig 11. Offset inputs]
Para nuestro caso, puedes crear dos sliders, en Params>Input>Slider, y cambiar, mediante la edición de propiedades, su nombre y tipo hasta que concuerden con lo que necesitamos. Ajusta el Slider Offset Dist hasta que pueda contener números negativos menores que 1 y Offset Type a otro que contenga números naturales de 0 a 4. Conecta los sliders correspondientes al componente y la curva a su input. Deberías tener un esquema parecido al de la figura 11.
[ 17 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Base Curves
Timeliner
Result Surface(s)
[Fig 12. Menu Planar Srf y el componente con sus inputs/outputs]
b. Superficies mediante curvas planas Una vez hayas obtenido la curva desplazada, procedemos a crear una superficie mediante curvas planas. La idea es crear una superficie entre ambas, de manera que sirva como base a una eventual pista de atletismo perimetral o semejante. Para crear una superficie a partir de curvas planas ve a Surface>Freeform>Planar Srf (Fig. 12). Para crear una superficie plana necesitarás los siguientes inputs: - Set o conjunto de curvas de borde. Sí, eso es todo. Así que conecta las dos curvas (CrvDown y su desplazamiento) al componente para obtener la superficie resultante del anillo. Es posible que, si las dos curvas no están en el mismo plano exactamente, el programa cree dos superficies. Si es el caso, lee el siguiente apartado. c. Superficies mediante booleana o intersección de BREPs En el caso que hayas obtenido dos superficies independientes, puedes sustraer la interior de la exterior para obtener la superficie del anillo, mediante una operación muy semejante a una diferencia booleana. Para ello, siempre que hayas obtenido dos superficies del componente planar, has de separar los resultados e intersectarlos, para después elegir la superficie intersección de las dos.
[Fig 13. Sets>Tree>Flatten Tree]
[ 18 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Crea en el lienzo una definición parecida a la que se muestra en la figura 14. En este caso lo que vamos a hacer es crear unas superficies planas, recogerlas en la lista del output y “aplanar” esta lista (más información sobre listas en el apartado dedicado al respecto), para luego separar los elementos de la misma en dos elementos, los cuales van a sustraerse para obtener la intersección. - Crea las superficies planas - Ve a Sets>Tree>Flatten Tree (o haz doble click sobre el lienzo y busca el componente en el menú emergente) - Asocia el output del componente de las superficies planas al input del componente flatten, de manera que la lista, con entradas del tipo {0}-0 y {0;0}-0 pase a {0}-0,1. Para aclarar cómo funcionan las listas dedicaremos posteriormente un capítulo al respecto. La gestión de datos de Grasshopper es una de las características más importantes del uso del mismo, por lo que es precisa una aclaración básica al respecto. - Una vez hayas “aplanado” la lista que contiene las superficies, podemos separar sus elementos en sendos componentes. Para ello, seleccionaremos cada uno de ellos independientemente, gracias al componente “Item”, que selecciona un elemento de la lista a partir de su índice (es decir, a partir del identificador del mismo). Crea, para este caso concreto, dos componentes iguales, a los que vamos a “alimentar” con índices diferentes; en función de estos índices obtendremos elementos diferentes (en este caso una u otra superficie). - Una vez separados los componentes, podemos crear la diferencia entre ellos. Sitúa el componente de diferencia de Breps, en Intersect>Shape>Solid Difference. Asocia ambas superficies en el componente (uno en cada input) para obtener el resultado deseado. CREATE SURFACE DIFERENCE List item (select) List item (select)
CREATE PLANAR SURFACES
Sliders
Offset
Planar Srf
List Index
List
Flatten (list)
Cull (list item) Index (list item)
Difference (Surfaces)
Crv Down [Fig 14. Definición]
4. Creación básica de los graderíos y loft de superficies Ya hemos creado las superficies del campo. A continuación crearemos los graderíos del estadio, para lo cual usaremos la curva media “CrvMed” y la superior “CrvUp”. Por un lado, crearemos una serie de divisiones en dichas curvas, y líneas que nos permitar previsualizar la posición de los asientos en el gradería, de modo muy esquemático. Asimismo, podremos contar el número de asientos, que irá variando según creemos más o menos subdivisiones en las curvas. Por otro lado, podemos crear las superficies de los graderíos, para obtener una visión tridimensional más clara del conjunto. El comando Loft toma como inputs un conjunto de curvas y una serie de opciones (que se conectan, como un componente aislado, al componente principal del Loft).
[ 19 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
a. Creando las subdivisiones de los asientos en el graderío En primer lugar, divide las curvas base. Para ello selecciona el comando Curve>Division>Divide Curve. El componente necesita los siguientes inputs: - Curva a dividir - Número de segmentos - Dividir en los “kinks” o esquinas. En este caso, asocia las curvas inferior y media a componentes de división independientes, de manera que resulten en listas independientes de puntos. Crea un slider con números naturales que puedes conectar a ambos inputs de los componentes de división, de manera que nos aseguraremos dividir las curvas en el mismo número de segmentos. Una vez hayamos dividido las curvas, podremos crear líneas entre los puntos resultantes de cada una de ellas, que podríamos asemejar a las “columnas” donde se situarían los asientos en el graderío. Ve a Curve>Primitive>Line, y conecta la salida del primer componente de división como primer input de la línea y la salida del segundo componente de la división como segundo input. Verás cómo se crean las líneas que albergarían, en un caso supuesto, cada uno de los asientos del graderío. Puedes ver la definición en la figura 15.
Curve Params
CREATE SEAT DIVISIONS
Divide Line Contours
Base plan
X axis Y axis
Z axis
Divide by length Sphere Expression (radius)
Distance Normal Base Plane Input Surface
CREATE SEAT SURFACES
CREATE SEAT “WIDGETS”
[Fig 15. Definición para crear subdivisiones de asientos]
Podrás apreciar la subdivisión de los asientos entre las dos curvas inferior y superior, tal como ves en la figura 16. La idea es poder controlar tanto la subdivisión en altura como a lo largo de las columnas, es decir, tratamos con una división en forma de rejilla. De esta forma es posible no únicamente controlar la geometría de los graderíos como también conocer la capacidad del etadio de manera dinámica. Siguiendo esta lógica sería posible controlar la forma y tamaño del estadio siguiendo una lógica inversa, es decir, a partir de la capacidad deseada del mismo: - Introducir el número de asientos deseados - Introducir la proporción de asientos en vertical (es decir, el número de filas) - Introducir la proporción de asientos en horizontal u ocupación por asiento (es decir, el número de columnas o la distancia entre asientos) La figura 16 muestra, en esta fase del proyecto, tanto las divisiones que hemos creado para las curvas inferior y media como las líneas que las unen, donde teóricamente irían situados los asientos de los graderíos. Por el momento, crearemos unos widgets a modo de indicaciones de su situación; posteriormente podremos sustituirlos por cualquier forma o bloque deseado (esto no se incluye en el presente manual). Dichos widgets serán, simplemente, unas esferas que situaremos en el centro de los asientos.
[ 20 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Curve Division 1
Curve Division 2
Stand Lines Closeup of stand subdivisions [Fig 16. Subdivisiones del graderío en sus sucesivas etapas]
b. Superficies base de los graderíos (versión simplificada) Parte de la definición de la figura 15 incluye la creación de superficies para la definición más detallada de la geometría del estadio (superficies inclinadas) y su posterior aplicación para crear los graderíos reales (escalonados). Para crear los graderíos usaremos una vez más el comando (componente) loft, con las propiedades por defecto. Como ya sabes, el comando loft toma una serie de curvas como input, en este caso las parejas inferior-media y media-superior. El resultado de aplicar el comando será, como es evidente, dos superficies donde localizar los graderíos inferior y superior, respectivamente. Como es de suponer, es posible que se precise de una zona intermedia de tránsito entre ambos graderíos, por lo que se puede pensar en independizar algo más estas dos superficies. Para hacer el modelo más realista, podemos “duplicar” la curva intermedia mediante un offset y crear la superficie correspondiente al graderío superior con dicha curva, que podemos llamar, a partir de ahora, CrvMed2. Puedes crear la superficie de tránsito, una vez más, usando el comando Loft o PlanarSrf a partir de las dos curvas intermedias. De este modo obtendríamos un modelo más apropiado y ligeramente más completo y complejo. Puedes ver un ejemplo de cómo realizarlo en la definición de la figura 15, si bien trataremos este caso con más detalle en el siguiente capítulo.
Upper surface
Lower surface
CrvUp CrvMed2 (offset) CrvMed CrvDown
[Fig 17. Superficies del graderío diferenciadas por una zona intermedia (resolución de previsualización baja)]
[ 21 ]
Crv mid Crv up Vector
X Y Z
Input geometry Transformation vector
CREATE BASE LINES
Move
CREATE SKYLIGHT CURVE Input geometry
Crv in
Fit Plane
Non-U Scale
Center
Curve
ScaleFactor
Base Plane ScaleFactors
MODIFY SKYLIGHT CURVE
Area Centroid
Scale Uniform
[Fig 18. Definición para la creación de la superficie base de la cubierta con los grupos necesarios]
OBTAIN NEW LINES
Crv mid2 Crv up2
Area CREATE SURFACE
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 22 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
5. Cubierta: modificación de curvas y loft A continuación, el estadio precisa una cubierta que enfatice su valor geométrico y arquitectónico. El primer paso a seguir es la definición de las líneas de base que van a conformar, a la postre, la forma de la superficie final de la cubierta. Observa con detenimiento la definición de la figura 18. En ella encontrarás los siguientes pasos: - Obtención de nuevas líneas de definición de la cubierta a partir de las existentes (la cubierta se entiende separada de los graderíos, por lo que se realiza un offset hacia afuera para controlar dichas líneas. Como resultado se obtienen las curvas llamadas Crv mid2 y Crv up 2 - Creación de la curva del hueco de la cubierta mediante sucesivas transformaciones. Para la creación de dicha línea se realiza, una vez más, un offset de la recién obtenida CrvUp2. - Modificación de la curva del hueco de cubierta (CrvIn), tal como sigue: · Desplazamiento mediante el comando Move, lo que permite controlar su posición sobre el estadio · Escalado uniforme o no uniforme de la misma, para controlar la forma definitiva y apertura del hueco de cubierta. A continuación se describirán las dos formas de escalar. - Creación de la superficie a partir de las curvas Crv Mid 2, CrvUp2 y CrvIn.
[Fig 19. Menú de Scale y ScaleNU]
a. Utilización de escalado uniforme El escalado uniforme escala, como su nombre indica, un objeto geométrico con el mismo factor de escala en las tres dimensiones del espacio. Puedes encontrar el componente en Transform>Affine>Scale/ScaleNU o tecleando scale en el menú emergente cuando haces doble click. Para utilizar el componente, debes “alimentarlo” con la siguiente información: - Geometría a escalar (independientemente del tipo)
[Fig 20. Surface>Analysis>Area]
[ 23 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Centro de escalado: preferiblemente, el centro de la curva. Para obtener el centro de la curva usa Surface>Analysis>Area, un comando que funciona con superficies, curvas, y BREPs (Boundary REPresentations) en general y del que podrás obtener tanto el área del objeto como su centroide. Este componente precisa únicamente de un input geométrico válido. - Factor de escala: en nuestro caso siempre menor que 1 y mayor que 0.1, para evitar problemas con geometría imposible. Conecta la curva interior CrvIn al componente de escalado en G (geometry input). Para hallar el centroide de la curva, que usaremos como punto base para escalar, emplea el comando Area descrito anteriormente. Conecta de nuevo CrvIn como input, y usa el output C (centroide) como input para el escalado. Finalmente crea un slider que contenga valores ente 0.1 y 1 para controlar el factor de escala, que es igual para X, Y, Z, de manera automática. Prueba a modificar los valores de los sliders para ver cómo la curva va cambiando simultáneamente si escala y su colocación.
[Fig 21. Escalado uniforme y escalado no uniforme]
[Fig 22. Opciones de superficie en función de los distintos parámetros de offset, movimiento, y factores de escala]
b. Escalado no uniforme Una vez familiarizados con el escalado uniforme, podemos probar el No Uniforme. La principal diferencia estriba en que el no uniforme precisa 3 inputs que definan cada uno de los factores de escala para las respectivas transformaciones en X, Y, y Z. Asimismo, y de manera un tanto extraña, el escalado no uniforme toma, en lugar de un punto base, un plano de transformación, del que extrae, automáticamente, un punto base a posteriori. Esto va a hacer que tengamos que diseñar un método específico para poder crear un plano donde queremos, lo que nos servirá de investigación a nivel ilustrativo. - Crea un plano base: En este caso, necesitamos que el plano base de escalado se sitúe, una vez más, en el centro de área (centroide) de la curva en cuestión. Como queremos escalar la curva CrvIn, buscaremos crear un plano cuyo centro esté en el centro de la misma. Podemos hacer esto de diferentes maneras. Una manera relativamente eficiente es hallar por un lado el centroide, y usarlo como base para definir un base por tres puntos. Otra manera más sencilla sería, sencillamente, dividir la curva en un numero suficiente de segmentos (mínimo 3) y tratar de averiguar un plano que pase por todos ellos. Exactamente esto se consigue usando el componente PlFit. Encuentra el componente en Vector>Plane>Plane Fit o introduciendo una búsqueda en el menú contextual que aparece al hazer doble click en el lienzo.
[ 24 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[Fig 23. PlaneFit en Vector>Plane>PlaneFit]
- Modifica el plano base: Verás que el plano base se ha creado basado en (0,0,0) pero con la orientación correcta. Todo lo que necesitas hacer es desplazar o trasladar el plano base a su posición correcta, que es el centroide de la curva base. Para ello, halla el centroide de la curva con el componente Surface>Analysis>Area, que ya hemos usado anteriormente, y utiliza su output C (centro) como input T (vector de desplazamiento) del componente Move. Puedes ver un close-up en la figura 24.
Crv centroid
NON UNIFORM SCALE
Scale Factors
Plane on (0,0,0)
Translate Plane to Curve Centroid
Curve Base Plane X Y Z
Non-uniformly scale Curve
[Fig 24. Non Uniform Scale]
[ 25 ]
- Finaliza el comando Scale NU: Ya se puede concluir el escalado no uniforme de la curva. Alimenta el componente Scale NU con la curva, el plano base modificado, y tres valores de X, Y, Z, para comprobar cómo varía la forma de la misma. Obtendrás algo parecido a la figura 22 sin ver la superficie, ya que aún no se ha creado.
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
c. Loft Finalmente, une CrvMid2, CrvUp2, y CrvIn en un componente Flatten para posteriormente usar el componente Loft. Esto creará las geometría que falta, y obtendrás como resultado la cubierta. A este nivel, deberíamos tener un estadio paramétrico simple (realmente, una muy simple volumetría) semejante al de la figura 25. Hasta ahora, hemos creado de forma sencilla e intuitiva las superficies más importantes de que consta el estadio, incluyendo: - Campo - Graderío - Cubierta A partir de ahora, completaremos el edificio con más detalles de graderío y con una serie de huecos en la cubierta y su estructura, lo que permite conocer más a fondo cómo describe Grasshopper las superficies (si eres usuario de RhinoScript o avanzado de Rhino, ya sabrás los conceptos básicos) y algunos elementos interesantes para modificar los conjuntos numéricos.
[Fig 25. Parametric Stadium - nivel básico]
[ 26 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 27 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
MODELADO PARAMÉTRICO AVANZADO: SUPERFICIES Y MODIFICADORES
[ 28 ]
[ 29 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
I. DESCRIPCIÓN DE SUPERFICIES EN GRASSHOPPER 1. Topología Básicamente, las superficies se tratan en Grasshopper como entes bidimensionales, por tanto susceptibles de ser descritas en función de dos términos, que podemos denominar U y V. Imagina que estás en un campo de fútbol y te mueves por él. Conociendo las coordenadas de una de las esquinas del campo, podrías localizarte en función de tu posición con respecto a la banda (ancho) y la línea de portería (largo), siempre dentro de los límites (dominios) del campo. De la misma manera describimos la posición de cualquier punto en una superficie en Rhino y Grasshopper, a partir de los llamados dominios en U y V (que corresponderían al ancho y largo del campo dentro de unos valores máximos determinados). Ahora, si quisiéramos subdividir el campo en pequeñas superficies, valdría con dividir tanto el ancho como el largo en una serie de segmentos y trazar los correspondientes rectángulos. El número de rectángulos sería el resultado de multiplicar el número de segmentos de uno por el número de segmentos del otro, por lo que incrementamos el número de piezas del terreno de manera muy rápida. De nuevo, el comportamiento de Grasshopper en cuanto a subdivisiones es exactamente el mismo; cada una de las parcelas se denomina Subsuperficie. Para lograr tener subsuperficies tenemos que subdividir cada uno de los dominios por un número de segmentos y aplicar dicha división a la superficie original. Cada una de las parcelas o subsuperficies se comporta en sí misma como una superficie, por lo que podríamos, teóricamente, realizar el mismo proceso de manera recursiva para cada una de las parcelas, si esta fuera nuestra intención. Sin embargo, el uso de algoritmos recursivos no es el fuerte de Grasshopper (para esto es mejor que programes) y sería precisar entrar en componentes de scripting para poder hacerlo. Además, excede ampliamente el foco de nuestro manual por el momento. 2. El componente SubSrf Encuentra el componente SubSurface en Surface>Util>Isotrim. Por favor, fíjate que el nombre del comando no es SubSrf, a pesar del nombre del componente. Esto se debe a que las subsuperficies se obtienen haciendo recortes (“trims”) a partir de isolíneas (“iso”) de la superficie.
[Fig 26. Isotrim Menu]
El componente IsoTrim precisa de los siguientes inputs: - Una superficie base, a dividir - Un dominio bidimensional que sirva para realizar la división. Es importante recalcar que el dominio debe ser bidimensional, dado el carácter asimismo bidimensional del objeto base de la geometría. Crearemos dicho dominio modificando el original de la superficie mediante el componente dominio, que veremos a continuación.
[ 30 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
Input domain (modified)
Input geometry (surface)
Input domain (surface)
U0 (min U) U1 (max U) V0 (min V) V1 (max V)
U domain V domain
SubSrf (Isotrim)
Domain to 2 subdomains
Domain to 4 numbers
[Fig 27. Componentes SubSurface (IsoTrim) y Domain]
3. El componente Domain Puedes encontrar los componentes de dominio en Mats>Domain>Domain2 Components. Verás que hay dos componentes que se llaman igual (como ves en la figura 27), realizan la misma operación devolviendo resultados ligeramente diferentes. En el primer caso, el componente devuelve un set de 4 números, correspondiente a los siguientes valores: - U0: valor mínimo del dominio en la dirección U (base para el dominio, en otras palabras). Por defecto, 0. - U1: valor máximo del dominio en la dirección U (final del dominio en esta dirección). - V0: valor mínimo del dominio en la dirección V (base para el otro dominio). Por defecto, 0. - V1: valor máximo del dominio en la dirección V (final del dominio en la otra dirección). En el segundo caso, el componente devuelve únicamente 2 conjuntos de valores: - U: dominio en la dirección U. - V: dominio en la dirección V. La ventaja que ofrece obtener los cuatro valores es que somos más libres de “jugar” con ellos, para luego poder “recrear” otro dominio modificado a partir de los valores que queramos de U y V. Esto es, dado un máximo y un mínimo, podemos crear tantos valores intermedios como queramos y siguiendo el patrón deseado, sin que necesariamente haya de ser un patrón homogéneo con distancias iguales, por ejemplo. II. UNA CUBIERTA COMPLEJA 1. La base de la cubierta: superficie y subsuperficies La idea de la cubierta es sencilla: ser el repositorio de la representatividad del edificio. Lo que vamos a hacer es subdividir la superficie original que hemos creado en el capítulo anterior en un número determinado de subdivisiones (que podrá controlarse paramétricamente) para luego modificar cada una de esas subsuperficies a nuestro antojo, creando patrones más o menos definidos o más o menos complejos.
[ 31 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
El proceso será el siguiente: - Usar la superficie generada como base - Modificar el dominio de la misma - Obtener subsuperficies a partir de la superficie base y el dominio modificado
a. Usar la superficie generada como base Si bien puedes enganchar directamente la superficie resultante del loft al componente de subdivisión, es posible que quieras hacer esto de manera más explícita usando un parámetro superficie que esté conectado inalámbricamente a dicha superficie, para ganar claridad en la definición. b. Modificar el dominio de la superficie base y crear las subsuperficies Esta es realmente la parte más interesante de nuestra actuación por el momento. La figura 29 explica perfectamente los pasos a seguir, que se describen a continuación: - Obtención del dominio original con los valores máximo y mínimo para la creación de un rango entre ellos. · Ve a Math>Domain>Domain2 Components (el último de la lista) y añade el componente al lienzo de la definición. - Asignación de un rango de divisiones independientes para los dominios U y V mediante gráficas · Crea dos sliders con números naturales. Éstos servirán para definir cuántas divisiones tendrán los rangos que asignaremos a U y V. · A continuación crea dos componentes Range (Rango), que encontrarás en Sets>Sequence>Range. Estos componentes crean un conjunto de valores entre dos dados con un número de pasos (por ejemplo, crea un conjunto de valores ente 0 y 1 con 10 pasos intermedios: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0). Como habrás imaginado, conecta los sliders que has creado a dichos componentes y verás que el rango resulta en n+1 valores a partir de un slider de n valores. Context menu (15 values for input = 14)
Domain (by default from 0.0 to 1.0)
Number of steps for V domain division
Range
Graph
[Fig 28. Componentes Domain, Range y Graph]
· Finalmente crea unas gráficas en Params>Input>Graph Mapper y conecta el output del rango a cada una de ellas de manera independiente (es decir, duplica el resultado para U y V). - Ajuste de las gráficas en función de los criterios de diseño deseados. · Con el botón derecho puedes seleccionar el tipo de gráfico que quieras (edita el componente), prueba varios tipos y observa el resultado. - Creación del dominios bidimensional a partir de los valores U0 y V0 iniciales y los obtenidos de los rangos para U y V. Para superficies nos interesa tener un rango de valores combinado para las dos direcciones principales de la misma, que hemos denominado U y V. Para ello, hemos de combinar los dominios lineales que vamos a crear independientemente en
[ 32 ]
[ 33 ]
Number of subdivisions *keep 1
List of subsurfaces
Original surface’s domain (need max values, min vals = 0)
Surface divide
Subdivisions in U\V directions
uv parameters
Normal vectors
[Fig 30. Roof Triangulation]
Get list
APPLY DOMAIN
Order list
Srf4Pt
Create Domain Length Cull 2D Dom
[Fig 29. Subdivide Surface con rangos y modificadores de gráficas] Points on Flatten New surface point list point lists 4 items each
Shift list
List Shift by 1
V DOMAIN
U DOMAIN
Multiply by max
Range Maximum value V1
Graph Subdivisions Range modifiers
Range domain (default 0 to 1.0) Number of values
Exp-type graph
RANGE DOMAIN
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
uno sólo. Sigue los pasos a continuación: · Conecta el resultado de la gráfica al input B de un componente de multiplicación (encuéntralo en Math>Operators>Multiplication). Conecta el máximo del dominio U o V en el input A. Como resultado obtendrás un rango ente 0.0 y el máximo que has introducido en el parámetro A. · A continuación hemos de crear un dominio lineal, para lo que necesitamos dos listas. La primera lista es el rango que acabamos de obtener de la multiplicación. La segunda debe contener los mismos valores desplazados, para poder tener, al combinarlos, una lista del tipo 0.0 to 0.1086, 0.186 to 0.166... que corresponden a diferentes puntos de la superficie. Para ello, utiliza un componente Shift (recuerda, encuéntralo en Sets>List>Shift List) y asigna el integer 1 a la entrada S. · Crea el dominio a partir de las dos listas. Conecta la original a A y la recién creada (“Shifted List”) a B. Verás que el último item de la lista contiene un intervalo no válido, ya los extremos del mismo coinciden. Para evitar errores, has de eliminar este último item de la lista, lo que puedes conseguir mediante el comando CullN. - Asignación de este conjunto de dominios 2D al componente de subsuperficie para que cree el número de subdivisiones apropiado. · Asigna el índice del último item de la lista a CullN y ya tienes la lista preparada para ser usada por el 2D Domain (que encontrarás en Math>Domain>Domain2 -“create a 2D Domain from 2 linear domains”). - Conecta finalmente el dominio creado al componente SubSrf para obtener, de la superficie original, las subsuperficies correspondientes. Vamos a usar ahora cada una de estas (sub)superficies para popular la original con componentes. Puedes ver la definición detallada de estos últimos pasos en la figura 31. 2. Usar subsuperficies para popular un modelo con componentes de diseño. Lo que necesitamos ahora es extraer los 4 puntos de los vértices de las subsuperficies creadas para crear una triangulación. De esta manera, si los puntos son, por ejemplo, el 0, 1, 2, y 3, podemos crear 2 triángulos con los puntos 0, 1, y 2 por un lado, y 0, 2, y 3 por otro. Al crear superficies en dichos triángulos, usaremos el componente Srf4Pt, o creear superficie a partir de 4 puntos. Recuerda que, para que la superficie o polilínea correspondiente esté cerrada, el primer punto y el último han de coincidir, por lo que deberemos alimentar los puntos de la siguiente manera: 0,1,2,0 para el primer triángulo y 0, 2, 3, 0 para el segundo. Una vez hayamos triangulado extraeremos las aristas de las superficies y procederemos a modificar la superficie para que sea más compleja. Puedes ver la definición exacta en la figura 30. Los pasos que debes seguir son los siguientes: - Utilización del componente SDivide (Surface>Util>Divide Surface) para la obtención de los puntos sobre la superficie. Verás que la lista que resulta de dicho componente es un poco confusa, por lo que es recomendable “aplanarla” con el componente Sets>List>Flatten List y proceder a ordenarla a nuestro gusto. - Crear una lista ordenada de puntos: · Conecta el resultado del flatten a un componente de Partition, que crea sublistas a partir de una lista inicial dividiéndola cada n componentes. En nuestro caso, como queremos tener 4 puntos en cada elemento de la lista, crearemos una partición cada 4 elementos. De este modo, obtendremos tantas listas como elementos teníamos entre 4 (o lo que es lo mismo, el mismo número que subsuperficies). · La lista estará entonces ordenada y podemos proceder a ordenar los puntos para los triángulos. - Ordenar los puntos para crear la triangulación: · Sigue exactamente los pasos que encuentras en la figura 30, es más sencillo de lo que parece a simple vista. De lo que se trata es de poder identificar cada uno de los puntos y de introducirlos en el orden correcto. Si te fijas, verás que los inputs A y D (primer y último punto) del componente Srf4Pt son iguales, y corresponden al punto “0” (primer punto de cada item de las listas). Los puntos B y C necesitan retocarse mediante un “Shift” para que correspondan a los puntos 1 y 2 (o segundo y tercero de las listas). Así, los inputs del primer componente A, B, C, y D, corresponden a los 0, 1, 2, y 3. De igual modo , los puntos A, B, C, y D del segundo componente corresponden a 0, 2, 3, y 0. Esto es todo lo que necesitas para triangular cualquier superficie. 3. Usar los triángulos para crear componentes. Recuerda que hemos creado triángulos a partir de superficies de cuatro puntos. Esto lo hacemos de esta manera para disponer de superficies “cerradas”, siempre más estables a nivel geométrico. A continuación obtendremos los componentes siguiendo el protocolo que se indica:
[ 34 ]
[ 35 ]
Graph values (from 0.0 to 1.0)
Original surface’s domain (need max values, min vals = 0)
Value range (0.0 to 1.0)
Shift list
Shifted list
[Fig 31. Creación del dominio bidimensional]
Max domain value
Range from 0.0 to max domain value
Shift list by 1
Result (range from 0.0 to max domain value)
List
Domain
Linear domain 1 Linear domain 2
Index of last item in list
2D domain
Culled Domain List *erased last interval
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- Duplicar los bordes de las superficies - Unir los bordes duplicados para crear un triángulo - Escalar o crear un offset hacia dentro del triángulo para crear otro interior - Crear una superficie entre ambos - Extruir la superficie como sólido con una superficie deseada
a. Duplicando los bordes Usa el comando “Edges”, que extrae las líneas de borde (las aristas) de un objeto BREP cualquiera. En el ejemplo verás que lo hemos hecho con la pareja de listas de superficies obtenidas de la triangulación. Como resultado obtendrás una lista de curvas que a continuación hemos de tratar para obtener triángulos cerrados. b. Unir los bordes duplicados Para unir los bordes, toma la lista de “Naked Edges” de los resultados del comando “Edges” anterior. Usa Flatten sobre ella para obtener una lista unidimensional con todos los bordes. Deberías obtener una lista con exactamente el triple de objetos de la lista inicial (es decir, tres aristas por cada rectángulo). Al “alisar” la lista, todos los bordes están indeferenciados en la nueva lista, pero en orden. Es decir, cada grupo de tres bordes consecutivos pertenece a un mismo triángulo, por lo que podemos formar sublistas de 3 elementos que correspondan a cada uno de los 3 bordes de cada triángulo. Para ello, usa el comando “Partition” de lista con la resultante del Flatten e introduce un valor de 3 en el input S (Size of List, o tamaño de la lista). Obtendrás un conjunto de sublistas (tantas como triángulos) que contienen cada una los tes bordes que necesitamos. A continuación une dichas aristas conectando el output C del comando Partition con el input C del Join. Obtendrás la lista de curvas unidas y cerradas. c. Escalar el borde para obtener el hueco interior del componente Como en ocasiones interiores, podemos escalar cada una de las curvas obtenidas de manera uniforme para crear huecos en nuestros componentes que nos sirvan para simular una estructura de celosía tridimenional, barras, o cualquier otro tipo de configuración. Para ello, sigue los pasos que ya conoces: - Obtén el centroide de masas de la curva exterior - Crea un slider para el factor de escala que varíe entre algo más de 0 y algo menos de 1 (0 podría dar error y 1 dejaría la curva sin modificar, lo que también podría generar un error). - Conecta las curvas, centroides, y factor de escala al componente Scale Puedes además introducir variantes de diseño mediante la modificación de estas curvasvariando su geometría de diferentes maneras, incluyendo: - Su grado - La inclusión de fillets para redondear los bordes - Otras que puedas pensar. En este caso, hemos utilizado el comando fillet con un slider para modificar las curvas interiores. También puedes utilizar cualquier otro tipo de factores externos a la geometría (que veremos más adelante) o internos a ella, tales como - La curvatura de la superficie original (a menor curvatura mayores esfuerzos), - La posición relativa de las piezas, - El ángulo con la vertical, o cualquier otro parámetro que ayude a que tu diseño sea más inteligente. d. Crear una superficie entre ambos Una vez más estamos recurriendo a partes y componentes que ya nos son conocidos. Para crear la superficie entre las curvas, y al haber sido las primeras escaladas uniformemente (lo que nos garantiza que son coplanares), podemos emplear el comando “Planar”, al que asignaremos tanto las curvas obtenidas inicialmente de “Join” como las que acabamos de crear mediante “Fillet” (o el método que hayas estimado oportuno). e. Extruir la superficie Extruir la superficie requiere que definamos una serie de parámetros: - En primer lugar, el vector director de la extrusión (que nos dará la dirección, el sentido y la magnitud de la misma). Po-
[ 36 ]
[ 37 ]
Edges
Bezier-type graph
Non manifold Edges
Naked Edges Interior Edges
Graph modifiers
OBTAIN JOINED EDGES - CLOSED LOOPS
Down-scale curve (obtain inner curve)
Srf Closest Point
Create in-between planar surface
OFFSET COMPONENTS
[Fig 32. Creación del dominio bidimensional]
Obtain curve centroid
CREATE INNER CURVE
uv Parameters
CALCULATE EXTRUSION OPTIONS
Extrude
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
demos obtenerlo directamente evaluando la superficie en un punto dado. Para ello, lo más sencillo es calcular el punto más cercano de la superficie al centroide de masas de cada uno de nuestros componentes, y hallar sus coordenadas en espacio UV (R2).
[Fig 33. Surface CP Menu]
Para ello, usa el comando Surface>Analysis>Surface Closest Point (Surface CP). Verás que el componente tiene dos inputs, que corresponden al punto de referencia P y a la superficie base S. Los outputs que genera son los siguientes: · P: Closest Point o punto más cercano sobre la superficie · uvP: coordenadas UV del punto, el output que necesitamos · D: distancia ente el punto seleccionado y la superficie de referencia Podríamos pensar que lo que necesitamos es el punto más cercano. Sin embargo, y puesto que estamos tratando con vectores, necesitamos las coordenadas del punto en R2 para posteriormente evaluar la superficie con estos parámetros y obtener la normal a la superficie en cada punto.
[Fig 34. Evaluate Surface Menu]
El comando “Eval” (Surface>Analysis>Evaluate Surface) toma una superficie, una pareja de coordenadas (u,v) y devuelve lo siguiente:
[ 38 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
· Punto: el punto (coordenadas x,y,z) en las coordenadas u y v dadas. · Normal: el vector normal a la superficie en dicho punto. Por defecto, el vector es unitario. · Frame: en ese punto, devuelve el plano tangente a la superficie. De este modo, extraemos la normal que usaremos como base a la extrusión, con la dimensión por defecto (1 unidad) o modificada por medio de algún tipo de escala o factor. - En segundo lugar, debemos definir la dimensión de la extrusión. Para escalar un vector usa el comando “Amplitude”, que encontrarás en Vector>Vector>Amplitude. El mecanismo del componente es extremadamente sencillo y necesitas únicamente el vector base y el factor de escala. Ya hemos empleado sliders para escalar geometría en ocasiones anteriores, así que no vamos a detenernos en ello.
En esta etapa, deberías tener un modelo semejante al de la figura 35
[Fig 35. Modelo acabado con cubierta]
III. PERFECCIONANDO EL GRADERÍO Probemos a continuación a perfeccionar el graderío. Si hasta ahora éste lo habíamos representado únicamente con una superficie inclinada, es posible crear automáticamente los asientos o graderíos en función de su altura, siguiendo la configuración base de la superficie que hemos generado originariamente. Para ello crearemos una serie de curvas de contorno con unos intervalos definidos (1 metro, por ejemplo), las extruiremos para crear un segundo grupo, y uniremos mediante superficies las del primer y segundo grupo. Este proceso se puede repetir tantas veces como tramos diferentes de galería tengamos, de manera que únicamente lo explicaremos y diseñaremos una vez.
Puedes ver una descripción diagramática de la definición en la figura 36 a continuación.
1. Crear las líneas de contorno. Para crear las líneas de contorno usaremos el componente Intersect>Mathematical>Contour. Arrastra el componente al lienzo y verás que precisa de una gran cantidad de inputs, que explicamos a continuación:
[ 39 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
- S (Shape): malla o BREP de base. La superficie del loft inicial. - P (Plane): plano base para comenzar los contornos. El plano base el más bajo posible, por tanto lo hallaremos con el componente del área de la curva base (la del campo) - N (Normal): dirección normal al desplazamiento del plano de contorno. Éstos serán perpendiculares al vector. El vector será vertical inicialmente. - D (Distancia): distancia de salto entre plano y plano para los contornos. Esta distancia la controlaremos por un slider, pero para comenzar puede ser 1 unidad.
Input geometry (surface)
1
Loft Original (previsualización)
Contours from Loft Surface
2
Moved contours
3
Vertical offset lines (move)
Contour Lines
Final geometry (loft between contour and moved curves)
4
Final loft surface
[Fig 36. Proceso de modelado del graderío]
Observa la definición de la figura 37 para comprender el proceso completo. Verás que en la última fase se hace preciso ordenar las listas de las curvas con las que tratamos para su correcta aceptación por el comando Loft. Este extremos lo explicaremos más adelante con cautela.
Define los inputs del componente Contour con los siguientes valores: · Shape: el loft original, la superficie con la que hemos trabajado hasta ahora. · Plane: el plano base de la curva que hallamos partir del centroide. Define el plano con el origen en el centroide de masas de la curva (ya calculado previamente), el eje X universal y el eje Y universal. Los ejes puedes extraerlos de Vector>Vector>UnitX y Vector>Vector>UnitY. Conecta dichos componentes al input del plano. · Normal: un eje vertical y hacia arriba, es decir, el vector Z · Distancia: en este caso crearemos un slider, pero podemos trabajar con 1 unidad (es decir, los contornos estarán separados entre sí 1 metro en vertical)
2. Copia las líneas de contorno Este paso es muy sencillo. Mueve las líneas de contorno hacia arriba la misma distancia que hayas usado para crear los mismos contornos, de manera que la primera línea copiada coincida en altura con la segunda del contorno. Como ves, cuando vayamos a crear la nueva superficie, deberemos estudiar cuidadosamente cómo ordenamos las listas de curvas.
[ 40 ]
[ 41 ]
Normal Plane Vector
Origin X Axis vector Y Axis vector
Input curves
CREATE CONTOUR LINES
Contour
Weaving pattern List1 List2
[Fig 37. Creación de las curvas de contorno y el loft definitivo para los graderíos]
Contour Distance
Loft surface Base Plane Normal vector Distance
Vertical vector (horizontal planes)
Contour
MOVE CONTOUR LINES LOFT WEAVED CURVE LIST
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
3. Ordena las listas de curvas Para crear el loft, ten en cuenta el orden en el que vamos a introducir las curvas. Éste debería ser el siguiente: - Primera curva de contorno (lista 1) - Primera curva movida (lista 2) - Segunda curva contorno...
Como ves, hemos de combinar los elementos de las listas uno a uno, por lo que se hace imprescindible el uso de Weave. Este componente, que encuentras en Sets>List>Weave, te permite definir un patrón de “hilado” ente dos listas. En este caso, deberemos definir cuántos elementos y en qué orden (de cada lista) se van a introducir (aunque es el comportamiento por defecto del componente hacer uno a uno).
[Fig 38. Definición del patrón de weave]
Haz click con el botón derecho sobre el componente para abrir el panel contextual. En el input P, dentro de la opción “Set Multiple Integers”, define los siguientes: 0,1. Estos corresponden a la lista 0 y a la lista 1. De esta manera, el componente analizará las listas y cogerá el primer elemento de la primera y luego el primer elemento de la segunda, y en ése orden los insertrará en la nueva lista. Al llegar al final de la definición del patrón, volverá a hacer los mismo con el siguiente elemento de las lista hasta que las dos listas se acaben. Una vez hayas hecho esto con las listas, obtendrás un única lista “refundida” de las dos anteriores, y que podrás pasar directamente al comando loft. El resultado debería ser como el de la fase 4 de la figura 36. Repite esta operación con tantos tramos de graderíos tengas, e intenta crear tantos parámetros como sean necesarios para tener un control apropiado sobre el modelo. Recuerda que la definición correspondiente a este modelo es una definición simplificada, y que por tanto es muy mejorable. Algunas opciones serían: - Introducir atractores para generar variabilidad externa a la definición geométrica. - Modificar las aperturas de los huecos en función de factores intrínsecos al objeto. - Ver posibilidades de scripting para fabricación, lo que implicaría un cambio radical del modelo.
[ 42 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 43 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
CREACIÓN DE GEOMETRÍAS LIBRES COMPLEJAS CON CRITERIOS ESTÉTICOS
[ 44 ]
[ 45 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
I. OBJETIVO 1. Topología Esta parte del manual se centra en generación de geometría compleja y su modificación a partir de controles externos interactivos. Dichos controles son externos a la volumetría propia del edificio o modelo y pueden considerarse modificadores del mismo, condicionantes que influyen en el comportamiento del mismo. De este modo, soleamiento, vistas, o sencillamente cuestiones estéticas y de voluntad de diseño, pueden asemejarse a limitaciones geométricas. De este modo, un punto puede significar un rayo de luz, o un vector una dirección de apertura de lamas o semejante. 2. Descripción del marco proyectual Debes haber manejado Grasshopper con cierta soltura antes de comenzar a modelar este tipo de geometrías. Trabajaremos con una superficie sencilla a la que aplicaremos un algoritmo de triangulación y posteriores modificaciones para generar volumen en componentes. Posteriormente, modificaremos la geometría ya creada con una serie de atractores. II. TRABAJAR CON EL ALGORITMO VORONOI SOBRE DIFERENTES SUPERFICIES 1. Breve descripción del algoritmo Imagina que tienes un mapa de una ciudad en donde haya una cantidad n determinada de repetidores móviles, por ejemplo. Un teléfono localizado en cualquier punto de la ciudad trata siempre de conectar con los postes más cercanos, por lo que la ciudad se divide en zonas, en donde cada una de ellas tenga exactamente la cobertura de uno y sólo uno de esos repetidores y se encuentre lo más cerca posible del mismo sin que exista ningún otro repetidor más cercano. La resolución de este particionado zonal de un territorio definido se dispersa mediante el diagrama de Voronoi, y se resuelve matemáticamente mediante una ecuación de tipo n*(log n) para permutar varios algoritmos; sin embargo, no vamos a entrar en el algoritmo en tanta profundidad. Por otro lado, el Voronoi puede resolverse además por medio de teoremas geométricos como la triangulación Delaunay. Puedes ver un gráfico resuelto con el algoritmo en la figura 39. Verás que hay una serie de puntos y líneas. Los puntos más oscuros corresponden a los puntos de los repetidores, en el caso anterior, mientras que los grises corresponden a las celdas que aquéllos definen. De este modo,. se crean paquetes o zonas que corresponden a cada uno de los puntos dentro de un espacio finito y limitado. Como puedes observar, todo lo que necesitamos es un conjunto de puntos y un espacio o marco que los contenga. En nuestro caso, aplicaremos además esta solución al espacio bidimensional de una superficie, ya que éstas pueden definirse en espacio R2, al igual que la solución plana que estamos tratando en el ejemplo.
[Fig 39. Voronoi en plano, en gris las celdas o espacios contenedores]
[ 46 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
2. Aplicando el algoritmo en Grasshopper (método I) En este primer caso vamos a trabajar con el algoritmo de una mare muy específica: dibujaremos el algoritmo en 2D, crearemos la solución tridimensional a partir de la caja contenedora de lasuperficie base; calcularemos la interesección ente la solución Voronoi y nuestra superficie, y crearemos una malla a partir de dicha intersección. Otra opción es, sin lugar a duda, mapear la solución bidimensional plana directamente sobre una superficie. También estudiaremos esta opción. En función del tipo de superficie que tengas, es posible que quieras usar uno u otro métodos. En cualquiera de los casos, ya existe un componente que resuelve Voronoi en Grasshopper, por lo que no es necesario que intentes crearlo tú. Como en la mayoría de los casos, basta con emplear de manera adecuada los componentes existentes. a. Crea el setup para la solución Voronoi Recuerda, todo lo que necesitamos es una superficie y una nube de puntos. Para la superficie puedes crear una desde el principio en Rhino o seleccionar, por ejemplo, la cubierta del estadio que acabamos de diseñar en el apartado anterior. La nube de puntos, en este caso, la crearemos directamente dentro de la interfaz de Grasshopper mediante la “población” de una superficie, si bien se podría intentar controlar manualmente. - Para crear una distribución aleatoria de puntos sobre una superficie, hallaremos primero el dominio de la superficie, y luego encontraremos (dentro de dichos rangos o dominios) tantos números aleatorios como necesitemos, para combinarlos en parejas que resulten finalmente en parámetros U y V. Así pues: · Halla el dominio de la superficie mediante el comando Domain. Encuentra el componente en Maths>Domain>Domain2 Components. Como probablemente sepas, el comando precisa una superficie u objeto con un dominio bidimensional y lo descompone en sus subdominios U y V, los cuales, a su vez, son rangos de números que oscilan ente 0 y uno superior. Usaremos el valor de dichos números para calcular otros aleatorios que pertenezcan a dicho dominio.
[Fig 40.Componente Domain2Components]
· Genera números aleatorios mediante el comando Sets>Sequence>Random. De nuevo, este componente precisa un dominio para el rango numérico (R), la cantidad de números aleatorios a generar (N), y una semilla (Seed, S) para la generación del número aleatorio. Crea dos contenedores separados para U y V, y conéctalos de forma independiente. Asegúrate de que tanto uno como otro componente generen el mismo número de
[ 47 ]
Reduce rnd Populate Domain
OPTION 2
OPTION 1
1
3
2
1
3
Randomize
4
Srf 3D Vor
4 2
Remove duplicated data
strt pt
1
(n-1)th mesh
A
resulting mesh *single face
nth mesh
D
3
Average to obtain scale center
original segment
Obtain vertices on surface
Evaluate Voronoi Intersect
RND SRF POPULATION
U domain V domain
BASE GEOMETRY
ORDER POINTS
B
2
4
3
2
1
C
1 3
2
4
Meshes Join
Vertices from segments
Face order Mesh list (quads)
resulting mesh *all faces
vertex order *in QUAD scaled segment
4
end pt
Shift lists
Other segment’s end/start points
Segment’s end/start points
CREATE MESH
[Fig 41. Definición de Voronoi para crear una malla a partir de una distribución de nube de puntos sobre una superficie (mostrando dos opciones)]
OBTAIN BBOX
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER
ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 48 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
valores y finalmente establece valores diferentes para las semillas de ambos componentes (por ejemplo, 0 y 1). · Una vez genrados los valores aleatorios, debemos combinarlos en un único valor del dominio. Esto puede hacerse de múltiples maneras. Sin embargo, para demostrar la flexibilidad de los componentes de Grasshopper, lo haremos utilizando un a priori extraño componente al efecto, el Vector XYZ, que crea un vector (esto es, una tríada de valores) a partir de tres componentes o valores por separado (para los que utilizaremos el rango obtenido para U, el rango obtenido para V, y 0).
U
Amount random numbers
V
[Fig 42.Obteniendo los valores aleatorios para U y V. Combinación para su uso por el comando Eval]
[Fig 43.Menu Vector>Vector>VectorXYZ]
· Conecta el output del componente VectorXYZ (Vec) al input uv del componente Surface>Analysis>Evaluate Surface para obtener los puntos correspondientes a las coordenadas (u,v) dadas por los números aleatorios. En este caso, obtendrás la geometría en sí.
[ 49 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
b. Calcula la solución Voronoi Una vez hemos construido los puntos sobre la superficie con el dominio dado, podemos proceder al cálculo de la solución Voronoi tridimensional que nos servirá para fijar la geometría final sobre la cubierta. Es conveniente recordar que en este caso lo haremos por medio de la intersección del cálculo de la solución Vornoi 3D con la superficie de la cubierta, tal como puedes ver en la figura 41. · Conecta los puntos recién obtenidos al input P del componente Mesh>Triangulation>Voronoi 3D. · Conecta la caja opcional del Bounding Box de la superficie al input B (Boundary) del componente Voronoi 3D, lo que le dará un entorno limitado de trabajo. La solución se computará automáticamente, y deberá tener un aspecto semjante al de la figura 44, que encuentras a continuación. De todas maneras, no se trata, como hemos dicho, de conocer a fondo el algoritmo, sino de poder usar las herramientas necesarias para trabajar con el diseño que más nos convenga en cada momento.
[Fig 44. 3D Voronoi: BBox, Solución, Intersección]
[ 50 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
c. Crea la malla A continuación deberemos descomponer la geometría en segmentos, para posteriormente escalar dichos segmentos y obtener así 4 puntos: el punto inicial y final de cada uno de ellos. Estos 4 puntos definirán los vértices de las mallas, que serán todas quads (a posteriori puede triangularse la malla). Dichas mallas tendrán únicamente una cara. De este modo, y una vez hemos creado cada una de las mallas, podermos unirlas todas en una única malla, cuyas caras serán cada una de las mallas que hemos creado hasta el momento. Así pues, el orden en el que introduzcamos las mallas iniciales es totalmente indiferente, ya que en el último paso las uniremos en una única malla. Ten la precaución de unificar las normales de la malla antes de intentar modificarla, extruirla, o llevar a cabo cualquier otra operación sobre ella. - Para descomponer la geometría en segmentos, emplea el componente Explode. De esta manera obtendremos, por un lado, los segmentos de la intersección, y los puntos sobre la superficie. En este caso, vamos a emplear directamente los vértices sobre la superficie, ya que vienen ordenados por polígonos o áreas, tal como puedes ver si conectas el output a un panel de texto. - Escalaremos los vértices ordenadamente usando como centro el centro de masas de los polígonos. Para ello, y ya que estamos tratando con puntos, usaremos el componente Maths>Util>Average para hallar la media de las coordenadas de todos los puntos. Emplea el factor de escala que estimes oportuno, o algún tipo de parámetro en función del área de cada zona, por ejemplo. - Escalados los vértices hemos de ordenarlos de manera que generen una cara. Con los puntos inicial (0) y final del segmento original (1) e inicial (2) y final (3) del segmento escalado definiremos dicha cara. Verás que realmente es en el componente Mesh>Primitive>Mesh Quad donde se ordenan dichos puntos, correspondiendo la siguiente distribución: · A: 0 · B: 1 · C: 3 · D: 2 De manera que queden correctamente ordenados, tal como puedes ver en la figura 41 de páginas anteriores. - Hecho esto, conecta los vértices al componente Merge, de manera que queden como una lista única. - Finalmente, asocia los vértices y el output del componente Quad al componente Mesh, que se encarga de crear mallas independientes en función de los vértices dados y el orden en que se leen. Si así lo precisas, puedes unir todas las mallas en una única con el comando MeshJoin que encontrarás en Mesh>Util.
[Fig 45. Solución de la malla para el Voronoi obtenido]
[ 51 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
d. Posibles extensiones Para terminar, puedes probar a extender el ejercicio probando alguna de las siguientes variantes: · Escalar los huecos en función de algún parámetro geométrico · Refinar la malla una vez creada · Extrusionar la malla para obtener diferentes efectos · Aplicar el comando smooth sobre la malla terminada (y extruida) para crar un efecto de suavidad · Crea huecos curvos a partir de los vértices En definitiva, explora un poco más allá las posibilidades que ofrece el software, y trata de aplicar una imprompta personal que aleje el diseño de la estándar y directa aplicación de funciones predefinidas. Puedes obtener resultados semejarntes al de la figura 46. En este caso, se han unificado todas las normales de la malla, extruido una distancia determinada, y aplicado el comando Smooth con un valor de suavizado de 2. Intenta crear tus propios efectos.
[Fig 46. Malla modificada]
[ 52 ]
INSTITUTO ARNAIZ DISEÑO PARAMÉTRICO EXPLÍCITO CON GRASSHOPPER ADOLFO NADAL SERRANO MAS. ARCHITECT - ARCHI [O] LOGICS
[ 53 ]