isaac  rudomin rudomin@itesm.mx  octubre 2008
<ul><li>Se describe un sistema para simular y dibujar megamultitudes en tiempo real   utilizando el procesador gráfico.  <...
<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...
<ul><li>Basada en máquinas de estado finito  </li></ul><ul><li>Scripting XML e imagenes auxiliares </li></ul><ul><li>Exten...
<ul><li>Scripts que contienen: </li></ul><ul><li>Comportamientos atómicos </li></ul><ul><li>Estados </li></ul><ul><li>Tran...
<ul><li>Mapas de mundo </li></ul><ul><li>Mapas de agente </li></ul><ul><ul><li>Imagenes auxiliares </li></ul></ul>
<ul><li>Las FSMs son predecibles y regulares. Un  FSM probabilistico tiene probabilidades asociadas a cada transición </li...
<ul><ul><li>Arquitectura jerárquica </li></ul></ul><procedure name=&quot;proc1&quot;> <var name=&quot;one“ type=&quot;agen...
<ul><li>En una  arquitectura por capas  cada capa contiene una tarea independiente que produce una acción a partir de las ...
<ul><li>Problema clásico resuelto mediante un modelo de capas. </li></ul><ul><li>Un grupo de vehiculos se mandan a un plan...
<ul><li>Personajes que compran bebidas, amas de casa con listas de compras aleatorias, ladrones. </li></ul><ul><ul><li>Vas...
<ul><li>Pieza interactiva con diversas escenas y personajes </li></ul><ul><ul><li>Crowds </li></ul></ul>
<ul><li>Simulación en el CPU es versatil pues  el uso de XML para especificar diversas arquitecturas (probabilística, jerá...
<ul><li>Basada en máquinas de estado finito  </li></ul><ul><li>Scripting XML e imagenes auxiliares </li></ul><ul><ul><li>S...
<ul><li>El  GPU se ha convertido en últimas fechas en un procesador extremamente flexible y poderoso </li></ul><ul><li>Pro...
<ul><li>Simular y dibujar megamultitudes exige grán poder de cómputo. El actual estado del arte: </li></ul><ul><li>[Reynol...
<ul><li>Simular y dibujar muchos personajes se vuelve posible haciendo: </li></ul><ul><ul><li>Simulación de comportamiento...
<ul><li>Un enfoque  basado en agentes  para simular grandes multitudes en el GPU: </li></ul><ul><ul><li>Los comportamiento...
<ul><ul><li>De mundo </li></ul></ul><ul><ul><ul><li>Obstáculos, alturas,  </li></ul></ul></ul><ul><ul><ul><li>Gradientes (...
<ul><li>Dibujamos los personajes de dos maneras:  </li></ul><ul><ul><li>impostores  para personajes distantes con poco det...
<ul><li>Inicialmente los mapas y “shaders” para simulación se generaban manualmente </li></ul><ul><li>Se decidió mejor tra...
 
<ul><li>Por omisión, las  imagenes auxiliares (de mundo o personajes) se combinan ya sea para la entrada o la salida media...
<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>Simular comportamiento en el GPU funciona bien para grandes multitudes (cientos de miles de personajes) formadas d...
<ul><li>Mejorar calidad de personajes  mediante el uso de imagenes de geometría </li></ul><ul><li>Uso de CUDA para lograr ...
<ul><ul><li>Modelos faciales animables para multitudes </li></ul></ul><ul><li>Usamos un grupo pequeño (5 a 7) de imagenes ...
<ul><ul><li>Modelos faciales animables para multitudes </li></ul></ul>
<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><li>Reynolds et al 2006: Big Fast Crowds on PS3  http://portal.acm.org/citation.cfm?id=1183333   </li></ul><ul><li>Rud...
Upcoming SlideShare
Loading in...5
×

Megamultitudes

281

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
281
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×