Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Megamultitudes

567 views

Published on

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

Megamultitudes

  1. 1. isaac rudomin rudomin@itesm.mx octubre 2008
  2. 2. <ul><li>Se describe un sistema para simular y dibujar megamultitudes en tiempo real utilizando el procesador gráfico. </li></ul>r a c t A b s t
  3. 3. <ul><ul><li>S i m u l a c i ó n d e m u l t i t u d e s </li></ul></ul><ul><li>La simulación de multitudes de personajes basados en agentes tiene aplicaciones varias: </li></ul><ul><li>arquitectura y urbanismo, </li></ul><ul><li>mitigación de desastres, </li></ul><ul><li>cine y videojuegos, </li></ul><ul><li>simulación biológica </li></ul><ul><li>Agenda: </li></ul><ul><li>Simulación en el CPU </li></ul><ul><li>Simulación en el GPU </li></ul><ul><li>Trabajo futuro </li></ul>
  4. 4. <ul><li>Basada en máquinas de estado finito </li></ul><ul><li>Scripting XML e imagenes auxiliares </li></ul><ul><li>Extendida a otras arquitecturas, probabilística, jerárquica, por capas </li></ul><ul><ul><li>S i m u l a c i ó n en el CPU </li></ul></ul>
  5. 5. <ul><li>Scripts que contienen: </li></ul><ul><li>Comportamientos atómicos </li></ul><ul><li>Estados </li></ul><ul><li>Transiciones </li></ul><ul><li>Condicionales </li></ul><ul><li>Variables Internas </li></ul><ul><li>Tipos de agentes </li></ul><ul><li>Comportamientos grupales </li></ul><agenttype name=&quot;boid&quot;> <var name=&quot;closest&quot; type=&quot;user&quot; /> <state name=&quot;init&quot; initial=&quot;true&quot;> <switch> <condition type=&quot;close&quot; class=&quot;user&quot;> <set var=&quot;closest&quot; /> <transition to=&quot;follow_me&quot; /> </condition> </switch> <behavior type=&quot;turn&quot; style=&quot;run&quot; angle=&quot;10&quot; time=&quot;0.5&quot; /> </state> <state name=&quot;follow_me&quot;> <behavior type=&quot;follow&quot; style=&quot;run&quot; target=&quot;closest&quot; speed=&quot;12&quot; time=&quot;0.25&quot; /> </state> </agenttype> <group name=&quot;flock&quot; x=&quot;-20&quot; y=&quot;-20&quot; radius=&quot;40&quot;> <model type=&quot;boid&quot; size=&quot;8&quot; src=&quot;mon.md2&quot; tex=&quot;mon.bmp&quot; /> </group> Follow me: follow User Close <ul><ul><li>Scripts FSM en XML </li></ul></ul>Init: turn
  6. 6. <ul><li>Mapas de mundo </li></ul><ul><li>Mapas de agente </li></ul><ul><ul><li>Imagenes auxiliares </li></ul></ul>
  7. 7. <ul><li>Las FSMs son predecibles y regulares. Un FSM probabilistico tiene probabilidades asociadas a cada transición </li></ul><ul><li><probset cumulative=&quot;true&quot;> </li></ul><ul><li><option prob=&quot;25%&quot;> </li></ul><ul><li><behavior type=&quot;turn&quot; </li></ul><ul><li>style=&quot;run&quot; angle=&quot;20&quot; </li></ul><ul><li>time=&quot;0.5&quot;/> </li></ul><ul><li></option> </li></ul><ul><li><option prob=&quot;25%&quot;> </li></ul><ul><li><behavior type=&quot;turn&quot; </li></ul><ul><li>style=&quot;run&quot; angle=&quot;-20&quot; </li></ul><ul><li>time=&quot;0.5&quot;/> </li></ul><ul><li></option> </li></ul><ul><li><default> </li></ul><ul><li><behavior type=&quot;go&quot; </li></ul><ul><li>style=&quot;run&quot; dist=&quot;5&quot; </li></ul><ul><li>time=&quot;0.5&quot; /> </li></ul><ul><li></default> </li></ul><ul><li></probset> </li></ul><ul><ul><li>Arquitectura probabilística </li></ul></ul>
  8. 8. <ul><ul><li>Arquitectura jerárquica </li></ul></ul><procedure name=&quot;proc1&quot;> <var name=&quot;one“ type=&quot;agent_one&quot; /> <state name=&quot;start“ initial=&quot;true&quot;> ... list of statements <return /> </state> </procedure> <ul><li>Las FSMs jerárquicas llaman a otras sub FSMs para poder realizar tareas comunes, logrando organizar mejor el código e inclusive definiciones recursivas </li></ul><agenttype name=&quot;agent_two&quot;> <var name=&quot;v1&quot; type=&quot;agent_one&quot; /> <state name=&quot;init &quot;initial=&quot;true&quot;> ... list of statements <call proc=&quot;proc1&quot;> <param name=&quot;one” value=&quot;v1“> </call> ... list of statements </state> </agenttype>
  9. 9. <ul><li>En una arquitectura por capas cada capa contiene una tarea independiente que produce una acción a partir de las entradas del ambiente. Capas superiores pueden examinar datos de capas inferiores e inhibir su salida. </li></ul><ul><ul><li>Arquitecturas por capas </li></ul></ul><layerset> <layer name=&quot;bottom&quot;> <takeover cond=&quot;farther&quot; class=&quot;obj1&quot; range=&quot;2&quot; /> <takeover cond=&quot;closer&quot; class=&quot;obj2&quot; range=&quot;5&quot; /> ... list of statements </layer> <layer name=&quot;top&quot;> <takeover cond=&quot;always&quot; /> ... list of statements </layer> </layerset>
  10. 10. <ul><li>Problema clásico resuelto mediante un modelo de capas. </li></ul><ul><li>Un grupo de vehiculos se mandan a un planeta lejano a recolectar muestras pero sin conocer el ambiente. </li></ul><ul><ul><li>Mars Explorers </li></ul></ul>4. Explore 3. Collect samples 2. Take samples to the ship 1. Avoid obstacles
  11. 11. <ul><li>Personajes que compran bebidas, amas de casa con listas de compras aleatorias, ladrones. </li></ul><ul><ul><li>Vas al super o a la comer? </li></ul></ul>
  12. 12. <ul><li>Pieza interactiva con diversas escenas y personajes </li></ul><ul><ul><li>Crowds </li></ul></ul>
  13. 13. <ul><li>Simulación en el CPU es versatil pues el uso de XML para especificar diversas arquitecturas (probabilística, jerárquica y por capas) asi como diversas combinaciones nos da una poderosa herramienta para simular una variedad de comportamientos de personajes en distintas situaciones. </li></ul><ul><ul><li>Conclusiones CPU </li></ul></ul>
  14. 14. <ul><li>Basada en máquinas de estado finito </li></ul><ul><li>Scripting XML e imagenes auxiliares </li></ul><ul><ul><li>S i m u l a c i ó n en el GPU </li></ul></ul>
  15. 15. <ul><li>El GPU se ha convertido en últimas fechas en un procesador extremamente flexible y poderoso </li></ul><ul><li>Programable </li></ul><ul><li>Precisición </li></ul><ul><li>Poder </li></ul><ul><li>Bajos precios </li></ul>P o r q u e G P U ?
  16. 16. <ul><li>Simular y dibujar megamultitudes exige grán poder de cómputo. El actual estado del arte: </li></ul><ul><li>[Reynolds 2006]:10K personajes con Playstation3. </li></ul><ul><li>[Rudomin et al. 2006]: 100K to 1M personajes sencillos simulados y dibujados en el GPU . </li></ul><ul><li>[DeSouza et al. 2007]: simulación de agentes a megaescala en el GPU para simulaciones biológicas </li></ul><ul><li>[ Shopf et al. 2008]: 60K personajes detallados simulados en el GPU mas nuevo de ATI utilizando subdivisión por hardware </li></ul>Estado del arte en simulación de grandes multitudes
  17. 17. <ul><li>Simular y dibujar muchos personajes se vuelve posible haciendo: </li></ul><ul><ul><li>Simulación de comportamiento en el GPU : Autómatas de estado finito , implementados en GLSL </li></ul></ul><ul><ul><li>Un método para especificar scripts en XML y convertirlos automáticamente a GLSL e imágenes auxiliares </li></ul></ul><ul><ul><li>un método de fusión de entradas con expresiones embebidas extienden el rango de simulaciones y comportamientos posibles </li></ul></ul><ul><ul><li>Técnicas de nivel de detalle (LOD) </li></ul></ul>G P U para Megamultitudes
  18. 18. <ul><li>Un enfoque basado en agentes para simular grandes multitudes en el GPU: </li></ul><ul><ul><li>Los comportamientos de agentes individuales se especifican como máquinas de estado se guardan como una imagen (originalmente hecha a mano). </li></ul></ul><ul><ul><li>Imagenes adicionales del mundo (etiquetas) y agentes. </li></ul></ul><ul><ul><li>El comportamiento de cada agente se determina en tiempo real consultando estas imagenes. . </li></ul></ul>G P U y s i m u l a c i ó n
  19. 19. <ul><ul><li>De mundo </li></ul></ul><ul><ul><ul><li>Obstáculos, alturas, </li></ul></ul></ul><ul><ul><ul><li>Gradientes (colisiones, atracción, repulsión) </li></ul></ul></ul><ul><ul><ul><li>Etiquetas, ID de agentes, caminos, moronas </li></ul></ul></ul><ul><ul><li>De agente </li></ul></ul><ul><ul><ul><li>Estado, posición, ID </li></ul></ul></ul><ul><ul><ul><li>Umbrales </li></ul></ul></ul><ul><ul><ul><li>Messages </li></ul></ul></ul>I m á g e n e s A u x i l i a r e s
  20. 20. <ul><li>Dibujamos los personajes de dos maneras: </li></ul><ul><ul><li>impostores para personajes distantes con poco detalle </li></ul></ul><ul><ul><li>instancias para personajes cercanos con mayor detalle </li></ul></ul>Dibujado de multitudes
  21. 21. <ul><li>Inicialmente los mapas y “shaders” para simulación se generaban manualmente </li></ul><ul><li>Se decidió mejor traducir de manera automática scripts FSM codificados en XML que especifican el comportamiento de multitudes de agentes a un conjunto de “shaders” de propósito específico e imagenes </li></ul>Traducción a GLSL
  22. 23. <ul><li>Por omisión, las imagenes auxiliares (de mundo o personajes) se combinan ya sea para la entrada o la salida mediante ponderación (esto lo llamamos fusión de entradas) </li></ul>Fusión <ul><li>Es mejor tener código de “shader” embebido dentro del script XML: permite reemplazar las ponderaciones simples y obtener mayor flexibilidad y poder. Un ejemplo: </li></ul><expression name=&quot;motion&quot; type=&quot;vec2&quot; value=&quot;vec2(cos(rand*6.28),sin(rand*6.28))*(fear+0.1)&quot; />
  23. 24. <ul><li>Sin LOD </li></ul><ul><ul><li>16,384 personajes (de 500 poligonos) a 5.45 fps usando una NV6800. </li></ul></ul><ul><li>Con LOD </li></ul><ul><ul><li>59-60 fps para16,384 personajes, </li></ul></ul><ul><ul><li>29.9-60 fps para 65,536, </li></ul></ul><ul><ul><li>3.1-4.6 fps para 1,048,576. </li></ul></ul>R e s u l t a d o s :
  24. 25. <ul><li>Simular comportamiento en el GPU funciona bien para grandes multitudes (cientos de miles de personajes) formadas de personajes sencillos y con comportamientos especificados mediante FSMs básicas y probabilísticas, en espacios definidos por mapas 2D. </li></ul>C o n c l u s i o n e s GPU
  25. 26. <ul><li>Mejorar calidad de personajes mediante el uso de imagenes de geometría </li></ul><ul><li>Uso de CUDA para lograr acelerar las otras arquitecturas e implementar eficientemente mensajes y mapas 3D </li></ul>Trabajo F u t u r o
  26. 27. <ul><ul><li>Modelos faciales animables para multitudes </li></ul></ul><ul><li>Usamos un grupo pequeño (5 a 7) de imagenes de geometría representativas, además de 3 imagenes auxiliares y parámetros individualizados para modelar y animar de una vez todas las caras de una multitud. </li></ul>
  27. 28. <ul><ul><li>Modelos faciales animables para multitudes </li></ul></ul>
  28. 29. <ul><li>La idea es adaptar a CUDA el trabajo que se hizo para implementar en CPU la traducción del XML a C++ de </li></ul><ul><ul><li>modelos jerárquicos </li></ul></ul><ul><ul><li>modelos por capas </li></ul></ul><ul><li>Manteniendo de la implementación que se hizo en el GPU mediante GLSL </li></ul><ul><ul><li>el esquema de preprocesar el XML para generar kernels de CUDA en manera semejante a como se generaron shaders de GLSL </li></ul></ul><ul><ul><li>el esquema de dibujo que permite las velocidades </li></ul></ul><ul><li>Agregar de manera eficiente capacidades como </li></ul><ul><ul><li>mensajes entre agentes </li></ul></ul><ul><ul><li>mapas 3D </li></ul></ul><ul><li>Si se hace bien debiera funcionar también este enfoque para generar kernels de OpenCL o compute shaders de DirectX11. </li></ul>CUDA-Crowds
  29. 30. <ul><li>Reynolds et al 2006: Big Fast Crowds on PS3 http://portal.acm.org/citation.cfm?id=1183333 </li></ul><ul><li>Rudomin et al 2006: Large Crowds in the GPU: http://rudomin.cem.itesm.mx/~rudomin/shader-agents.htm </li></ul><ul><li>De Souza et al 2007: Mega-Scale Interactive Agent-Based Model Simulations on the GPU: http://www.me.mtu.edu/~rmdsouza/ABM_GPU.html </li></ul><ul><li>Shopf et al 2008: March of the Froblins http://ati.amd.com/developer/SIGGRAPH08Chapter03-SBOT-March_of_The_Froblins.pdf </li></ul>Referencias

×