Экспорт форматов расширенных текстур с помощью конвейера содержимого изображения в Visual Studio

В этой статье описывается, как использовать конвейер содержимого изображения для экспорта текстур, таких как те, которые содержат MIP-карты, или предварительно подготовленные альфа-файлы или даже те, которые можно использовать с приложениями Direct2D или JavaScript.

Экспорт текстуры, содержащей MIP-карты

Конвейер содержимого изображения может создавать MIP-карты из исходного изображения как часть этапа сборки вашего проекта. Для достижения некоторых эффектов иногда требуется задавать содержимое изображения каждого уровня MIP вручную. Если вам не нужно указывать содержимое изображения каждого уровня MIP вручную, создание MIP-карт во время сборки гарантирует, что содержимое MIP-карты никогда не будет синхронизировано. Это также устраняет затраты на производительность создания MIP-карт во время выполнения.

В этой статье рассматриваются следующие вопросы:

  • Настройка исходного изображения для обработки в конвейере содержимого изображения.

  • Настройка конвейера содержимого изображения для формирования MIP-карты.

Экспорт MIP-карты

Использование MIP-уровней обеспечивает автоматический уровень детализации экрана пространства для текстурированных поверхностей в трехмерных играх или приложениях. Это повышает производительность отрисовки игры или приложения путем предварительной компиляции ниже примеров версий текстуры. Предварительно компьютеризируемые версии означает, что все текстуры не должны быть ниже при каждом выборке.

Экспорт текстуры с MIP-картами

  1. Сначала создайте простейшую текстуру. Загрузите существующий файл образа или создайте его. Для поддержки MIP-карт укажите текстуру, ширина и высота которой являются степенью 2 например, 64 x 64, 256 x 256 или 512 x 512.

  2. Настройте только что созданный файл текстуры так, чтобы он обрабатывался конвейером содержимого изображения. В обозревателе решений откройте контекстное меню созданного файла текстуры и выберите пункт Свойства. На странице Свойства конфигурации>Общие задайте для свойства Тип элемента значение Конвейер содержимого изображения. Убедитесь в том, что свойство Содержимое имеет значение Да, а свойство Исключить из сборки — значение Нет. Нажмите Применить.

    Откроется страница свойств конфигурации конвейера содержимого изображения.

  3. Настройте конвейер содержимого изображения для формирования MIP-карт. На странице Свойства конфигурации>Конвейер содержимого изображения>Общие задайте для свойства Создать MIP-объекты значение Да (/generatemips).

  4. Нажмите ОК.

Когда выполняется сборка проекта, конвейер содержимого изображения преобразует исходное изображение из рабочего формата в указанный вами выходной формат (в том числе MIP-уровни). Результат копируется в выходной каталог проекта.

Экспорт текстуры с предварительным умножением альфа-канала

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

В этом документе описаны следующие действия.

  • Настройка исходного изображения для обработки в конвейере содержимого изображения.

  • Настройка конвейера содержимого изображения для формирования предварительно умноженного альфа-канала.

Предварительно умноженный альфа-канал

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

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

  • Ввиду ассоциативной природы наложения предварительно умноженного альфа-канала упрощается многопроходный рендеринг прозрачных объектов.

  • С помощью предварительно умноженного альфа-канала и чисто аддитивное наложение (путем задания значения альфа-канала равным нулю), и наложение с линейной интерполяцией можно выполнять одновременно. Например, в системе частиц аддитивно наложенная частица огня может стать полупрозрачной частицей дыма, для наложения которой используется линейная интерполяция. Без предварительно умноженного альфа-канала частицы огня потребовалось бы нарисовать отдельно от частиц дыма, а затем изменить состояния отрисовки между вызовами Draw.

  • Сжатие текстур с предварительно умноженным альфа-каналом выполняется с более высоким качеством, чем текстур, в которых он не используется, и в них не наблюдается обесцвечивание краев (или эффекта ореола), которое может возникнуть при наложении текстур, в которых не используются предварительно умноженные альфа-каналы.

Создание текстуры, которая использует предварительно подготовленный альфа-объект

  1. Сначала создайте простейшую текстуру. Загрузите существующий файл образа или создайте его.

  2. Настройте файл текстуры так, чтобы он обрабатывался конвейером содержимого изображения. В области Обозреватель решений откройте контекстное меню файла текстуры и выберите Свойства. На странице Свойства конфигурации>Общие задайте для свойства Тип элемента значение Конвейер содержимого изображения. Убедитесь, что свойство Содержимое имеет значение Да, а свойство Исключить из сборки — значение Нет, а затем нажмите кнопку Применить. Откроется страница свойств конфигурации конвейера содержимого изображения.

  3. Настройте конвейер содержимого изображения для формирования предварительно умноженного альфа-канала. На странице Свойства конфигурации>Конвейер содержимого изображения>Общие установите для свойства Преобразование в формат с предварительным умножением альфа-канала значение Да (/generatepremultipliedalpha).

  4. Нажмите кнопку ОК.

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

