# Lenguaje de Modelado Generativo

El lenguaje de modelado generativo (Generative Modelling Language -GML en inglés) en computación gráfica y programación de computadora generativa es un lenguaje de programación muy simple para la descripción concisa de formas tridimensionales complejas. Sigue el paradigma de "modelado generativo", donde los conjuntos de datos complejos se representan mediante "listas de operaciones" en lugar de listas de objetos, lo que es, por ejemplo, el caso en una base de datos relacional.

## Descripción general

Los formatos de archivos 3D habituales describen un mundo virtual en términos de primitivas geométricas. Estos pueden ser cubos y esferas en un árbol CSG, parches NURBS, un conjunto de funciones implícitas, una malla de triángulos 3D o simplemente una nube de puntos. El término "modelado 3D generativo" describe un paradigma diferente para describir la forma. La idea principal es reemplazar los objetos 3D por operaciones de generación de objetos: una forma se describe mediante una secuencia de pasos de procesamiento, en lugar de los triángulos que son el resultado de aplicar estas operaciones. El diseño de formas se convierte en diseño de reglas. El enfoque se puede aplicar generalmente a cualquier representación de forma que proporcione un conjunto básico de funciones generadoras, denominadas en este contexto "operadores de forma elementales". Su eficacia se ha demostrado, por ejemplo, en el campo de la generación de mallas procedimentales, con operadores de Euler como conjunto completo y cerrado de funciones generadoras de formas invertibles para mallas, que operan en el nivel de medio borde.
El modelado generativo mejora su eficiencia mediante la capacidad de desarrollar operadores de alto nivel a partir de operadores de bajo nivel. Cualquier serie de pasos de procesamiento puede ser agrupada para formar un nuevo operador combinado. Es posible emplear tanto operadores elementales como otros operadores combinados. Los valores específicos pueden ser fácilmente sustituidos por parámetros, lo que facilita la separación entre los datos y las operaciones: la misma secuencia de procesamiento puede ser aplicada a diversos conjuntos de datos de entrada. Los mismos datos pueden ser utilizados para generar diferentes formas al aplicar distintos operadores combinados, por ejemplo, de una biblioteca de operadores de modelado específicos de un dominio. Esto permite la creación de objetos altamente complejos a partir de solo unos pocos parámetros de entrada de alto nivel, como podría ser una biblioteca de estilos.

## El lenguaje de modelado generativo

El GML es una implementación concreta del enfoque generativo. Es un lenguaje de programación interpretado basado en pila, muy similar a PostScript de Adobe, pero sin ninguno de los operadores de diseño 2D. En cambio, proporciona una serie de operadores para crear modelos 3D (polígonos, b-reps, subdivisión de superficies). Como "lenguaje de programación de formas", es una verdadera generalización de formatos de archivos 3D "planos" como OBJ, DXF o VRML que contienen solo listas de primitivos geométricos.
Junto con su motor de ejecución basado en OpenGL, el GML también puede verse como un visualizador con un modelador integrado, para superar la separación habitual entre el modelado 3D y la visualización interactiva. Ambos están entrelazados. GML permite una representación concisa de objetos 3D parametrizados que pueden evaluarse sobre la marcha en tiempo de ejecución, renderizarse con un nivel de detalle adaptativo y permite la manipulación interactiva de todos los parámetros.

## Ejemplo de GML

| 1: | (0,0,-2) (1,1,0) 2 cuadriláteros |
| 2: | /cyan establece el material actual |
| | 5 poli2doble cara |
| 3: | (0,1,1) extruir |
| 4: | (0,0,1) (1,0,1) normalizar |
| | 0 proyecto_ringplane |
| 5: | (2,0,0) (0,1,-1) 2 cuadriláteros |
| 6: | /conjunto amarillomaterialactual |
| | 5 poli2doble cara |
| 7: | 0 anillos de puente |

## Aplicaciones

Con los modelos procedimentales, la complejidad del modelo ya no está relacionada directamente (es decir, linealmente) con el tamaño del archivo. La Catedral de Procedimiento, un modelo básico de la Catedral de Colonia, contiene 70 ventanas de tracería, y una sola ventana en la resolución más alta contiene alrededor de 7 millones de triángulos. Estos están "desplegados" a partir de sólo 126 KB de código GML (18 KB comprimidos).
La arquitectura gótica es un excelente ejemplo de la eficacia del diseño de formas procedimentales: en el estilo gótico, todas las construcciones geométricas se ejecutan exclusivamente con compás y regla. Las variaciones se obtuvieron combinando procedimentalmente, de formas siempre cambiantes, un conjunto de operaciones geométricas básicas simples y parametrizadas. Por lo tanto, es prácticamente imposible encontrar dos ventanas tracerías en edificios diferentes que sigan una construcción geométrica idéntica.
El diseñador interactivo CAVE ayuda a adaptar una CAVE a una habitación pequeña. Debido a las barras de hormigón debajo del techo, es difícil colocarlo utilizando solo planos 2D de la habitación. Los grados de libertad (flechas azules) son la posición y orientación del cubículo de la pantalla de proyección, el ángulo de apertura de los proyectores y la posición/orientación del espejo superior. Los grados de libertad están ligeramente restringidos para tomar únicamente valores válidos. Los grados de libertad se mantienen constantes, es decir, al mover los cubículos, los centros del proyector también se mueven (o se reflejan en las paredes).
Modelo genetrativo de llanta de una rueda de automóvil Dado un conjunto de aproximadamente 30 modelos CAD de llantas de automóviles, la tarea era encontrar una parametrización común que fuera capaz de generar cada una de las instancias individuales (reconstrucción de superficies generativas). Como resultado, se pueden sintetizar llantas nuevas y similares dentro del espacio de diseño que abarca las 30 llantas dadas, que se clasificaron manualmente en 3 categorías principales. Algunos de los parámetros de alto nivel se pueden manipular directamente mediante controles deslizantes y botones (flechas y bolas).
El modelado generativo sugiere diferenciar entre "estructura" y "apariencia" (por ejemplo, el estilo) de los modelos 3D. Sorprendentemente, muchos objetos tienen la misma estructura que una silla, es decir, son "cercanos" a una silla a nivel estructural. La diferenciación permite entonces (en principio) aplicar la apariencia de un objeto de esta clase a otro.
Aplicación didáctica que muestra la construcción de polígonos de Thiessen: ¿Es posible reconstruir los centros de las celdas de Voronoi a partir de los límites de las regiones? La aplicación interactiva transmite una buena intuición de la idea detrás de la prueba formal.