El arquitecto y gerente BIM Pavlo Menshykh explica cómo usar algoritmos y parámetros con codificación GDL en Archicad para crear objetos de terreno, objetos animados, diferentes opciones de geometría y mapas de altura, además muestra cómo se pueden escribir funciones en lenguaje de programación.

El ejemplo principal es un objeto de terreno generado por procedimientos basado en una versión bidimensional del algoritmo de ruido de Ken Perlin. Es eficiente en el uso de recursos e implica cálculos matemáticos relativamente simples. Los principales parámetros de control son los valores de amplitud, que controlan la altura máxima de los valores z; el valor de frecuencia, que determina qué tan rápido se muestrean los resultados para controlar la «irregularidad»; y el número de octavas.

Cuanto mayor sea el número de octavas, más se apilarán los diferentes niveles de ruido para producir un resultado más “detallado” e “interesante”. Este efecto comienza a disminuir después de aproximadamente 7 octavas. Cada octava es efectivamente un nuevo ciclo de cálculos, y aumentan el tiempo de procesamiento casi linealmente.

A continuación se muestra la comparación de cómo los valores de octava afectan el resultado generado.

Tabla de permutación

Para generar el campo de ruido de forma pseudoaleatoria, se requiere una tabla de búsqueda. Para obtener el original definido por Ken Perlin, creamos un script simple en lenguaje de programación Python, luego copiamos y pegamos su salida en el editor GDL.

Para la generación de un campo de ruido aleatorio a partir de diferentes tablas de búsqueda, se utilizó un algoritmo de reproducción aleatoria simple. No tiene una distribución muy uniforme, pero es suficiente y es extremadamente rápido.

Usar el cambio de terreno Diferente cada vez generará terreno a partir de una tabla de búsqueda generada aleatoriamente cada vez que se coloque el objeto. Si mueve o gira el objeto generado, no cambiará.

Funciones en GDL

Veamos cómo se escriben las funciones en un lenguaje de programación ampliamente utilizado, como Python.

Muy sencillo. Sin embargo, las funciones en su forma habitual no están presentes en GDL. En cambio, GDL utiliza llamadas de macro que se utilizan para generar geometría.

Estas llamadas a macros usan el nombre del objeto como el nombre de la «función» y pasan parámetros para obtener el resultado, de manera muy intuitiva. Pero este enfoque tiene un inconveniente. No puede empaquetar toda la lógica dentro de un solo objeto GDL, debe generarlo como una biblioteca. Esto tiene sentido para las tareas de desarrollo en general, pero para la creación de objetos independientes de una manera fácil de usar, preferiría generar todo sin construirlo en una biblioteca LCF. Incluso puede utilizar llamadas de macro de forma recursiva.

Árbol fractal generado usando diferentes parámetros con GDL llamando al .gsm «lógico» que luego se llama a sí mismo de forma recursiva desde el objeto principal del cuerpo

Para evitar el uso de llamadas a macros, una alternativa es el uso de subrutinas y búfer de parámetros. A continuación se muestra un ejemplo de tal enfoque.

Operación bit a bit en GDL

Solo hay dos operaciones clave en GDL y, afortunadamente, se pueden usar para recrear todas las demás.

Se necesita AND bit a bit para realizar la generación del campo de ruido.

Para realizar la operación, debe determinarse la longitud de bits del número de entrada mayor, para evitar realizar cálculos innecesarios. Una vez determinada la longitud de bits, todos los valores de bits se comprueban entre los valores, uno por uno. Si al menos uno de los valores de bit es 0, entonces el valor de bit en esa posición se cambia en el número probado.

Animando objetos en Archicad

Los objetos en realidad no se mueven: Archicad solo puede reconstruir el objeto para cada marco, si la casilla de verificación está marcada en el panel Crear Fly-Through. El objeto no se comunica consigo mismo entre fotogramas, por lo que toda la lógica debe integrarse desde el principio. El parámetro que cambia es GLOB_FRAME_NR. Este es el número de fotograma que se representa actualmente, por lo que toda la transformación debe controlarse con este número único. Con el terreno, es bastante simple: al compensar el campo de ruido con cada cuadro, comienza a parecer como si se estuviera moviendo. Prácticamente todo lo imaginable se puede animar. El «sistema de partículas» de nieve que verán en el siguiente video se generó completamente dentro de Archicad.

Diferentes opciones de geometría

Puede abordar la creación de geometría de muchas formas. Para el caso de uso de generación de terreno, el enfoque más fácil es usar MESH, que genera geometría de la misma manera y con la misma funcionalidad que la herramienta Malla en Archicad. Sus únicas entradas son los tamaños de cuadrícula en las direcciones x, y, y los valores z de cada nodo.

Generar una representación en color es más complicado. Primero, los valores de la cuadrícula se ordenan en una matriz de valores x, y, z para cada punto. Luego, un bucle los atraviesa, seleccionando y procesando pares de triángulos para cada nodo. El valor del color se calcula en relación con la posición z promedio de cada triángulo. CSLAB_ se usa aquí porque tiene entradas simples para generar los lados. CSLAB_ también tiene una entrada separada para los lados superiores e inferiores, ya que es una extrusión del eje z fijo. Todo el exceso se corta con el comando CUTPLANE. Para una malla «cuádruple», usamos la misma matriz ordenada que se generó para la malla de color, pero en lugar de usar CSLAB_, usamos PLANE_, con el borde diagonal suavizado usando el código de estado respectivo.

De izquierda a derecha: MESH sin bordes, MESH con bordes suavizados, CSLAB_ coloreada, triángulos fusionados de PLANE_ con el borde de la junta suavizado, superficie NURBS

La generación NURBS es la más complicada. Para generar un NURBS, debe visualizar la estructura de indexación de todos los puntos en la cuadrícula, porque debe especificar los bordes de la superficie y ordenarlos en un orden particular correspondiente a la red de puntos de la superficie NURBS. NURBS tiene propiedades interesantes: su mapeo de texturas facilita la deformación de la textura de la forma que desee.

De izquierda a derecha: objeto que genera una superficie NURBS: el mismo objeto convertido en una transformación

Mapa de altura con GDL

Para recibir un degradado de color en la malla de un color a otro, seleccione Malla de color como tipo de geometría, luego complete los valores RGB de color inicial y final en el campo de matriz que aparece. El inicio se considera las coordenadas z más bajas de los planos de malla, siendo el final el más alto. El degradado se calcula reasignando los dominios de color R, G y B en el dominio z de los planos de malla.

La generación de color dentro del script GDL se realiza mediante el comando DEFINE MATERIAL. Tiene una amplia gama de datos de entrada para controlar todos los parámetros de un material, pero para un color simple, un tipo de material mate predefinido es suficiente. El dominio de los valores de entrada RGB es de 0,0 a 1,0 (no de 0 a 255).

Ejemplo: un objeto generador de césped utiliza un color aleatorio para cada trozo de césped

Acerca de Pavlo Menshykh

Pavlo Menshykh es arquitecto y gerente BIM en Savytskyy Design (Lviv, Ucrania), que se especializa en proyectos de la industria hotelera. Pavlo también asesora sobre diseño computacional para Splash Modular y Finch3D.

Pavlo ha estado utilizando Archicad, el software BIM más popular de Ucrania, desde 2012. También tiene experiencia en Rhinoceros con Grasshopper y Revit. Él menciona: «Utilizo una variedad de herramientas diferentes, pero Archicad sigue siendo mi principal y favorita».

Fuente: GRAPHISOFT