inteligencia articial gd

6
Qué tal Javier, Vaya, pues bienvenido a una de las áreas que más me gustan de la programación de videojuegos! pues aquí va mi explicación: Como ya mencionaron arriba, esto es básicamente un problema de Inteligencia Artificial, sin embargo quizás pueda ser un poco más complejo de lo que se ve (depende del juego), pero déjame explicarte para que te des una idea de cómo está la cosa: Primero, tenemos que entender que cuando en la escuela te enseñan Inteligencia Artificial tiene un objetivo muy diferente al de la I.A. que se utiliza en un juego (salvo que sea una escuela de videojuegos, claro).... En la academia normalmente intentan hacer una máquina lo más inteligente posible para poder resolver un problema, sin embargo, en un videojuego tú intención realmente es divertir al jugador, no hacer al NPC inteligente (si lo hicieras, se frustaría, tiraría el control y dejaría de jugarlo)... así pues, realmente en videojuegos estamos tratando de crear "Estupidez Artificial"... es decir, que el jugador perciba que el NPC es inteligente, pero sin que lo sea tanto para permitirle al jugador progresar el juego. Esto nos trae con algo interesante, tienes que trabajar la percepción del jugador junto con la lógica de cómo actúa, muchas veces utilizando "hints" para que el jugador entienda qué es lo que el NPC quiere hacer (como animaciones o sonidos de "nos están rodeando", precediendo a un NPC que se mueve en dirección opuesta.... de lo contrario el jugador diría "qué IA tan chafa, se van!"). Pero bueno, hay básicamente 3 aspectos que estarás trabajando mientras desarrollas la I.A. de un personaje en un videojuego: - Comportamiento - Planeación

Upload: jack-kcaj

Post on 10-Jul-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Inteligencia Articial GD

Qué tal Javier,

Vaya, pues bienvenido a una de las áreas que más me gustan de la programación de videojuegos! pues aquí va mi explicación:

Como ya mencionaron arriba, esto es básicamente un problema de Inteligencia Artificial, sin embargo quizás pueda ser un poco más complejo de lo que se ve (depende del juego), pero déjame explicarte para que te des una idea de cómo está la cosa:

Primero, tenemos que entender que cuando en la escuela te enseñan Inteligencia Artificial tiene un objetivo muy diferente al de la I.A. que se utiliza en un juego (salvo que sea una escuela de videojuegos, claro)....

En la academia normalmente intentan hacer una máquina lo más inteligente posible para poder resolver un problema, sin embargo, en un videojuego tú intención realmente es divertir al jugador, no hacer al NPC inteligente (si lo hicieras, se frustaría, tiraría el control y dejaría de jugarlo)... así pues, realmente en videojuegos estamos tratando de crear "Estupidez Artificial"... es decir, que el jugador perciba que el NPC es inteligente, pero sin que lo sea tanto para permitirle al jugador progresar el juego.

Esto nos trae con algo interesante, tienes que trabajar la percepción del jugador junto con la lógica de cómo actúa, muchas veces utilizando "hints" para que el jugador entienda qué es lo que el NPC quiere hacer (como animaciones o sonidos de "nos están rodeando", precediendo a un NPC que se mueve en dirección opuesta.... de lo contrario el jugador diría "qué IA tan chafa, se van!").

Pero bueno, hay básicamente 3 aspectos que estarás trabajando mientras desarrollas la I.A. de un personaje en un videojuego:- Comportamiento- Planeación- Representación del Conocimiento

En su base (como mencionaron arriba) toda la lógica de un NPC está basada en una FSM (Finite State Machine), si en la universidad llevaste clase de compiladores sabes de lo que hablamos... tan es así que el UnrealScript que manejaba el UE3 ya manejaba implicitamente el concepto de "estado" en el lenguaje (y obviamente se encargaba de la transición entre estados).... tú personaje puede estar Parado, Atento, Atacando, Herido, Huyendo, etc... todos son estados.

