1 Archivos adjunto(s)
[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.
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=23982
[maxscript] steering behaviors ia
[maxscript] steering behaviors ia
Vaya que caña, está genial, queremos ver más avances.
[maxscript] steering behaviors ia
Tío half, da gusto seguir tus mensajes.
[maxscript] steering behaviors ia
Esta genial. 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.
Definitivamente, tengo que darle un poco de caña al Particle Flow.
1 Archivos adjunto(s)
[maxscript] steering behaviors ia
Gracias. Pongo otro video. He reestructurado algo el código de forma que sea más sencillo agregar más entidades. Ahora se pueden ver 16 entidades, dos presas (dummies) y dos puntos peligrosos de los que las entidades intentaran huir (space Warp de tipo Gravity). En este caso 8 de ellas persiguen a uno de los dummies y huyen de uno de los space warps y la otra mitad va al otro dummie y huye del otro space Warp. De esta forma hay más variedad en la simulación. De todas formas, veréis que llega un momento en que algunas entidades van muy juntas. Esto es porque no he agregado ningún método para que vayan en formación, pero haberlo hay. Se puede crear un sistema para indicar una distancia mínima de separación y algunas cosas más.
Aprovecho para lanzar una duda que tengo. Como ya he dicho en otro hilo, cuando, por ejemplo, tienes un objeto y le metes un script controller, si en dicho script tienes que hacer referencia al propio objeto para, por ejemplo, recoger su posición, te da un error tipo ilegal self-reference, o sea, no deja llamar al objeto poseedor del script dentro del propio script. Entonces se me ocurrió acceder a la posición del objeto en el frame anterior con la clausula at time (f - 1) y efectivamente eso no lanza el error de ilegal self-reference sino que directamente el 3ds Max se sale sin decir ni pio.
¿Y todo esto a cuento de qué? Pues resulta que quiero calcular la transformación de los objetos de forma diferencial en lugar de paramétricamente. Es decir, quiero calcular las cosas basándome en el valor en el frame anterior en lugar del valor en el primer frame.
En definitiva, a ver si alguno se ha encontrado con este problema y le ha dado una solución. Ahora mismo yo lo estoy solventando creando un dummie que siga a todas partes al objeto en cuestión, de forma que en el script controller accedo a las propiedades del dummie en lugar de las del objeto, pero como son las mismas me vale. Pero me parece demasiado engorroso tener que manejar dos objetos cuando tal vez (con un poco de suerte) con uno bastaría. Gracias.
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=24022
[maxscript] steering behaviors ia
Ni idea sobre la duda (no entiendo chino mandarín), sólo quería dejar un, esta impresionante lo que llevas half. Saludos.
[maxscript] steering behaviors ia
Los videos están muy bien, para animación de masas debe ser estupendo, en cuanto al problema con Maxscript no tengo ni zorra, pero creo recordar hacer leído en algún mensaje algo al respecto, y en vez de obtener los valores del frame anterior lo que hacían era obtener la posición a partir de la curva de la animación.
Posdata: no me hagas mucho caso que (como ya dije) yo de Maxscript no tengo idea y a lo mejor lo que comenté antes no se puede hacer.
[maxscript] steering behaviors ia
Hola. Que guay. Yo tampoco tengo ni idea de Maxscript, pero se me ocurre una ñapa del tipo enlazar un nulo y referenciar a la posición del nulo en vez de al del objeto que tenga el scriptcontroller.
Lo mismo es una tontería y no se puede hacer, o que se yo, es lo que se me ha ocurrido.
Feliz año.