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


Использование трехмерных ресурсов в игре или приложении

В этой статье описано использование Visual Studio для обработки трехмерных активов и включения их в состав сборок.

После создания трехмерных активов с помощью средств в Visual Studio эти активы нужно использовать в приложении. Однако сначала их необходимо преобразовать в формат, поддерживаемый DirectX. Чтобы упростить преобразование активов, Visual Studio предоставляет настройки сборки для каждого из создаваемых видов активов. Для включения активов в состав сборки достаточно настроить проект на использование настроек сборки, добавить активы в проект и настроить их на использование подходящей настройки сборки. После этого вы можете загрузить активы в приложение и использовать их, создавая и заполняя ресурсы DirectX аналогично любому другому приложению DirectX.

Настройка проекта

Перед развертыванием трехмерных активов в составе сборки необходимо сообщить Visual Studio, какие виды активов вы хотите развернуть. Visual Studio уже поддерживает множество типов файлов, однако поскольку лишь некоторые приложения используют трехмерные активы, Visual Studio не предполагает включение таких файлов в проект. Вы можете указать Visual Studio на то, что ваше приложение использует такие виды активов, с помощью настроек сборки — файлов, которые сообщают Visual Studio, как наиболее оптимально обрабатывать разные типы файлов, предоставляемые для разных видов активов. Поскольку эти настройки применяются для отдельного проекта, достаточно просто добавить их в свой проект.

Добавление настроек сборки в свой проект

  1. В обозревателе решений откройте контекстное меню для своего проекта и выберите Зависимости сборки, Настройки сборки. Откроется диалоговое окно Файлы настройки сборки для Visual C++.

  2. В области Доступные файлы настройки сборки установите флажки, соответствующие тем типам активов, которые вы хотите использовать в своем проекте, в соответствии со следующей таблицей:

    Тип актива

    Имя настройки сборки

    Текстуры и изображения

    ImageContentTask(.targets, .props)

    Трехмерные модели

    MeshContentTask(.targets, .props)

    Шейдеры

    ShaderGraphContentTask(.targets, .props)

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

Включение активов в состав сборки

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

Добавление актива в сборку

  1. В обозревателе решений войдите в проект, откройте контекстное меню актива и выберите Свойства. Отображается диалоговое окно Страница свойств этого актива.

  2. Убедитесь, что для свойств Конфигурация и Платформа заданы значения, соответствующие необходимым вам изменениям.

  3. В области Свойства конфигурации выберите Общие, а затем в сетке свойств в области Общие установите для свойства Тип элемента соответствующий тип элемента конвейера содержимого. Например, для файла изображения или текстуры выберите Конвейер содержимого изображения.

    Важно!

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

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

Здесь приведены три типа элемента конвейера содержимого и соответствующие им типы исходных и выходных файлов.

Тип элемента

Типы исходных файлов

Формат выходных файлов

Конвейер содержимого изображения

Формат PNG

Формат JPEG (JPG, JPEG, JPE, JFIF)

Поверхность DirectDraw (DDS)

Формат GIF

Точечный рисунок (BMP, DIB)

Формат TIFF (TIF, TIFF)

Формат Targa (TGA)

Поверхность DirectDraw (DDS)

Конвейер содержимого сетки

Файл обмена данными AutoDesk FBX (FBX)

Файл Collada DAE (DAE)

Файл Wavefront OBJ (OBJ)

Файл трехмерной сетки (CMO)

Конвейер содержимого шейдера

Визуальный граф шейдера (DGSL)

Компилированный вывод шейдера (CSO)

Настройка свойств конвейера содержимого активов

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

Настройка свойств конвейера содержимого

  1. В обозревателе решений войдите в проект, откройте контекстное меню для файла актива и выберите Свойства. Отображается диалоговое окно Страница свойств этого актива.

  2. Убедитесь, что для свойств Конфигурация и Платформа заданы значения, соответствующие необходимым вам изменениям.

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

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

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

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

Свойство

Описание

Сжать

Задает тип сжатия, используемый для выходного файла.

Доступны следующие варианты:

  • Без сжатия

  • Сжатие BC1_UNORM

  • Сжатие BC1_UNORM_SRGB

  • Сжатие BC2_UNORM

  • Сжатие BC2_UNORM_SRGB

  • Сжатие BC3_UNORM

  • Сжатие BC3_UNORM_SRGB

  • Сжатие BC4_UNORM

  • Сжатие BC4_SNORM

  • Сжатие BC5_UNORM

  • Сжатие BC5_SNORM

  • Сжатие BC6H_UF16

  • Сжатие BC6H_SF16

  • Сжатие BC7_UNORM

  • Сжатие BC7_UNORM_SRGB

