La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Autor: Jesús Flores García Tenerife LanParty 2k9.

Presentaciones similares


Presentación del tema: "Autor: Jesús Flores García Tenerife LanParty 2k9."— Transcripción de la presentación:

1 Autor: Jesús Flores García Tenerife LanParty 2k9

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 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! Bucle de Juego Fase de Update Fase de Render Inicialización 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

14 Mates I: Vectores y Puntos XYZ D3DXVECTOR3 (X, Y, Z)

15 Objetos y Comportamientos

16

17

18 Comportamiento

19 Patrón Estrategia STRATEGY algorithm() STRATEGY 1 algorithm() STRATEGY 2 algorithm() STRATEGY 3 algorithm() OBJECT Strategy * strg;

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 Esperar Estar Dentro 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 Los estados son clases: STATE OnEnter() OnUpdate() OnExit()

36 FSM – Implementación La FSM es otra clase: STATE 1 STATE 2 STATE 3 STATE 4 STATE … STATE N FSM State * actual;

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 VDistancia = PtoDestino – PtoOrigen Ángulo = atan2( X, Z ); X Z

42 Día 2: Buscando el camino

43 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 Múltiples decisiones que tomar Usar Ascensor Pulsar Botón Subir Escaleras Esperar Perseguir J1 Volver a la Base Cambiar Animación Curarse Pedir Refuerzos Disparar

45 Decisiones en el Juego No es bueno que todo se resuelva a la vez Usar Ascensor Pulsar Botón Subir Escaleras Esperar Perseguir J1 Volver a la Base Cambiar Animación Curarse 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: Decisiones a largo plazo Decisiones a medio plazo Decisiones a corto plazo Atacar Base Enemiga Buscar Ruta Segura Disparar a vigilante Decisiones a inmediatas Ejecutar Animación

48 Decisiones Diferentes estrategias / técnicas: Decisiones a largo plazo Decisiones a medio plazo Decisiones a corto plazo Decisiones a inmediatas T1T2 T3 T4 T5T6

49 Decisiones y Capas Distinta frecuencia de actualización: Decisiones a largo plazo Decisiones a medio plazo Decisiones a corto plazo Decisiones a inmediatas segs 0.5 segs 10 segs 120 segs

50 Decisiones y Capas Distintos subsistemas: Usar Ascensor Pulsar Botón Subir Escaleras Perseguir J1 Volver a la Base Cambiar Animación Curarse Pedir Refuerzos Disparar

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 Grafo MaxscriptMatriz

72 Caso práctico de NavMesh 3- Obtener el camino usando la matriz 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)

73 Caso práctico de NavMesh 4- Pasar los Waypoints a la capa inferior (0.1, 0, 12) (3, 0, -5) (-1, 0, 28) (8, 0, 28.8) (8.2, 0, 21.8) (8.1, 0, 22.8) Pathfinding (Alto nivel) 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 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

99 Comunicación entre elementos Pizarra, Mensajes y Eventos Lenguajes de Scripting Introducción a Lua


Descargar ppt "Autor: Jesús Flores García Tenerife LanParty 2k9."

Presentaciones similares


Anuncios Google