# Generación por procedimientos

En computación, generación por procedimientos o procedimental es el método de creación de datos con algoritmos en lugar de forma manual. En gráficos por computadoras se utiliza comúnmente para la creación de texturas y modelos 3D, mientras que en el contexto de los videojuegos también se utiliza para la creación de varios tipos de contenido, como artículos, misiones o geometría de nivel. Las razones más comunes para el uso de la generación de procedimiento incluyen - pero no se limitan a - archivos de menor tamaño, mayor cantidad de contenido que se pueden crear manualmente o la inclusión de aleatoriedad para experiencias de juego menos predecibles. También se ha utilizado para otros diversos fines y en otros medios de comunicación.

## Información general

El término procedimiento se refiere al proceso que computa una función particular. Los fractales, un ejemplo de generación de procedimiento, expresar este concepto, alrededor del cual un cuerpo entero de las matemáticas - geometría fractal - se ha desarrollado. Comúnmente los contenidos procedimentales incluyen texturas y mallas. El sonido es a menudo generado de esta manera y tiene aplicaciones tanto en síntesis de discurso, así como la música. Se ha utilizado para crear composiciones en diversos géneros de la música electrónica por artistas como Brian Eno que popularizaron el término "música generativa".
Los algoritmos que llevan a cabo este tipo de operaciones se encuentran dentro de la clasificación de los algoritmos recurrentes o recursivos. Mientras más complejo son los algoritmos procedimentales, es más fácil que escapen cosas al control del desarrollador. Se puede correr el riesgo de perder completamente el control del juego si se libran muchos elementos al azar. Al dar demasiada libertad, se puede producir una ruptura o superposición, o valores tan alejados uno del otro que sean incompatibles o imposibles de materializar. Es en este lugar donde las directrices encuentran su materialización en los algoritmos de ramificación y poda. De esta manera se barajan todas las posibles soluciones pero solo se escogen aquellas que son posibles de llevarse a la realidad. Esto es algo muy habitual en los juegos estilo roguelike que podemos ver hoy día.
Este patrón se suele utilizar en combinación con el patrón constructor. Básicamente este patrón separa la construcción de cualquier objeto complejo de su representación. Por lo tanto, se puede tener una semilla con la información básica del objeto en cuestión y luego tener múltiples modos de representación. Existe un elemento director, en el caso de los videojuegos procedimentales las funciones que crearán los datos de ese mundo. Luego este pasará a otra función que tome toda esta información que le indique al programa qué es lo que debe hacer con la misma y de qué manera estructurar. Luego pasa por una función que nos de la representación visual del elemento que se construyó, por ejemplo, el salón en sí con todos sus elementos. Esto es lo que permite a gran cantidad de juegos procedimentales tener distintas visualizaciones simultáneas del contenido a la vez, dado que existe un director que lo maneja todo.
Mientras que los desarrolladores de software han aplicado técnicas de generación por procedimientos durante años, pocos productos han empleado este enfoque ampliamente. Elementos generados por procedimientos han aparecido en videojuegos no actuales como: The Elder Scrolls II: Daggerfall el cual tiene lugar en un mundo mayoritariamente generado por procedimientos, dando un mundo más o menos del doble del tamaño real de la islas británicas. Soldier of Fortune de Raven Software utiliza rutinas simples para detallar modelos enemigos, mientras que su secuela presentó un modo de nivel generado aleatoriamente. Avalanche Studios empleo generación por procedimientos para crear un grupo grande y variado de islas tropicales con gran detalle para Just Cause . "No Man's Sky", un juego desarrollado por el estudio de videojuegos Hello Games es totalmente basado y desarrollado usando elementos generados por procedimientos.
Nuevos métodos y aplicaciones se presentan anualmente en conferencias como la Conferencia IEEE sobre Inteligencia Computacional y Juegos y Inteligencia Artificial y Entretenimiento Digital Interactivo

## Aplicaciones actuales
#### Inicios