Сведения о поддерживаемых форматах сжатия в разных версиях DirectX см. вруководстве по программированию для DXGI.

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

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

Создать MIP-объекты

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

Вывод содержимого

Задает имя выходного файла.

Важно!

Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат.

Конфигурация конвейера содержимого сетки

При использовании средства конвейера содержимого сетки для сборки актива сетки вы можете изменить имя выходного файла.

Свойство

Описание

Вывод содержимого

Задает имя выходного файла.

Важно!

Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат.

Конфигурация конвейера содержимого шейдера

При использовании средства конвейера содержимого шейдера для сборки актива шейдера вы можете изменить имя выходного файла.

Свойство

Описание

Вывод содержимого

Задает имя выходного файла.

Важно!

Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат.

Загрузка и использование трехмерных активов во время выполнения

Использование текстур и изображений

Direct3D предоставляет функции для создания ресурсов текстур. Служебная библиотека D3DX11 в Direct3D 11 предоставляет дополнительные функции для создания ресурсов текстур и представлений ресурсов прямо из файлов изображений. Дополнительные сведения о создании ресурса текстуры в Direct3D 11 см. в статье Текстуры. Дополнительные сведения об использовании библиотеки D3DX11 для создания ресурса текстуры или представления ресурсов из файла изображения см. в статье Практическое руководство. Инициализация текстуры из файла.

Использование трехмерных моделей

Direct3D 11 не предоставляет функции для создания ресурсов из трехмерных моделей. Вместо этого вам необходимо написать код, который считывает файл трехмерной модели и создает буферы вершин и индексов, представляющие трехмерную модель и все необходимые ей ресурсы, например текстуры или шейдеры.

Использование шейдеров

Direct3D предоставляет функции для создания ресурсов шейдеров и их привязки к программируемому графическому конвейеру. Дополнительные сведения о создании ресурса шейдера в Direct3D и его привязке к конвейеру см. в руководстве по программированию для HLSL.

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

struct PixelShaderInput
{
    float4 pos : SV_POSITION;
    float4 diffuse : COLOR;
    float2 uv : TEXCOORD0;
    float3 worldNorm : TEXCOORD1;
    float3 worldPos : TEXCOORD2;
    float3 toEye : TEXCOORD3;
    float4 tangent : TEXCOORD4;
    float3 normal : TEXCOORD5;
};

В зависимости от используемых в шейдере узлов конструктора шейдеров вам также может понадобиться предоставить дополнительные данные в формате, соответствующем этим определениям:

Texture2D Texture1 : register( t0 );
Texture2D Texture2 : register( t1 );
Texture2D Texture3 : register( t2 );
Texture2D Texture4 : register( t3 );
Texture2D Texture5 : register( t4 );
Texture2D Texture6 : register( t5 );
Texture2D Texture7 : register( t6 );
Texture2D Texture8 : register( t7 );

TextureCube CubeTexture1 : register( t8 );
TextureCube CubeTexture2 : register( t9 );
TextureCube CubeTexture3 : register( t10 );
TextureCube CubeTexture4 : register( t11 );
TextureCube CubeTexture5 : register( t12 );
TextureCube CubeTexture6 : register( t13 );
TextureCube CubeTexture7 : register( t14 );
TextureCube CubeTexture8 : register( t15 );

SamplerState TexSampler : register( s0 );

cbuffer MaterialVars : register (b0)
{
    float4 MaterialAmbient;
    float4 MaterialDiffuse;
    float4 MaterialSpecular;
    float4 MaterialEmissive;
    float MaterialSpecularPower;
};

cbuffer LightVars : register (b1)
{
    float4 AmbientLight;
    float4 LightColor[4];
    float4 LightAttenuation[4];
    float3 LightDirection[4];
    float LightSpecularIntensity[4];
    uint IsPointLight[4];
    uint ActiveLights;
}

cbuffer ObjectVars : register(b2)
{
    float4x4 LocalToWorld4x4;
    float4x4 LocalToProjected4x4;
    float4x4 WorldToLocal4x4;
    float4x4 WorldToView4x4;
    float4x4 UVTransform4x4;
    float3 EyePosition;
};

cbuffer MiscVars : register(b3)
{
    float ViewportWidth;
    float ViewportHeight;
    float Time;
};

Связанные разделы

Заголовок

Описание

Практическое руководство. Экспорт текстуры, содержащей MIP-карты

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

Практическое руководство. Экспорт текстуры с предварительно умноженными значениями альфа

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

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

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

Работа с трехмерными ресурсами для игр и приложений

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

Практическое руководство. Экспорт шейдера

Описывает процесс экспорта шейдера из конструктора шейдеров.