Netzmanipulation auf GPU gegen CPU

9

Nur ein bisschen neugierig - wo führen Sie Mesh-Manipulationen auf der CPU oder im Shader durch? Ich habe alles auf der CPU gemacht und ein Freund schlug vor, die Dinge auf die GPU-Seite zu verschieben.

Wenn Sie Dinge wie Knochenanimationen auf der GPU machen, wie erhalten Sie das Netz zurück? (da ich Kollisionserkennung mache ...)

AnonAnon
quelle

Antworten:

13

Dies geschieht normalerweise auf der GPU, aber es gibt Kompromisse für beide und es liegt an Ihnen, zu entscheiden, welche für Sie am besten geeignet ist.

Wenn Sie die Manipulation an der GPU durchführen, müssen Sie die Netzdaten nur einmal senden. Dann können Sie einfach die Matrixtransformationen senden, um sie zu verformen. Dies ist großartig, da dadurch die zwischen CPU-> GPU erforderliche Bandbreite erheblich reduziert wird. Dies bedeutet auch, dass Sie nur eine Kopie des Netzes auf die GPU hochladen und Transformationen für viele verschiedene Instanzen des Netzes anwenden können. Es ist jedoch schwieriger, "netzgenaue" Kollisionen zu haben. Da die Transformationen auf der GPU durchgeführt werden, stehen sie auf der CPU nicht zum Testen zur Verfügung.

Wenn Sie die CPU manipulieren, haben Sie Zugriff auf das transformierte Netz. Sie können auf alles zugreifen, was Sie darüber wissen müssen. Dies bedeutet jedoch, dass Sie das gesamte Netz in jedem Frame auf die GPU hochladen müssen. Dies bedeutet auch, dass Sie für jede Instanz dieses Netzes ein transformiertes Netz hochladen müssen. Zusammenfassend ist hier eine nicht annähernd vollständige Liste der Vor- und Nachteile.

  • Vorteile für GPU

    • Laden Sie die Netzdaten einmal hoch
    • Transformieren Sie es für mehrere Instanzen
    • Sie müssen nur die Matrixtransformationen senden
    • Die GPU ist sehr gut darin, solche Dinge zu parallelisieren
  • Nachteile für GPU

    • Transformierte Netze stehen nicht zum Testen auf der CPU zur Verfügung
  • Vorteile für die CPU

    • Transformierte Netze stehen für Kollisionstests und alles andere zur Verfügung.
  • Nachteile für die CPU

    • Sie müssen das gesamte transformierte Netz für jeden Frame hochladen
    • Sie müssen für jede Instanz des Netzes ein gesamtes Netz hochladen

Es gibt jedoch Möglichkeiten, die Nachteile der GPU zu umgehen.

  • Keine netzgenauen Kollisionen . Verwenden Sie etwas "Nah genug" wie einen Begrenzungsrahmen für das gesamte Netz oder haben Sie Begrenzungsrahmen für jeden Knochen des Netzes. Das Folgende wird für die GPU-Transformationen für das Netz und für die CPU-Transformationen für achsenausgerichtete Begrenzungsrahmen verwendet, die das Netz darstellen. Sie könnten noch genauere Grenzen erhalten, wenn Sie Nicht-AABBs verwenden.

Koboldknochen

  • Transformieren Sie eine Kopie des Netzes auf der CPU genau dann, wenn netzgenaue Kollisionen erforderlich sind . Nachdem eine Bounding-Box-Kollision true zurückgegeben hat, transformieren Sie ein Netz so, dass es mit den Transformationen auf der GPU übereinstimmt, und vergleichen Sie die Kollisionen damit, um genauere Kollisionsdaten zu erhalten.

Alles in allem nehme ich an, Sie können sehen, warum es üblicher ist, auf der GPU zu transformieren

MichaelHouse
quelle
1
Ist es aus Neugier tatsächlich praktisch, Netze auf der CPU zu transformieren, wenn man die Komplexität der Netze in modernen Spielen, die Leistung und die Mehrkernfähigkeiten einer modernen CPU und die anderen Aufgaben berücksichtigt, die eine CPU erfüllen muss? Ist das Hochladen auf die GPU auch so langsam, dass diese Idee nicht einmal auf den Weg gebracht wird?
R4D4
Es würde vom Spiel abhängen, aber es ist normalerweise nicht praktisch für Spiele mit einer moderaten Komplexität. Wenn es so einfach ist, die Transformationen auf der GPU durchzuführen, ist es schwierig, einen Grund zu finden, um die zusätzlichen Ressourcenanforderungen für die Durchführung der Transformationen auf der CPU zu rechtfertigen. Das Problem besteht eher darin, dass das transformierte Netz in jedem Frame an die GPU gesendet wird, was schnell teuer wird. Wie so oft bei Software ist es Sache des Entwicklers, die Entscheidung zwischen Komplexität und Leistung zu treffen.
MichaelHouse