Sin embargo, en algunos casos la FSM por sí sola se vuelve muy deterministica (si hace tal cosa SIEMPRE le sigue tal otra), y aquí es cuando podemos empezar a meterle un poco de "Lógica Difusa", donde en lugar de decir "A=1 y B=0" y para pasar entre estados tiene que estar en 1 o en 0, realmente puedes estar en un punto intermedio 0.4532, y el resultado de hacia qué estado se mueve depende de la función y los valores que hayas definido (ya se pone más interesante el personaje, vdd?).

Así también, en lugar de usar una FSM, es posible que quieras utilizar un "Árbol de

Page 2: Inteligencia Articial GD

Comportamiento" (OJO: no confundir con un "Arbol de Decisión"), que en esencia cumplirá la misma función que una FSM, pero tiene otras ventajas.

Pero bueno ¿de qué sirve eso si no vemos a nuestro NPC hacer algo?... aquí es cuando entran en acción temas como "Patrones de Comportamiento" (el típico comportamiento de los enemigos de un juego de NES, o alguno actual más casualón), "Steering Behaivors" (que tú NPC persiga a alguien, que lo evada, que huya, que merodee, etc)... también querrás simular que tus NPCs (especialmente si son pájaros, peces, perros, zombies, etc) se mueven en grupo, ahí está el tema de "Flocking"...

Hasta aquí es lo más escencial... sin embargo normalmente la I.A. se trabaja en capas (donde ésta fue la capa más baja).

Ya en las capas superiores empiezas a trabajar otros aspectos, como la planeación y la toma de decisiones, aquí es cuando entran en juego algunas técnicas como (ahora sí) "Arboles de Decisión" , "Rule Based Systems", "Goal Oriented Action Planning", "Bayesian Networks"... y si quieres entrarle a que tus NPC tengan formaciones y movimientos tácticos en grupo tienes "Blackboard Systems" que es una muy buena opción...

así como también el famoso "A*" para pathfinding (encontrar la ruta de un punto A a un punto B habiendo obstáculos de por medio), e incluso algunas veces querrás manejar un pathfinding jerárquico...

Nota: La diferencia entre "Decision Trees" y "Behaivor Trees" es en esencia que en el árbol de decisión utilizas el árbol como una estructura de datos para analizar el estado del juego y tomar una desición, es decir:

Siempre recorres del nodo raíz del árbol hacia alguna de las hojas, donde cada rama representa una variable del estado del juego que deseas analizar para tomar una decisión, y te moverás entre cada rama dependiendo de si aplica o no aplica, y al final la hoja a la que llegues es la decisión que tomarás..

Por el contrario, un "Arbol de comportamiento" al principio empiezas en el nodo raíz, pero una vez que analizaste a los nodos hijos y tomaste la decisión de qué hacer, te mueves a ese nodo, y ahí te quedas.. cada nodo del árbol representa un estado en el que se encuentra el NPC,.. en la siguiente iteración empiezas del nodo en el que te quedaste y analizas sus hijos y lo vuelves a recorrer, hasta que llegas a alguna hoja y se resetea el estado.

Digamos que un "Arbol de Decisión" lo utilizas para razonar el estado del juego y tomar una decisión, mientras que el "Arbol de comportamiento" es una guía del comportamiento que seguirá a mediano/largo plazo...

Y bueno, finalmente necesitas representar el conocimiento que utilizarás para que tus NPCs puedan razonar y tomar decisiones, ¿no?...

En el caso de Pathfinding seguramente podrás utilizar un mapa de tiles para representar el terreno (especialmente en juegos 2D isométricos), o bien un "Navigation Mesh", que pueda

Page 3: Inteligencia Articial GD

utilzar el algorítmo de A* para recorrer y analizar las diferentes opciones... aquí no solo es la representación del terreno, sino proveer a los NPCs de información relevante para decidir el mejor camino para los diferentes tipos de NPCs (por ejemplo, una persona normal quizás no podría cruzar una zona pantanosa, pero un tanque de guerra si, así que el recorrido que haga el A* de la persona evaluará la viabilidad de pasar por un lado, pero será diferente que la que resolverá el A* del tanque).

