Zdarza się to często na GPU, ale są obie kompromisy i to Ty decydujesz, który będzie dla Ciebie najlepszy.
Wykonanie manipulacji na GPU oznacza, że wystarczy wysłać dane siatki tylko raz, a następnie wystarczy wysłać transformacje macierzy, aby je zdeformować. Jest to świetne, ponieważ znacznie zmniejsza wymaganą przepustowość między CPU-> GPU. Oznacza to również, że możesz przesłać tylko jedną kopię siatki do GPU i zastosować transformacje dla wielu różnych instancji siatki. Jednak trudniej jest mieć kolizje o „dokładności siatki”. Ponieważ transformacje są wykonywane na GPU, nie masz ich dostępnych do przetestowania na CPU.
Robienie manipulacji na CPU oznacza, że masz dostęp do przekształconej siatki. Możesz uzyskać dostęp do wszystkiego, co musisz o tym wiedzieć. Oznacza to jednak, że musisz załadować całą siatkę do GPU w każdej ramce. Oznacza to również, że musisz przesłać przekształconą siatkę dla każdego wystąpienia tej siatki. Podsumowując, tutaj nie ma prawie wyczerpującej listy zalet i wad.
Plusy dla GPU
- Prześlij dane siatki raz
- Przekształć dla wielu instancji
- Wystarczy wysłać transformacje macierzowe
- Procesor graficzny bardzo dobrze radzi sobie z równoległymi tego typu rzeczami
Wady dla GPU
- Przekształcone siatki nie są dostępne do testowania na procesorze
Plusy dla procesora
- Przekształcone siatki są dostępne do testów zderzeniowych i wszystkiego, co potrzebne.
Wady dla procesora
- Konieczne jest przesłanie całej przekształconej siatki do każdej ramki
- Musisz załadować całą siatkę dla każdego wystąpienia siatki
Istnieją jednak sposoby obejścia wad GPU.
- Nie kolizje z siatką . Użyj czegoś „wystarczająco blisko”, takiego jak obwiednia dla całej siatki lub miej obwiednie dla każdej kości siatki. Poniższe informacje dotyczą transformacji GPU dla siatki oraz transformacji CPU dla wyrównanych do osi ramek ograniczających reprezentujących siatkę. Możesz uzyskać jeszcze dokładniejsze granice, używając nie-AABB.
- Przekształć kopię siatki w CPU, jeśli i tylko wtedy, gdy potrzebne są dokładne kolizje siatki . Po tym, jak kolizja ramki granicznej zwróciła wartość true, przekształć siatkę, aby dopasować ją do transformacji na GPU, a następnie sprawdź kolizje z tą, aby uzyskać dokładniejsze dane kolizji.
Podsumowując, zakładam, że możesz zobaczyć, dlaczego transformacja na GPU jest bardziej powszechna