Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Generación procedimental de contenido (+ Pseudocódigo)

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 31 Anzeige

Generación procedimental de contenido (+ Pseudocódigo)

Herunterladen, um offline zu lesen

Curso teórico-práctico sobre Inteligencia Artificial para Videojuegos (IAV) basado en el modelo de propone Ian Millington en su libro, impartido en la Universidad Complutense de Madrid.

Curso teórico-práctico sobre Inteligencia Artificial para Videojuegos (IAV) basado en el modelo de propone Ian Millington en su libro, impartido en la Universidad Complutense de Madrid.

Anzeige
Anzeige

Weitere Verwandte Inhalte

Ähnlich wie Generación procedimental de contenido (+ Pseudocódigo) (20)

Weitere von Federico Peinado (20)

Anzeige

Aktuellste (20)

Generación procedimental de contenido (+ Pseudocódigo)

  1. 1. Inteligencia Artificial para Videojuegos Introducción Generación procedimental de contenido
  2. 2. ● La inteligencia tiene algo de “sorpresa”, de producir algo nuevo (creatividad)... y no se es creativo sin un mínimo de inteligencia Generación procedimental de contenido 2 Motivación “Las máquinas me sorprenden con mucha frecuencia” - Alan M. Turing
  3. 3. ● Resolver problemas difíciles supone enfrentar problemas no conocidos de antemano ● La generación procedimental de contenido ofrece contenido complejo y nuevo, desconocido… abordarlo como NPC es difícil, y por tanto ¡ahí sí se requiere IA! Generación procedimental de contenido 3 Motivación PROCEDURAL CONTENT GENERATION (ProcGen / PCG)
  4. 4. ● Hablamos de IA para videojuegos bajo el paradigma Generador, además de un sistema que ayuda en el proceso de diseño y desarrollo de videojuegos ○ Típicamente más complejo que un generador de texturas (ayuda para el artista), y más simple que un director automático (¡sustituto del diseñador!) Generación procedimental de contenido 4 Motivación
  5. 5. ● Tiene ventajas obvias como la cantidad y variedad de contenido, el ahorro en esfuerzo de desarrollo, incluso en espacio… ○ En la demoscene hay proyectos que generan todo su contenido, incluso juegos Generación procedimental de contenido 5 Motivación https://files.scene.org/view/demos/groups/farb-rausch/kkrieger-beta.zip
  6. 6. ● La generación procedimental de contenido tampoco es algo nuevo ● En los años 80 hubo juegos que la usaban como forma de “comprimir” el contenido ○ Ej. Exile, un sistema de cuevas subterráneas ○ Ej. Elite, una galaxia llena de estrellas (influyó en Elite: Dangerous, Spore y No Man’s Sky) Generación procedimental de contenido 6 Hitos históricos
  7. 7. ● Rogue (1980) es el paradigma del género de mazmorras autogeneradas y muerte permanente: los rogue-likes (o rogue-lites como The Binding of Isaac, Spelunky…) ○ También en Diablo y Bloodborne, siendo actuales, se generan mazmorras de manera procedimental ● Entonces ya había competiciones a juegos entre alumnos, en universidades como CMU ○ Rog-O-Matic (1981) fue un primer bot creado por ellos para ganar en el juego incluso a jugadores humanos Generación procedimental de contenido 7 Hitos históricos
  8. 8. ● Más adelante se popularizó la generación de terrenos y de vegetación (en tiempo de desarrollo) que hoy usa casi cualquier videojuego o IDE 3D ● En Civilization y secuelas, los mapas multijugador también se pueden generar procedimentalmente Generación procedimental de contenido 8 Hitos históricos
  9. 9. ● Antes de hablar de ProcGen… ¡vamos a meternos en este asunto! Generación procedimental de contenido 9 Pseudocódigo
  10. 10. ● En el libro de Millington se presenta 1. El problema que se quiere resolver 2. La técnica propuesta como solución (descrita en lenguaje natural o con diagramas) 3. Generalmente, un algoritmo en pseudocódigo 4. La representación de la información utilizada para el mundo del juego o para el interior del algoritmo (descrita en lenguaje natural o en pseudocódigo) 5. Consejos para la implementación de todo ello 6. Análisis del rendimiento (velocidad de ejecución, espacio en memoria, escalabilidad) en Notación O() 7. Puntos fuertes y débiles de esta técnica (y a veces también variantes del algoritmo) Generación procedimental de contenido 10 Pseudocódigo
  11. 11. ● Millington propone un pseudocódigo simple y breve, muy similar al lenguaje Python ○ Tanto para algoritmos como para representaciones ○ Se asume que hay estructuras de datos sofisticadas disponibles (lista, tabla, mapa, cola de prioridad…) ● Recuerda que la eficiencia siempre depende a la vez del algoritmo y la representación de la información escogidos Generación procedimental de contenido 11 Pseudocódigo
  12. 12. ● Se seguirán estas convenciones de código ○ Líneas numeradas y estructura de bloques reflejada con el propio sangrado y también con dos puntos (:) ○ Comentarios de línea (#) ○ Palabras reservadas function, return, class, new, extends (herencia) ○ El punto (.) para llamar a los métodos (aquí llamados function) de una clase Generación procedimental de contenido 12 Pseudocódigo
  13. 13. ○ Variables miembro accesibles pero locales a su definición, pudiendo inicializarse y a menudo obviando métodos getters y setters ○ Parámetros entre paréntesis () y entre comas (,). ○ Tipos básicos (bool, int, long, float…) tras el nombre de la variable con dos puntos (numero:int), salvo el tipo de retorno que se indica con (->float) … aunque pueden sobreentenderse ○ Booleanos true, false y también and, or y not ○ Asignación (=), equivalencia (==), y otros operadores útiles como (+=) ó (*=) Generación procedimental de contenido 13 Pseudocódigo
  14. 14. ○ Bucles while y for a in b, donde b puede ser rango ○ Rangos crecientes tipo 0..5 (o decrecientes como 5..0) donde NO está incluido el valor más alto ○ Rangos abiertos tipo 0.. donde se omite un extremo ○ Los arrays empiezan en cero, se declaran con corchetes (array[]), dan elementos usando el índice (array[index]) y subarrays con el rango (array[2..5]) ○ Los arrays se comportan como listas (podemos añadir y quitar elementos donde queramos) Generación procedimental de contenido 14 Pseudocódigo
  15. 15. ● Ej. Algoritmo simple para encontrar el valor más grande de un array no ordenado Generación procedimental de contenido 15 Pseudocódigo
  16. 16. ● En C# y en Unity Visual Scripting Generación procedimental de contenido 16 Código
  17. 17. ● Debemos elegir adecuadamente el modo en que pasamos información a un algoritmo ○ A menudo hay que realizar conversiones de un tipo de representación a otra, teniendo cuidado de no perder información o perder sólo detalles inútiles ○ Generalmente sólo nos interesará la interfaz de la representación, y no entraremos en la estructura de datos concreta con la que implementarla Generación procedimental de contenido 17 Pseudocódigo
  18. 18. ● En juegos como Minecraft se parte de una única semilla (número “aleatorio”) Generación procedimental de contenido 18 Generación de mundos
  19. 19. ● Son muy utilizados y los hay de tres tipos ○ Aleatorios de verdad (¡haría falta HW especial que lea ruido térmico o algún otro fenómeno físico!) ○ Criptográficos, que son impredecibles e irrepetibles ○ Pseudoaleatorios “habituales”, que para una misma semilla siguen siempre una misma secuencia ■ A veces es posible averiguar la semilla analizando partes de dicha secuencia, incluso... ■ Existen algoritmos muy populares (Ej. Mersenne Twister), pero muchos desarrolladores prefieren programarse su propio algoritmo para que la implementación sea fija Generación procedimental de contenido 19 Números pseudoaleatorios PSEUDORANDOM NUMBERS
  20. 20. ● Conviene crear todas las semillas de los distintos subsistemas en cadena ■ Que el mundo entero dependa de 1 sóla semilla, sin partes dependientes del tiempo o de otras variables del juego Generación procedimental de contenido 20 Números pseudoaleatorios
  21. 21. ● La necesidad típica a la hora de generar escenarios es poder generar su orografía ○ Es decir, el terreno y la vegetación ● Existen diversas técnicas, según el tipo de escenario a generar ○ Mapas de altitud ○ Texturas de ruido ○ Algoritmo Doran-Parberry para generación “controlada” de terreno ○ Gramáticas ○ Generación cíclica ○ … Generación procedimental de contenido 21 Generación de escenarios
  22. 22. ● Los algoritmos que generan mapas de alturas o texturas procedimentales que incluyen ruido son muy útiles para esto ○ El ruido es lo que añade detalle realista a un mapa de alturas cualquiera que tengamos… Generación procedimental de contenido 22 Generación de terrenos
  23. 23. ● El más famoso es el Ruido de Perlin creado para la película Tron (1982) ○ Con los años, Ken Perlin recibió un Óscar por ello Generación procedimental de contenido 23 Generación de terrenos
  24. 24. ● Busca que la altura de una celda esté relacionada con la de sus vecinas, como ocurre en suelos, montañas o nubes reales ○ Se basa en una cuadrícula (Ej. 1024x1024 px. de terreno, dividido en 256 cuadrados de 64x64 px.) ○ A los vértices se añaden vectores pseudoaleatorios ○ La altura de un punto X del terreno se obtendrá por interpolación entre los vértices de su cuadrado ○ Puede normalizarse a un cierto rango (max, min) ○ El mejor ruido se genera combinando octavas (cuadrículas de tamaños sucesivos: 1x1, 2x2, 4x4…) Generación procedimental de contenido 24 Ruido de Perlin
  25. 25. ● Algoritmo de ruido de Perlin en 2D ○ Combina octavas a distintos pesos, prefijados en (0,1) Generación procedimental de contenido 25 Ruido de Perlin * _ representa una variable anónima *La primera octava será de tamaño 1, luego 2, 4, 8… tantas como pesos me pasen; aumentando el nivel de detalle del ruido *get devuelve la altura del punto (x, y) del terreno generado
  26. 26. ● Se crea la octava con un vector pseudoaleatorio 2D en cada esquina (los llamados “gradientes”) Generación procedimental de contenido 26 Ruido de Perlin
  27. 27. ● Superponemos la cuadrícula y para cada punto (x,y) del terreno se calcula su altura ○ Esta dependerá de los 4 gradientes que estén en las coordenadas (ix, iy) de las esquinas de su celda ○ Por cada esquina se calcula el producto escalar del gradiente por la distancia del punto a la esquina Generación procedimental de contenido 27 Ruido de Perlin
  28. 28. ● Esto se repite para las 4 esquinas de la celda (top left, top right, bottom left, bottom right) y se interpolan esos 4 valores (con tres lerp) para obtener la altura definitiva del punto Generación procedimental de contenido 28 Ruido de Perlin *lerp calcula la interpolación lineal entre dos valores (normalmente con respecto a un peso entre 0 y 1). En este caso la fórmula rápida es lerp(origen, destino, peso) = origen + peso * (destino - origen) Tiempo = O(n2 log n) Espacio < O(n2 ) donde n es la extensión del terreno
  29. 29. ● ¿Cuántos elementos tiene el rango [3..0]? A. 3 B. 4 C. 2 D. 0 ● Desarrolla tu respuesta (en texto libre) Generación procedimental de contenido 29 Participación
  30. 30. ● Millington, I.: Artificial Intelligence for Games. CRC Press, 3rd Edition (2019) ○ Sistemas Lindenmayer ○ Gramáticas de formas ● Shaker, N., Togelius, J., Nelson, M.J.: Procedural Content Generation in Games. Springer (2016) ○ http://pcgbook.com ● Yannakakis, G., Togelius, J.: Artificial Intelligence and Games. Springer (2018) Generación procedimental de contenido 30 Más información
  31. 31. * Excepto el contenido multimedia de terceros autores Federico Peinado (2019-2023) www.federicopeinado.es Críticas, dudas, sugerencias...

×