Использование трехмерных ресурсов в игре или приложении
В этой статье описывается, как можно использовать Visual Studio для обработки трехмерных активов и включать их в построения.
После использования средств в Visual Studio для создания активов 3-D, следующим шагом будет использовать их в приложении.Однако прежде чем можно будет использовать их, активы должны быть преобразованы в формат, который может понять DirectX.Чтобы помочь преобразовать активов, Visual Studio предоставляет настройки построения для каждого типа актива, который он может создать.Чтобы включить активы в построении, все что нужно — настроить проект для использования настроек построения, добавить активы в проект, и настроить активы на использование правильной настройки построения.После этого можно загрузить активы в приложение и использовать их путем создания и заполнения ресурсов DirectX, как и в любом другом приложении DirectX.
Настройка проекта
Перед развертыванием активов 3-D как части построения, Visual Studio должен знать о типах активов, которые нужно развертывать.Visual Studio уже знает о многих распространенных типах файлов, однако поскольку только некоторые типы приложений, используют трехмерные активы, Visual Studio не предполагает, что проект построит этих типов файлов.Можно указать Visual Studio, что приложение использует эти типы активов, с помощью Настроек построения — файлов, которые говорят Visual Studio, как обрабатывать различные типы файлов полезным способом — которые предоставляются для каждого типа актива.Поскольку эти настройки применяются на уровне каждого проекта, все, что нужно сделать, это добавить соответствующие настройки в проект.
Добавление настройки построения в проект
В поле Обозреватель решений откройте контекстное меню проекта и выберите Настройки построения.отображается Диалоговое окно Файлы настройки построения для Visual C++.
Вы должны добавить эти настройки построения в Visual Studio только один раз; если они уже были добавлены, то можно пропустить этот шаг.
Нажмите кнопку Найти существующий, а затем перейдите в каталог установки Visual Studio\Common7\IDE\Extensions\Microsoft\VSGraphics\, содержащий три настройки построения, поддерживающие построение трехмерных активов.Выберите один из файлов настройки построения — например, ImageContentTask.targets — и нажмите кнопку Открыть.Когда сообщение, которое запрашивает, нужно ли добавлять каталог в путь поиска настроек построения, нажмите кнопку Да.Это делает все три Настройки построения доступными.
Нажмите кнопку Обновить список, чтобы обновить элемент управления представления сетки Доступные файлы настройки построения.
В элементе управления представления сетки Доступные файлы настройки построения установите флажки, соответствующие типам активов, которые необходимо использовать в проекте, как описано в этой таблице.
Тип актива
Построить имя настройки
Текстуры и изображения
ImageContentTask(.targets, .props)
Трехмерные модели
MeshContentTask (.targets, props)
Шейдеры
ShaderGraphContentTask(.targets, .props)
Нажмите кнопку ОК.
В том числе ресурсы в построении
Теперь, когда ваш проект "знает" о различных типах трехмерных активов, которые вы хотите использовать, следующий шаг — сообщить ему, какие файлы являются трехмерными активами, а также какого рода активами они являются.
Добавление актива В построения
В обозревателе решений в проекте откройте контекстное меню актива, затем выберите пункт Свойства.Откроется диалоговое окно Страница свойств актива.
Убедитесь, что свойства Конфигурация и Платформа установлены на значения, которые нужны для изменения.
В Свойства конфигурации выберите Общие, а затем в сетке свойств, под Общие задайте свойству Item Type соответствующий тип элемента конвейера содержимого.Например, для файла текстуры или изображения выберите Конвейер содержимого изображения.
Важно
По умолчанию Visual Studio предполагает, что много типов файлов изображения, должны быть разбиты по категориям с помощью типа элемента Изображение, встроенного в Visual Studio.Поэтому необходимо изменить свойство Item Type каждого изображения, которое необходимо обрабатывать конвейером содержимого изображений.Другие типы содержимого исходных файлов конвейера для трехмерных моделей и графики визуальных шейдеров по умолчанию имеют правильный Тип элемента.
Нажмите кнопку ОК.
Ниже приводятся 3 типа элементов конвейера содержимого и связанные с ними типы исходных и выходных файлов.
Тип элемента |
Тип файла ресурсов |
Формат выходного файла |
---|---|---|
Конвейер содержимого изображений |
Portable Network Graphics (.png) JPEG (.jpg, .jpeg, .jpe, .jfif) Поверхность DirectDraw (.dds) Graphics Interchange Format (.gif) Точечный рисунок (.bmp, .dib) Tagged Image File Format (.tif, .tiff) Targa (.tga) |
Поверхность DirectDraw (.dds) |
Конвейер содержимого сетки |
Файл обмена AutoDesk FBX (.fbx) Файл Collada DAE (.dae) Файл Wavefront OBJ (.obj) |
Файл 3-D mesh (.cmo) |
Конвейер содержимого шейдеров |
Визуальный граф шейдера (DGSL) |
Скомпилированные выходные данные шейдера (.cso) |
Настройка свойств конвейера содержимого актива
Можно установить свойства содержимого конвейера каждого файла актива, чтобы он был построен особым образом.
Настройка свойств конвейера содержимого
В обозревателе решений вашего проекта откройте контекстное меню файла актива, затем выберите пункт Свойства.Откроется диалоговое окно Страница свойств актива.
Убедитесь, что свойства Конфигурация и Платформа установлены на значения, которые нужны для изменения.
В разделе Свойства конфигурации выберите узел конвейера содержимого — например, Конвейер содержимого изображения для активов текстуры и изображения, а затем в сетке свойств установите свойства на соответствующие значения.Например, чтобы создать MIP-текстуры для ресурса текстуры во время построения, установите свойству Создать MIP-объекты значение Да.
Нажмите кнопку ОК.
Конфигурация конвейера содержимого изображений
При использовании средства конвейера содержимого изображения для построения актива текстуры, можно сжать текстуру различными способами, указать, следует ли создавать уровни MIP во время построения и изменять имя выходного файла.
Свойство |
Описание |
---|---|
Сжатие |
Указывает тип сжатия, используемый для выходного файла. Доступны следующие варианты:
Сведения о том, какие форматы сжатия поддерживаются в различных версиях DirectX, см. в разделе Programming Guide for DXGI. |
Сформировать Mips |
Да, чтобы создать полную цепочку MIP во время построения и включить его в выходной файл; в противном случае – Нет.Если Нет и исходный файл уже содержит цепочку MIP-карт, выходной файл будет иметь цепочку MIP; в противном случае выходной файл не будет иметь цепочки MIP. |
Вывод содержимого |
Задает имя выходного файла. ![]()
Изменение расширения имени выходного файла не влияет на его формат.
|
Конфигурация конвейера содержимого сетки
При использовании средства конвейера содержимого сетки для построения актива сетки, можно изменить имя выходного файла.
Свойство |
Описание |
---|---|
Вывод содержимого |
Задает имя выходного файла. ![]()
Изменение расширения имени выходного файла не влияет на его формат.
|
Конфигурация конвейера содержимого шейдеров
При использовании средства конвейера содержимого шейдера для построения актива шейдера, можно изменить имя выходного файла.
Свойство |
Описание |
---|---|
Вывод содержимого |
Задает имя выходного файла. ![]()
Изменение расширения имени выходного файла не влияет на его формат.
|
Загрузка и использование трехмерных активов во время выполнения
Использование текстур и изображений
Direct3D предоставляет функции для создания ресурсов текстуры.В Direct3D 11 вспомогательная библиотека D3DX11 предоставляет дополнительные функции для создания ресурсов и представлений текстуры непосредственно из файлов изображений.Дополнительные сведения о способах создания текстурного ресурса в Direct3D 11 см. в разделе Textures.Дополнительные сведения о том, как использовать библиотеку 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;
};
См. также
Задачи
Практическое руководство. Экспорт шейдера