Jaki jest stan techniki przy wysyłce grafiki do gry, takiej jak wiele małych plików BMP? [Zamknięte]


9

Mamy wiele małych plików BMP, które moim zdaniem byłyby łatwiejsze do skopiowania, gdybyśmy połączyli je w duży plik TAR / ZIP / cokolwiek innego.

Jaki jest stan techniki w wysyłce grafiki do gry?

Używamy C # i jesteśmy świadomi zlib. Po prostu burza mózgów, aby sprawdzić, czy istnieją inne rozwiązania lepsze niż zlib.

Odpowiedzi:


7

Możesz także zajrzeć do SharpZipLib lub DotNetZip - DotNetZip daje ci Streambezpośredni dostęp , co jest pomocne, ponieważ większość bibliotek C # może ładować ze strumieni (w przeciwieństwie do plików). Ponadto DotNetZip korzysta z Ms-PL (BSD-Like) zamiast GPL z prawnie wątpliwym wyjątkiem.

Inną opcją jest użycie atlasów tekstur - zamiast mieć wiele małych obrazów, kilka dużych. Te w rzeczywistości ładują się nieco szybciej i są nieco szybsze w czasie wykonywania, jeśli masz sprytny sposób ich rysowania.

Wreszcie możesz uruchomić każdy typ zasobu za pośrednictwem odpowiedniego bezstratnego kompresora (PNG, FLAC itp.) I zapisać je w pliku płaskim (w zasadzie plik zip z wyłączoną kompresją). Pamiętaj, aby unikać kompresji skompresowanych danych, ponieważ w większości przypadków zwiększy to rozmiar.

Niektóre ze stanu techniki:

  • MPQ : Prawdopodobnie tak dobre, jak to tylko możliwe dla zasobów gry, wyszukiwania są zaprojektowane tak, aby były szybkie (tablica skrótów na dysku itp.). Każdy typ pliku (który jest obsługiwany) ma unikalny kompresor.
  • Quake PAK : Jest to w zasadzie płaska struktura plików.
  • Doom WAD : Trochę specyficzny dla Dooma, ale warty uwagi.

1

Opcją jest przechowywanie obrazów w tym samym formacie kompresji, którego używasz do tworzenia skompresowanych tekstur. Ma to tę zaletę, że nie zamierzasz konwertować z jednego formatu stratnego na inny, ale zapisujesz dane w formacie stratnym. W zależności od tekstur może być jeszcze coś do zyskania, przechowując takie pliki w skompresowanym archiwum.

Zobacz tę odpowiedź, aby uzyskać więcej informacji na temat skompresowanych tekstur: https://gamedev.stackexchange.com/a/5177/3505


0

ZLIB może być dobrą odpowiedzią, ale jeśli zdajesz sobie sprawę z tego, że ludzie zaczynają chwytać twoje zasoby, możesz również stworzyć swój własny format pliku do przechowywania twoich zasobów, choć nie jest to takie trudne.

Oto jak możesz to zrobić.

Jest w C, ale nie powinien być trudny do nauczenia, ponieważ C # jest podobny do C i C ++.

Oczywiście ludzie, którzy nadal mają wyższą wiedzę, mogą złapać twoje zasoby, możesz dodać trochę szyfrowania, jeśli chcesz, nie za mocno.

Może to być bardzo przydatne, ale po prostu połączy twoje pliki. Również w przypadku kompresji masz dwie możliwości.

  1. Utwórz cały plik zasobów, skompresuj go i wyślij.
    Ta metoda jest łatwa, ale niezbyt dobra, powinieneś rozpakować wszystko, jeśli chcesz wziąć tylko jeden zasób.

  2. Kompresuj wszystkie zasoby i dodaj je skompresowane do pliku zasobów.
    To też całkiem niezłe, będziesz miał niewielki wzrost wielkości obok metody 1, ponieważ każdy plik jest kompresowany osobno, ale lepiej, jeśli chcesz elastyczności.

Każda metoda ma swoje wady, powinieneś wybierać mądrze. Ogólnie rzecz biorąc, jeśli gra ma dość niską liczbę zasobów, metoda 1 powinna być lepsza, jeśli masz WIELE, metoda 2 powinna ci pasować, ponieważ rozmiar wszystkich zasobów razem przewyższy dodatkowe zyski.

W przypadku bibliotek kompresji masz:

  • Najsłynniejsze medium, Zlib
  • Ten z szybszą dekompresją, LZO
  • Świetny współczynnik kompresji, 7-Zip

Wybrałbym LZO, jeśli chcę szybkiego dostępu do gry, więc nie musisz obawiać się rozpakowywania w czasie rzeczywistym, 7-Zip, jeśli chcę, aby pliki były DUŻO zmniejszane, lub samego Zliba, jeśli chcę zrównoważony współczynnik i rozmiar dekompresji.
Wybór należy do Ciebie: D

Ach, oczywiście istnieją inne algorytmy kompresować dane, można znaleźć te googling .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.