# Inteligencia artificial para videojuegos/Percepción
## Introducción

Las primeras características que debe tener un agente racional son la capacidad de abrirse al mundo y percibir la realidad. Como decía el científico y escritor francés Alexis Carrell:
“Poca observación y mucho razonamiento llevan al error. Mucha observación y poco razonamiento llevan a la verdad”.
Millington y Funge afirmaban que la percepción es lo que más esfuerzo cuesta desarrollar y depurar dentro de la IA para videojuegos, un buen motor de IA debe representar el entorno de forma estable y robusta para el correcto funcionamiento de sus algoritmos de comportamiento.
Este entorno de trabajo debe especificarse en relación a como actúan los agentes sobre él, lo que puede hacerse mediante el REAS (Rendimiento, Entorno, Actuadores y Sensores).
Esto otorga al agente un objetivo, un espacio donde desenvolverse, los objetos necesarios para realizar su función y unos sensores para captar percepciones de ese entorno.
A continuación, se explican los diferentes puntos clave de la percepción en la Inteligencia Artificial.

## Interfaz con el mundo

La interfaz con el mundo es la segunda de las características del motor de IA que da soporte a los agentes.
Del jugador se tiene en cuenta su ventana de percepción para ajustar la IA del NPC según la duración de los comportamientos que tenga y los cambios que se produzcan en ellos.
Esta ventana de percepción supone el frame de señales que el jugador es capaz de recibir mientras juega.
En un NPC se busca eficacia a la hora de obtener información sobre el entorno y compartir dicha información con el jugador y el resto de NPCs. Para la obtencion de esa información se usan dos técnicas básicas, el paso de mensajes (la tendencia actual) y los sondeos.

## Paso de mensajes

El paso de mensajes o message passing es un paradigma de programación ampliamente usado en el software moderno. Se llama mensaje a una porción de información que un proceso emisor envía a un destinatario. El modelo de paso de mensajes es el que define los métodos y funciones para poder llevar a cabo el envío de un mensaje de un proceso emisor a un destinatario.
En este caso, este paradigma sigue el modelo de eventos. El comportamiento se suscribe a un gestor de eventos que le notifica con un mensaje cuando se produce un evento determinado. Es útil, por ejemplo, cuando muchos NPCs se interesan en un evento, pero en caso contrario es incluso más lento que el sondeo.
El gestor de eventos facilita la modularidad y da información de depuración muy valiosa:
* Tiene un motor de chequeos (opcional).
* Una cola de mensajes. En esta se almacenan los mensajes pendientes por procesar, pudiendo estar ordenados con prioridades.
* Un registro de observadores. En este se guardan todos los destinatarios de los mensajes.
* Un despachador de mensajes. Este se encarga de procesar los mensajes y realizar las acciones necesarias por cada uno de estos.

## Difusión de mensajes

Existen dos filosofías de diseño para implementar el paso de mensajes:
* Difusión masiva: También llamada Broadcasting es una opción flexible con pocos gestores de eventos con muchos observadores que deben filtrar lo que les interesa a cada uno. Se puede entender como un "pregonero" que difunde la información para todos los "oyentes", los cuales deberán ser los que elijan cuál o cuáles de todos los mensajes deben procesar.
* Difusión selectiva: También llamada Narrowcasting es una opción eficiente con muchos gestores de eventos especializados. Se puede entender, por ejemplo, como la comunicación interna en un equipo de NPCs.
Se suele llegar a un compromiso en el cual al comienzo del desarrollo se usa la difusión masiva para ahorrarse dificultades y al cierre del juego se optimiza con la difusión selectiva.

## Sondeos

También llamados pollings, así se conoce al hecho de buscar activamente información en el entorno. La manera sencilla es que cada NPC haga sus sondeos. Sin embargo, esto implica que si, por ejemplo, existen 100 NPCS, harán falta 10000 chequeos solamente para ver si la trayectoria de uno colisiona con otro. Por ello, se puede deducir que el sistema de pollings escala muy mal.
Para resolver esta gran carga de trabajo, se usa una estación de sondeos que permite depurar de forma centralizada y realizar chequeos, de manera que esto se vuelve más escalable.

