FXT1
FXT1 är ett strukturkomprimeringsschema för 3D-grafik , uppfunnit av hårdvaruleverantören 3dfx Interactive och erbjöds som en rivaliserande standard för öppen källkod till S3TC i september 1999, ett år efter att S3TC antogs av Microsoft som en del av DirectX . Begränsad leverantörs hårdvarusupport har varit ett hinder för dess acceptans. Noterbart, trots att den var öppen källkod, adopterades inte FXT1 av Nintendo för GameCube, och inte heller av Sony för PlayStation 3, i båda fallen förlorade mot den etablerade S3TC-standarden. En annan möjlig orsak till att det inte används är att läget CC_MIXED (se nedan) troligen gör intrång i S3TC -patentet ( US 5956431 System och metod för blockbaserad bildkomprimering med fast hastighet med härledda pixelvärden).
Fyra olika komprimeringsalgoritmer används av FXT1, valda på blocknivå för att optimera visuell kvalitet. Att behöva välja en optimal väg för varje textur säkerställde att FXT1 var relativt långsam vid komprimering, vilket gör den olämplig för realtidskomprimering i applikationer.
Den ursprungliga vitboken följde inte välkända vetenskapliga regler, eftersom den faktiskt var en kommersiell presentation. Bristen på teoretisk vägledning från uppfinnarna kan ha varit orsaken till dåligt optimerad valkod för komprimeringsschema, och trots potentiellt bättre prestanda på grund av fyra tillgängliga komprimeringsscheman istället för ett (som i S3TC), visade FXT1 inga kvalitetsförbättringar för S3TC , som är underlägsen den i de flesta testfall.
I efterhand kan FXT1 ha varit mer framgångsrikt om 3dfx lagt ner mer ansträngning på att undersöka optimering av CC_MIXED-komprimeringsläget, mer likt S3TC , och släppt de andra tre codecs från standarden. 3dfx togs sedan över av Nvidia som har fortsatt att stödja S3TC som sitt föredragna komprimeringsverktyg.
Kompressionsalgoritmer
Fyra olika komprimeringsalgoritmer anges i den ursprungliga vitboken:
1. CC_MIXED (liknar andra S3TC): Ett 4x4 texelblock representeras av två bitar per texel för opaka texturer. Dessutom har varje block två 16-bitars färger lagrade i ett RGB 565-format. De två RGB 565-färgerna och två ytterligare färger (skapade genom att interpolera mellan de två RGB 565-färgerna) bildar primärfärgerna för detta texelblock och dess associerade fyrfärgsuppslagstabell. Ett 2-bitars index används för att bestämma vilken färg från uppslagstabellen som kommer att användas för varje texel i 4x4-blocket. Transparenta texturer skapas genom att göra en av de fyra färgerna transparenta.
2. CC_HI (bäst för rumslig upplösning): Ett 4×8 texelblock representeras av tre bitar per texel för opaka och transparenta texturer. Varje block lagrar två 15-bitars färger i ett RGB 555-format. De två RGB 555-färgerna och fem ytterligare färger (skapade genom att interpolera mellan de två RGB 555-färgerna) utgör primärfärgerna för detta texelblock. Dessutom definieras en åttonde färg som den transparenta färgen. Ett 3-bitars index används för att bestämma vilken färg från uppslagstabellen med 8 poster som kommer att användas för varje texel i 4x8-blocket.
3. CC_CHROMA (bra på komplexa färgområden): Ett 4×8 texelblock representeras av två bitar per texel för ogenomskinliga texturer. Varje block lagrar fyra 15-bitars färger i ett RGB 555-format. Alla fyra färgerna används direkt utan interpolation för att bilda en uppslagstabell med fyra poster. Det 2-bitars index som tilldelas varje texel i blocket används för att bestämma vilken av de fyra färgerna som tilldelas varje enskild texel. Observera att Colors4 endast gäller ogenomskinliga texturer, eftersom det inte stöder transparens.
4. CC_ALPHA (ger den bästa kontrollen över komplexa alfatransparenser vid fyra bitar per texel): Ett 4×8 texelblock representeras av två bitar per texel för ogenomskinliga och transparenta texturer. Varje block lagrar tre 20-bitars färger lagrade i ett 5555-format. De första och andra 20-bitarsfärgerna används för primärfärgerna i det vänstra 4x4-blocket, medan de andra och tredje färgerna används för primärfärgerna i det högra 4x4-blocket. Två ytterligare färger skapas i varje block genom att interpolera mellan de två primära färgerna för det blocket. Ett 2-bitars index tilldelas varje texel i blocket och en uppslagstabell används för att bestämma vilken färg som appliceras på varje texel.