Текстурное сжатие s3tc что это

О технологии компрессии текстур S3TC

О второй важной возможности AGP можно сказать что она позволяет AGP совместимым адаптерам напрямую манипулировать текстурами, которые хранятся в системной памяти, вместо того, чтобы получать и лишь затем обрабатывать их локально. Этот процесс, известный как Direct Memory Execution, или DIME, позволяет приложениям с интенсивным текстурированием выполнятся из безграничной системной памяти, вместо ограниченной локальной памяти графической карты.

Легко понять, что более детализированные текстуры выглядят элементарно лучше, но к несчастью, более детализированные текстуры занимают больше места, чем их упрощённые аналоги. Это приводит к спору производительности со скоростью, но как всегда мы сейчас не будем заходить слишком далеко в теорию, а остановимся на одном простом сравнении: как бы ни был красив закат, если вы слепы, то всё, что вы увидите, это изменение основного цвета и закат не произведёт на вас должного впечатления. Возможно это несколько грубое и элементарное сравнение. После того, как Вы поиграетесь на Voodoo 2 с экстремально детализированными текстурами при 800×600, а затем сделаете это при 800×600 на карте, основанной на чипе nVidia Riva TNT, вы действительно начнёте замечать разницу. Вы помните, как все специалисты твердили, что AGP в конечном счёте займёт своё место в игровой индустрии? То время, о котором они говорили практически уже пришло. Есть технология, и её надо начать использовать. Компании вроде nVidia, Matrox и S3 предприняли первые шаги в этом направлении, но многое еще предстоит сделать.

Два подхода к улучшению качества текстур.

Итак у нас есть огромные текстуры, которые были переданы из системной памяти через AGP, и эти же текстуры, обрабатываемые благодаря DIME, но как S3 впишется во всё это? Вместо того, чтобы почивать на лаврах AGP и разрешать разработчикам использовать необьятные обьёмы текстур, в S3 осознали, что хотя AGP и позволяет бросать огромные массивы текстур в ОЗУ для обработки, всё же есть ограничение этой технологии. Для начала хотя бы обьём памяти, отдаваемый AGP на использование. Но есть ещё один способ, когда текстуры высокого качества могут хранится в том же обьёме памяти, как и обычные, это способ компрессии текстур от S3, S3 Texture Compression, или коротко S3TC. Сравните качество оригинальной 8-битной текстуры и ее пожатого полноцветного аналога:

Текстурное сжатие s3tc что это. Смотреть фото Текстурное сжатие s3tc что это. Смотреть картинку Текстурное сжатие s3tc что это. Картинка про Текстурное сжатие s3tc что это. Фото Текстурное сжатие s3tc что это
(увеличенный вариант при нажатии)

S3TC Compressed Texture.

Текстурное сжатие s3tc что это. Смотреть фото Текстурное сжатие s3tc что это. Смотреть картинку Текстурное сжатие s3tc что это. Картинка про Текстурное сжатие s3tc что это. Фото Текстурное сжатие s3tc что это
(увеличенный вариант при нажатии)

Технология S3TC жмет текстуры с коэффициентом 1 к 6 от S3 и потери качества при этом практически не заметны на глаз. S3TC, это не какая то технология, которую S3 разработала за углом и на коленках, это полностью лицензируемая, готовая система компрессии, поддерживаемая в DirectX6. Аналогов на рынке пока не наблюдается, хотя многое разработчики заявили о собственных разработках в этом направлении не желая платить за лицензию.

Ожидается очередная битва стандартов, теперь уже в области компрессии текстур и выиграет тот, чья технология получит поддержку разработчиков.

Источник

Технология сжатия текстур S3TC

Введение

Наложение текстур представляет из себя процесс покрытия элементарными изображениями трехмерные объекты. Текстуры используются для создания эффекта реалистичности деталей поверхностей без усложнения геометрии в трехмерных сценах. В качестве текстур может быть использовано все, начиная от текстуры древесины или мраморной поверхности, до сложных изображений группы людей, зданий, деревьев и т.д. Для имитации настоящих жизненных сцен необходимо использовать большое количество детализированных текстур. Однако это предъявляет определенные требования к системной (или оперативной памяти компьютера) или графической памяти (в зависимости от того, где хранятся текстуры), вынуждая разработчиков приложений использовать минимальное количество текстур с меньшей детализацией для того, чтобы уложиться в рамки ограниченных объемов памяти и пропускной способности системы.

