1 / 70

Tractament de col·lisions en temps real

Tractament de col·lisions en temps real. Objectius. Donar un model de tractament de col·lisions independent de l’aplicació Tractar les col·lisions en menys de 20 milisegons. Temes tractats. Model general pel tractament de col·lisions Gravetat Error de precisió Exemple d’una aplicació real.

derry
Download Presentation

Tractament de col·lisions en temps real

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tractament de col·lisions en temps real

  2. Objectius • Donar un model de tractament de col·lisions independent de l’aplicació • Tractar les col·lisions en menys de 20 milisegons

  3. Temes tractats • Model general pel tractament de col·lisions • Gravetat • Error de precisió • Exemple d’una aplicació real

  4. Components d’un sistema de tractament de col·lisions • Algoritme de detecció • Algoritme de reacció

  5. Detecció de col·lisions

  6. Un algoritme de detecció bàsic 12345678910111213 Aplicació(){ per ( t = t0 fins a t1 en increments de trep ) { obté dades dels dispositius d’entrada actualitza el comportament dels objectes per t fes { infoCol = detecta( t, objectes ) si ( infoCol conté col·lisions ) resposta a les col·lisions } mentre ( infoCol contingui col·lisions ) representa cada objecte de objectes per t }}

  7. Un algoritme de detecció bàsic 141516171819202122 /* La variable tant persisteix d’una crida a l’altre. *//* Inicialment tant = t0. */detecta( tact, objectes ){ per ( t = tant fina a tact en increments de tdet ) { mou objectes a la seva posició per t per ( cada objecte Oi de objectes ) { per ( cada objecte Oj de {objectes – Oi} ) si ( Oi i Oj interseccionen ) afegir Oi i Oj a infoCol }

  8. Un algoritme de detecció bàsic 2324252627282930 si ( infoCol conté col·lisions ) {tant = t retorna ( infoCol ) } }tant = tact retorna ( infoCol )}

  9. Problemes de l’algoritme bàsic • Comprovar les col·lisions a només certs instants de l’interval de temps (fixed-timestep weakness) • Comprovar les interseccions entre totes les parelles d’objectes (all-pairs weakness) • Determinar si les superfícies de dos objectes interseccionen (pair-processing weakness)

  10. Fixed-timestep weakness • Problema: • Algunes col·lisions poden no detectar-se • Solucions: • Increment de temps adaptable • Bounding de moviment

  11. Bounding de moviment • Engloba tot l’espai pel que passa l’objecte durant l’interval de temps • Si dos objectes col·lisionen els seus boundings de moviment interseccionaran

  12. Bounding de moviment • Avantatges: • Es detecten col·lisions en tot l’interval de temps • Amb una sola iteració es comprova tot l’interval de temps • Requeriments: • S’ha de generar ràpidament • El test d’intersecció entre boundings ha de ser ràpid

  13. Bounding de moviment • Conté regions que no corresponen a l’espai pel que passa l’objecte • Problema: • Es pot detectar una falsa col·lisió • Solució: • Posterior càlcul exacte de la col·lisió

  14. Bounding de moviment • No guarda la informació temporal • Problema: • Es pot detectar una falsa col·lisió • Solucions: • Posterior càlcul exacte de la col·lisió • Bounding espacio-temporal

  15. Bounding de moviment • Un objecte varia el seu comportament en col·lisionar • Problema: • No es detecten les possibles noves col·lisions • Solució: • Recalcular el bounding de moviment

  16. All-pairs weakness • Problema: • Es realitzen moltes comprovacions d’intersecció • Solució: • Organització espacial • Bounding de moviment

  17. Pair-processing weakness • Problema: • Comprovar la intersecció entre les superfícies de dos objectes és costós • Solució: • Aproximar l’objecte amb un bounding

  18. Bounding d’objecte • Problema: • El món visual i el de les col·lisions són diferents • Solució: • Arbre de boundings

  19. Sopa de polígons • Algunes aplicacions consten d’un món estàtic de polígons • Cada polígon es considera com un objecte estàtic • El bounding d’objecte d’un polígon és el mateix polígon

  20. Tipus de boundings més comuns

  21. Boundings tractats • Esfera (bounding sphere) • Caixa alineada al món (axis aligned bounding box – AABB) • Caixa orientada (oriented bounding box – OBB)

  22. Necessitats d’un bounding de moviment • Rapidesa de creació • Màxima aproximació a l’espai pel que passa l’objecte • Eficiència en l’algoritme d’intersecció

  23. Esfera • Punts forts: • Creació • Algoritme d’intersecció • Punts febles: • Aproximació

  24. Caixa alineada al món • Punts forts: • Creació • Algoritme d’intersecció • Punts febles: • Aproximació

  25. Caixa orientada • Punts forts: • Aproximació • Punts febles: • Algoritme d’intersecció

  26. Necessitats d’un bounding d’objecte • Rapidesa d’actualització • Màxima aproximació a la forma de l’objecte • Eficiència en l’algoritme d’intersecció

  27. Esfera • Punts forts: • Actualització • Algoritme d’intersecció • Punts febles: • Aproximació

  28. Caixa alineada al món • Punts forts: • Algoritme d’intersecció • Punts febles: • Actualització • Solució: caixa de mida fixa • Aproximació

  29. Caixa orientada • Punts forts: • Aproximació • Punts febles: • Algoritme d’intersecció

  30. Arbres de boundings • Aproximen millor la forma de l’objecte • Es pot interrompre l’algoritme d’intersecció en funció del temps de càlcul disponible • Dos tipus: • El mateix bounding per tots els nivells • Un bounding més senzill a l’arrel

  31. Reacció a les col·lisions

  32. Procediment de la reacció • Què cal fer en detectar una col·lisió? • Variar el comportament de l’objecte • Detectar noves col·lisions per la resta de l’interval de temps • Com? • Aplicant lleis de la dinàmica • Simulant aquestes lleis

  33. Reaccions simulades • Lliscament amb fricció • Rebot amb esmorteïment

  34. Lliscament amb fricció • Trobar el pla de col·lisió • Projectar la velocitat excedent sobre el pla de col·lisió • Escurçar el vector projectat per un factor de fricció • Vector resultant = vector de lliscament

  35. Rebot amb esmorteïment • Trobar el pla de col·lisió • Reflectir la velocitat excedent sobre el pla de col·lisió • Escurçar el vector reflectit per un factor d’esmorteïment • Vector resultant = vector de rebot

  36. Gravetat

  37. Simulació • Com a força constant • Com a vector afegit al vector de velocitat

  38. Aplicació del vector de gravetat • Dos mètodes: • Aplicar la gravetat sobre el vector de velocitat • Aplicar la gravetat com a vector de velocitat en una segona iteració

  39. Error de precisió

  40. Problema • Els ordinadors treballen amb números finits • Algunes operacions poden donar un resultat erroni • El sistema de tractament de col·lisions pot fallà

  41. Exemple d’operació errònia 1234 si ( a > 0 i b > 0 ) { c = a · b d = 1 / c} • Situació: • Límit de precisió = 3 decimals; a = 0.012; b = 0.025 • Resultat de l’operació c = a·b: • Sobre el paper: c = 0.0003 • En l’ordinador: c = 0 • Solució: • Comparar a i b amb un valor EPSILON proper al zero

  42. Exemple d’una aplicació real Sistema de col·lisions de la versió beta del motor OpenDoor

  43. Què suporta el motor • Un món estàtic de polígons • Un personatge explorant el món

  44. Decisions preses • Sistema de visualització basat en el portal rendering: • Organització de la geometria en habitacions • Impera la rapidesa del tractament de col·lisions en front de la precisió: • Personatge aproximat amb una esfera • Pocs objectes en un mateix lloc: • Caixa alineada al món com a bounding de moviment

  45. Algoritme de tractament de col·lisions 1234567891011 Joc(){ per ( t = t0 fins a  en increments de trep ) { obté dades dels dispositius d’entrada actualitza el comportament del personatge per t velocitat = velocitat del personatge per ttracta( personatge, velocitat ) tracta( personatge, gravetat ) representa el món per t}}

  46. Algoritme de tractament de col·lisions 121314151617181920 tracta( objecte, velocitat ){ fes {infoCol = detecta( objecte, velocitat ) actualitza la posició de objecte segons infoColsi ( infoCol conté col·lisions )velocitat = respon( infoCol, objecte, velocitat ) } mentre ( infoCol contingui col·lisions )}

  47. Algoritme de detecció 123456789 detecta( objecte, velocitat ){boundObj = bounding de objecte boundMov = genera_bound_mov( boundObj, velocitat )polsPot = obté_pols_potencials( boundObj, boundMov )cols = troba_col·lisions( boundObj, velocitat, polsPot )infoCol = primera_col·lisió( cols ) retorna ( infoCol )}

  48. Generació del bounding de moviment • Cal trobar els 6 plans que formen la caixa: • Es resta el radi a les components x, y i z més petites dels punts origen i destí • Es suma el radi a les components majors

  49. Generació del bounding de moviment 123456789101112 genera_bound_mov( esfera, velocitat ){origen = posició de esfera destí = origen + velocitat radi = radi de esfera caixa.xmín = mínim( origen.x, destí.x ) – radicaixa.xmàx = màxim( origen.x, destí.x ) + radicaixa.ymín = mínim( origen.y, destí.y ) – radicaixa.ymàx = màxim( origen.y, destí.y ) + radicaixa.zmín = mínim( origen.z, destí.z ) – radicaixa.zmàx = màxim( origen.z, destí.z ) + radi}

  50. Obtenció dels polígons potencials • S’aprofita l’organització en habitacions: • Només es comproven interseccions amb els polígons de les habitacions per on passa el personatge • Bounding de moviment: • Es descarten ràpidament la majoria dels polígons

More Related