Antes de los videojuegos orientados gráficamente, podemos comenzar por juegos de 1978 de Beneath Apple Manor que utilizaron la generación por procedimientos para la construcción de mazmorras para los sistemas ASCII (aunque Beneath Apple Manor utilizaron gráficos Lo-Res de 16 colores). La generación por procedimientos podía definir habitaciones, pasillos, monstruos y tesoros que el jugador podría encontrar. Juegos basados en los conceptos roguelike siguen siendo un género popular en la actualidad, ya que permite el desarrollo de un juego complejo sin tener que gastar demasiado tiempo en la creación de un mundo de juego.
Los primeros videojuegos gráficos fueron severamente frenados por limitaciones de memoria. Esto provocó que el contenido, como mapas, fuera generado algorítmicamente sobre la marcha: porque simplemente no había espacio suficiente para almacenar una gran cantidad de niveles preconfeccionados y arte de los niveles. Generadores con números pseudoaleatorios fueron utilizados a menudo con valores predefinidos de semillas aleatorias con el fin de crear grandes mundos de juego que parecieran prefabricados.
Tal vez el primer juego en utilizar una semilla para generar el mundo es Akalabeth (1980) de Richard Garriott; en el cual utilizando el mismo número de semillas, un jugador siempre puede volver a un mundo dado. The Sentinel supuestamente tiene 10.000 niveles diferentes almacenados en solo 48 y 64 kilobytes. Un caso extremo fue Elite, que fue planeado originalmente para contener un total de 2$^{48}$ (aproximadamente 282.000.000.000.000) galaxias con 256 sistemas solares cada uno. El editor, sin embargo, tenía miedo de que un universo tan gigantesco causaría incredulidad en los jugadores, y solo ocho de estas galaxias se eligieron para la versión final. Otros de los primeros ejemplos notables incluyen el juego de 1985 Rescue on Fractalus que utiliza fractales para crear con procedimientos en tiempo real las montañas escarpadas de un planeta alienígena y River Raid, el juego de 1982 de Activision que utiliza una secuencia de números pseudoaleatorios generados por un registro de desplazamiento con retroalimentación lineal con el fin de generar un laberinto desplazable de obstáculos.
A medida que avanzaba el hardware y los CD fueron capaces de almacenar miles de veces más datos de lo que era posible en los años 80, usar generación por procedimientos para construir mundos grandes se hicieron innecesarios. El contenido del juego como las texturas, modelos de los personajes y el medio ambiente son a menudo creados por artistas de antemano, para mantener la calidad del contenido consistentemente alta.
Almacenando diseños únicos en la memoria del juego, en lugar de producir múltiples objetos usando directrices similares lo que permite una variedad de modelos detallados siendo cada uno sustancialmente diferente. Sin embargo, cuando cada modelo tiene que ser diseñado a mano, existirá un número limitado de objetos. Algunas aproximaciones iniciales a la síntesis de procedimientos intentaron resolver este problema mediante la inversión de la carga de la generación de contenidos de los artistas a los programadores los cuales pueden crear código que genera automáticamente diferentes mallas de acuerdo a los parámetros de entrada.
Aunque a veces esto todavía sucede, lo que se ha reconocido es que la aplicación de un modelo puramente procedimental es a menudo difícil ya que requiere enormes cantidades de tiempo para convertirse en un método funcional, usable y de aspecto realista. En vez de escribir un procedimiento que solo construye contenido procedimentalmente, se ha demostrado que es mucho más barato y eficaz que delegar al artista la creación contenido para algunos detalles. Por ejemplo, SpeedTree utiliza para generar una gran variedad de árboles generación por procedimientos, sin embargo, sus texturas de las hojas se pueden extraer de archivos regulares, a menudo representando digitalmente follaje real. Otros métodos eficaces para generar contenidos híbridos son los de fusionar procedimentalmente diferentes activos preconfeccionados o aplicar con esta técnica algunas distorsiones a ellos.
Suponiendo, sin embargo, un único algoritmo se puede prever para generar un árbol de aspecto realista, el algoritmo podría ser llamado para generar árboles al azar, llenando así todo un bosque en tiempo de ejecución, en lugar de almacenar todos los vértices requeridos por los diversos modelos. Esto ahorraría espacio en los medios de almacenamiento y reduciría la carga de los artistas, al tiempo que proporcionaría un nivel similar de inmersión al jugador. Este método requeriría mucha más potencia de procesamiento, pero como los CPUs están en constante aumento de velocidad no es un obstáculo.
Un problema diferente es que no es fácil desarrollar un buen algoritmo para un solo árbol, y mucho menos para una variedad de especies (comparar sumac, abedul, arce). Una advertencia adicional es que el montaje de un bosque de aspecto realista no podía hacerse simplemente montando árboles porque en el mundo real hay interacciones entre los diferentes árboles que pueden cambiar dramáticamente su apariencia y distribución.

#### Usos en la actualidad

