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ąć?
Odpowiedzi:
Zazwyczaj jest mniej niż 360 kierunków. Typowy przypadek to 8 lub 16. Animacje też są dość krótkie.
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.
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:
źródło
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.
źródło
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.
źródło
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.
źródło