Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Articole » Programare » GPU/CUDA Collision Detection

Articol:
GPU/CUDA Collision Detection
Autor: Pintea, postat pe 28 Feb 2009 10:04:43
Versiune printabilã
Salut !

Data fiind lipsa de activitate constructiva pe forum (mai ales de cand nu mai posteaza Dark...) am zis sa pun eu ceva ce am facut recent.

Numele spune tot.
Am modificat aplicatia prezentata la GDROCon (unde facusem rigid body sim) si am modificat collision detection sa mearga pe GPU.

Puteti downloada prezentarea de aici (e facuta foarte simplist, in vreo 2 zile, si trebuia prezentata unora care nu au treaba cu asa ceva):
http://www.riftgame.com/download/GPU_CollisionDetection.zip
Demoul inca nu l-am pus, dar cand e finalizat o sa-l urc si pe el.

Ideea e destul de basic, se foloseste la baza tehnica de face counting cu stencil bufferul (ca la stencil shadows de ex) pentru verificarea intersectiilor edgeurilor cu fetele obiectelor (ale caror id-uri sunt codate in culoare). Dupa care se descarca imaginea pe CPU si se proceseaza raspunsul la coliziuni (aici intra in scena CUDA, pentru accelerarea procesului de readback).

Castigul de performanta este extrem de mare si creste cu atat mai mult cu cat creste numarul obiectelor din scena.

Daca o sa fac vreun articol mai serios trebuie sa-mi pun si Vista, fiindca se pot face niste treburi foarte misto cu geometry shaders.

Cam atat, enjoy, iar daca aveti vreo idee constructiva please share.

Comentarii pentru acest articol:



Pagina 2 din 2 [ 1 | 2 ]

Mesaj Info autor
    Postat la 18 Aug 2009 14:40:49    Subiect: Re:
Pintea info:

Pintea:

Mishu a scris:

Pai si putem sa vedem si noi articolul mai serios?

La ce te referi cand zici ca fac confuzie intre simulare fizica si detectia coliziunii? Nu sunt expert in CD, dar stiu ca e foarte legata de fizica. Mi s-a parut neobisnuita ideea cu numarat intersectiile - ti-am zis n-am apucat sa citesc cu atentie. De obicei solutiile de CD pe care le stiu eu se bazeaza pe sweep and prune, ierarhii de bounding volumes si GJK de exemplu.


Sper sa nu uit sa-l urc deseara undeva.

Daca vrei sa simulezi miscarea corpurilor/particulelor intr-adevar ai nevoie de coliziuni, dar sunt probleme diferite cu rezolvari diferite, nu conteaza ca au legatura una cu alta.
Pentru partea de "miscare" arunci niste formule newtoniene, iar pentru partea de coliziune poti aplica ce metoda doresti pentru a afla punctele de contact intre corpuri.

Metoda pe care am prezentat-o e o metoda in spatiul-ecran, adica detecteaza coliziunile folosind imaginea finala de pe ecran : verifica ce pixeli ai unui obiect se afla in interiorul altui obiect.

Ce spui tu cu bounding volumes sunt metode in spatiul obiect, verifica obiectele doua cate doua folosind metode de aproximare gen bounding volumes.



Status:
Înregistrat pe:
05 May 2007 14:50:45
Vârsta: 28 ani
Mesaje: 300
Locatie:
Programator

 
    Postat la 21 Aug 2009 00:50:22    Subiect: < fara subiect >
Mishu info:

Mishu:

Ok, m-am prins. Ai dreptate, metoda ta n-are nimic de-a face cu coliziunile in spatiul obiect. M-am mai uitat o data peste prezentare si pare chiar interesant ce ai facut acolo - tot respectul.

O intrebare insa: daca detectia are loc in spatiu ecran ce faci cu obiectele care nu se deseneaza, din spatele camerei? Si apoi la ce folosesti metoda asta daca nu pt raspuns fizic? Chiar scria spre sfarsit ca vrei sa faci simulare totala pe GPU. Din cate inteleg eu, obiectele care nu sunt in volumul de vizualizare pur si simplu nu sunt tratate, ceea nu prea e corect din punct de vedere fizic. Si inca un lucru: cum extinzi algoritmul sa calculezi informatii de contact (normala, adancime de penetrare)?