En el 2004, un juego de disparos en primera persona llamado .kkrieger fue lanzado el cual hizo un uso intensivo de la síntesis de procedimientos: mientras que de manera reducida y muy simple los efectos de vídeo avanzados fueron embalados en apenas 96 Kilobytes. Por el contrario, muchos juegos modernos tienen que ser lanzados en DVD, a menudo superior a 2 gigabytes en tamaño, más de 20.000 veces más grande. Naked Sky RoboBlitz utiliza generación por procedimientos para maximizar el contenido en un archivo descargable de menos de 50 MB para Xbox Live Arcade. Will Wright creador de Sporetambién hace uso de la síntesis de procedimientos.
En 2008, Valve Software liberó Left 4 Dead , un shooter en primera persona basado en el motor Source que utiliza la generación de procedimientos como una gran mecánica de juego. El juego tuvo una inteligencia artificial integrada, conocida como el "director", que analizó las estadísticas de los jugadores y los estados de juego sobre la marcha para proporcionar experiencias dinámicas en todas y cada una de las partidas. Sobre la base de diferentes variables del jugador, como la salud restante, munición, y el número de jugadores, la IA Director potencialmente podría crear o eliminar enemigos y elementos para que cada partida manteniendo un ritmo emocionante y vertiginoso. Left 4 Dead 2, lanzado en noviembre de 2009, fue ampliado en este concepto, con la introducción de mecanismos más avanzados para la IA Director, tales como la capacidad de generar nuevos caminos a seguir para los jugadores de acuerdo a sus estados individuales.
Un juego desarrollado de manera independiente que se basa principalmente en la generación por procedimientos es Dwarf Fortress, lanzado por primera vez en 2006 bajo desarrollo activo. Antes de que el jugador comienza una partida se genera un mundo de fantasía, basado en un complejo conjunto de opciones de configuración, con su terreno, historia, personajes notables, y monstruos.
Otro juego independiente que hace un uso extensivo de la generación por procedimientos es Minecraft, lanzado por primera vez en 2009. En el juego el estado inicial del mundo es en su mayoría al azar (con directrices a fin de generar un terreno similar a la Tierra), y nuevas áreas se generan cada vez que el jugador se mueve hacia los bordes del mundo.
Tanto Dwarf Fortress y Minecraft, tienen la ventaja de que cada vez que se hace un mundo nuevo, es completamente diferente y se necesita un método diferente para tener éxito, adicionándole valor de repetición.
Nuestro sistema estelar está siendo generando en escala real con este método en Elite: Dangerous, el cual fue lanzado en el 2014. Generación por procedimientos altamente detallada de la superficie de los planetas ha sido planeada para la expansión que permite el aterrizaje planetario.
Outerra Anteworld es un videojuego en desarrollo que utiliza la generación por procedimientos y datos del mundo real para crear una réplica virtual del planeta Tierra en escala real. Otro juego en desarrollo es I-Novas Infinity, que cuenta con una gran cantidad de planetas que son generados y entre los cuales el jugador puede viajar mediante naves espaciales.
No Man's Sky, que se estrenó en agosto de 2016, es un juego que permite a los jugadores explorar planetas que se generan por procedimientos. Según los desarrolladores, esto permite más de 18 trillones de planetas posibles. Los planetas, sus terrenos, el clima, la flora y la fauna son todos generados por el uso de una sola semilla aleatoria insertada a su motor, asegurando que el mismo planeta puede ser visitado por distintos jugadores utilizando solo el conocimiento del número de la semilla, en este caso, la ubicación del planeta en la galaxia virtual. El motor utiliza fórmulas matemáticas que, con parámetros ajustables, pueden imitar un número diverso de formaciones naturales.
La programación por procedimientos permite a los jugadores no solo experimentar escenarios nuevos y distintos sino también situaciones diferentes, eventos y pequeñas narrativas. Tal es el caso de Rimworld donde existe una “Inteligencia artificial narrativa”. Otro es el caso de Moon Hunters, donde se usa la programación procedimental para crear mitos. En el caso de SkySaga: Infinite Isles, su creador Ben Fisher esgrime el siguiente enunciado:
"... queríamos darle al jugador algo nuevo para jugar cada vez. Queríamos que SkySaga se convirtiese en lo que llamamos un motor de anécdotas: donde la única combinación de circunstancias hace una historia que nunca nadie antes experimento, y estás ansioso de compartir".
Los algoritmos a la cabeza del diseño tienen el potencial de cambiar completamente la noción de desarrollo desde su génesis. Donde un director de arte antes se dedicaba a hacer arte conceptual de distintas flores o vegetación, ahora debe estudiar cómo es que estas flores y vegetación crecen para establecer los patrones de creación. Es decir, tratamos de entender por qué esto sucede, en una labor más científica.
Sin embargo, debemos considerar que los algoritmos no dejan de ser instrucciones predefinidas, y sin un suficiente nivel de ajuste pueden surgir incongruencias y errores que pueden pagarse caro en el producto final. Entonces el desafío que se plantea para la generación procedimental es como crear software inteligente que pueda analizar y entender que está realizando.

### Cine

Al igual que en los videojuegos, la generación por procedimientos se utiliza a menudo en el cine para crear rápidamente espacios visualmente interesantes y precisos. Esto viene en una amplia variedad de aplicaciones.
Una aplicación es lo que se denomina una "fábrica imperfecta", donde los artistas pueden generar rápidamente un gran número de objetos similares. Esto explica el hecho de que, en la vida real, no hay dos objetos exactamente iguales. Por ejemplo, un artista podría modelar un producto para un estante de la tienda de comestibles, y luego crear una fábrica imperfecta que generaría un gran número de objetos similares para poblar la plataforma.
MASSIVE es un paquete de software de animación por ordenador de gama alta y de inteligencia artificial usado para la generación de efectos visuales para cine y televisión. Fue desarrollado para generar automáticamente la lucha entre ejércitos de cientos de miles de soldados para El Señor de los Anillos de Peter Jackson.