SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Inteligencia Artificial
para Videojuegos
Introducción
Generación procedimental de contenido
● 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
● 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)
● 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
● 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
● 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
● 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
● 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
● Antes de hablar de ProcGen…
¡vamos a meternos en este asunto!
Generación procedimental de contenido 9
Pseudocódigo
● 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
● 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
● 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
○ 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
○ 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
● Ej. Algoritmo simple para encontrar el valor
más grande de un array no ordenado
Generación procedimental de contenido 15
Pseudocódigo
● En C# y en Unity Visual Scripting
Generación procedimental de contenido 16
Código
● 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
● En juegos como Minecraft se parte de una
única semilla (número “aleatorio”)
Generación procedimental de contenido 18
Generación de mundos
● 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
● 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
● 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
● 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
● 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
● 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
● 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
● Se crea la octava con un vector
pseudoaleatorio 2D en cada esquina
(los llamados “gradientes”)
Generación procedimental de contenido 26
Ruido de Perlin
● 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
● 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
● ¿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
● 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
* Excepto el contenido multimedia de terceros autores
Federico Peinado (2019-2023)
www.federicopeinado.es
Críticas, dudas, sugerencias...

Más contenido relacionado

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

Francisco Fernández de Vega - Generación automática de contenidos para Vi...
Francisco Fernández de Vega -  Generación automática de contenidos para Vi...Francisco Fernández de Vega -  Generación automática de contenidos para Vi...
Francisco Fernández de Vega - Generación automática de contenidos para Vi...Facultad de Informática UCM
 
04_Numeros_Aletorios.ppt
04_Numeros_Aletorios.ppt04_Numeros_Aletorios.ppt
04_Numeros_Aletorios.pptRubnAncco
 
Que son los numeros aleatorios numeros aleatorios
Que son los numeros aleatorios numeros aleatoriosQue son los numeros aleatorios numeros aleatorios
Que son los numeros aleatorios numeros aleatoriosssusere538f7
 
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...Federico Peinado
 
DEV 04-02 Cinemáticas y localización.pdf
DEV 04-02 Cinemáticas y localización.pdfDEV 04-02 Cinemáticas y localización.pdf
DEV 04-02 Cinemáticas y localización.pdfFederico Peinado
 
DV 05-02 Plataforma e interfaz.pdf
DV 05-02 Plataforma e interfaz.pdfDV 05-02 Plataforma e interfaz.pdf
DV 05-02 Plataforma e interfaz.pdfFederico Peinado
 
Introducción a la graficación por computadora
Introducción a la graficación por computadoraIntroducción a la graficación por computadora
Introducción a la graficación por computadora192t0835
 
Inteligencia Artificial para Videojuegos
Inteligencia Artificial para VideojuegosInteligencia Artificial para Videojuegos
Inteligencia Artificial para VideojuegosFederico Peinado
 
Gimp2 exemple
Gimp2 exempleGimp2 exemple
Gimp2 exemplelfloris1
 
Actividad proyecto algoritmia_de_ignacio_matilla_iraola
Actividad proyecto algoritmia_de_ignacio_matilla_iraolaActividad proyecto algoritmia_de_ignacio_matilla_iraola
Actividad proyecto algoritmia_de_ignacio_matilla_iraolaImatilla
 
DEV 03-02 Escenarios y objetos.pdf
DEV 03-02 Escenarios y objetos.pdfDEV 03-02 Escenarios y objetos.pdf
DEV 03-02 Escenarios y objetos.pdfFederico Peinado
 

Similar a Generación procedimental de contenido (+ Pseudocódigo) (20)

Francisco Fernández de Vega - Generación automática de contenidos para Vi...
Francisco Fernández de Vega -  Generación automática de contenidos para Vi...Francisco Fernández de Vega -  Generación automática de contenidos para Vi...
Francisco Fernández de Vega - Generación automática de contenidos para Vi...
 
04_Numeros_Aletorios.ppt
04_Numeros_Aletorios.ppt04_Numeros_Aletorios.ppt
04_Numeros_Aletorios.ppt
 
Que son los numeros aleatorios numeros aleatorios
Que son los numeros aleatorios numeros aleatoriosQue son los numeros aleatorios numeros aleatorios
Que son los numeros aleatorios numeros aleatorios
 
python CIENTIFIFO.pdf
python CIENTIFIFO.pdfpython CIENTIFIFO.pdf
python CIENTIFIFO.pdf
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...
GCV 03 Herramientas de desarrollo: Específicas para Videojuegos - Gestión de ...
 
Mundo y localización
Mundo y localizaciónMundo y localización
Mundo y localización
 
DEV 04-02 Cinemáticas y localización.pdf
DEV 04-02 Cinemáticas y localización.pdfDEV 04-02 Cinemáticas y localización.pdf
DEV 04-02 Cinemáticas y localización.pdf
 
DV 05-02 Plataforma e interfaz.pdf
DV 05-02 Plataforma e interfaz.pdfDV 05-02 Plataforma e interfaz.pdf
DV 05-02 Plataforma e interfaz.pdf
 
1.1 C2Ruby - ladrillos
1.1 C2Ruby - ladrillos 1.1 C2Ruby - ladrillos
1.1 C2Ruby - ladrillos
 
Introducción a la graficación por computadora
Introducción a la graficación por computadoraIntroducción a la graficación por computadora
Introducción a la graficación por computadora
 
Pcasm book-spanish
Pcasm book-spanishPcasm book-spanish
Pcasm book-spanish
 
Plataforma e interfaz
Plataforma e interfazPlataforma e interfaz
Plataforma e interfaz
 