En general muchas cosas dependerán del juego que estés haciendo para definir cómo representas ese conocimiento que utilizará la I.A., pero por ejemplo, en juegos de deportes, o de estrategia donde la posición de tus enemigos y aliados es importante, es muy útil el uso de "Mapas de Influencia" (un grid que representa que tanta influencia enemiga o aliada hay sobre ciertas zonas del mapa).

Y bueno, finalmente, así como en el aspecto visual del juego puedes poner modelos con diferentes LOD, en la I.A. también puedes manejar diferentes LOD (¿para qué haces cálculos innecesarios de cosas que el usuario no percibirá?).

¿cómo ves?... ¿te late?....2 h · Editado · Me gusta · 2

Jacobo Ríos Si te late conocer más de lo que comenté, te recomiendo le eches un ojo a las siguientes referencias:

- Finite State MachinesProgramming Game AI by Example, Capitulo 2AI for Game Developers, Capitulo 9Artificial Intelligence for Games, Capitulo 5.3

- Patterin MovementAI for Game Developers, Capitulo 3

- Steering BehaviorsProgramming Game AI by Example, Capitulo 3Artificial Intelligence for Games, Cpaitulo 3.3, 3.4

- FlockingAI for Game Developers, Capitulo 4

- Formaciones y Movimiento TácticoArtificial Intelligence for Games, Capitulo 3.7

- Pathfinding (A*)AI for Game Developers, Capitulo 7Artificial Intelligence for Games, Capitulo 4.3

- Hierarchical Pathfinding

Page 4: Inteligencia Articial GD

Artificial Intelligence for Games, Capitulo 4.6

- Representación del Mundo (Tiles, Waypoints, Navegation Meshes)Programming Game AI by Example, Capitulo 8Artificial Intelligence for Games, Capitulo 4.4

- Decition TreesArtificial Intelligece for Games, Capitulo 5.2

- Behaivor TreesNota: No conozco algún libro que hable al respecto, pero estas ligas servirán:http://aigamedev.com/open/article/behavior-trees-part1/http://aigamedev.com/open/article/behavior-trees-part2/http://aigamedev.com/open/article/behavior-trees-part3/http://www.gdcvault.com/.../Behavior-Trees-Three-Ways-ofhttp://www.smu.edu/.../Delmer_Stephan_Thesis_Final.ashx...

- Rule Based SystemsArtificial Intelligence for Games, Capitulo 5,7AI for Game Developers, Capitulo 11

- Goal Oriented Action PlanningProgramming Game AI by Example, Capitulo 9Artificial Intelligence for Games, Capitulo 5,6

- Blackboard SystemsArtificial Intelligence for Games, Capitulo 5,8

- Influence MapsProgramming Game AI by Example, Capitulo 4(no aparece bajo ese nombre, pero ejemplifican muy bien su uso)

- Bayesian Networks (desiciones bajo incertidumbre)AI for Game Developers, Capitulo 13

- A.I. Level of DetailArtificial Intelligence for Games, Capitulo 9.3

- Lógica DifusaProgramming Game AI by Example, Capitulo 10AI for Gamer Developers, Capitulo 10Artificial Intelligence for Games, Capitulo 5.4

Y finalmente otro excelente libro que no habla concretamente de ninguno de éstos temas, pero se enfoca en una parte fundamental de la IA para videojuegos, que es la de tratar de imitar el comportamiento humano, ya sea en lo individual, o en grupo, eseñándonos paso a paso y de una manera muy digerible a analizar la psicología humana y las dinámicas

Page 5: Inteligencia Articial GD

grupales, para después crear modelos matemáticos que ayuden a representar al comportamiento real: "Behaivoral Mathematics for Game AI"

Espero te sirva!!