Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Taller Práctico de IA y Lógica en Videojuegos
Autor: Jesús Flores García Tenerife LanParty 2k9 Taller Práctico de IA y Lógica en Videojuegos
2
Objetivos Taller de iniciación Aclaración conceptos
Introducción de técnicas básicas Resolución cuestiones y dudas Más ameno que riguroso
3
Temario Día 1: Entrando en la “Matrix” Día 2: Buscando el camino
Día 3: Nuestro cajón de arena Día 4: Ahora te vas y ¿yo qué hago?
4
Día 1: Entrando en la “Matrix”
Introducción de IA en videojuegos Principios básicos Objetos y Comportamientos Máquinas de estados (FSM)
5
Día 2: Buscando el camino
Decisiones y Capas Caso de Estudio: Pathfinding Técnica de alto nivel: Nav Maps Técnica de bajo nivel: Perseguidor
6
Día 1: Entrando en la “Matrix”
7
Día 1: Entrando en la “Matrix”
Introducción de IA en videojuegos Principios básicos Objetos y Comportamientos Máquinas de estados (FSM)
8
Breve Introducción de IA
NIÑO: No intentes doblar la cuchara. Eso es imposible. En vez de eso, sólo procura comprender la verdad. NEO: ¿Qué verdad? NIÑO: Que no hay cuchara. NEO: ¿No hay cuchara?
9
Breve Introducción de IA
Falsear la realidad Distraer la atención Cómputos ligeros Soluciones aceptables, no óptimas
10
¡Quieres empezar! Inicialización Bucle de Juego Fase de Update
Fase de Render Update Render Cierre
11
¡Código Please! if ( SGame.Init( hWnd ) ) { _________ while( msg.message != WM_QUIT ) SGame.Update( seconds ); SGame.Render(); } SGame.Destroy();
12
Objetos y Sistema de Referencia
13
Objetos y Sistema de Referencia
14
Mates I: Vectores y Puntos
XYZ D3DXVECTOR3 (X, Y, Z) (X, Y, Z)
15
Objetos y Comportamientos
16
Objetos y Comportamientos
17
Objetos y Comportamientos
18
Objetos y Comportamientos
19
Patrón Estrategia STRATEGY OBJECT STRATEGY 1 STRATEGY 2 STRATEGY 3
Strategy * strg; algorithm() STRATEGY 1 STRATEGY 2 STRATEGY 3 algorithm() algorithm() algorithm()
20
¡A Practicar!
21
¿Por qué necesitamos más?
Tenemos un comportamiento simple Queremos: Secuencias Comportamientos más complejos Recordar pasos anteriores
22
Ejemplo: Enemigo Secuencial
ESPERAR LANZAR BARRIL
23
Ejemplo: Más moderno
24
FSM – Máquinas de Estados
Comportamiento Complejo Enemigo Usa Ascensor
25
FSM – Máquinas de Estados
Comportamiento se descompone Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir
26
FSM – Máquinas de Estados
Transiciones Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir
27
FSM – Máquinas de Estados
Reglas de Transición Enemigo Usa Ascensor Pulsar Botón Entrar Pulsar Botón Salir Estar Dentro Esperar Esperar
28
FSM – Implementación Se debe guardar el estado actual
Secuencia de IF´s if ( state == “AAA” ) … else if ( state == “BBB” ) else if ( state == “CCC” )
29
FSM – Implementación Mejor con números (eficiencia) Secuencia de IF´s
if ( state == 0 ) … else if ( state == 1 ) else if ( state == 2 )
30
FSM – Implementación Mejor usar un switch: switch( state ) { …
{ … case 0: … break; case 1: … break; case 2: … break; }
31
FSM – Implementación Un enum es más claro: switch( state ) { …
{ … case AAA: … break; case BBB: … break; case CCC: … break; }
32
FSM – Implementación Válido para casos sencillos
Problema del switch de las 5000 líneas switch( state ) { … case AAA: … break; case BBB: … break; case CCC: … break; }
33
FSM – Implementación Crear una función para cada estado
switch( state ) { … case AAA: AAA(); break; case BBB: BBB(); break; case CCC: CCC(); break; }
34
FSM – Implementación Válido para máquinas medianas
No tiene código en las transiciones switch( state ) { … case AAA: AAA(); break; case BBB: BBB(); break; case CCC: CCC(); break; }
35
FSM – Implementación STATE OnEnter() OnUpdate() OnExit()
Los estados son clases: STATE OnEnter() OnUpdate() OnExit()
36
FSM – Implementación STATE 1 STATE 2 FSM STATE 3 State * actual;
La FSM es otra clase: STATE 1 STATE 2 FSM STATE 3 State * actual; STATE 4 STATE … STATE N
37
FSM – Implementación Miles de implementaciones Miles de artículos
Miles de extensiones Máquinas de Máquinas de estados Basadas en Eventos Máquinas de pila Máquinas multi-estados (No deterministas) Máquinas inerciales Máquinas Fuzzy (FuSM) ….
38
No Matar Moscas a Cañonazos
Usa lo que te haga falta No hay soluciones generales
39
¡A Practicar!
40
Mates II: Entre 2 Puntos VDistancia = PtoDestino – PtoOrigen
Distancia = Length(VDistancia) Dirección = Normalize(VDistancia)
41
Mates III: Ángulos Z X VDistancia = PtoDestino – PtoOrigen
Ángulo = atan2( X, Z ); Z X
42
Día 2: Buscando el camino
43
Día 2: Buscando el camino
Decisiones y Capas Caso de Estudio: Pathfinding Técnica de alto nivel: Nav Maps Técnica de bajo nivel: Perseguidor
44
Decisiones en el Juego Curarse Pulsar Botón Volver a la Base
Múltiples decisiones que tomar Curarse Pulsar Botón Volver a la Base Perseguir J1 Esperar Usar Ascensor Cambiar Animación Subir Escaleras Pedir Refuerzos Disparar
45
Decisiones en el Juego Curarse Pulsar Botón Volver a la Base
No es bueno que todo se resuelva a la vez Curarse Pulsar Botón Volver a la Base Perseguir J1 Esperar Usar Ascensor Cambiar Animación Subir Escaleras Pedir Refuerzos Disparar
46
Decisiones y Capas Diferentes niveles / Capas de decisión:
Decisiones a largo plazo Decisiones a medio plazo Decisiones a corto plazo Decisiones a inmediatas
47
Decisiones Ejemplos de Decisiones: Atacar Base Enemiga
Decisiones a largo plazo Atacar Base Enemiga Decisiones a medio plazo Buscar Ruta Segura Decisiones a corto plazo Disparar a vigilante Decisiones a inmediatas Ejecutar Animación
48
Decisiones Diferentes estrategias / técnicas: Decisiones a largo plazo
Decisiones a medio plazo T3 Decisiones a corto plazo T4 Decisiones a inmediatas T5 T6
49
Decisiones y Capas 120 segs 10 segs 0.5 segs 0.0016 segs
Distinta frecuencia de actualización: Decisiones a largo plazo 120 segs Decisiones a medio plazo 10 segs Decisiones a corto plazo 0.5 segs Decisiones a inmediatas segs
50
Decisiones y Capas Perseguir J1 Volver a la Base Subir Escaleras
Distintos subsistemas: Perseguir J1 Volver a la Base Subir Escaleras Pedir Refuerzos Usar Ascensor Curarse Disparar Pulsar Botón Cambiar Animación
51
Caso de estudio Movimiento y Pathfinding
Necesidad de Desplazarse por el Mundo Distintos niveles de decisión: Una capa superior: Ir al bosque de los elfos Pathfinding: Usar el camino del oeste Movimiento: Esquivar una roca
52
Representación del mundo
Mundo continuo Difícil de trabajar con él Se necesita una representación
53
Representación del mundo
Usar geometría para simplificar
54
Representación del mundo
Usar geometría para simplificar Es un primer paso En general no es suficiente
55
Representación del mundo
Rejilla Cuadrada
56
Representación del mundo
Rejilla hexagonal
57
Representación del mundo
Rejillas Buenas representaciones en 2D Espacios de búsqueda muy grandes
58
Representación del mundo
Quad Trees y Octrees
59
Representación del mundo
Grafos y Waypoints
60
Representación del mundo
Grafos y Waypoints
61
Representación del mundo
Grafos y Waypoints Muchos nodos por procesar Raíles y mucho zigzag
62
Representación del mundo
Grafos y Waypoints Muchos nodos por procesar Raíles y mucho zigzag
63
Representación del mundo
Grafos y Waypoints Muchos nodos por procesar Raíles y mucho zigzag
64
Representación del mundo
Mapas de navegación: NavMaps
65
Representación del mundo
NavMaps Grafo de areas caminables Menos nodos y más libertad de movimiento
66
Representación del mundo
NavMaps Grafo de áreas caminables Menos nodos y más libertad de movimiento
67
Representación del mundo
Muchas otras representaciones
68
Algoritmos de Búsquedas
Algoritmos tradicionales: Anchura y profundidad A* y variantes Dijkstra Floyd-Warshall …
69
Caso práctico de NavMesh
1- Crear el Mapa de Navegación:
70
Caso práctico de NavMesh
1- Crear el Mapa de Navegación:
71
Caso práctico de NavMesh
2- Aplicamos Floyd-Warshall: 946 Nodos Maxscript Matriz Grafo
72
Caso práctico de NavMesh
3- Obtener el camino usando la matriz (0.0, 0, 28) (0.1, 0, 12) (3, 0, -5) (-1, 0, 28) (8, 0, 28.8) (8.2, 0, 21.8) (8.1, 0, 22.8) Matriz
73
Caso práctico de NavMesh
4- Pasar los Waypoints a la capa inferior Pathfinding (Alto nivel) (0.1, 0, 12) (3, 0, -5) (-1, 0, 28) (8, 0, 28.8) (8.2, 0, 21.8) (8.1, 0, 22.8) Movimiento (Bajo Nivel)
74
Vamos a verlo en ejecución:
75
Caso práctico de NavMesh
Se mueve al medio de las aristas Lejos de estar acabado
76
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
77
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
78
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
79
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
80
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
81
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
82
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
83
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
84
Caso práctico de NavMesh
5- Heurística de refinamiento: String-Pulling
85
Vamos a verlo en ejecución:
86
¡Todavía no funciona bien!
Continuar refinando la solución Probar otras heurísticas Mejorar el Grafo inicial ¡TIEMPO, TIEMPO, TIEMPO!
87
Estrategia Bajo Nivel: Perseguidor
Velocidad Lineal Limitada Velocidad Angular Limitada Efecto del Cocodrilo
88
Mates IV: Ángulo entre vectores
Producto escalar = Dot Product Dot(V, W) = Vx*Wx + Vy*Wy +Vz*Wz Dot(V, W) = |V| * |W| * cos(ang) Si |V| = |W| = 1 Dot(V, W) = cos(ang) V W
89
Mates V: Plano N P Plano = A * X + B * Y+ C * Z + D
Plano = Nx * X + Ny * Y + Nz * Z + D D = – Nx * Px – Ny * Py – Nz * Pz N P
90
Mates VI: Test de Plano-Punto
Plano = A * X + B * Y+ C * Z + D Punto P V = A * Px + B * Py + C * Pz + D V=0 En el plano V>0 Encima del plano(Donde Apunta N) V<0 Debajo del plano P
91
Algoritmo Perseguidor:
vDist = TargetPos – CurrentPos
92
Algoritmo Perseguidor:
vDist = TargetPos – CurrentPos angle = acos( Dot( vDist, CurrentFront ) )
93
Algoritmo Perseguidor:
vDist = TargetPos – CurrentPos angle = acos( Dot( vDist, CurrentFront ) ) if ( angle > velAng * timestep ) angle = velAng * timestep
94
Algoritmo Perseguidor:
vDist = TargetPos – CurrentPos angle = acos( Dot( vDist, CurrentFront ) ) if ( angle > velAng * timestep ) angle = velAng * timestep p = Plane( CurrentLeft, 0 ) if ( PlaneTest( vDist, p ) < 0) angle = -angle
95
Algoritmo Perseguidor:
vDist = TargetPos – CurrentPos angle = acos( Dot( vDist, CurrentFront ) ) if ( angle > velAng * timestep ) angle = velAng * timestep p = Plane( CurrentLeft, 0 ) if ( PlaneTest( vDist, p ) < 0) angle = -angle Yaw += angle CurrentPos += |vDist | * NewCurrentFront
96
Vamos a verlo en ejecución:
97
Día 3: Nuestro cajón de arena
98
Día 3: Nuestro cajón de arena
99
Día 3: Nuestro cajón de arena
Comunicación entre elementos Pizarra, Mensajes y Eventos Lenguajes de Scripting Introducción a Lua
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.