Wie ist der Stand der Technik beim Versand von Spielgrafiken wie vielen kleinen BMP-Dateien? [geschlossen]

9

Wir haben viele kleine BMP-Dateien, die meiner Meinung nach einfacher zu kopieren wären, wenn wir sie in einem großen TAR / ZIP / was auch immer kombinieren würden.

Wie ist der Stand der Technik beim Versand von Spielgrafiken?

Wir verwenden C # und kennen zlib. Nur ein Brainstorming, um zu sehen, ob es andere Lösungen gibt, die besser sind als zlib.

foobar
quelle

Antworten:

7

Sie können sich auch SharpZipLib oder DotNetZip ansehen - DotNetZip bietet Ihnen Streamdirekten Zugriff auf eine , was hilfreich ist, da die meisten C # -Bibliotheken aus Streams geladen werden können (im Gegensatz zu Dateien). Darüber hinaus verwendet DotNetZip mit einer rechtlich fragwürdigen Ausnahme anstelle der GPL Ms-PL (BSD-Like).

Eine andere Möglichkeit ist die Verwendung von Texturatlanten - anstatt viele kleine Bilder zu haben, haben Sie einige große. Diese werden tatsächlich etwas schneller geladen und sind zur Laufzeit etwas schneller, wenn Sie mit dem Zeichnen vertraut sind.

Schließlich können Sie jeden Asset-Typ über den entsprechenden verlustfreien Kompressor (PNG, FLAC usw.) ausführen und in einer flachen Datei speichern (im Grunde eine Zip-Datei mit deaktivierter Komprimierung). Denken Sie daran, komprimierte Daten nicht zu komprimieren, da dies in den meisten Fällen die Größe erhöht .

Einige Stand der Technik:

  • MPQ : Wahrscheinlich so gut wie es für Spiel-Assets geht, sind die Suchvorgänge so konzipiert, dass sie schnell sind (festplattenbasierte Hash-Tabelle usw.). Jeder Dateityp (der unterstützt wird) verfügt über einen eindeutigen Kompressor.
  • Quake PAK : Dies ist im Grunde eine flache Dateistruktur.
  • Doom WAD : Etwas spezifisch für Doom, aber einen Blick wert.
Jonathan Dickinson
quelle
1

Eine Option besteht darin, Bilder im selben Komprimierungsformat zu speichern, das Sie zum Erstellen komprimierter Texturen verwenden. Dies hat den Vorteil, dass Sie nicht von einem verlustbehafteten Format in ein anderes konvertieren, sondern die Daten in einem verlustbehafteten Format speichern. Abhängig von den Texturen kann es noch etwas zu gewinnen geben, wenn solche Dateien in einem komprimierten Archiv gespeichert werden.

In dieser Antwort finden Sie weitere Informationen zu komprimierten Texturen: /gamedev//a/5177/3505

aaaaaaaaaaaa
quelle
0

ZLIB könnte eine gute Antwort sein, aber wenn Sie wissen, dass Leute Ihre Assets öffnen, können Sie auch Ihr eigenes Dateiformat erstellen, um Ihre Assets zu speichern. Es ist jedoch nicht so schwer.

So können Sie es machen.

Es ist in C, sollte aber nicht so schwer zu lernen sein, da C # einige wie C und C ++ ist.

Natürlich können Leute mit noch höherem Wissen Ihre Ressourcen abfangen. Sie können wenig Verschlüsselung hinzufügen, wenn Sie möchten, nicht zu hart.

Dies kann sehr nützlich sein, verbindet aber nur Ihre Dateien. Auch für die Komprimierung haben Sie zwei Möglichkeiten.

  1. Erstellen Sie Ihre gesamte Ressourcendatei, komprimieren Sie sie und versenden Sie sie.
    Diese Methode ist einfach, aber nicht sehr gut. Sie sollten alles dekomprimieren, wenn Sie nur eine Ressource verwenden möchten.

  2. Komprimieren Sie jede Ressource und fügen Sie sie komprimiert zur Ressourcendatei hinzu.
    Das ist auch ziemlich gut, Sie werden die Größe neben Methode 1 leicht erhöhen, da jede Datei separat komprimiert wird, aber es ist besser, wenn Sie Flexibilität wünschen.

Jede Methode hat ihre eigenen Nachteile. Sie sollten mit Bedacht wählen. Wenn Ihr Spiel eine relativ geringe Anzahl von Ressourcen hat, sollte Methode 1 im Allgemeinen besser sein. Wenn Sie LOTS haben, sollte Methode 2 zu Ihnen passen, da die Größe aller Ressourcen zusammen das Extra, das Sie gewinnen, überwältigt.

Für Komprimierungsbibliotheken haben Sie:

  • Das bekannteste Medium, Zlib
  • Der mit der schnelleren Dekompression, LZO
  • Das großartige Kompressionsverhältnis, 7-Zip

Ich würde mich für LZO entscheiden, wenn ich schnell auf Ingame zugreifen möchte, damit Sie keine Angst vor dem Dekomprimieren in Echtzeit haben müssen. 7-Zip, wenn die Dateien VIEL verkleinert werden sollen, oder Zlib selbst, wenn ich ein ausgewogenes Dekomprimierungsverhältnis und eine ausgewogene Größe wünschen.
Sie haben die Wahl: D.

Ah, natürlich gibt es andere Algorithmen zum Komprimieren von Daten, und Sie können diese googeln finden .

Gustavo Maciel
quelle