Manipolazione mesh su GPU vs CPU


9

Solo un po 'curioso: dove esegui le manipolazioni della mesh, sulla CPU o nello shader? Ho fatto tutto sulla CPU e un amico mi ha suggerito di spostare le cose sul lato GPU.

Se stai facendo cose come le animazioni ossee ... sulla GPU, come puoi recuperare la maglia? (dal momento che sto facendo il rilevamento delle collisioni ...)

Risposte:


13

Questo accade di solito sulla GPU, ma ci sono dei compromessi per entrambi e spetta a te decidere quale funzionerà meglio per te.

Fare la manipolazione sulla GPU significa che devi solo inviare i dati mesh una volta, quindi puoi semplicemente inviare le trasformazioni della matrice per deformarli. Questo è fantastico perché riduce notevolmente la larghezza di banda richiesta tra CPU-> GPU. Significa anche che è possibile caricare solo una copia della mesh nella GPU e applicare trasformazioni per molte diverse istanze della mesh. Tuttavia, è più difficile avere collisioni "mesh accurate". Poiché le trasformazioni vengono eseguite sulla GPU, non sono disponibili per il test sulla CPU.

Effettuare la manipolazione sulla CPU significa avere accesso alla mesh trasformata. Puoi accedere a tutto ciò che devi sapere al riguardo. Tuttavia, significa che è necessario caricare l'intera mesh nella GPU ogni frame. Significa anche che devi caricare una mesh trasformata per ogni istanza di quella mesh. In breve, ecco un elenco esaustivo di pro e contro.

  • Pro per GPU

    • Carica i dati mesh una volta
    • Trasformalo per più istanze
    • Devono solo inviare le trasformazioni di matrice
    • La GPU è molto brava a parallelizzare questo tipo di cose
  • Contro per GPU

    • Le mesh trasformate non sono disponibili per i test su CPU
  • Pro per CPU

    • Le mesh trasformate sono disponibili per i test di collisione e qualsiasi altra cosa necessaria.
  • Contro per CPU

    • È necessario caricare l'intera mesh trasformata per ogni frame
    • È necessario caricare un'intera mesh per ogni istanza della mesh

Tuttavia, ci sono modi per aggirare i contro della GPU.

  • Non avere collisioni accurate con mesh . Usa qualcosa di "abbastanza vicino" come una scatola di delimitazione per l' intera maglia o dispone di scatole di delimitazione per ogni osso della maglia. Di seguito viene utilizzato sulle trasformazioni GPU per la mesh e sulle trasformazioni CPU per i riquadri di delimitazione allineati agli assi che rappresentano la mesh. È possibile ottenere limiti ancora più precisi utilizzando non AABB.

ossa di goblin

  • Trasforma una copia della mesh nella CPU se e solo se sono necessarie collisioni accurate della mesh . Dopo che una collisione del bounding box è tornata vera, trasforma una mesh in modo che corrisponda alle trasformazioni sulla GPU, quindi verifica le collisioni con quelle per ottenere dati più precisi sulla collisione.

Tutto sommato suppongo che tu possa vedere perché è più comune trasformarsi sulla GPU


1
Appena per curiosità, è effettivamente pratico trasformare le mesh nella CPU quando si tiene conto della complessità delle mesh nei giochi moderni, della potenza e delle capacità multi-core di una CPU moderna e degli altri compiti che una CPU deve svolgere? Inoltre, il caricamento sulla GPU è così lento che questa idea non sarebbe nemmeno decollata?
R4D4,

Dipenderebbe dal gioco, ma di solito non è pratico per i giochi al di sopra di una moderata complessità. Quando esiste una scelta così semplice di eseguire le trasformazioni sulla GPU, è difficile trovare un motivo per giustificare i requisiti di risorse aggiuntive per eseguire le trasformazioni sulla CPU. Il problema è più legato all'invio della mesh trasformata alla GPU ad ogni frame, che diventa costoso velocemente. Come spesso accade con il software, lo sviluppatore deve decidere tra complessità e prestazioni.
MichaelHouse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.