Применение AGP сделало возможным хранить текстуры в системной памяти и напрямую загружать их оттуда. Это, в свою очередь, существенно увеличило доступные объемы памяти для хранения текстур. Однако и AGP и интерфейс системной памяти являются ресурсами общего использования. Кроме прокачки текстур, AGP используется для прокачки геометрических данных, а системная память используется для хранения и исполнения приложений, да и самой операционной системы. Итак, не стоит рассчитывать на то, что вся пропускная способность системной памяти будет доступна для считывания текстурных данных. Исходя из этой предпосылки, максимально полное использование всей доступной пропускной способности системной памяти наиболее критично для графической подсистемы, оптимизированной для прокачки текстур через AGP.

Технология сжатия текстур S3TC призвана помочь в преодолении этих двух ограничений за счет предоставления возможности хранения большего количества и больших по объему (а значит, более детализированных) текстур в той же по объему области памяти и, в то же время, значительно снижая требования к ширине полосы пропускания, требуемой для доступа к этим текстурам.

Какие выгоды, если текстуры сжимаются?

Главное, это снижение требований к размеру памяти и ширине полосы пропускания, а это означает увеличение производительности и улучшение качества изображений.

Очевидный выигрыш, который обеспечивает сжатие текстур, в том, что один и тот же объем текстурных данных может храниться в ощутимо меньшем объеме памяти. Это особенно критично в случае, когда текстуры хранят в локальной памяти, расположенной на видеоадаптере и используемой обычно в качестве кадрового буфера. В такой же мере важен факт, что требования к пропускной способности памяти и шины для считывания текстур существенно снижаются, что, в свою очередь, влияет на увеличение производительности при прокачке данных через AGP, если текстуры хранятся в системной памяти.

Системная память и пропускная способность AGP являются конечными ресурсами. При применении сжатия текстур графический акселератор может с большей для себя пользой использовать эти ресурсы.

Увеличение количества и объема текстур

Сжатие текстур может способствовать использованию текстур больших размеров. Если при использовании меньших по размеру текстур, а значит, и менее детализированных, результат их наложения на поверхности выглядит смазанным или составленным как бы из блоков (блочность изображения), то использование больших по размеру текстур дает возможность создавать более детализированные поверхности. Кроме того, сжатие текстур может способствовать использованию большего набора разнообразных текстур в любой момент времени, допуская большее разнообразие отображаемых сцен.

Когда текстуры хранятся вне локальной памяти (кадрового буфера), сжатие может высвободить объем памяти, достаточный для увеличения разрешения на экране монитора или для использования тройной буферизации. Более высокое разрешение на экране обеспечивает более гладкое, более детализированное изображение, в то время, как тройная буферизация может увеличить производительность за счет обеспечения процессору рендеринга возможности начать отображение новой сцены без необходимости дожидаться синхронизации с вертикальной разверткой монитора. Следствием использования тройной буферизации может стать существенное увеличение значения частоты смены кадров (fps), обычно на 30%.

Наложение текстур с различными уровнями детализации (Mip-mapping)

Дополнительный объем памяти, который становиться доступным для использования, при сжатии текстур позволяет использовать наложение текстур с различными уровнями детализации, как будто требуемый дополнительный объем памяти добавлен (а это 30%), по сравнению с одним базовым уровнем детализации. Использование различных уровней детализации текстур позволяют уменьшить количество артефактов в виде неровностей на текстурированных поверхностях, которые распространяются на значительные расстояния. Без использования уровней детализации пиксел на объекте, расположенном далеко от наблюдателя, может быть принят за несколько элементов текстур (текселей) из изначально наложенной текстуры. Фильтрация за малое количество проходов используется для создания изображения без отображения нежелательных артефактов (мерцания, наползание пикселов друг на друга). Фильтрация в реальном времени — достаточно дорогое удовольствие, так что для разных уровней детализации текстур используются заранее сформированные отфильтрованные изображения, что существенно уменьшает сложность фильтрации. Схема ниже показывает четыре простых уровня детализации накладываемых текстур (mip-mapping), каждый из которых соответствует четверти размера следующего уровня.

Текстурное сжатие s3tc что это. Смотреть фото Текстурное сжатие s3tc что это. Смотреть картинку Текстурное сжатие s3tc что это. Картинка про Текстурное сжатие s3tc что это. Фото Текстурное сжатие s3tc что это

Кроме того, использование различных уровней детализации может сказаться и на улучшении производительности. Использование текстур с различным разрешением для одного и того же объекта (mip-mapping) обеспечивает последовательный доступ к памяти, в следствие чего становится возможным использование более длинных пакетов данных. С другой стороны, при удалении объекта от наблюдателя пикселы семплируются менее часто (т.е. один тексель формирует не один пиксель, а несколько), что делает возможным осуществление доступа к памяти более произвольным образом, а значит, увеличивается вероятность использования более коротких (но менее эффективных) пакетов данных.

Общая информация о S3TC

