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

externa länkar