Введение
Наложение текстур представляет из себя процесс покрытия элементарными изображениями трехмерные объекты. Текстуры используются для создания эффекта реалистичности деталей поверхностей без усложнения геометрии в трехмерных сценах. В качестве текстур может быть использовано все, начиная от текстуры древесины или мраморной поверхности, до сложных изображений группы людей, зданий, деревьев и т.д. Для имитации настоящих жизненных сцен необходимо использовать большое количество детализированных текстур. Однако это предъявляет определенные требования к системной (или оперативной памяти компьютера) или графической памяти (в зависимости от того, где хранятся текстуры), вынуждая разработчиков приложений использовать минимальное количество текстур с меньшей детализацией для того, чтобы уложиться в рамки ограниченных объемов памяти и пропускной способности системы.
Пространство, в котором хранится текстура (слева), и пространство на экране, в котором располагается наложенная текстура (справа).
Применение AGP сделало возможным хранить текстуры в системной памяти и напрямую загружать их оттуда. Это, в свою очередь, существенно увеличило доступные объемы памяти для хранения текстур. Однако и AGP и интерфейс системной памяти являются ресурсами общего использования. Кроме прокачки текстур, AGP используется для прокачки геометрических данных, а системная память используется для хранения и исполнения приложений, да и самой операционной системы. Итак, не стоит рассчитывать на то, что вся пропускная способность системной памяти будет доступна для считывания текстурных данных. Исходя из этой предпосылки, максимально полное использование всей доступной пропускной способности системной памяти наиболее критично для графической подсистемы, оптимизированной для прокачки текстур через AGP.
Технология сжатия текстур S3TC призвана помочь в преодолении этих двух ограничений за счет предоставления возможности хранения большего количества и больших по объему (а значит, более детализированных) текстур в той же по объему области памяти и, в то же время, значительно снижая требования к ширине полосы пропускания, требуемой для доступа к этим текстурам.
Какие выгоды, если текстуры сжимаются?
Главное, это снижение требований к размеру памяти и ширине полосы пропускания, а это означает увеличение производительности и улучшение качества изображений.
Очевидный выигрыш, который обеспечивает сжатие текстур, в том, что один и тот же объем текстурных данных может храниться в ощутимо меньшем объеме памяти. Это особенно критично в случае, когда текстуры хранят в локальной памяти, расположенной на видеоадаптере и используемой обычно в качестве кадрового буфера. В такой же мере важен факт, что требования к пропускной способности памяти и шины для считывания текстур существенно снижаются, что, в свою очередь, влияет на увеличение производительности при прокачке данных через AGP, если текстуры хранятся в системной памяти.
Системная память и пропускная способность AGP являются конечными ресурсами. При применении сжатия текстур графический акселератор может с большей для себя пользой использовать эти ресурсы.
Увеличение количества и объема текстур
Сжатие текстур может способствовать использованию текстур больших размеров. Если при использовании меньших по размеру текстур, а значит, и менее детализированных, результат их наложения на поверхности выглядит смазанным или составленным как бы из блоков (блочность изображения), то использование больших по размеру текстур дает возможность создавать более детализированные поверхности. Кроме того, сжатие текстур может способствовать использованию большего набора разнообразных текстур в любой момент времени, допуская большее разнообразие отображаемых сцен.
Когда текстуры хранятся вне локальной памяти (кадрового буфера), сжатие может высвободить объем памяти, достаточный для увеличения разрешения на экране монитора или для использования тройной буферизации. Более высокое разрешение на экране обеспечивает более гладкое, более детализированное изображение, в то время, как тройная буферизация может увеличить производительность за счет обеспечения процессору рендеринга возможности начать отображение новой сцены без необходимости дожидаться синхронизации с вертикальной разверткой монитора. Следствием использования тройной буферизации может стать существенное увеличение значения частоты смены кадров (fps), обычно на 30%.
Наложение текстур с различными уровнями детализации (Mip-mapping)
Дополнительный объем памяти, который становиться доступным для использования, при сжатии текстур позволяет использовать наложение текстур с различными уровнями детализации, как будто требуемый дополнительный объем памяти добавлен (а это 30%), по сравнению с одним базовым уровнем детализации. Использование различных уровней детализации текстур позволяют уменьшить количество артефактов в виде неровностей на текстурированных поверхностях, которые распространяются на значительные расстояния. Без использования уровней детализации пиксел на объекте, расположенном далеко от наблюдателя, может быть принят за несколько элементов текстур (текселей) из изначально наложенной текстуры. Фильтрация за малое количество проходов используется для создания изображения без отображения нежелательных артефактов (мерцания, наползание пикселов друг на друга). Фильтрация в реальном времени — достаточно дорогое удовольствие, так что для разных уровней детализации текстур используются заранее сформированные отфильтрованные изображения, что существенно уменьшает сложность фильтрации. Схема ниже показывает четыре простых уровня детализации накладываемых текстур (mip-mapping), каждый из которых соответствует четверти размера следующего уровня.
Кроме того, использование различных уровней детализации может сказаться и на улучшении производительности. Использование текстур с различным разрешением для одного и того же объекта (mip-mapping) обеспечивает последовательный доступ к памяти, в следствие чего становится возможным использование более длинных пакетов данных. С другой стороны, при удалении объекта от наблюдателя пикселы семплируются менее часто (т.е. один тексель формирует не один пиксель, а несколько), что делает возможным осуществление доступа к памяти более произвольным образом, а значит, увеличивается вероятность использования более коротких (но менее эффективных) пакетов данных.
Общая информация о 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 64 | 512 | 1536 | 3072 |
256 x 256 | 32 | 96 | 192 |
1024 x 1024 | 2 | 6 | 12 |
Или другой пример:
Если имеется кадровый буфер, под который отведено 8 Мб памяти, то для приложения, выполняемого в разрешении 800x600 и 16-битном цвете с двойной буферизацией и 16-битным Z-буфером, останется дополнительно еще 5.25 Мб свободной памяти для хранения текстур. Если использовать технологию сжатия текстур S3TC, то эти 5.25 Мб будут эквивалентны объему памяти, в котором можно хранить 31.5 Мб текстур. Более того, вы сможете использовать тройную буферизацию, и у вас все еще останется свободным эквивалент памяти для хранения 26 Мб текстур. Или вы можете в четыре раза увеличить разрешение всех текстур, конвертировав их все в текстуры с различными уровнями детализации (mipmaps), и у вас все равно еще останется эквивалент 3.5 Мб свободного пространства для хранения текстур.
С использованием технологии S3TC разработчики могут:
- использовать в приложениях больше разнообразных текстур
- использовать в приложениях текстуры с более высоким разрешением
- увеличить производительность за счет снижения требований к пропускной способности для считывания текстур из системной памяти, т.к. их можно будет хранить в кадровом буфере
- увеличить производительность за счет использования тройной буферизации и текстур с различными уровнями детализации, т.к. можно будет не использовать синхронизацию с вертикальной разверткой монитора
Разработчик может использовать любую комбинацию из всех перечисленных возможностей, но нельзя использовать их все одновременно. Все перечисленные возможности значительно усилят реализм создаваемых на компьютерах трехмерных сцен.
Заключение
Технология S3TC позволяет более эффективно использовать пространство памяти для хранения текстур и снижает требования к ширине полосы пропускания системы. Технология S3TC предлагает схему сжатия текстур, которая обеспечивает высокое качество изображений с возможностью простого декодирования, легко реализуемого на аппаратном уровне. Приведем список достоинств S3TC:
- Принятая Microsoft как стандартная часть DirectX 6.0, эта технология доступна разработчикам программного обеспечения для использования в своей работе.
- Уменьшение требуемых объемов памяти для хранения текстур позволяет использовать больше текстур, а значит, достигается лучшее качество изображений.
- Снижение требований к ширине полосы пропускания для считывания текстур обеспечивает увеличение общей производительности системы.
- Высокий коэффициент сжатия текстур, до 6:1.
- В основе лежит техника разбиения на блоки и использование фиксированной степени сжатия с произвольным доступом, причем все это легко реализуется на аппаратном уровне.
- Декодирование сжатых текстур на аппаратном уровне происходит очень быстро, декодирование программным путем не вызывает никаких сложностей.
- Отличное качество изображения с использованием сжатых текстур, как правило лучшее, чем при использовании палетизированных текстур, JPEG или просто несжатых текстур в формате RGB565.
- Пикселы с простой прозрачностью могут быть закодированы без дополнительных затрат.
- Поддерживается сжатие текстур со сложной прозрачностью и полупрозрачностью.
- Доступны высококачественные, простые в использовании утилиты для сжатия текстур.