Komprese textury S3 - S3 Texture Compression

S3 Texture Compression ( S3TC ) (někdy také nazývané DXTn , DXTC nebo BCn ) je skupina souvisejících algoritmů pro kompresi ztrátové textury původně vyvinutých Iourcha et al. společnosti S3 Graphics, Ltd. pro použití v jejich akcelerátoru počítačové počítačové grafiky Savage 3D . Metoda komprese je nápadně podobná dříve publikované Color Cell Compression , což je zase adaptace Block Truncation Coding publikovaná na konci 70. let minulého století. Na rozdíl od některých algoritmů komprese obrazu (např. JPEG ) byla komprese dat S3TC s pevnou rychlostí spojená s přístupem do jedné paměti (viz Komprese barevných buněk a některá schémata založená na VQ ) díky tomu vhodná pro použití při kompresi textur v hardwarově akcelerovaném 3D počítačová grafika . Jeho následné zahrnutí do Microsoft ‚s DirectX 6.0 a OpenGL 1.3 (přes GL_EXT_texture_compression_s3tc prodloužení ) vedl k širokému přijetí této technologie u hardwarových a softwarových tvůrců. Zatímco S3 Graphics již není konkurentem na trhu grafických akcelerátorů, licenční poplatky byly vybírány a vybírány za používání technologie S3TC do října 2017, například v herních konzolách a grafických kartách. Široké používání S3TC vedlo k faktickému požadavku, aby jej ovladače OpenGL podporovali, ale stav S3TC zatížený patentem představoval hlavní překážku implementací open source , zatímco existovaly přístupy implementace, které se pokoušely vyhnout patentovaným částem.

Patent

Některé (např. US 5956431 A) z více patentů USPTO na kompresi textur S3 vypršely 2. října 2017. Minimálně jeden pokračovací patent, US6,775,417 , však měl prodloužení o 165 dní. Platnost tohoto pokračování patentu vypršela 16. března 2018.

Kodeky

Existuje pět variant algoritmu S3TC (pojmenovaných DXT1DXT5 , odkazujících na kód FourCC přiřazený společností Microsoft ke každému formátu), z nichž každá je určena pro konkrétní typy obrazových dat. Všechny převádějí blok pixelů 4 × 4 na 64bitové nebo 128bitové množství, což má za následek kompresní poměry 6: 1 s 24bitovými vstupními daty RGB nebo 4: 1 s 32bitovými vstupními daty RGBA . S3TC je ztrátový kompresní algoritmus, který má za následek zhoršení kvality obrazu, což je efekt, který je minimalizován schopností zvýšit rozlišení textur při zachování stejných požadavků na paměť. Ručně kreslené obrázky podobné kresleným filmům se nekomprimují dobře, stejně jako normální mapová data, která obvykle generují artefakty . ATI je 3Dc kompresní algoritmus je modifikací DXT5 navržen tak, aby překonal S3TC své nedostatky, pokud jde o normální mapy. id Software vyřešil problémy s kompresí normalmap v Doom 3 přesunutím červené komponenty do alfa kanálu před kompresí a přesunutím zpět během vykreslování v pixelovém shaderu .

Jako mnoho moderních algoritmů komprese obrazu, S3TC specifikuje pouze metodu používanou k dekompresi obrázků, což umožňuje implementátorům navrhnout kompresní algoritmus tak, aby vyhovoval jejich specifickým potřebám, ačkoli patent stále zahrnuje kompresní algoritmy. NVidia GeForce 256 až GeForce 4 karty použít i 16-bitové interpolace k tomu, aby DXT1 textury, což vedlo k páskování při vybalování textur barevné přechody. Opět to vytvořilo nepříznivý dojem komprese textur , který nesouvisel se základy samotného kodeku.

DXT1

DXT1 (také známý jako Block Compression 1 nebo BC1) je nejmenší variací S3TC, která ukládá 16 vstupních pixelů do 64 bitů výstupu, skládající se ze dvou 16bitových barevných hodnot RGB 5: 6: 5 a dvoubitových 4x4 vyhledávací tabulka.

Pokud (porovnejte tyto barvy jejich interpretací jako dvě 16bitová čísla bez znaménka), pak se vypočítají další dvě barvy, takže pro každou komponentu a . Tento režim funguje podobně jako režim 0xC0 původního kodeku Apple Video .

