Поделиться через


Ресурсы сжатых текстур (Direct3D 9)

Карты текстуры — это цифровые изображения, нарисованные на трехмерных фигурах для визуальной детализации. Они сопоставляются с этими фигурами на этапе растеризации, и этот процесс может потреблять большие объемы системной шины и памяти. Чтобы уменьшить объем памяти, потребляемый текстурами, Direct3D поддерживает сжатие поверхностей текстуры. Некоторые устройства Direct3D поддерживают сжатые поверхности текстур по умолчанию. На таких устройствах после того как вы создали сжатую поверхность и загрузили в нее данные, поверхность можно использовать в Direct3D как любую другую поверхность текстуры. Direct3D обрабатывает распаковку, если текстура сопоставлена трехмерному объекту.

Эффективность хранилища и сжатие текстур

Все форматы сжатия текстур являются степенью двух. Это не означает, что текстура обязательно должна быть квадратной, но означает, что значения x и y должны быть степенями двух. Например, если текстура изначально имеет размер 512 на 128 байтов, следующая текстура будет иметь размеры 256 на 64 и так далее, при этом каждый уровень будет уменьшаться на степень двух. На более низких уровнях, где текстура фильтруется до 16 на 2 и 8 на 1, будут присутствовать неиспользованные биты, поскольку блок сжатия — это всегда блок текселей 4 на 4. Неиспользованные части блока отбиваются. Несмотря на существование неиспользованных битов на более низких уровнях, совокупное преимущество значительно. В худшем случае в теории можно создать структуру 2000 на 1 (нулевая степень 2). В этом случае шифруется только одна строка пикселей на блок, остальная часть блока не используется.

Смешивание форматов в одной текстуре

Обратите внимание, что любая текстура должна указывать, что ее данные хранятся по 64 или 128 битов на группу из 16 текселей. Если для текстуры используются 64-разрядные блоки, то есть формат DXT1, то в одной и той же текстуре можно смешивать непрозрачные и 1-разрядные альфа-форматы. Иными словами, сравнение целочисленной величины без знака color_0 и color_1 выполняется однозначно для каждого блока из 16 текселей.

После использования 128-разрядных блоков альфа-канал необходимо указать в явном (формат DXT2 и DXT3) или интерполированном режиме (формат DXT4 и DXT5) для всей текстуры. Как и в случае с цветом, при выборе режима интерполяции (формат DXT4 и DXT5) можно использовать восемь интерполированных альфа-файлов или шесть интерполированных альфа-файлов в блоке. Опять же, сравнение величин alpha_0 и alpha_1 выполняется однозначно по блокам.

Direct3D предоставляет службы для сжатия поверхностей, которые служат для текстурирования трехмерных моделей. Этот раздел содержит сведения о создании данных на сжатой поверхности текстуры и работе с этими данными.

Сведения содержатся в следующих разделах.

Текстуры Direct3D