Ericsson Texture Compression
Ericsson Texture Compression ( ETC ) är en förlustig texturkomprimeringsteknik utvecklad i samarbete med Ericsson Research i början av 2005. Den utvecklades ursprungligen under namnet iPACKMAN och baserad på ett tidigare kompressionsschema kallat PACKMAN .
ETC1
Det ursprungliga "ETC1"-komprimeringsschemat ger 6x komprimering av 24-bitars RGB- data. Det stöder inte komprimering av bilder med Alpha-komponenter, även om det finns lösningar för detta.
ETC1 tar 4x4 grupper av pixeldata och komprimerar var och en till ett enda 64-bitars ord. 4×4-pixelgruppen delas först upp i två 4×2-bitar – antingen horisontellt eller vertikalt. Varje halva får en basfärg - antingen med 4/4/4 RGB eller genom att ge en av dem en 5/5/5 RGB och låta den andra ha en 3/3/3 bits offset från den basen. Varje 4×2-region har också ett urval av 3-bitars ljusstyrka. Varje pixel förskjuts sedan från basfärgen genom att lägga till ett av fyra signerade värden till basfärgen för dess halva av 4×4-gruppen.
Det här formatet är en del av OpenGL ES -grafikstandardtilläggen för inbäddade enheter som mobiltelefoner och har godkänts av Khronos Group för användning i WebGL -grafikstandarden för webbläsarwebb-grafik. [ citat behövs ]
Android version 2.2 (Froyo) inkluderar stöd för ETC1.
ETC2 och EAC
'ETC2'-schemat utökar ETC1 på ett bakåtkompatibelt sätt för att ge högre kvalitet på RGB-komprimering, såväl som komprimering av RGBA (RGB plus alfa), enkelkanals (R11) och dubbelkanals (RG11) data.
Följande ETC2-kodekar är obligatoriska i OpenGL ES 3.0 och OpenGL 4.3:
-
GL_COMPRESSED_RGB8_ETC2
— Komprimerar RGB888-data, uppföljningen av ETC1. -
GL_COMPRESSED_RGBA8_ETC2_EAC
— Komprimerar RGBA8888-data med fullt alfastöd. -
GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
— Komprimerar RGBA-data där pixlar antingen är helt transparenta eller helt ogenomskinliga.
sRGB- varianter av ovanstående codecs är också tillgängliga.
EAC bygger på samma principer som ETC1/ETC2 men används för en- eller tvåkanalsdata. Följande fyra EAC-codecs ingår som obligatoriska i OpenGL ES 3.0 och OpenGL 4.3:
-
GL_COMPRESSED_R11_EAC
— en kanal osignerad data -
GL_COMPRESSED_SIGNED_R11_EAC
— en kanal signerad data -
GL_COMPRESSED_RG11_EAC
— två-kanals osignerad data -
GL_COMPRESSED_SIGNED_RG11_EAC
— tvåkanalssignerad data
RGBA- och RG11-formaten är kodade i 128 bitar per 4x4-block, medan resten är kodade i 64 bitar per block. För RGBA är RGB-kanalerna kodade i ett vanligt 64-bitars block, medan A-kanalen får ett eget 64-bitars block. RG11-format kodas på liknande sätt, med ett 64-bitars block per komponent.
Ett mjukvaruverktyg som heter etcpack för komprimering och dekomprimering av ETC1/ETC2-texturer finns tillgängligt för gratis nedladdning i kodform från Ericsson på GitHub.
Se även
- S3 Texture Compression (S3TC)
- Adaptive Scalable Texture Compression (ASTC)
externa länkar
- Ericsson ETCPACK på github
- ETC1 & ETC2 Texture Compression Tool från ARM
- Exempelkod för hantering av alfakanaler i ETC1 från ARM
- Filformatet Khronos Texture (som använder ETC1-komprimering)
- rg_etc1 , En snabb ZLIB-licensierad ETC1-blockpackare/uppackare av hög kvalitet i en enda C++-källfil
- etcpak , ett extremt snabbt Ericsson Texture Compression-verktyg för snabb förberedelse av tillgångar av Bartosz Taudul
- etc2comp , ett snabbt Ericsson Texture Compression-program.