Inicio > Geometría, Programación > Structure Synth

Structure Synth

Jueves, 12 de mayo de 2011
Citar este artículo 1.614 visitas
Structure Synth

En post anteriores mostré varios ejemplos de diseños creados con Context Free, los que en su mayoría involucran potentes ideas matemáticas como la iteración recursiva de transformaciones geométricas.

En esta capítulo, sigo con un pariente de Context Free, que funciona con una lógica similar, pero ahora en el espacio.

Veamos este “sintetizador de estructuras” que es Structure Synth.

En Noviembre y Diciembre, vimos ejemplos de Context Free en tres post distintos. Allí muestro cómo en este programa es posible generar imágenes muy interesantes y regularmente de gran complejidad, con sólo unas pocas líneas de código.

La idea es simple, se parte de cuadrados, círculos o triángulos, y se definen transformaciones (traslaciones, rotaciones, semejanzas) que luego se repiten recursivamente.

De esta manera con sólo un par de transformaciones se puede generar fractales (o imágenes similares a…), como el árbol pitagórito.

Estas mismas ideas son las que en Structure Synth podemos extender al espacio, como veremos a continuación.

Structure Synth (Sintetizador de Estructuras)

Las formas primitivas con las que trabaja Structure Synth son cubos (box), esferas (sphere), esqueletos de cubos (grid), líneas, puntos y triángulos.

Adicionalmente las transformaciones principales son traslaciones respecto a los ejes X, Y, Z (ó vectores unitarios asociados), rotaciones y reflexiones respecto a los mismos, además de escalamientos.

Veamos algunos ejemplos prácticos…

Ejemplo 1: Espiral de esferas

Una primera forma de generar estructuras es con iteraciones de transformaciones geométricas, que en este caso están explícitamente delimitadas.

En este caso, hay una composición de 4 transformaciones geométricas, que se aplican 200 veces a una esfera inicial (clic en la imagen para ver el código).

Combinación de iteraciones

El ejemplo anterior involucra una complejidad limitada, pero que puede escalar en niveles de iteración. Así, podemos tomar la resultante (la espiral) y aplicarle más transformaciones, y a ese nuevo resultado aplicarle más… y así sucesivamente.

El siguiente ejemplo explora este aumento en los niveles de iteración.

Ejemplo 2: 4 Niveles de iteración

Tomando como base el ejemplo anterior, podemos tratar la espiral generada como si fuera una sola figura, y aplicarle más transformaciones.

En este ejemplo tal idea se aplica 4 veces, lo que podemos describir como cuatro niveles de iteraciones.

De esta manera, en el nivel 1, transformamos una esfera en una espiral de esferas, en el nivel 2 tal espiral la transformamos en una espiral doble; en el nivel 3 la rotamos 10 veces; y en el nivel 4 terminamos generando una estructura formada por 40.000 esferas..

Es claro que este ejercicio puede continuar escalando en más niveles de iteración, aunque esto es sólo una parte del enorme potencial de Structure Synth.

Recursividad

La idea de recursividad podemos tomarla como una generalización de lo antes descrito: definimos reglas que se aplican a un objeto inicial, luego a los resultantes, y los resultantes de estos, y así sucesivamente. De esta manera, la regla de la espiral de esferas se aplicaría indefinidamente y no sólo 200 veces.

Ejemplo 3: Espiral de esferas (con recursividad)

En este código es importante notar que la regla r1 hace referencia a sí misma, esto es lo que se denomina una definición recursiva. r1 está compuesta por una esfera a la que se le aplican recursivamente cuatro transformaciones (dos rotaciones, una traslación y un escalamiento).

 

Las estructuras que podemos generar con esta lógica de reglas recursivas son muy interesantes, y siendo muchos fractales bastante viables de implementar. Un buen ejemplo es el, ya mencionado muchas veces, Árbol Pitagórico.

Ejemplo 4: Árbol pitagórico (30º / 60º)

La idea principal consiste en partir de un cubo y definir dos transformaciones, cada una genera un cubo sobre el primero; de manera que la relación entre las aristas es pitagórica, en una analogía de los cuadrados construidos sobre un triángulo rectángulo.

