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.
- 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