Технология S3TC была специально разработана для использования в процессе наложения текстур. Текстуры сжимаются на фиксированную величину, эквивалентную четырем битам на тексель для непрозрачных текстур (или текстур с простым эффектом прозрачности), или с коэффициентом сжатия, равным восьми битам на тексель для текстур со сложной прозрачностью. Качество изображения, создаваемое с помощью сжатых текстур, остается высоким.

Текстурное сжатие s3tc что это. Смотреть фото Текстурное сжатие s3tc что это. Смотреть картинку Текстурное сжатие s3tc что это. Картинка про Текстурное сжатие s3tc что это. Фото Текстурное сжатие s3tc что это

Краткое описание S3TC

В процессе работы S3TC текстурная карта разбивается на блоки, каждый из которых представляет собой матрицу 4х4 текселя. При этом для лучшей оптимизации каждый тексель представлен двумя битами из доступных для матрицы 32 бит. Кроме этого, каждая из матриц имеет два поля, одно из которых содержит данные о явно заданном цвете в 16-битном представлении, совместимом с форматом RGB565, а другое поле содержит информацию о дополнительном цвете, который определяется простой интерполяцией явно заданного цвета. Результатом описанных выше действий является формирование четырехцветной таблицы выборки, которая и используется для окончательного определения настоящего цвета любого из 16 текселей, формирующих матрицу. Стоит заметить, что в обычных условиях те же 16 текселей кодировались бы с использованием 64 бит, т.е. в среднем по 4 бита на тексель. Для определения простого прозрачного цвета требуется один бит (код цвета), данные для которого получаются за счет резервирования одного из четырех цветов для индикации, что данный тексель прозрачен, и третий цвет, являющийся средним явно заданных цветов, определяет цвет прозрачного текселя. Взаимное расположение двух кодированных цветов определяется в зависимости от того, содержит ли блок сплошную закраску или имеют место прозрачные тексели. Когда матрица определена как один из блоков, имеющих прозрачные тексели, в четырехбитном представлении две единицы (11) являются индикацией прозрачности текселя, а значение цвета этого текселя определяется как простое среднее двух кодированных цветов.

Ниже приведена иллюстрация блока текселей в первичном виде, 2-х битная индексная матрица, с помощью которой определяется вид блока текселей после сжатия. Нетрудно заметить, что каждый тексель в блоке после сжатия определяется одним из четырех цветов таблицы выборки, наложенным на значение текселя в исходном блоке.

Технология S3TC также позволяет использование дополнительно 64 бит данных для кодирования сложных эффектов прозрачности, если это необходимо. Поддерживаются два способа работы со сложными эффектами прозрачности, но в данном материале они не будут описаны. Если же вам нужно детальное описание этих способов, то рекомендуем обратиться к документации на DirectX 6.0.

Простое декодирование

Декодирование блоков, сжатых в формате S3TC, производится в простой последовательности. Для каждых из 16 текселей в блоке задается двухбитный индекс. Затем используется четырехцветная таблица выборки для определения 16-битного значения цвета, которое должно быть использовано для каждого из текселей, входящих в блок. Для декодера требуются простые логические элементы, которые могут работать на очень высокой скорости, а использование нескольких логических элементов обеспечивает параллельное декодирование, что гарантирует высокую производительность. Простота реализации данного механизма декодирования гарантирует его использование в качестве универсального в области компьютерной графики.

Качество изображения и другие методы сжатия текстур

Существуют и другие техники сжатия, при этом многие «простые» схемы с недорогими декодерами обеспечивают худшее качество или меньший коэффициент сжатия, или все вместе. При использовании технологии квантования векторов (Vector Quantization или VQ), разработанной PowerVR, которая будет использована в новом чипсете PVRSG, обеспечивает худшее качество изображения, а из-за того, что определение исходных значений происходит с использованием реестра кодов, декодеру приходится дважды обращаться к памяти для декомпрессии каждого текселя из блока, а значит, снижается производительность. Первое обращение к памяти требуется для считывания кода блока, являющегося индексом в реестре кодов. Второе обращение к памяти требуется для осуществления выборки значения текселя, соответствующего коду блока, для чего используется индекс, по которому и происходит выборка из реестра кодов. Теоретически, реестр кодов может храниться прямо в чипе для избежания повторного обращения к памяти, но из-за того, что это увеличивает стоимость реализации, этого пока не сделано. Плюс ко всему, даже если реестр кодов хранится в чипе, все равно его придется загружать в память, а это тоже может существенным образом сказаться на снижении производительности. В результате, VQ сжатие не только медленнее, чем S3TC, но и, что не менее важно, обеспечивает худшее качество. Поэтому предпочтение будет отдано S3TC.

