Konvertieren Sie PNG in DDS im DXT5-Format und zeigen Sie die Ergebnisse direkt mit Python an

Wenn Sie sicher sind, dass Sie verstehen, was Sie vom DXT5-Format erwarten, dann prüfen Sie selbst: Im Spoiler befindet sich links die Animation, rechts ein PNG-Bild mit 4x4 Pixeln - konvertiert in DDS (DXT5).
Wenn Sie dies nicht überrascht, können Sie fortfahren.

Ja, ich weiß genau, wie die Konvertierung in DXT5 erfolgt.
Bild

Wenn Sie auf der Suche nach einem Tool oder einer Möglichkeit waren, um zu sehen, was mit Ihrem PNG-Bild nach der Konvertierung in DXT5 passiert, begrüßen Sie den Artikel.

Zweck


Eine allgemeine Übersicht über das DXT5-Format und ein Tool, mit dem Sie das Konvertierungsergebnis im Handumdrehen anzeigen können.

Der Artikel ist nicht für Profis gedacht, sondern dient nur zur Orientierung.

Für wen


  • Wer hat nicht die Schaffung von Texturen konfrontiert
  • Bitmaps zeichnen: pixelart / 2D
  • Wer fragte sich, was für ein Biest wie S3TC / DXT
  • Wer sucht nicht nach einfachen Möglichkeiten, um Spiele zu erstellen
  • Wer versucht, Spiele ohne bekannte Frameworks (Unity usw.) zu erstellen?
  • Verwenden Sie ein UNIX-System (da das Tool, das wir später betrachten werden, nur unter Ubuntu getestet wurde)

Was ist S3TC / DXT?


Kurz gesagt, dies ist eine Bildkomprimierung, so dass: a) weniger (v) RAM verwendet wird; b) schneller in (v) RAM geladen.

Hier erlaube ich mir, einen Link zu einer Tafel zu hinterlassen, wo es eine kurze Zusammenfassung der Formate gibt und warum / wann ich sie hier verwenden soll .

Wenn Sie mehr darüber erfahren möchten, wie dieses Format in Spielen verwendet werden kann, finden Sie hier einen Artikel in vier Teilen in englischer Sprache. Wenn Sie lieber lesen möchten, welche Formeln die Komprimierung selbst enthält, finden Sie hier einen Artikel in russischer Sprache in englischer Sprache .

Ausgabe


DXT5 (ich habe es als Beispiel genommen, weil ich es im aktuellen Projekt verwende) ist ein verlustbehaftetes Komprimierungsformat, daher opfern wir Farbe. Erstens sind die Farben nicht im 8-Bit-RGB-Format, d.h. nicht RGB888, sondern im RGB565-Format. Es gibt immer noch die halbe Mühe damit. Das Hauptproblem (meiner Meinung nach) ist jedoch, dass innerhalb eines Texels, das 4 mal 4 Pixel groß ist, die Ausgabe maximal 4 Farben hat: 2 Grundfarben und 2 Zusatzfarben.

Stellen Sie sich vor, Sie sind ein Entwickler (oder Designer / Künstler), der (als Beispiel) noch keine Spieleentwicklung erlebt hat und sich dazu entschlossen hat, ein schönes mehrfarbiges Sprite im Stil von Pixelart / 2D oder nur ein Bild auf dem Hintergrund (wieder Bitmap, nicht Vektor) zu erstellen. .

Hebe eine Maus / Tablette auf und zeichne. Es scheint schön (nehmen wir an, dass es schön ist).

Bild

Um es in DDS zu konvertieren, müssen Sie GIMP, Photoshop mit Plugins oder ähnliches verwenden. Das Ergebnis wird jedoch erst angezeigt, nachdem Sie die resultierende Datei geöffnet haben.

Mal sehen, was passiert ist (stellen Sie sich vor, wir sehen nur die rechte Seite des Bildes, wenn Sie eine DDS-Datei mit einem GIMP öffnen):

Bild

Das Mädchen war definitiv traurig, die Blumen verwelkten, das Diadem wurde zu einem Seil. "Hmm", sagst du. Nun, wenn ich gesehen habe, was früher passiert ist ... Und hier kann das Tool, das ich für meine Bedürfnisse zusammengestellt habe, helfen (bedingt helfen) - Pyglet PNG to DDS Editor

Warum?


Zur Bearbeitung / Bearbeitung der Quelldatei, Auswahl von ungefähren Farben, Erstellung einer ungefähren Palette.

Dieser „Editor“ konvertiert im laufenden Betrieb ein PNG-Bild in DDS und Sie können sofort sehen, was beim Konvertieren und Einfügen eines Sprites in ein Spiel passiert.

Warum?


Weil ich keine Tools gefunden habe, mit denen Sie im Handumdrehen sehen können, wie Ihr Bild / Ihre Textur aussehen wird.

Und das ist alles?


Zu diesem Zeitpunkt ja. Solch einem „Editor“ kann eine Menge hinzugefügt werden, aber alles hat seine Zeit.

Ich würde gerne mehr von der Community wissen: Wie lösen Sie solche Situationen, wenn Sie überprüfen müssen, was mit der Textur am Ausgang passiert.

PS: Der Editor arbeitet relativ normal mit Bildern bis zu 512 * 512. Es fließt aus dem Speicher, aber nicht sehr viel :) (im Code finden Sie diese Methode durch den Kommentar "!!! ACHTUNG !!!").

Source: https://habr.com/ru/post/de480214/


All Articles