## Gestión sensorial (Sense Management)

El paso de mensajes se puede extender para simular los sentidos de un NPC:
Para permitir que esto escale, surge el gestor sensorial. Existen técnicas para cada sentido; Vista, oído, tacto, olfato y gusto.

## Vista

Es el más sofisticado de todos los sentidos porque el jugador detecta rápidamente si este sentido está siendo malamente imitado.
Para lograr recrear este sentido, se utilizan conos de visión, generalmente de 220º en horizontal y 120º en vertical (aunque estos valores pueden cambiar por decisiones de diseño), así como líneas recta de visión y distancias máximas de visión. Esto se hace para no dotar a los NPCs de una visión perfecta, sino de una no demasiado buena, para que el jugador tenga oportunidades de evitarlos, por ejemplo, en juegos que lo permitan de camuflarse o esconderse en zonas oscuras. Además, es fácil darse cuenta de que los NPCs no optan de una visión buena dado que la distancia a la que pueden detectar al jugador suele ser relativamente corta por motivos de diseño.
La visión puede abarcar muchos campos, no solamente la detección del jugador o de otros NPCs, sino que también es posible usar este sentido para predecir movimientos de los demás personajes, como puede ser, por ejemplo, que en un shooter un NPC sea capaz de detectar que el jugador está recargando su arma y decidirse por atacar en ese momento, ya que se encuentra desprotegido, o calcular mejor sus propios disparos si un jugador está moviendose hacia una dirección, disparando hacia una zona que el NPC determine como la próxima posición de ese jugador. Siguiendo con este ejemplo, también se puede utilizar la visión para acciones que tengan que ver con el propio estado del NPC, como la necesidad de buscar munición cuando no tenga o buscar cobertura cuando se encuentre en peligro.

## Oído

El sonido se transmite a 343,2 m/s en el aire, y suele percibirse como instantáneo, es decir, como la luz. Sin embargo, existen juegos que permiten apreciar la velocidad del sonido, como Conflict: Desert Storm (2002) o Medal Of Honor: Warfighter (2012).
Hoy día se pueden encontrar plugins como Steam Audio* que simulan el sonido de forma aún más realista (Sonido 3D con HRTFs, oclusión total y parcial, más efectos del entorno y automatizados, reverberación acorde a tu escena y por convolución, seguimiento de la cabeza en VR). Esto puede afectar tanto a la calidad del sonido que escucha el jugador, como a los algoritmos de percepción de sonido por parte de los NPCs.

## Otros sentidos

El tacto suele interpretarse como colisión. También puede interpretarse como un trigger, por ejemplo, cuando un NPC entra en un objeto de fuego y, a pesar de no colisionar con él, se quema.
El olfato y el gusto apenas se han explorado. Con excepciones como Alien vs. Predator (1994), donde el NPC es "capaz" de olerte para detectar tu posición y encontrarte en el videojuego; juegos donde exista la caza, como Red Dead Redemption 2 (2018), donde se puedan poner cebos para atraer a las presas; Bully (2006), donde se pueden usar bombas fétidas para aturdir a los NPCs; etcétera.
Se pueden diseñar sentidos ficticios.

## Resumen

* El interfaz con el mundo debe ser una manera eficaz de obtener información.
* Se utiliza paso de mensajes, pudiendo usar muchos o pocos gestores de eventos.
* Se utilizan sondeos, pudiendo usar una estación de sondeos centralizada.
* La gestión sensorial es un tipo de paso de mensajes que simula los sentidos como la vista, el oído, el tacto y otros ficticios.

## Lecciones relacionadas

* Inteligencia artificial para videojuegos/Sistemas multi-agente
* Inteligencia artificial para videojuegos/Movimiento
* Inteligencia artificial para videojuegos/Toma de decisiones

## Participantes

* Miguel Mulas Andrés.
* Rodrigo Manuel Pérez Ruiz.
* Marcos García García.