Кіріспе

Текстуралық сығылу алгоритмі
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-нің патенттік шектеулері ашық кодты іске асыру үшін үлкен кедергі болды, сонымен қатар патенттелген бөліктерден қашуға тырысқан іске асыру тәсілдері де болды.

Патент

Кейбір (мысалы, 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-ке қарағанда альфа (көріну) градиенттері үшін жақсы нәтижелер береді.

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 ағындарын таратуға аппараттық қолдау көрсетеді.