S3 Texturkomprimierung - S3 Texture Compression

S3 Texture Compression ( S3TC ) (manchmal auch DXTn , DXTC oder BCn genannt ) ist eine Gruppe verwandter verlustbehafteter Texturkompressionsalgorithmen , die ursprünglich von Iourcha et al. entwickelt wurden. von S3 Graphics, Ltd. zur Verwendung in ihrem Savage 3D- Computergrafikbeschleuniger . Das Komprimierungsverfahren ist der zuvor veröffentlichten Color Cell Compression auffallend ähnlich, die wiederum eine Adaption von Block Truncation Coding ist , die Ende der 1970er Jahre veröffentlicht wurde. Im Gegensatz zu einigen Bildkompressionsalgorithmen (zB JPEG ), die mit dem S3TC fester Rate Datenkompression mit dem einzelnen Speicherzugriff (vgl Farbzelle Kompressions- und einig VQ Schemen -Basis) machte es gut geeignet für die Verwendung beim Komprimieren Texturen in hardwarebeschleunigte 3D Computergrafik . Seine spätere Aufnahme in Microsoft ‚s DirectX 6.0 und OpenGL 1.3 (über die GL_EXT_texture_compression_s3tc Verlängerung ) führte zu einem weit verbreiteten Annahme der Technologie unter Hardware- und Software - Hersteller. Während S3 Graphics kein Konkurrent auf dem Grafikbeschleuniger-Markt mehr ist, wurden bis Oktober 2017 Lizenzgebühren für die Nutzung der S3TC-Technologie beispielsweise in Spielekonsolen und Grafikkarten erhoben und eingezogen . Die weit verbreitete Verwendung von S3TC hat de facto dazu geführt , dass OpenGL-Treiber zur Unterstützung erforderlich sind, aber der patentrechtliche Status von S3TC stellte ein großes Hindernis für Open-Source- Implementierungen dar, während Implementierungsansätze existierten, die versuchten, die patentierten Teile zu vermeiden.

Patent

Einige (z. B. US 5956431 A) der mehreren USPTO-Patente zu S3 Texture Compression liefen am 2. Oktober 2017 aus. Mindestens ein Fortsetzungspatent, US6,775,417 , hatte jedoch eine Verlängerung von 165 Tagen. Dieses Fortsetzungspatent ist am 16. März 2018 abgelaufen.

Codecs

Es gibt fünf Variationen des S3TC-Algorithmus (mit den Namen DXT1 bis DXT5 , bezogen auf den FourCC- Code, der jedem Format von Microsoft zugewiesen wurde), jede für bestimmte Arten von Bilddaten entwickelt. Alle konvertieren einen 4×4- Pixelblock in eine 64- Bit- oder 128-Bit-Menge, was zu Komprimierungsraten von 6:1 bei 24-Bit- RGB- Eingangsdaten oder 4:1 bei 32-Bit- RGBA- Eingangsdaten führt. S3TC ist ein verlustbehafteter Komprimierungsalgorithmus, der zu einer Verschlechterung der Bildqualität führt, ein Effekt, der durch die Fähigkeit zur Erhöhung der Texturauflösungen bei gleichbleibendem Speicherbedarf minimiert wird. Handgezeichnete Cartoon-ähnliche Bilder lassen sich nicht gut komprimieren, ebenso wenig normale Kartendaten , die beide normalerweise Artefakte erzeugen . Der 3Dc- Kompressionsalgorithmus von ATI ist eine Modifikation von DXT5, die entwickelt wurde, um die Mängel von S3TC in Bezug auf Normal Maps zu überwinden. id Software hat die Probleme mit der Normalmap-Komprimierung in Doom 3 umgangen, indem die rote Komponente vor der Komprimierung in den Alphakanal und während des Renderns im Pixel-Shader zurück verschoben wurde .

Wie viele moderne Bildkomprimierungsalgorithmen spezifiziert S3TC nur die Methode, die zum Dekomprimieren von Bildern verwendet wird, und ermöglicht es den Implementierern, den Komprimierungsalgorithmus so zu gestalten, dass er ihren spezifischen Anforderungen entspricht, obwohl das Patent immer noch Komprimierungsalgorithmen abdeckt. Die nVidia GeForce 256 bis GeForce 4 Karten verwendeten auch 16-Bit-Interpolation zum Rendern von DXT1-Texturen, was beim Entpacken von Texturen mit Farbverläufen zu Banding führte. Dies erzeugte wiederum einen ungünstigen Eindruck der Texturkomprimierung , der nichts mit den Grundlagen des Codecs selbst zu tun hat.

DXT1

DXT1 (auch bekannt als Block Compression 1 oder BC1) ist die kleinste Variante von S3TC und speichert 16 Eingabepixel in 64 Bit Ausgabe, bestehend aus zwei 16-Bit-RGB-5:6:5-Farbwerten und , und einem 4x4-Zwei-Bit Nachschlagwerk.