Палетизирование, или применение палитры — одна из хорошо известных форм квантования векторов (VQ). Качество изображения при использовании палетизированных текстур имеет такой недостаток, как невозможность использования большего количества разных цветов. В то время, как при выводе изображения с использованием палетизированных текстур существует ограничение в 256 цветов, доступных для всего изображения, технология S3TC не ограничивает общее количество доступных цветов. Кроме того, при использовании палетизированных текстур требуется, чтобы новая палитра была загружена для каждой новой текстуры (в этом случае палитра эквивалентна реестру кодов, со всеми вытекающими отрицательными последствиями).

Другие «стандартные» технологии сжатия, такие, как JPEG (TREC), очень дороги при использовании, и это при том, что многие изображения, сжатые с помощью S3TC, все равно смотрятся лучше. Стоимость использования технологии сжатия зависит не только от количества требуемой для декодирования логики. Возникающие большие временные задержки во время декодирования блока TREC или JPEG текстур требуют применения значительных по объему буферов для их компенсации, что еще больше увеличивает стоимость и усложняет логику декодера. В то же время следствием использования технологий цифрового сжатия часто являются артефакты — круговые разводы и блочность — которые не так просто удалить с помощью стандартных алгоритмов фильтрации, таких, как трилинейная фильтрация. Текстурированное изображение с плавными градиентами будет выглядеть лучше при использованием технологии S3TC, чем несжатое изображение с 16-битной глубиной представления цвета в формате RGB565.

Необходимые утилиты для сжатия изображений в формате S3TC можно загрузить из раздела для разработчиков на сайте S3. Это программное обеспечение позволит вам сжать ваши собственные изображения, а затем сравнить полученные картинки с оригиналами. Можно с уверенностью утверждать, что заметить разницу будет очень трудно.

Стандартная часть DirectX

Технология S3TC стала основой для формата сжатых текстур, используемого в DirectX 6.0. Корпорация Microsoft лицензировала технологию S3TC у компании S3 и сделала доступной технику сжатия текстур для использования независимыми поставщиками программного (ISV) и аппаратного обеспечения (IHV) через новый API DirectX 6.0. Разработчикам программного обеспечения следует ожидать широкую поддержку сжатых текстурных карт в формате S3TC. Учитывая поддержку стандарта S3TC со стороны Microsoft, становится очевиден факт, что поддержка этой технологии сжатия на аппаратном уровне в графических чипсетах — дело ближайшего будущего. Так что, возможно, повсеместная поддержка S3TC уже не за горами. Разработчики программного обеспечения могут уже сейчас, не дожидаясь повсеместной аппаратной поддержки S3TC, поставлять свои приложения с использованием сжатых текстур, так как API DirectX 6.0 поддерживает программное декодирование текстур в формате S3TC. Поставляя свои приложения с уже сжатыми текстурами, независимые поставщики программного обеспечения (ISV) могут заранее использовать высококачественные кодировщики в формат S3TC, избегая тем самым любых задержек при загрузки текстур для их сжатия «на лету». Плюс к этому, использование заранее сжатых текстур облегчает решение проблем со свободным пространством на носителе информации, например, для поставки игры, будь то CD-ROM или дискета.

Количественное сравнение разных форматов текстур

Чтобы было легче понять, как технология S3TC влияет на улучшение качества изображений в 3D приложениях, в приведенной ниже таблице показано, какое количество текстур с различными размерами и в разных форматах может храниться в ограниченном объеме памяти. В данном примере для хранения текстур доступно 8 Мб памяти. Цифры, обозначающие количество текстур, подразумевают возможность использования текстур с различными уровнями детализации (mip-mapping). Формат цвета для несжатых и палетизированных текстур — 24 бит и 8 бит на тексель соответственно.

Размер текстурыНесжатаяПалетизированнаяСжатая в формате S3TC
64 x 6451215363072
256 x 2563296192
1024 x 10242612

Если имеется кадровый буфер, под который отведено 8 Мб памяти, то для приложения, выполняемого в разрешении 800×600 и 16-битном цвете с двойной буферизацией и 16-битным Z-буфером, останется дополнительно еще 5.25 Мб свободной памяти для хранения текстур. Если использовать технологию сжатия текстур S3TC, то эти 5.25 Мб будут эквивалентны объему памяти, в котором можно хранить 31.5 Мб текстур. Более того, вы сможете использовать тройную буферизацию, и у вас все еще останется свободным эквивалент памяти для хранения 26 Мб текстур. Или вы можете в четыре раза увеличить разрешение всех текстур, конвертировав их все в текстуры с различными уровнями детализации (mipmaps), и у вас все равно еще останется эквивалент 3.5 Мб свободного пространства для хранения текстур.

Разработчик может использовать любую комбинацию из всех перечисленных возможностей, но нельзя использовать их все одновременно. Все перечисленные возможности значительно усилят реализм создаваемых на компьютерах трехмерных сцен.

Заключение

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *