Вариант сжатия текстур BC
Включает блочное сжатие текстур, которые имеют формат пикселей, являющийся вариантом формата B8G8R8X8, B8G8R8A8 или R8G8B8A8.
Интерпретация
Форматы с блочным сжатием, такие как BC1, BC2 и BC3, занимают значительно меньше памяти, чем несжатые форматы изображений, и поэтому требуют значительно меньшей пропускной способности памяти. В сравнении с несжатым форматом, использующим 32 бита на пиксель, формат BC1 (ранее известный как DXT1) обеспечивает коэффициент сжатия 8:1, а формат BC3 (ранее известный как DXT5) — коэффициент сжатия 4:1. Различие между форматами BC1 и BC3 заключается в том, что формат BC1 не поддерживает альфа-канал, а формат BC3 поддерживает альфа-канал с блочным сжатием. Несмотря на высокую степень сжатия, качество изображения для типичных текстур снижается незначительно. Однако результаты блочного сжатия некоторых типов текстур, например со значительными вариациями цвета в пределах небольшой области, могут быть неприемлемыми.
Если ваши текстуры подходят для блочного сжатия и не требуют идеальной точности цветовоспроизведения, рекомендуется использовать формат с блочным сжатием, чтобы сократить использование памяти и пропускной способности.
Заметки
Текстуры сжимаются с использованием формата с блочным сжатием при каждом вызове ID3DDevice::CreateTexture2D, который создает исходную текстуру. В частности, текстуры сжимаются в указанных ниже случаях.
Объект D3D11_TEXTURE2D_DESC, передаваемый в pDesc, описывает неизменяемый ресурс шейдера, то есть:
Для члена BindFlags установлен только флаг D3D11_BIND_SHADER_RESOURCE.
Для члена Usage установлен флаг D3D11_USAGE_DEFAULT или D3D11_USAGE_IMMUTABLE.
Член CPUAccessFlags имеет значение 0 (нет доступа к ЦП).
Для члена SamplerDesc член Count имеет значение 1 (многовыборочное сглаживание (MSAA) не применяется).
Исходные данные передаются в вызов метода CreateTexture2D.
Ниже перечислены поддерживаемые исходные форматы и форматы с блочным сжатием.
Исходный формат |
Сжатый формат |
---|---|
DXGI_FORMAT_B8G8R8X8_UNORM |
BC1 (ранее DXT1) |
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB |
BC1 |
DXGI_FORMAT_B8G8R8X8_TYPELESS |
BC1 |
DXGI_FORMAT_B8G8R8A8_UNORM |
BC3 (ранее DXT5) |
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB |
BC3 |
DXGI_FORMAT_B8G8R8A8_TYPELESS |
BC3 |
DXGI_FORMAT_R8G8B8A8_UNORM |
BC3 |
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB |
BC3 |
DXGI_FORMAT_R8G8B8A8_TYPELESS |
BC3 |
Если текстура имеет формат, отсутствующий в этом списке, то она не изменяется.
Ограничения
Иногда текстуры, созданные с использованием варианта форматов изображений B8G8R8A8 или R8G8B8A8, на самом деле не используют альфа-канал, но вариант не может определить, используется он или нет. Для обеспечения правильной цветопередачи при использовании альфа-канала вариант всегда кодирует эти форматы в менее эффективный формат BC3. Если альфа-канал не используется, то вы можете обеспечить более точное определение потенциальной производительности отрисовки для вашего приложения модулем анализа кадров графики при использовании этого варианта с помощью варианта формата изображения B8G8R8X8. Это позволит варианту использовать более эффективный формат BC1.
Пример
Этот вариант осуществляет блочное сжатие текстур во время выполнения перед вызовом метода CreateTexture2D. Мы не рекомендуем такой подход для рабочего кода, так как несжатые текстуры занимают больше места на диске, а дополнительное действие может значительно увеличить время загрузки в приложении, так как для кодирования при блочном сжатии требуется значительное количество вычислительных ресурсов. Вместо этого мы рекомендуем сжимать текстуры с помощью редактора или обработчика изображений, включенного в процесс сборки. Таким образом можно сократить требования к дисковому пространству, устранить дополнительную нагрузку во время выполнения и получить дополнительное время на обработку, чтобы обеспечить максимальное качество изображения.