Jinak if , then a je průhledná černá, což odpovídá předem znásobenému formátu alfa .

Vyhledávací tabulka je poté konzultována k určení hodnoty barvy pro každý pixel, přičemž hodnota 0 odpovídá a hodnota 3 odpovídá .

DXT2 a DXT3

DXT2 a DXT3 (souhrnně také známé jako Block Compression 2 nebo BC2) převádějí 16 vstupních pixelů (což odpovídá bloku 4x4 pixelů) na 128 bitů výstupu, skládajících se ze 64 bitů dat alfa kanálu (4 bity pro každý pixel) následovaných 64 bitů barevných dat, zakódovaných stejným způsobem jako DXT1 (s výjimkou toho, že se místo rozhodování o tom, kterou verzi použít na základě relativních hodnot a ) vždy použije 4barevná verze algoritmu DXT1 .

V DXT2 jsou data barev interpretována jako premultiplied alfa , v DXT3 je interpretována tak, že nebyla premultiplied alfa. Typicky jsou DXT2/3 vhodné pro obrázky s ostrými alfa přechody mezi průsvitnými a neprůhlednými oblastmi.

DXT4 a DXT5

DXT4 a DXT5 (souhrnně také známé jako Block Compression 3 nebo BC3) převádějí 16 vstupních pixelů na 128 bitů výstupu, skládajících se ze 64 bitů dat alfa kanálu (dvě 8bitové hodnoty alfa a 3bitová vyhledávací tabulka 4x4) následované 64 bitů barevných dat (kódováno stejným způsobem jako DXT1).

V případě , pak se vypočítá šest jiné hodnoty alfa, tak, že , , , , , a .

V opačném případě, je-li , další čtyři hodnoty alfa jsou vypočteny tak, aby , , , a s a .

Vyhledávací tabulka je poté konzultována k určení hodnoty alfa pro každý pixel, přičemž hodnota 0 odpovídá a hodnota 7 odpovídá . Barevná data DXT4 jsou předem znásobena alfa, zatímco DXT5 nikoli. Protože DXT4/5 používá interpolované alfa schéma, obecně poskytují vynikající výsledky pro alfa (průhlednost) přechody než DXT2/3.

Další varianty

BC4 a BC5

BC4 a BC5 (bloková komprese 4 a 5) jsou přidány do Direct3D 10. Opětovně používají kódování alfa kanálu nalezené v DXT4/5 (BC3).

  • BC4 ukládá 16 vstupních jednokanálových (např. Ve stupních šedi) pixelů do 64 bitů výstupu, kódovaných stejným způsobem jako BC3 alphas. Rozšířená paleta poskytuje vyšší kvalitu.
  • BC5 ukládá 16 vstupních dvoukanálových (např. Tangenciální prostorová normální mapa) pixelů do 128 bitů výstupu, skládajících se ze dvou polovin, z nichž každá je zakódována stejným způsobem jako BC3 alfy.

BC6H a BC7

BC6H (někdy BC6) a BC7 (bloková komprese 6H a 7) jsou přidány do Direct3D 11.

  • BC6H kóduje 16 vstupních pixelů RGB HDR (float16) do 128 bitů výstupu.
  • BC7 kóduje 16 vstupních pixelů RGB8/RGBA8 do 128 bitů výstupu.

Modely BC6H a BC7 mají mnohem složitější algoritmus s výběrem režimů kódování. Výsledkem je mnohem lepší kvalita.

Porovnání formátu S3TC

FOURCC Název DX 10/11 Popis Alfa premultiplied? Kompresní poměr Typ textury
DXT1 BC1 1bitová alfa / neprůhledná Ano 6: 1 (pro 24bitový zdrojový obrázek) Jednoduché non-alfa
DXT2 BC2 Explicitní alfa Ano 4: 1 Ostrá alfa
DXT3 BC2 Explicitní alfa Ne 4: 1 Ostrá alfa
DXT4 BC3 Interpolovaná alfa Ano 4: 1 Přechod alfa
DXT5 BC3 Interpolovaná alfa Ne 4: 1 Přechod alfa
N/A BC4 Interpolovaná ve stupních šedi N/A 2: 1 Spád
N/A BC5 Interpolovaný dvoukanálový N/A 2: 1 Spád

Viz také

Reference

externí odkazy

( Kopie stroje Wayback )