Jak mogę wdrożyć wstępnie renderowane duszki 2D, które mogą być skierowane w dowolnym kierunku?

28

Googłem w Google, jak gry takie jak Clash of Clans renderują swoich żołnierzy, i wygląda na to, że przed renderowaniem renderują modele 3D na arkuszach sprite 2D przed renderowaniem i renderują te obrazy 2D w czasie wykonywania. Jednak żołnierze w Clash of Clans mogą zmierzyć się w dowolnym kierunku.

W mojej podobnej grze, gdybym miał stworzyć obraz dla każdej orientacji (0-360 stopni) dla każdego rodzaju żołnierza (jest 18 typów) na każdej klatce w ich animacji, musieliby stworzyć ogromną liczbę obrazów. Nie mogę sobie wyobrazić, co robią inni programiści, więc jak mogę to osiągnąć?

Kyle Lin
źródło
2
Nawiasem mówiąc, technika, o której mówisz, nazywa się „Billboarding”.
Weckar E.,

Odpowiedzi:

45
  1. Zazwyczaj jest mniej niż 360 kierunków. Typowy przypadek to 8 lub 16. Animacje też są dość krótkie.

  2. Automatyzacja jest twoim przyjacielem. Napisz skrypt Blender / 3DMax / etc, aby załadować model z listy, renderować go w każdej wymaganej ramce i kierunku do obrazu. Oznaczaj zdjęcia według treści i adresuj je z gry.

  3. Zapakuj wszystko do atlasów tekstur (zwanych również arkuszami sprite), aby uzyskać szybszy dostęp.

W końcu skończysz z kilkoma tysiącami duszków, starannie upakowanych w kilkudziesięciu atlasach. Nie taka wielka sprawa;)

Nie mogłem znaleźć obrazu z CoC, ale tutaj jest Diablo II, który zastosował to samo podejście do animacji postaci. Np. Atak amazoński:

wprowadź opis zdjęcia tutaj

Kromster mówi, że popiera Monikę
źródło
4
Bilans mocy renderowania / czasu w stosunku do przestrzeni dyskowej i czasu pobierania.
M. Mimpen,
3
Co to jest „atlas”? Jakieś łącze?
BЈовић
7
@ BЈовић Wyszukaj „Atlas tekstury”. To bardzo popularna koncepcja.
Kromster mówi o wsparciu Moniki
2
Warto zauważyć, że podczas dyskusji o tej technice twórcy Blizzard North doszli zasadniczo do wniosku, że to dziwna miara zatrzymania luki w obsłudze niezręcznego momentu w możliwościach graficznych na komputery PC, a nawet wtedy tak naprawdę nie była w końcu jest tego wart. Był na ten temat wywiad i ostatecznie zajęło tyle czasu, aby odtworzyć wszystko, że ogólny wniosek był taki, że nie było to świetne podejście (a ich następna gra na pewno będzie 3D).
KRyan
1
@KRyan dobry dodatek! Sądzę, że było to spowodowane dużą ilością NPC i sprzętu w D2. Dla CoC i platform mobilnych to inna równowaga.
Kromster mówi o wsparciu Moniki
8

Pamiętaj również o niskiej rozdzielczości tych obrazów. Jest jeszcze kilka rzeczy, które możesz zrobić, aby zaoszczędzić miejsce, chociaż nie wiem, które z nich są używane przez Clash of Clans:

  • Możesz odchylać pozycję żołnierzy, aby stawiali czoła standardowym kierunkom (N, E, S, W, NE, SE, SW, NW) częściej niż nie, a następnie optymalizować tylko dla standardowych kierunków.

  • Możesz zastosować podejście łączone, w którym wstępnie renderujesz tylko niektóre kierunki. Podczas kadru możesz renderować oddziały, które nie pasują do istniejącego obrazu, lub użyć najbliższego obrazu, jeśli skończy Ci się czas.

  • W miarę możliwości używaj symetrii lewo / prawo, aby zmniejszyć liczbę przechowywanych klatek o połowę.

  • Możesz nadać priorytet niektórym animacjom, takim jak spacery i odpoczynek, przechowując dla nich więcej wskazówek i ramek. Następnie zdepriorytetyzuj inne animacje, takie jak machanie mieczem, w którym przechowujesz mniej kierunków i ramek (sugeruję zachowanie większej liczby kierunków dla pierwszej i ostatniej klatki zamachu).

  • Możesz sfałszować pozostałe kierunki, używając najbliższego obrazu, a następnie go rozciągając.

