/ / Przechowywanie wartości SRT dla animacji szkieletu - animacja, macierz

Przechowywanie wartości SRT dla animacji szkieletu - animacja, macierz

Obecnie tworzę animację szkieletusystem dla mojego obecnego projektu. Myślę, że rozumiem, jak to działa po wielu lekturach, ale patrząc na źródło różnych projektów, zastanawiałem się jednak, dlaczego wartości skali, obrotu i translacji każdej kości są przechowywane osobno. Można przechowywać wszystkie z nich w ramach jednej matrycy, prawda? Czy nie byłoby to bardziej wydajne, czy też potrzebujesz więcej matematyki, aby uzyskać oddzielne wartości, które sprawiają, że jest ona mniej wydajna?

Również podczas gdy jestem w tym, wydaje się, że są 2typowe sposoby przechowywania wartości, którymi są macierze, lub za pomocą wektorów i kwaternionów. Ta ostatnia jest używana częściej, aby uniknąć blokady kardana. Jednak mój projekt ma tylko 2 stopnie swobody. Jaki byłby najbardziej efektywny sposób przechowywania moich wartości?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie, matryca nie byłaby bardziej wydajna, ponieważ musiałbyś użyć matrycy 4x4, czyli 16 zmiennych, głównie ze względu na sposób, w jaki rotacja + translacja są przechowywane w macierzy.

Jeśli przechowujesz wartości w formie SRT, otrzymujesz 9 paczek, ponieważ komponent w czwartym miejscu obrotu może zostać ponownie obliczony z pozostałych podczas ładowania.

Co więcej, wiele silników gier nie obsługuje niejednolitego skalowania, więc możesz zmniejszyć do 1 jednostki pływającej i uzyskać 8 jednostek pływających na kości!

I to przed kompresją: skoro wiesz, że kości nie przesuwają się o pewien punkt (są obwiedni), to nie ma sensu przypisywanie precyzji do tych zakresów, których nigdy nie osiągniesz, więc możesz zakodować te spływy, by powiedzieć 16-bitowe, więc kończy się 4 pływakami na kości.

Teraz, aby być uczciwym, nigdy nie zaimplementowałem tej ostatniej części z kompresją, wydawało mi się to trochę ekstremalne i nie miałem czasu.

Ale przejście z 64 bajtów na kości do 32 bajtów na kość to 50% oszczędności!