Кіріспе
Текстуралық сығылу алгоритмі
S3 Текстуралық сығылу (S3TC) (кейде DXTn, DXTC немесе BCn деп те аталады) – бастапқыда Iourcha және тағы басқалар әзірлеген, бір-бірімен байланысты жоғалтулы текстуралық сығылу алгоритмдерінің тобы. Бұл алгоритмдер S3 Graphics, Ltd. компаниясының Savage 3D компьютерлік графикалық үдеткішінде қолдану үшін жасалған. Сығу әдісі бұрын жарияланған Түстік жасуша сығылу әдісіне (Color Cell Compression) едәуір ұқсас, ал ол өз кезегінде 1970-ші жылдардың соңында жарияланған Блокты кесу кодын (Block Truncation Coding) бейімдеу болып табылады. Кейбір кескінді сығыстыру алгоритмдерінен (мысалы, JPEG) өзгеше, S3TC-нің белгілі бір мөлшердегі деректерді сығу қабілеті және жалғыз жадқа қол жеткізуі (Түстік жасуша сығылу және кейбір VQ негізделген схемалармен салыстырыңыз) оны аппараттық үдетілген 3D компьютерлік графикада текстураларды сығу үшін өте қолайлы етті. Microsoft DirectX 6.0 және OpenGL 1.3 (GL EXT текстуралық сығымдалу s3tc кеңейтуі арқылы) құрамына енгізілуі технологияны аппараттық және бағдарламалық жасақтама жасаушылар арасында кеңінен қабылдануына әкелді. S3 Graphics енді графикалық үдеткіштер нарығында бәсекелес болмаса да, S3TC технологиясын пайдалану үшін лицензиялық төлемдер 2017 жылдың қазанына дейін өндіріліп, жиналды, мысалы, ойын консольдары мен графикалық карталарда. S3TC-нің кеңінен қолданылуы OpenGL драйверлерінің оны қолдауын міндетті етті, бірақ S3TC-нің патенттік шектеулері ашық кодты іске асыру үшін үлкен кедергі болды, сонымен қатар патенттелген бөліктерден қашуға тырысқан іске асыру тәсілдері де болды.
S3 Texture Compression (S3TC) (sometimes also called DXTn, DXTC, or BCn) is a group of related lossy texture compression algorithms originally developed by Iourcha et al. of S3 Graphics, Ltd. for use in their Savage 3D computer graphics accelerator. The method of compression is strikingly similar to the previously published Color Cell Compression, which is in turn an adaptation of Block Truncation Coding published in the late 1970s. Unlike some image compression algorithms (e. g. JPEG), S3TC's fixed rate data compression coupled with the single memory access (cf. Color Cell Compression and some VQ based schemes) made it well suited for use in compressing textures in hardware accelerated 3D computer graphics. Its subsequent inclusion in Microsoft's DirectX 6.0 and OpenGL 1.3 (via the GL EXT texture compression s3tc extension) led to widespread adoption of the technology among hardware and software makers. While S3 Graphics is no longer a competitor in the graphics accelerator market, license fees have been levied and collected for the use of S3TC technology until October 2017, for example in game consoles and graphics cards. The wide use of S3TC has led to a de facto requirement for OpenGL drivers to support it, but the patent encumbered status of S3TC presented a major obstacle to open source implementations, while implementation approaches which tried to avoid the patented parts existed.
Патент
Кейбір (мысалы, US 5956431 A) S3 текстуралық сығылу технологиясына қатысты АҚШ патент бюросының (USPTO) көптеген патенттерінің мерзімі 2017 жылдың 2 қазанында тоқталды. Бірақ, кем дегенде бір жалғастырылған патент, US6,775,417, 165 күнге ұзартылды. Осы жалғастырылған патенттің қолданылу мерзімі 2018 жылдың 16 наурызында аяқталды.
Кодектер
S3TC алгоритмінің бес түрі бар (DXT1-ден DXT5-ке дейін аталады, бұл Microsoft-тың әр форматқа тағайындаған FourCC кодына сілтеме жасайды), олардың әрқайсысы бейне деректерінің нақты түрлеріне арналған. Олардың барлығы 4×4 пиксель блогын 64 бит немесе 128 бит көлемге айналдырады, нәтижесінде 6:1 қысылу қатынасы 24 биттік RGB кіріс деректері үшін немесе 32 биттік RGBA кіріс деректері үшін 4:1 қатынасы пайда болады. S3TC – жоғалтулы сығылу алгоритмі, нәтижесінде кескін сапасы төмендейді, бірақ жад талаптарын сақтай отырып, текстураның ажыратымдылығын арттыру арқылы бұл әсерді азайтуға болады. Қолмен салынған мультфильм сияқты суреттер және нормаль карта деректері жақсы сығылмайды, екеуі де көбінесе артефакттар тудырады. ATI-нің 3Dc сығылу алгоритмі – DXT5-тің модификациясы болып табылады, ол нормаль карталарға қатысты S3TC-нің кемшіліктерін жою үшін жасалған. id Software Doom 3-те нормаль картаны сығыстыру мәселесін шешу үшін, қызыл компонентті қысу алдында альфа-каналға жылжытып, пикселдік шейдерде рендеринг кезінде оны қайта орнына қойды. Көптеген заманауи кескін сығылу алгоритмдері сияқты, S3TC тек кескіндерді декомпрессиялау әдісін анықтайды, бұл жүзеге асырушыларға сығылу алгоритмін өздерінің нақты қажеттіліктеріне сәйкес жасауға мүмкіндік береді, бірақ патент әлі де сығылу алгоритмдерін қамтиды. nVidia GeForce 256-дан GeForce 4-ке дейінгі карталар DXT1 текстураларын көрсету үшін 16 биттік интерполяцияны қолданды, бұл түс градиенттері бар текстураларды ашқанда жолақтық пайда болуына себеп болды. Бұл да текстураны сығудың жағымсыз әсерін тудырды, ол кодек принципіне байланысты емес.
DXT1
DXT1 (сонымен қатар Block Compression 1 немесе BC1 деп те аталады) – S3TC-нің ең кіші нұсқасы, 64 биттік шығыспен 16 кіріс пикселін сақтайды, екі 16 биттік RGB 5:6:5 түс мәнінен және 4×4 екі биттік іздеу кестесінен тұрады. Егер (осы түстерді екі 16 биттік қолтаңбасыз сан ретінде қарастырып салыстыратын болсақ), онда әр компонент үшін басқа екі түс есептеледі, және . Бұл режим бастапқы Apple Video кодегінің 0xC0 режиміне ұқсас жұмыс істейді. Әйтпесе, егер , онда және – алдын ала көбейтілген альфа форматына сәйкес келетін мөлдір қара түс. Бұл түс кейде сызықтық текстура сүзгілеуі мен альфа-тесті қолданғанда мөлдір аймақтың шетінде қара жиек пайда болуына себеп болады, себебі түстер мөлдір емес текселдің түсі мен жақын орналасқан қара мөлдір текселдің арасында интерполяцияланады. Содан кейін әр пикселдің түс мәнін анықтау үшін іздеу кестесі пайдаланылады, 0 мәні сәйкес келеді және 3 мәні сәйкес келеді.
DXT2 және DXT3
DXT2 және DXT3 (жинап алғанда, Блоктық сығылу 2 немесе BC2 деп те аталады) 16 кіріс пикселді (4x4 пикселдік блокқа сәйкес) 128 биттік шығысқа түрлендіреді, оның ішінде 64 биттік альфа-арна деректері (әр пиксел үшін 4 бит) және одан кейін 64 биттік түс деректері болады, олар DXT1 сияқты кодталады (бірақ DXT1 алгоритмінің 4 түсті нұсқасы әрқашан қолданылады, егер және арасындағы салыстырмалы мәндерге байланысты қандай нұсқаны қолдану керектігін анықтаудың орнына). DXT2-де түс деректері альфаға көбейтілген деп түсіндіріледі, ал DXT3-де альфаға көбейтілмеген деп түсіндіріледі. Әдетте, DXT2/3 мөлдір және қалың аймақтар арасындағы анық альфа өтетіндері бар суреттерге жақсы жарайды.
DXT4 және DXT5
DXT4 және DXT5 (бірлесіп Блоктық қысу 3 немесе BC3 деп те аталады) 16 кіріс пикселін 128 бит шығысқа түрлендіреді, оның ішінде 64 бит альфа арна деректері (екі 8 биттік альфа мәні және 4×4 3 биттік іздеу кестесі) және 64 бит түс деректері (DXT1 сияқты кодталған). Егер , онда тағы алты альфа мәні есептеледі, яғни , , , , және . Әйтпесе, егер , онда тағы төрт альфа мәні есептеледі, яғни , , және , мұнда және . Содан кейін әрбір пиксел үшін альфа мәнін анықтау үшін іздеу кестесі қолданылады, 0 мәні DXT4-тің түс деректеріне сәйкес келеді, ал 7 мәні DXT5 үшін альфаға көбейтілмейді, бірақ DXT4-те көбейтіледі. DXT4/5 интерполяцияланған альфа схемасын қолданғандықтан, олар әдетте DXT2/3-ке қарағанда альфа (көріну) градиенттері үшін жақсы нәтижелер береді.
Otherwise, if , four other alpha values are calculated such that , , , and with and
The lookup table is then consulted to determine the alpha value for each pixel, with a value of 0 corresponding to and a value of 7 corresponding to DXT4's color data is premultiplied by alpha, whereas DXT5's is not. Because DXT4/5 use an interpolated alpha scheme, they generally produce superior results for alpha (transparency) gradients than DXT2/3.
BC4 және BC5
BC4 және BC5 (блоктық сығымдалу 4 және 5) Direct3D 10-да енгізілді. Олар DXT4/5 (BC3) форматындағы альфа арнасының кодтауын қайта пайдаланады. BC4 64 биттік шығысқа 16 кіріс бір арналы (мысалы, ақ-сұр) пикселді сақтайды, ал BC7 16 кіріс RGB8/RGBA8 пикселді 128 биттік шығысқа кодтайды. Оны BC3-тің күрт жетілдірілген нұсқасы деп қарастыруға болады. Crunch – RDO (рейтингтік бұрылыс оптимизациясы) және қажет болған жағдайда қосымша кодтауды жүзеге асыратын тағы бір құрал. 2021 жылы Microsoft BCn сығылған текстуралар үшін арнайы "BCPack" сығымдау алгоритмін жасады. Xbox Series X және S консольдері BCPack ағындарын таратуға аппараттық қолдау көрсетеді.
BC7 encodes 16 input RGB8/RGBA8 pixels into 128 bits of output. It can be understood as a much enhanced BC3. crunch is another tool that performs RDO and optionally further re encoding. In 2021, Microsoft produced a "BCPack" compression algorithm specifically for BCn compressed textures. Xbox series X and S have hardware support for decompressing BCPack streams.