Pero aquí debe notarse que la definición se ha hecho con recursividad, de manera cada una responsable de cada rama, se aplican a todos los cubos generados en cada iteración.

Con este tipo de estructuras las posibilidades son muchísimas, tan sólo añadiendo pequeñas variaciones, como un pequeño giro respecto al eje z (ver la “variación”) el resultado final mejorarse de innumerables maneras.

Ejemplo 5: Árbol pitagórico (45º / 45º)

Esta es otra variedad de árbol pitagórico que involucra un triángulo isósceles rectángulo, y por lo tanto, general una estructura simétrica.

Nuevamente se trata de una implementación un tanto plana, dado que se organiza con paralelismo al plano XY. Esto es porque las transformaciones que incorpora son sólo traslaciones respecto a X e Y, y rotaciones respecto al eje Z.

En cambio introduciendo rotaciones respecto al eje X ó Y, la estructura se ramifica de manera más “natural” (ver “variación”). Es interesante observar cómo cambia el árbol a medida que uno de estos ángulos cambia, animación que se encuentra al final del post.

Ejemplo 6: Nube de esferas

Tomando estas ideas de manera más experimental, es muy interesante explorar los distintos resultados que se obtienen, al modificar ordenadamente los distintos parámetros de las transformaciones.

Este ejemplo parte de una esfera, y tiene casi las mismas transformaciones que los árboles pitagóricos antes mostrados, pero modificados de manera completamente libre, obteniendo una nube de más de 65.000 esferas.

Ejemplo 7: Árbol 3D

Si se trata de árboles, la idea de ramificación es relativamente simple. Podemos plantearlo como construir un tallo inicial con esferas y luego convertirlo en una rama.

Este ejemplo utiliza ramifica de cuatro en cuatro, partiendo de 12 esferas como tallo inicial y luego ramificándolas simétricamente.

Sólo los colores se han omitido en el código, lo que suele consistir en agregar distintos valores de tinte (por ej. h 2).

Aleatoriedad

Además de las iteraciones y recursividad, un tercer elemento central de Structure Synth (y del arte generativo) es la aleatoriedad. En este caso, el azar entra en juego cuando una regla es definida de dos formas distintas. Tales reglas, llamadas ambiguas, forzan a Structure Synth a seleccionar aleatoriamente una u otra; y esto permite generar una apariencia más natural aun.

Ejemplo 8: Planta aleatoria

Esta planta, tiene una apariencia distinta cada vez que se ejecuta el código, dado que la regla R1 está definida de tres formas distintas (rule planta).

Luego, partiendo de una esfera es posible que se rote en 6º respecto al eje Z, como se indica en la primera definición; o bien en -6º, como se indica en la segunda definición; o en 90º como se indica en la tercera definición.

Enlaces

Finalmente, es importante aclarar que las imágenes mostradas en estos ejemplos son de calidad un poco mejor de lo que Structure Synth genera a priori. Todos los efectos de iluminación son parte de un proceso posterior llamado “Raytrace” (trazado de rayos), que suele demorar varios segundos o incluso minutos, dependiendo de la complejidad de las estructuras generadas.

El trazador de rayos es una herramienta sumamente versatil, que hasta ahora permite controlar la posición de la cámara, de los focos de luz, la calidad de la imagen, reflexión de distintas superficies e incluso la profundidad de campo. Las siguientes imágnes muestran algunos estos atributos.

Otros ejemplos (trazador de rayos)

 

Hay mucho más que explorar de Structure Synth, pero con esto he tratado de dar un panorama general de sus potenciales y uso. A continuación dejo algunos enlaces útiles:

Videos

En estos meses estuve experimentando con una característica nueva de Structure Synth, que utiliza JavaScript para automatizar la creación de animaciones. Esto sería, generar cuadro a cuadro una animación, haciendo variar uno o más parámetros. Estos videos son el resultado, que espero mejorar en los próximos meses:

Geometría, Programación , , , ,

Artículo publicado en http://www.geometriadinamica.cl/2011/05/structure-synth/.