Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pregunta De Novato

Iniciado por Daemon, 04 de Mayo de 2005, 03:08:38 PM

« anterior - próximo »

Daemon

 Saludos a todos!

Una pregunta de novato:

¿Que grado de control posee la IA sobre un personaje virtual?

Dicho asi suena un poco raro, intentare explicarme (espero  ;) ).

Normalmente una IA en un juego se usa para controlar los movimientos y comportamientos de los distintos personajes, pero las acciones que emite la IA tienen una "granularidad" que puede ser mas o menos limitada, por ejemplo si un personaje esta luchando una posible accion (dependiendo de lo que reciba como entrada la percepcion del personaje) podria ser "golpear(enemigo, arma_actual, ...)" que podria disparar la animacion del personaje (como se hacia antes para juegos en 2D) controlado por la IA para la accion de golpear. Sin embargo tambien podria llegar a ser "doblar_brazo_izquierdo(pos_arma) + agarrar_mano_izquierda(arma) + tirar_brazo_izquierdo(arma) ..."
o llevandolo al extremo (quizas exagerando un poco) "mover_primer_dedo_mano_izq(direccion1,...)+...."


¿Hasta que punto esto es asi?
Imagina todo lo que puedes hacer. Despues hazlo.

Sacrifai

 Depemde del tipo de IA que se use, pero la IA se controla totalmente por el programador. Por cierto el ejemplo del dedo no es exagerado.

egf

 solo depende de la capacidad O.I (inteligencia organica) del programador y su soltura en el manejo de if y whiles y demas controles de flujo

las capacidades del motor  a la hora de trasmitir impactos y mandar instruciones


tambien decir que no a varido la forma de trabajar la ia del 2d al 3d solo la dificultad al haber mas posibilidades
un juego de futbol por ejemplo no variaria nada de la I.A salvo a la hora de gestionar las animaciones y la fisica

Thenend

 Pues la granularidad más gruesa posible. Si puedes hacer un script que haga que el bicho persiga al jugador por los pasillos y te evitas un complicado algoritmo de tácticas de persecución, intercepción y optimizaciónes estéticas de la búsqueda de caminos, seguramente te quedará mejor y gastarás menos tiempo de proceso de CPU y de tu cerebro. Pero claro, si estás haciendo un simulador de escalada igual si que tienes que controlar dónde se colocan los dedos para agarrarse a los salientes, igual con una cinemática inversa simulada con un feedback loop o algo así (esto lo digo para lucirme  :P ). Depende totalmente del juego, pero cuanto menos tengas que calcular mejor.

Lo que si que se suele hacer es distintos niveles jerárquicos de granularidad. Una IA que decide si se va a atacar, defender, crear un grán ejército y atacar con todo de golpe, utilizar táctica de guerrillas, etc. Otras subordinadas a la anterior, que deciden la táctica a usar en una batalla, si poner a tal tropa delante o detrás, si retirarse, si perseguir, concentrar el fuego en un punto.... Y por último otras individuales para cada tropa que buscan el camino para llegar a la unidad objetivo, deciden cuándo curarse o lanzarse un hechizo, qué arma usar...

Warchief

 Hace un par de semanas vi en la biblioteca un libro que me pareció bastante bueno sobre temas de IA:
http://www.ai-junkie.com/books/toc_pgaibe.html

Es muy reciente (finales de 2004 creo), tiene distintos temas muy bien trabajados, con un diseño de código muy bueno (patrones, templates, etc) y con el código fuente disponible en inet y detallado en el libro. Básicamente expone un tema, lo implementa y explica por qué esa implementación; luego añade más detalles que lo completen (también con código).

La verdad es que me dejó una sensación muy buena; quizá quieras echarle un vistazo?


Vicente

 Hola,

yo tengo ese libro y está muuuuy bien. Recomendado para el que quiera aprender sobre IA. Un saludo!

Vicente