Экспорт текстуры для использования с приложениями Direct2D и JavaScript

Конвейер содержимого изображения может создавать текстуры, которые совместимы с внутренними соглашениями Direct2D по преобразованию для просмотра. Текстуры такого рода можно применять в приложениях, использующих Direct2D, а также в приложениях UWP, созданных с помощью JavaScript.

В этом документе описаны следующие действия.

  • Настройка исходного изображения для обработки в конвейере содержимого изображения.

  • Настройка конвейера содержимого изображения для создания текстуры, которую можно использовать в приложении Direct2D или JavaScript.

    • Создание DDS-файла с блочным сжатием.

    • Создание предварительно умноженного альфа-канала.

    • Отключение создания MIP-карты.

Соглашения Direct2D о преобразовании для просмотра

Текстуры, которые используются в контексте Direct2D, должны соответствовать следующим конвенциям о преобразовании для просмотра.

  • Direct2D реализует прозрачность и полупрозрачность с предварительным умножением альфа-канала. Текстуры, используемые с Direct2D, должны содержать предварительно умноженные альфа-каналы, даже если в них не используется прозрачность и полупрозрачность.

  • Текстуры должны предоставляться в формате DDS с использованием одного из следующих форматов блочного сжатия.

    • Сжатие BC1_UNORM

    • Сжатие BC2_UNORM

    • Сжатие BC3_UNORM

  • Mipmaps не поддерживаются.

Создание текстуры, совместимой с соглашениями о отрисовке Direct2D

  1. Сначала создайте простейшую текстуру. Загрузите существующий образ или создайте новый. Для поддержки блочного сжатия в формате DDS создайте текстуру, значения ширины и высоты которой кратны четырем, например 100 x 100, 128 x 128 или 256 x 192. Так как mipmapping не поддерживается, текстура не должна быть квадратной и не должна быть мощностью двух размеров.

  2. Настройте файл текстуры так, чтобы он обрабатывался конвейером содержимого изображения. В обозревателе решений откройте контекстное меню созданного файла текстуры и выберите пункт Свойства. На странице Свойства конфигурации>Общие задайте для свойства Тип элемента значение Конвейер содержимого изображения. Убедитесь, что свойство Содержимое имеет значение Да, а свойство Исключить из сборки — значение Нет, а затем нажмите кнопку Применить. Откроется страница свойств конфигурации конвейера содержимого изображения.

  3. В качестве формата выходных данных задайте один из форматов блочного сжатия. На странице Свойства конфигурации>Конвейер содержимого изображения>Общие установите для свойства Сжатие значение Сжатие BC3_UNORM (/compress: BC3_UNORM). В зависимости от конкретных требований можно выбрать один из форматов: BC1, BC2 или BC3. В настоящее время Direct2D не поддерживает текстуры в форматах BC4, BC5, BC6 или BC7. Дополнительные сведения о различных форматах BC см. в статье о блочном сжатии в Direct3D 10.

    Примечание.

    Указанный формат сжатия определяет формат файла, который создается конвейером содержимого изображения. Этот формат отличается от свойства Формат для исходного изображения в редакторе изображений, которое определяет формат, в котором исходного файл изображения сохраняется на диске (то есть рабочий формат). В качестве рабочего формата не рекомендуется использовать формат со сжатием.

  4. Настройте конвейер содержимого изображения так, чтобы он создавал выходные данные с предварительно умноженным альфа-каналом. На странице Свойства конфигурации>Конвейер содержимого изображения>Общие установите для свойства Преобразование в формат с предварительным умножением альфа-канала значение Да (/generatepremultipliedalpha).

  5. Настройте конвейер содержимого изображения так, чтобы он не создавал MIP-карты. На странице Свойства конфигурации>Конвейер содержимого изображения>Общие задайте для свойства Создать MIP-объекты значение Нет.

  6. Нажмите кнопку ОК.

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

Ознакомьтесь с разделом "Работа с текстурами и изображениями", чтобы узнать больше о том, как использовать редактор изображений в Visual Studio для создания или изменения текстур и изображений, используемых в разработке приложений DirectX.