Maxscript steering behaviors IA

Hola. Esta mañana estaba revisando unas clases sobre inteligencia artificial que hice hace algunos meses para el motor que estamos desarrollando. En concreto se trata de simular el comportamiento en grupo de ciertas entidades (stering behavior). Un ejemplo claro es, por ejemplo, en Matrix revolutions, cuando los centinelas entran en masa en el muelle de Zion. Lo cierto es que no sé si utilizaron stering behavior o era una animación predefinida, pero me extraña que se pongan a animar a miles de centinelas manualmente.

El caso es que entonces recordé un video experimental de Allan Mckay que simulaba un bombardeo aéreo y me parece recordar que los aviones estaban animados proceduralmente y eso me ha motivado para adaptar el código de nuestro motor a Maxscript. Por ahora no pongo el código ya que no está terminado. El mecanismo no está demasiado bien estructurado y aún tengo mis dudas de cuál sería la mejor forma. Lo que sí adjunto es un pequeño video que he capturado. En el podréis ver dos entidades (conos) que persiguen a un dummie (el que sigue el Path) y huyen de un space Warp (Gravity). Tanto el dummie como el space Warp están animados manualmente, pero la animación de los dos conos es totalmente procedural.

El tema de stering behavior permite más cosas. Por ejemplo, en nuestro motor implementé también la opción de que las entidades evitaran obstáculos. También ofrece muchas posibilidades para dar variedad al movimiento de las entidades. Por ejemplo, se pueden crear manadas y dentro de esas manadas habrían líderes que seguirían a una presa y al mismo tiempo, los otros componentes del grupo seguirían aleatoriamente a un líder o a otro. También se puede representar deflectores como los del video para generar mayor caos. En fin, muchas cosas se pueden hacer con esto.

También tengo que mirar cual es la mejor forma de aplicar la animación. Por ejemplo, ahora mismo se crea un script controller para cada entidad, pero también estuve pensando que éste parece un buen caso de sistema de partículas y tengo entendido que en Particle Flow se pueden especificar scripts que definan la animación de cada partícula y luego asociar a cada partícula el Mesh de la entidad en cuestión.

En fin, a ver qué os parece. Conforme vaya sacando tiempo intentaré ir mejorando el sistema.