Oricum, sunt curios in legatura cu articolul mai nou. Poate ma insel eu si chiar e o metoda mai buna de detectie a coliziunii. Sunt doar curios. Pana la urma metoda e limitata numai la GPU (pipeline grafic)? Sau poate fi extinsa si la multicore, PS3, Larabee?

Am gasit cu greu si prezentarea despre rigid body physics. Foarte tare demo-ul! M-au impresionat mai ales coliziunile cu obiecte concave. N-am putut insa sa deduc din prezentare prea multe despre tehnicile folosite. Ziceai ceva si de triunghiuri si de volume de delimitare: pana la urma ce-ai folosit? Ai facut teste triunghi-triunghi? Ai folosit GJK sau ce altceva? Ce-ai ales pt bounding volumes: OBB, AABB sau sfere?

Apoi n-am inteles prea bine nici ce faci in partea de fizica. Cum calculezi fortele de contact si frecare? Rezolvi LCP? Cum? De unde te-ai documentat?

Acuma raspunzi daca ai chef si nu te deranjeaza ca intreb. Faza e ca eu am descoperit recent site-ul asta si ziceam ca poate mai aflu cate ceva nou si mai facem un schimb de idei.

Numai bine.


Status:
Înregistrat pe:
18 Aug 2009 12:37:02
Vârsta: 28 ani
Mesaje: 3
Locatie:
Programator

 
    Postat la 24 Aug 2009 19:45:16    Subiect: Re:
Pintea info:

Pintea:

Mishu a scris:

O intrebare insa: daca detectia are loc in spatiu ecran ce faci cu obiectele care nu se deseneaza, din spatele camerei? Si apoi la ce folosesti metoda asta daca nu pt raspuns fizic? Chiar scria spre sfarsit ca vrei sa faci simulare totala pe GPU. Din cate inteleg eu, obiectele care nu sunt in volumul de vizualizare pur si simplu nu sunt tratate, ceea nu prea e corect din punct de vedere fizic. Si inca un lucru: cum extinzi algoritmul sa calculezi informatii de contact (normala, adancime de penetrare)?


Nu am scris acolo, dar pentru coliziunile offscreen trebuie randate obiectele din alta perspectiva ce cuprinde acele obiecte, dar chiar si pentru obiectele din ecran ar trebui "asezata" camera cat mai optim astfel incat sa ai precizie cat mai mare in depth.

Mishu a scris:

Oricum, sunt curios in legatura cu articolul mai nou. Poate ma insel eu si chiar e o metoda mai buna de detectie a coliziunii. Sunt doar curios. Pana la urma metoda e limitata numai la GPU (pipeline grafic)? Sau poate fi extinsa si la multicore, PS3, Larabee?


Ca orice metoda, se potriveste mai bine pe unele aplicatii decat pe altele. Nu pot spune ca merge grozav pentru un shooter de exemplu...dar pentru un rts e aproape ideal.
Fiind dependent de stencil, depinde de API, desi poate fi emulat algoritmul si in alte moduri.

Mishu a scris:

Ziceai ceva si de triunghiuri si de volume de delimitare: pana la urma ce-ai folosit? Ai facut teste triunghi-triunghi? Ai folosit GJK sau ce altceva? Ce-ai ales pt bounding volumes: OBB, AABB sau sfere?
Apoi n-am inteles prea bine nici ce faci in partea de fizica. Cum calculezi fortele de contact si frecare? Rezolvi LCP? Cum? De unde te-ai documentat?


Pentru acel demo am implementat un fel de brute force collision, folosind AABB si ray vs triangle tests parca...

pfff ce de intrebari Smile raspund cand mai am timp...



Status:
Înregistrat pe:
05 May 2007 14:50:45
Vârsta: 28 ani
Mesaje: 300
Locatie:
Programator

 

Pagina 2 din 2 [ 1 | 2 ]


Server time: 17:10:14 10.02.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2011 Copyright 7thFACTOR Entertainment - All rights reserved