Pogacha

 La verdad es que veo organizaciones de eventos y charlas debates, libros, tutoriales y demas de IA para juegos y nunca he visto algo realmente que a mi no se me ocurriera ( que sea realmente practico, no como por ejemplo Redes Neurales o herencia grafistica o cosas inaplicables ).
En realidad la inteligencia artificial para un juego de acción debe controlar el enemigo de la misma manera que tú como usuario puedes hacerlo, en cambio en un juego de estrategia o algo similar donde las animaciones puedan ser aleatoriamente construidas, la granularidad la das tu, pero no obstante hasta ahora nadie ha hecho algo con tal "granularidad" como mover un dedo, pues imagina coordinar el centro de gravedad del personaje en función del movimiento de los dedos, seria meter un programa que no solo emule el sistema nervioso central sino que tenga la capacidad reflexiva adecuada para cada ser en particular, lo cual dudo mucho que se pueda hacer hoy dia.

Saludos.

Daemon

 Hola a todos de nuevo!

Uff, no se como estructurar esto! A ver como sale...

Lo de la granularidad de las acciones en una IA lo preguntaba por que cuanto mas fina sea mas posibilidades de generar comportamientos distintos tendría el personaje. Para centrar esto un poco supongamos que la IA debe ocuparse de controlar por completo un personaje virtual (que puede ser en 3d aunque yo de 3d no tengo ni idea... :() para el que se definen los mismos miembros (brazos, piernas, torso...) que posee un ser humano con los mismos grados de libertad. Un requisito adicional es que el calculo deberia ser rapido, muy rapido, de hecho tanto como para dar las mismas acciones por segundo que la velocidad del video en fps. Esto es asi para evitar tener que contruir animaciones predefinidas y que el comportamiento que se observe del personaje sea completamente generado por la IA. Estos objetivos del rendimiento y una granularidad tan fina pueden parecer contradictorios, pero ahi estaria el reto (twist). Formas de conseguir esto.... bueno por aqui han apuntado varias:

Thenend:
Citar... pero cuanto menos tengas que calcular mejor. Lo que si que se suele hacer es distintos niveles jerárquicos de granularidad...

Efectivamente, distintos niveles jerarquicos te facilitan la tarea de la IA al dividir el problema al que se enfrentan. De esta manera un nivel superior dispone de problemas de granularidad gruesa de cuya realización concreta no se tiene que preocupar por que los resuelven los niveles inferiores que serian mas finos. Ahora bien, como hacer que no se tenga que calcular demasiado sin perder posibilidades de generación de comportamientos (sin tener un comportamiento predefinido)

Pogacha: (aunque de forma negativa)
Citar
...que sea realmente practico, no como por ejemplo Redes Neurales o herencia grafistica o cosas inaplicables...

Vaya Pogacha, por la cuenta que me trae, espero que no tengas razon  :D (aunque de momento si que la tienes). Creo que usando redes neuronales se podrian realizar esos niveles inferiores que se encargasen de realizar ese comportamiento, actuando de una forma muuuuy rapida  y sin perder posibilidades de generacion de comportamiento, gracias a la capacidad de generalizar que poseen (una vez entrenadas, claro).


Sacrifai
Citar
...Por cierto el ejemplo del dedo no es exagerado.

¡Diantres! ¿Donde has visto tu eso? (genial)

¡Ah, Warchief, gracias por la recomendacion, le echare un vistazo a ese libro, al menos los contenidos que ponen en la web tienen buena pinta!

Imagina todo lo que puedes hacer. Despues hazlo.

Lord Trancos 2

 Ufff... yo de AI no tengo ni zorra (mas alla de """"inteligencia"""" a base de randoms e ifs... (nooo)), pero lo de controlar el movimiento (que no el comportamiento) de un personaje por AI me parece un complicacion innecesaria en el 99,9999% de los juegos.  :blink:

En un robot vale.... pero en un juego...  <_<  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Warchief

 Puedes usar una solución intermedia que yo he visto en implementaciones del alpha-beta (=minimax con poda), que es poda por tiempo.  Cada cierto tiempo/condición/iteración puedes ver el tiempo consumido y ver si eso excede las expectativas. En ese caso se debería cortar por ahí y quedarte con la solución alcanzada en ese momento.

Sería algo del estilo de:

bajarNivel(int x) {
 // Si no hay mas niveles terminar
 if(x == maximoGrano) return terminar();

 PARA todos los componentes
      compo(i).calcularNivel(x);
 }
 
 if(quedaTiempo()) {
   return bajarNivel(x+1);
 } else return terminar();
}

Llegado el momento de terminar, los componentes tendran una solución, cuyo nivel de granularidad dependerá del tiempo que has tenido en ese momento.

Eso haría que el comportamiento en máquinas lentas o en momentos de ejecución con pocos recursos la IA fuese un poco más gruesa, pero en los que tienen la rodaja de frame casi completa para ella solita pues poder bajar al mejor nivel.


El código de arriba puede necesitar de ciertas modificaciones para parecer útil XD

Thenend

 Entonces lo que buscas es animacion procedural no? Lo más parecido que he visto en ese área es una demo del motor de físicas de Meqom, que hace un tiempo se posteo por aquí.

http://www.meqon.com/downloadarea/downloadarea.php

Tienen algunas demos de ragdolls que ponen las manos hacia el suelo al caer o que se levantan si los tiras, etc. Nada demasiado sofisticado pero algo es algo. La verdad es que no se suelen ver animaciones procedurales en los juegos mas que para que la cabeza de personaje mire a algún sitio o para ajustar los pies al plano del suelo. Incluso en el Free Form Fighting ™ del Prince of Persia 2 son casi todo movimientos predefinidos con unos pequeños ajustes en tiempo real. Intenta hacer símplemente que los pies de un personaje se adapten al suelo por el que anda y verás que es más chungo de lo que parece.

Creo que Ken Perlin, que le molan estas cosas procedurales está investigando sobre eso, en la GDC debió de dar alguna conferencia. En su web hay miles de cosillas, igual tiene algo que te interese:

http://mrl.nyu.edu/~perlin/

Este tema se ha debido investigar más a nivel de robótica y me da la impresión de que es un problema bastante más complejo de lo que en principio pudiera parecer. Si tras muchos años de investigación, los ingenieros de Honda no han conseguido más que al Asimo ese que en cuanto que sabe andar el pobre...

A propósito, conocéis este programa??

http://www.frams.alife.pl/

Daemon

 Gracias por los comentarios, la verdad es que tengo que mirar muchas cosas, pero siempre es bueno es que te den direcciones sobre lo que ya ahi hecho.

¡El framstick este tiene muy buena pinta! Ademas esta para Linux (ole).
De momento tengo algunos problemillas con la tarjeta de red wifi que no me la reconoce la SuSe (tener que recurrir a Windows para esto... (grrr)), pero en cuanto la active le echare un vistazo mas a fondo.

Ya os ire comentando como va el proyecto, aunque de momento esta en los inicios y las RNA me estan dando mas de un quebradero de cabeza (todavia estoy en la percepcion del agente y no he llegado a las redes que controlarian los movimientos).
Imagina todo lo que puedes hacer. Despues hazlo.

Vicente

 Hola,

del mismo autor que se comentaba antes hay un libro que es de IA aplicada a juegos usando solo Algoritmos Genéticos y Redes Neuronales ;) Cuando llegue a casa busco el título y lo posteo. Yo creo que si tienen utilidad (la IA de los bots del Quake 3 usa genéticos por ejemplo (además de muchas otras cosas)). Un saludo!

Vicente

Vicente

 Hola,

el libro que decía antes es:

"AI Techniques for Game Programming"

Muy recomendado para todos los que estén interesados en el tema de los genéticos y las redes neuronales aplicados a IA de juegos. Un saludo!

Vicente






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.