Inteligencia Artificial para Videojuegos
Inteligencia Artificial para VideojuegosInteligencia Artificial para Videojuegos
Inteligencia Artificial para Videojuegos
 
Gimp2 exemple
Gimp2 exempleGimp2 exemple
Gimp2 exemple
 
Actividad proyecto algoritmia_de_ignacio_matilla_iraola
Actividad proyecto algoritmia_de_ignacio_matilla_iraolaActividad proyecto algoritmia_de_ignacio_matilla_iraola
Actividad proyecto algoritmia_de_ignacio_matilla_iraola
 
DEV 03-02 Escenarios y objetos.pdf
DEV 03-02 Escenarios y objetos.pdfDEV 03-02 Escenarios y objetos.pdf
DEV 03-02 Escenarios y objetos.pdf
 
Estructuras de datos para realidad virtual
Estructuras de datos para realidad virtualEstructuras de datos para realidad virtual
Estructuras de datos para realidad virtual
 
TALLER VIDEOJUEGO 2D
TALLER VIDEOJUEGO 2DTALLER VIDEOJUEGO 2D
TALLER VIDEOJUEGO 2D
 
Ricardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptxRicardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptx
 

Más de Federico Peinado

Comunicación en lenguaje natural
Comunicación en lenguaje naturalComunicación en lenguaje natural
Comunicación en lenguaje naturalFederico Peinado
 
Representación del conocimiento
Representación del conocimientoRepresentación del conocimiento
Representación del conocimientoFederico Peinado
 
Búsqueda de caminos usando estrategias informadas
Búsqueda de caminos usando estrategias informadasBúsqueda de caminos usando estrategias informadas
Búsqueda de caminos usando estrategias informadasFederico Peinado
 
Representación del entorno
Representación del entornoRepresentación del entorno
Representación del entornoFederico Peinado
 
Resolución de problemas en el espacio de estados
Resolución de problemas en el espacio de estadosResolución de problemas en el espacio de estados
Resolución de problemas en el espacio de estadosFederico Peinado
 
Comportamiento de dirección
Comportamiento de direcciónComportamiento de dirección
Comportamiento de direcciónFederico Peinado
 
Aplicación según tipología del juego
Aplicación según tipología del juegoAplicación según tipología del juego
Aplicación según tipología del juegoFederico Peinado
 
Resolutor automático y agente inteligente
Resolutor automático y agente inteligenteResolutor automático y agente inteligente
Resolutor automático y agente inteligenteFederico Peinado
 

Más de Federico Peinado (20)

Interfaz del mundo
Interfaz del mundoInterfaz del mundo
Interfaz del mundo
 
Gestión de la ejecución
Gestión de la ejecuciónGestión de la ejecución
Gestión de la ejecución
 
Acción coordinada
Acción coordinadaAcción coordinada
Acción coordinada
 
Comunicación en lenguaje natural
Comunicación en lenguaje naturalComunicación en lenguaje natural
Comunicación en lenguaje natural
 
Puntos de ruta tácticos
Puntos de ruta tácticosPuntos de ruta tácticos
Puntos de ruta tácticos
 
Análisis táctico
Análisis tácticoAnálisis táctico
Análisis táctico
 
Probabilidad y utilidad
Probabilidad y utilidadProbabilidad y utilidad
Probabilidad y utilidad
 
Árbol de comportamiento
Árbol de comportamientoÁrbol de comportamiento
Árbol de comportamiento
 
Reglas y planificación
Reglas y planificaciónReglas y planificación
Reglas y planificación
 
Máquina de estados
Máquina de estadosMáquina de estados
Máquina de estados
 
Representación del conocimiento
Representación del conocimientoRepresentación del conocimiento
Representación del conocimiento
 
Búsqueda de caminos usando estrategias informadas
Búsqueda de caminos usando estrategias informadasBúsqueda de caminos usando estrategias informadas
Búsqueda de caminos usando estrategias informadas
 
Representación del entorno
Representación del entornoRepresentación del entorno
Representación del entorno
 
Resolución de problemas en el espacio de estados
Resolución de problemas en el espacio de estadosResolución de problemas en el espacio de estados
Resolución de problemas en el espacio de estados
 
Desplazamiento en grupo
Desplazamiento en grupoDesplazamiento en grupo
Desplazamiento en grupo
 
Percepción
PercepciónPercepción
Percepción
 
Comportamiento de dirección
Comportamiento de direcciónComportamiento de dirección
Comportamiento de dirección
 
Física y animación
Física y animaciónFísica y animación
Física y animación
 
Aplicación según tipología del juego
Aplicación según tipología del juegoAplicación según tipología del juego
Aplicación según tipología del juego
 
Resolutor automático y agente inteligente
Resolutor automático y agente inteligenteResolutor automático y agente inteligente
Resolutor automático y agente inteligente
 

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

  • 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● Antes de hablar de ProcGen… ¡vamos a meternos en este asunto! Generación procedimental de contenido 9 Pseudocódigo
  • 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. ● 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. ● 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. ○ 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. ○ 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. ● Ej. Algoritmo simple para encontrar el valor más grande de un array no ordenado Generación procedimental de contenido 15 Pseudocódigo
  • 16. ● En C# y en Unity Visual Scripting Generación procedimental de contenido 16 Código
  • 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. ● En juegos como Minecraft se parte de una única semilla (número “aleatorio”) Generación procedimental de contenido 18 Generación de mundos
  • 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● ¿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. ● 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. * Excepto el contenido multimedia de terceros autores Federico Peinado (2019-2023) www.federicopeinado.es Críticas, dudas, sugerencias...