Ogólnie rzecz biorąc, możemy mówić o 18 jednostkach, maksymalnie 8 kierunkach, może 2 sekundach animacji przy 20 klatkach na sekundę, średnio 64 x 64 pikseli i około 2 bajtach na piksel. To 18x2x20x64x64x2 = 50 MB. Mogą również skalować liczbę kierunków, rozdzielczość i liczbę ramek w oparciu o możliwości urządzenia i liczbę jednostek używanych na mapie.

Piotr
źródło
2
Możesz także przełączać się z billboardów na modele 3d, jeśli powiększasz w pobliżu określonego obiektu - więc jest to 3d blisko, a następnie użyj szybszego 2d, gdy po prostu masz dużo w tle. Bezproblemowa obsługa przejścia może być trudna.
Tim B,
@TimB Co jest szczególnie dobre, ponieważ kończysz renderowanie w wysokiej rozdzielczości i używanie obrazów w niskiej rozdzielczości.
Peter
2

Oprócz odpowiedzi @Kromster należy pamiętać, że obrazy są często znacznie kompresowane, aw dużych obrazach „atlasowych”, w których występuje wiele powtarzających się elementów (np. Puste tło), kompresja jest znacząca. Zatem ostateczny „rozmiar” obrazów nie jest zwykłym pomnożeniem indywidualnego rozmiaru obrazu.

afaulconbridge
źródło
5
Kompresja działa inaczej w przypadku układów GPU niż w przypadku plików JPEG, zwłaszcza mobilnych układów GPU w urządzeniach, dla których napisano Clash of Clans. en.wikipedia.org/wiki/S3_Texture_Compression Innymi słowy: puste tło jest w 100% nieistotne dla kompresji tekstur.
Peter
-2

Dla klasycznego przykładu proponuję pobrać oryginalny Doom, który używał duszków 2D w środowisku pseudo-3D. Duszki miały 8 przeciwnych kierunków (względem punktu widzenia gracza), a z pamięci około 8 różnych rozmiarów, gdy się zbliżały. Było to bardzo widoczne, ale było wystarczające do gry. Oczywiście w Clash lub innych grach z widokiem izometrycznym nie trzeba brać pod uwagę odległości.

Graham
źródło
Nie było różnych rozmiarów. Renderowanie w razie potrzeby skalowało w górę / w dół naiwnego najbliższego sąsiada.
R ..
@R .. Dzięki za korektę. Minęło kilka lat, odkąd w nią grałem! :)
Graham
1
Przykro nam, ale to w ogóle nie odpowiada na pytanie „Jak mogę wdrożyć ...”.
Kromster mówi o wsparciu Moniki
@Kromster Więc na pytanie z pytaniem „jak to zaimplementować?”, Nie odpowiadam na to pytanie, przeglądając klasyczną grę zaimplementowaną (8 kątów zamiast 360), i wspominając, że jak to zrobili, jest szczególnie łatwo zobaczyć, kiedy grasz, ponieważ PO najwyraźniej nie mógł powiedzieć w Clash? Zwracając uwagę na różnice między tym ogólnym przypadkiem a konkretnym przypadkiem widoku izometrycznego? Przyznaję, że nie jest tak dobra jak twoja odpowiedź, ale istnieje różnica między odpowiedzią o niższej jakości a brakiem odpowiedzi na pytanie.
Graham