Использование трехмерных ресурсов в игре или приложении
В этой статье описывается, как с помощью Visual Studio обрабатывать трехмерные ресурсы и включать их в сборки.
После использования средств в Visual Studio для создания трехмерных ресурсов следующий шаг — использовать их в приложении. Но прежде чем использовать их, ресурсы необходимо преобразовать в формат, который DirectX может понять. Чтобы помочь вам преобразовать активы, Visual Studio предоставляет настройки сборки для каждого типа актива, которые она может создавать. Чтобы включить ресурсы в сборку, необходимо настроить проект для использования настроек сборки, добавить ресурсы в проект и настроить ресурсы для использования правильной настройки сборки. После этого вы можете загрузить ресурсы в приложение и использовать их, создав и заполнив ресурсы DirectX так же, как и в любом другом приложении DirectX.
Настройка проекта
Прежде чем развертывать трехмерные ресурсы в рамках сборки, Visual Studio должна быть в курсе того, какие типы ресурсов вы хотите развернуть. Visual Studio уже знает о многих распространенных типах файлов, но поскольку только некоторые типы приложений используют трехмерные ресурсы, Visual Studio не предполагает, что проект будет создавать эти типы файлов. Вы можете сообщить Visual Studio, что приложение использует эти типы ресурсов с помощью настроек сборки —файлы, которые сообщают Visual Studio, как обрабатывать различные типы файлов полезным образом, которые предоставляются для каждого типа ресурса. Так как эти настройки применяются на основе каждого проекта, все, что необходимо сделать, — добавить соответствующие настройки в проект.
Добавление настроек сборки в проект
В обозревателе решенийоткройте контекстное меню этого проекта, а затем выберите зависимости сборки>настройка сборки.
Откроется диалоговое окно файлы настроек сборки Visual C++.
В разделе Доступные файлы настройки сборкиустановите флажки, соответствующие типам ресурсов, которые вы хотите использовать в проекте, как описано в следующей таблице:
Тип ресурса Имя настройки сборки Текстуры и изображения ImageContentTask(.targets, .props) Трехмерные модели MeshContentTask(.targets, .props) Шейдеры ShaderGraphContentTask(.targets, .props) Заметка
Visual Studio 2022 17.9.3 удалил поддержку редактора моделей и MeshContentTask из-за проблем безопасности в пакете SDK для Autodesk FBX. См. CVE-2023-27911.
Нажмите кнопку ОК.
Включите ресурсы в сборку
Теперь, когда проект знает о различных типах трехмерных ресурсов, которые вы хотите использовать, следующий шаг — сообщить ему, какие файлы являются трехмерными активами и какими видами ресурсов они являются.
Добавить ресурс в сборку
В обозревателе решенийв вашем проекте откройте контекстное меню ресурса, а затем выберите Свойства.
Откроется диалоговое окно страницы свойств актива.
Убедитесь, что для свойств конфигурации и платформы установлены значения, к которым вы хотите применить изменения.
В разделе Свойства конфигурациивыберите Общие, а затем в сетке свойств в разделе Общиезадайте для свойства тип элемента соответствующий тип элемента конвейера контента. Например, для файла изображения или текстуры выберите конвейер содержимого изображения.
Важный
По умолчанию Visual Studio предполагает, что многие виды файлов изображений должны быть классифицированы с помощью типа элемента изображения, встроенного в Visual Studio. Поэтому необходимо изменить свойство типа элемента для каждого изображения, которое должно быть обработано производственным конвейером для обработки содержимого изображений. Другие типы исходных файлов конвейера контента для трехмерных моделей и графики визуального шейдера по умолчанию присваиваются правильному типу элемента.
Нажмите кнопку ОК.
Ниже приведены три типа элементов конвейера контента и связанные с ними типы исходных и выходных файлов.
Тип элемента | Типы исходных файлов | Формат выходного файла |
---|---|---|
Платформа содержимого изображений | Переносимая сетевая графика (.png) JPEG (.jpg, .jpeg, .jpe, .jfif) Direct Draw Surface (.dds) Формат обмена графикой (.gif) Растровое изображение (.bmp, .dib) Формат тегированного изображения (.tif, .tiff) Targa (.tga) |
DirectDraw Surface (.dds) |
Конвейер содержимого Mesh | Файл обмена AutoDesk FBX (.fbx) Файл Collada DAE (.dae) OBJ-файл Wavefront (.obj) |
файл 3D-сетки (.cmo) |
Конвейер содержимого шейдеров | Граф визуального шейдера (.dgsl) | Скомпилированный результат работы шейдера (.cso) |
Настройка свойств конвейера содержимого ресурса
Вы можете задать свойства конвейера содержимого каждого файла ресурса, чтобы он был создан определенным образом.
Настройка свойств конвейера содержимого
В обозревателе решенийв проекте откройте контекстное меню файла ресурса, а затем выберите Свойства.
Откроется диалоговое окно страницы свойств актива.
Убедитесь, что свойства конфигурации и платформы заданы в значениях, к которым необходимо применить изменения.
В разделе свойства конфигурациивыберите узел конвейера контента (например, конвейер содержимого изображения для ресурсов текстуры и изображения), а затем в сетке свойств задайте свойства соответствующим значениям. Например, чтобы создать мипмапы для ресурса текстуры во время сборки, задайте для свойства Generate Mips значение Да.
Нажмите кнопку ОК.
Конфигурация конвейера содержимого изображения
При использовании средства конвейера содержимого изображения для создания ресурса текстуры можно сжать текстуру различными способами, указать, следует ли создавать уровни 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 compression Сведения о том, какие форматы сжатия поддерживаются в разных версиях DirectX, см. в руководстве по программированию для DXGI. |
Преобразовать в предварительно умноженный альфа-формат | Да для преобразования изображения в предварительно умноженный альфа-формат в выходном файле; в противном случае Нет. Изменен только выходной файл, исходный образ не изменяется. |
создание Mips | Да создать полную цепочку MIP во время сборки и включить ее в выходной файл; в противном случае Нет. Если нет, а исходный файл уже содержит цепочку MIP, выходной файл будет иметь цепочку MIP; в противном случае выходной файл не будет иметь цепочки MIP. |
Вывод контента | Указывает имя выходного файла. Важно: изменение расширения имени файла выходного файла не влияет на его формат файла. |
Конфигурация конвейера содержимого сетки
При использовании средства конвейера содержимого сетки для создания ресурса сетки можно изменить имя выходного файла.
Свойство | Описание |
---|---|
выходные данные содержимого | Указывает имя выходного файла. Важно: изменение расширения имени файла выходного файла не влияет на его формат файла. |
Конфигурация конвейера содержимого шейдера
При использовании средства конвейера содержимого шейдера для создания ресурса шейдера можно изменить имя выходного файла.
Свойство | Описание |
---|---|
результаты содержимого | Указывает имя выходного файла. Важно: изменение расширения имени файла выходного файла не влияет на его формат файла. |
Загрузка и использование трехмерных ресурсов во время выполнения
Использование текстур и изображений
Direct3D предоставляет функции для создания ресурсов текстур. В Direct3D 11 служебная библиотека D3DX11 предоставляет дополнительные функции для создания ресурсов текстур и представлений ресурсов непосредственно из файлов изображений. Дополнительные сведения о создании ресурса текстуры в 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 или JavaScript | Описывает, как использовать конвейер содержимого изображения для экспорта текстуры, которую можно использовать в приложении Direct2D или JavaScript. |
Работа с трехмерными ресурсами для игр и приложений | Описывает средства редактирования, предоставляемые Visual Studio для создания трехмерных ресурсов и управления ими, включая текстуры и изображения, трехмерные модели и шейдеры. |
Инструкция по экспорту шейдера | Описывает экспорт шейдера из конструктора шейдеров. |