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 DXT1 až DXT5 , 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é
- S2TC , řešení bez patentů
- FXT1
- DirectDraw Surface
- PVRTC
- Adaptivní škálovatelná komprese textur (ASTC)
- Komprese textur Ericsson (ETC1 a ETC2)
- Komprese barevných buněk
Reference
externí odkazy
- US Patent and Trademark Office, Patent Full Text and Image Database, result for US 5956431 A
- Hledání patentového přiřazení USPTO pro US 5956431 A
- Článek Microsoft Developer Network o blokové kompresi v Direct3D 10
- squish , An MIT licencí S3TC kompresor. Stránka také obsahuje článek, který přináší úvod do kompresních algoritmů.
- Porovnání komprese textur S3TC a FXT1
- Pravda o S3TC Poznámka: Tento článek použil raný kompresní engine S3TC, nikoli aktualizované kodeky společnosti nVidia nebo ATI.
( Kopie stroje Wayback )