Wenn (vergleichen Sie diese Farben, indem Sie sie als zwei 16-Bit-Zahlen ohne Vorzeichen interpretieren), dann werden zwei andere Farben berechnet, so dass für jede Komponente und . Dieser Modus funktioniert ähnlich wie Modus 0xC0 des ursprünglichen Apple Video-Codecs .

Andernfalls, if , then und ist transparentes Schwarz, das einem vormultiplizierten Alpha-Format entspricht .

Die Nachschlagetabelle wird dann konsultiert, um den Farbwert für jedes Pixel zu bestimmen, wobei ein Wert von 0 entspricht und ein Wert von 3 entspricht .

DXT2 und DXT3

DXT2 und DXT3 (gemeinsam auch als Blockkompression 2 oder BC2 bekannt) wandeln 16 Eingangspixel (entsprechend einem 4x4-Pixelblock) in 128 Bits Ausgabe, bestehend aus 64 Bit Alphakanaldaten (4 Bit für jedes Pixel) gefolgt von 64 Bits von Farbdaten, die auf die gleiche Weise wie DXT1 codiert sind (mit der Ausnahme, dass immer die 4-Farben-Version des DXT1-Algorithmus verwendet wird, anstatt anhand der relativen Werte von und zu entscheiden, welche Version verwendet werden soll ).

In DXT2 werden die Farbdaten als mit Alpha vormultipliziert interpretiert , in DXT3 als nicht mit Alpha vormultipliziert interpretiert. Typischerweise eignen sich DXT2/3 gut für Bilder mit scharfen Alpha-Übergängen zwischen durchscheinenden und undurchsichtigen Bereichen.

DXT4 und DXT5

DXT4 und DXT5 (gemeinsam auch als Blockkompression 3 oder BC3 bekannt) wandelt 16 Eingabepixel in 128 Ausgabebits um, bestehend aus 64 Bit Alphakanaldaten (zwei 8-Bit-Alphawerte und eine 4x4 3-Bit-Lookup-Tabelle), gefolgt von 64 Bit Farbdaten (entspricht DXT1).

Wenn , dann werden sechs weitere Alphawerte berechnet, so dass , , , , , und .

Andernfalls, wenn , werden vier weitere Alpha-Werte so berechnet, dass , , , und mit und .

Die Nachschlagetabelle wird dann konsultiert, um den Alpha-Wert für jedes Pixel zu bestimmen, wobei ein Wert von 0 entspricht und ein Wert von 7 entspricht . Die Farbdaten von DXT4 werden mit Alpha vormultipliziert, während dies von DXT5 nicht der Fall ist. Da DXT4/5 ein interpoliertes Alpha-Schema verwendet, liefern sie im Allgemeinen bessere Ergebnisse für Alpha-(Transparenz-)Gradienten als DXT2/3.

Weitere Varianten

BC4 und BC5

BC4 und BC5 (Blockkomprimierung 4 und 5) werden in Direct3D 10 hinzugefügt. Sie verwenden die Alphakanalcodierung von DXT4/5 (BC3) wieder.

  • BC4 speichert 16 Eingabe-Einkanal-Pixel (zB Graustufen) in 64 Bit Ausgabe, die auf die gleiche Weise wie BC3-Alphas kodiert sind. Die erweiterte Palette bietet eine höhere Qualität.
  • BC5 speichert 16 Eingabe-Doppelkanal-Pixel (zB Tangentialraum-Normalmap) in 128 Ausgabebits, die aus zwei Hälften bestehen, die jeweils auf die gleiche Weise wie BC3-Alphas kodiert sind.

BC6H und BC7

BC6H (manchmal BC6) und BC7 (Block Compression 6H und 7) werden in Direct3D 11 hinzugefügt.

  • BC6H kodiert 16 RGB HDR (float16)-Eingangspixel in 128 Ausgabebits.
  • BC7 codiert 16 RGB8/RGBA8-Eingabepixel in 128 Ausgabebits.

BC6H und BC7 haben einen viel komplexeren Algorithmus mit einer Auswahl an Kodierungsmodi. Die Qualität ist dadurch viel besser.

S3TC-Formatvergleich

FOURCC DX 10/11-Name Beschreibung Alpha vormultipliziert? Kompressionsrate Texturtyp
DXT1 BC1 1-Bit-Alpha / Opak Jawohl 6:1 (für 24-Bit-Quellbild) Einfaches Nicht-Alpha
DXT2 BC2 Explizites Alpha Jawohl 4:1 Scharfes Alpha
DXT3 BC2 Explizites Alpha Nein 4:1 Scharfes Alpha
DXT4 BC3 Interpoliertes Alpha Jawohl 4:1 Farbverlauf Alpha
DXT5 BC3 Interpoliertes Alpha Nein 4:1 Farbverlauf Alpha
N / A BC4 Interpolierte Graustufen N / A 2:1 Gradient
N / A BC5 Interpolierter Zweikanal N / A 2:1 Gradient

Siehe auch

Verweise

Externe Links

( Wayback-Maschinenkopie )