Практическое руководство. Использование трехмерных ресурсов в игре или приложении How to: Use 3D assets in your game or app
В этой статье описано использование Visual Studio для обработки трехмерных ресурсов и включения их в состав сборок. This article describes how you can use Visual Studio to process 3D assets and include them in your builds.
После создания трехмерных ресурсов с помощью средств в Visual Studio эти ресурсы можно использовать в приложении. After you use the tools in Visual Studio to create 3D assets, the next step is to use them in your app. Однако сначала их необходимо преобразовать в формат, поддерживаемый DirectX. But, before you can use them, your assets have to be transformed into a format that DirectX can understand. Чтобы упростить преобразование ресурсов, Visual Studio предоставляет настройки сборки для каждого из создаваемых видов ресурсов. To help you transform your assets, Visual Studio provides build customizations for each kind of asset that it can produce. Для включения активов в состав сборки достаточно настроить проект на использование настроек сборки, добавить активы в проект и настроить их на использование подходящей настройки сборки. To include the assets in your build, all you have to do is configure your project to use the build customizations, add the assets to your project, and configure the assets to use the correct build customization. После этого вы можете загрузить активы в приложение и использовать их, создавая и заполняя ресурсы DirectX аналогично любому другому приложению DirectX. After that, you can load the assets into your app and use them by creating and filling DirectX resources just like you would in any other DirectX app.
Настройка проекта Configure your project
Перед развертыванием трехмерных ресурсов в составе сборки необходимо сообщить Visual Studio, какие виды ресурсов вы хотите развернуть. Before you can deploy your 3D assets as part of your build, Visual Studio has to know about the kinds of assets that you want to deploy. Visual Studio уже поддерживает множество распространенных типов файлов, однако поскольку лишь некоторые приложения используют трехмерные ресурсы, Visual Studio не предполагает включение таких файлов в проект. Visual Studio already knows about many common file types, but because only certain kinds of apps use 3D assets, Visual Studio doesn’t assume that a project will build these kinds of files. Вы можете сообщить Visual Studio, что ваше приложение использует такие виды ресурсов, с помощью настроек сборки — файлов, которые сообщают Visual Studio, как наиболее оптимально обрабатывать разные типы файлов, предоставляемые для разных видов ресурсов. You can tell Visual Studio that your app uses these kinds of assets by using the build customizations—files that tell Visual Studio how to process different types of files in a useful way—that are provided for each asset type. Поскольку эти настройки применяются для отдельного проекта, достаточно просто добавить их в свой проект. Because these customizations are applied on a per-project basis, all you have to do is add the appropriate customizations to your project.
Добавление настроек сборки в свой проект To add the build customizations to your project
В обозревателе решений откройте контекстное меню для своего проекта и выберите Зависимости сборки > Настройки сборки. In Solution Explorer, open the shortcut menu for the project, and then choose Build Dependencies > Build Customizations.
Отображается диалоговое окно Файлы настройки сборки для Visual C++ . The Visual C++ Build Customizations Files dialog box appears.
В области Доступные файлы настройки сборки установите флажки, соответствующие тем типам активов, которые вы хотите использовать в своем проекте, в соответствии со следующей таблицей: Under Available Build Customization Files, select the check boxes that correspond to the asset types that you want to use in your project, as described in the following table:
Тип актива Asset type | Имя настройки сборки Build customization Name |
---|---|
Текстуры и изображения Textures and images | ImageContentTask(.targets, .props)ImageContentTask(.targets, .props) |
Трехмерные модели 3D Models | MeshContentTask(.targets, .props)MeshContentTask(.targets, .props) |
Шейдеры Shaders | ShaderGraphContentTask(.targets, .props)ShaderGraphContentTask(.targets, .props) |
Нажмите кнопку ОК . Choose the OK button.
Включение ресурсов в состав сборки Include assets in your build
Теперь, когда проект поддерживает разные виды трехмерных ресурсов, которые вы хотите использовать, необходимо сообщить ему, какие файлы являются трехмерными ресурсами и к каким типам ресурсов они относятся. Now that your project knows about the different kinds of 3D assets that you want to use, the next step is to tell it which files are 3D assets and what kinds of assets they are.
Добавление актива в сборку To add an asset to your build
В обозревателе решений войдите в проект, откройте контекстное меню актива и выберите Свойства. In Solution Explorer, in your project, open the shortcut menu of an asset, and then choose Properties.
Отображается диалоговое окно Страница свойств этого актива. The asset’s Property Page dialog box appears.
Убедитесь, что для свойств Конфигурация и Платформа заданы значения, соответствующие необходимым вам изменениям. Make sure that the Configuration and Platform properties are set to the values to which you want your changes to apply.
В области Свойства конфигурации выберите Общие, а затем в сетке свойств в области Общие установите для свойства Тип элемента соответствующий тип элемента конвейера содержимого. Under Configuration Properties, choose General, and then in the property grid, under General, set the Item Type property to the appropriate content pipeline item type. Например, для файла изображения или текстуры выберите Конвейер содержимого изображения. For example, for an image or texture file, choose Image Content Pipeline.
По умолчанию в Visual Studio предполагается, что множество видов файлов изображений следует классифицировать по типу элемента Изображение, встроенному в Visual Studio. By default, Visual Studio assumes that many kinds of image files should be categorized by using the Image item type that’s built into Visual Studio. Таким образом, вам нужно изменить значение свойства Тип элемента для каждого изображения, которое должно быть обработано конвейером содержимого изображения. Therefore, you have to change the Item Type property of each image that you want to be processed by the image content pipeline. Другие типы исходных файлов конвейера содержимого для трехмерных моделей и графиков визуальных шейдеров по умолчанию используют правильный Тип элемента. Other types of content pipeline source files for 3D models and visual shader graphics default to the correct Item Type.
Нажмите кнопку ОК . Choose the OK button.
Ниже приведены три типа элемента конвейера содержимого и соответствующие им типы исходных и выходных файлов. Following are the three content pipeline item types and their associated source and output file types.
Тип элемента Item Type | Типы исходных файлов Source file types | Формат выходных файлов Output file format |
---|---|---|
Конвейер содержимого изображения Image Content Pipeline | Формат PNG (Portable Network Graphics) Portable Network Graphics (.png) Поверхность DirectDraw (DDS) Direct Draw Surface (.dds) Формат GIF (Graphics Interchange Format) Graphics Interchange Format (.gif) Формат TIFF (TIF, TIFF) Tagged Image File Format (.tif, .tiff) Формат Targa (TGA) Targa (.tga) | Поверхность DirectDraw (DDS) DirectDraw Surface (.dds) |
Конвейер содержимого сетки Mesh Content Pipeline | Файл обмена данными AutoDesk FBX (FBX) AutoDesk FBX Interchange File (.fbx) Файл Collada DAE (DAE) Collada DAE File (.dae) Файл Wavefront OBJ (OBJ) Wavefront OBJ File (.obj) | Файл трехмерной сетки (CMO) 3D mesh file (.cmo) |
Конвейер содержимого шейдера Shader Content Pipeline | Визуальный граф шейдера (DGSL) Visual Shader Graph (.dgsl) | Компилированный вывод шейдера (CSO) Compiled Shader Output (.cso) |
Настройка свойств для конвейера содержимого ресурсов Configure asset content pipeline properties
Вы можете задать свойства конвейера содержимого для каждого из файлов активов, чтобы выполнить его сборку нужным образом. You can set the content pipeline properties of each asset file so that it will be built in a specific way.
Настройка свойств конвейера содержимого To configure content pipeline properties
В обозревателе решений войдите в проект, откройте контекстное меню для файла актива и выберите Свойства. In Solution Explorer, in your project, open the shortcut menu for the asset file, and then choose Properties.
Отображается диалоговое окно Страница свойств этого актива. The asset’s Property Page dialog box appears.
Убедитесь, что для свойств Конфигурация и Платформа заданы значения, соответствующие необходимым вам изменениям. Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.
В области Свойства конфигурации выберите узел конвейера содержимого, например Конвейер содержимого изображения для активов текстур и изображений, а затем задайте нужные значения для свойств в сетке свойств. Under Configuration Properties, choose the content pipeline node (for example, Image Content Pipeline for texture and image assets), and then in the property grid, set the properties to the appropriate values. Например, чтобы создать MIP-карты для актива текстуры во время сборки, задайте для свойства Создать MIP-объекты значение Да. For example, to generate mipmaps for a texture asset at build time, set the Generate Mips property to Yes.
Нажмите кнопку ОК . Choose the OK button.
Конфигурация конвейера содержимого изображения Image content pipeline configuration
При использовании средства конвейера содержимого изображения для сборки актива текстуры вы можете применять разнообразные способы сжатия текстуры, указывать, требуется ли создавать MIP-уровни во время сборки, а также изменять имя выходного файла. When you use the image content pipeline tool to build a texture asset, you can compress the texture in various ways, indicate whether MIP levels should be generated at build time, and change the name of the output file.
Свойство. Property | Описание Description |
---|---|
Сжатие Compress | Задает тип сжатия, используемый для выходного файла. Specifies the compression type that’s used for the output file. Доступны следующие варианты: The available options are: — Без сжатия — No Compression Сведения о поддерживаемых форматах сжатия в разных версиях DirectX см. в руководстве по программированию для DXGI. For information about which compression formats are supported in different versions of DirectX, see Programming Guide for DXGI. |
Преобразование в формат с предварительным умножением альфа-канала Convert to pre-multiplied alpha format | Да для преобразования изображения в формат с предварительным умножением альфа-канала в выходном файле; в противном случае Нет. Yes to convert the image to pre-multiplied alpha format in the output file; otherwise, No. Изменяется только выходной файл, исходное изображение остается неизменным. Only the output file is changed, the source image is unchanged. |
Создать MIP-объекты Generate Mips | Да для создания полной MIP-цепочки во время сборки и включения ее в выходной файл; в противном случае Нет. Yes to generate a full MIP chain at build time and include it in the output file; otherwise, No. Если задано значение Нет и исходный файл уже содержит цепочку MIP-карт, то в выходном файле будет присутствовать MIP-цепочка; в противном случае выходной файл не будет содержать MIP-цепочку. If No, and the source file already contains a mipmap chain, then the output file will have a MIP chain; otherwise, the output file will have no MIP chain. |
Вывод содержимого Content Output | Задает имя выходного файла. Specifies the name of the output file. Внимание! Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат. Important: Changing the file name extension of the output file has no effect on its file format. |
Конфигурация конвейера содержимого сетки Mesh content pipeline configuration
При использовании средства конвейера содержимого сетки для сборки актива сетки вы можете изменить имя выходного файла. When you use the mesh content pipeline tool to build a mesh asset, you can change the name of the output file.
Свойство. Property | Описание Description |
---|---|
Вывод содержимого Content Output | Задает имя выходного файла. Specifies the name of the output file. Внимание! Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат. Important: Changing the file name extension of the output file has no effect on its file format. |
Конфигурация конвейера содержимого шейдера Shader content pipeline configuration
При использовании средства конвейера содержимого шейдера для сборки актива шейдера вы можете изменить имя выходного файла. When you use the shader content pipeline tool to build a shader asset, you can change the name of the output file.
Свойство. Property | Описание Description |
---|---|
Вывод содержимого Content Output | Задает имя выходного файла. Specifies the name of the output file. Внимание! Изменение расширения имени для выходного файла не оказывает никакого влияния на его формат. Important: Changing the file name extension of the output file has no effect on its file format. |
Загрузка и использование трехмерных ресурсов во время выполнения Load and use 3D assets at run time
Использование текстур и изображений Use textures and images
Direct3D предоставляет функции для создания ресурсов текстур. Direct3D provides functions for creating texture resources. Служебная библиотека D3DX11 в Direct3D 11 предоставляет дополнительные функции для создания ресурсов текстур и представлений ресурсов прямо из файлов изображений. In Direct3D 11, the D3DX11 utility library provides additional functions for creating texture resources and resource views directly from image files. Дополнительные сведения о создании ресурса текстуры в Direct3D 11 см. в статье Текстуры. For more information about how to create a texture resource in Direct3D 11, see Textures. Дополнительные сведения об использовании библиотеки D3DX11 для создания ресурса текстуры или представления ресурсов из файла изображения см. в статье Практическое руководство. Инициализация текстуры из файла. For more information about how to use the D3DX11 library to create a texture resource or resource view from an image file, see How to: Initialize a texture from a file.
Использование трехмерных моделей Use 3D models
Direct3D 11 не предоставляет функции для создания ресурсов из трехмерных моделей. Direct3D 11 does not provide functions for creating resources from 3D models. Вместо этого вам необходимо написать код, который считывает файл трехмерной модели и создает буферы вершин и индексов, представляющие трехмерную модель и все необходимые ей ресурсы, например текстуры или шейдеры. Instead, you have to write code that reads the 3D model file and creates vertex and index buffers that represent the 3D model and any resources that the model requires—for example, textures or shaders.
Использование шейдеров Use shaders
Direct3D предоставляет функции для создания ресурсов шейдеров и их привязки к программируемому графическому конвейеру. Direct3D provides functions for creating shader resources and binding them to the programmable graphics pipeline. Дополнительные сведения о создании ресурса шейдера в Direct3D и его привязке к конвейеру см. в руководстве по программированию для HLSL. For more information about how to create a shader resource in Direct3D and bind it to the pipeline, see Programming guide for HLSL.
В программируемом графическом конвейере каждый этап должен предоставлять следующему этапу результат в поддерживаемом формате. In the programmable graphics pipeline, each stage of the pipeline must give the next stage of the pipeline a result that’s formatted in a way that it can understand. Поскольку конструктор шейдеров может создавать только построители текстуры, именно ваше приложение должно обеспечить требуемый формат получаемых им данных. Because the Shader Designer can only create pixel shaders, this means that it’s up to your app to ensure that the data that it receives is in the format that it expects. Перед построителем текстуры выполняется несколько программируемых этапов шейдера, а также выполняются геометрические преобразования — вершинный построитель текстуры, шейдер поверхности, шейдера домен и шейдер геометрии. Several programmable shader stages occur before the pixel shader and perform geometric transformations—the vertex shader, the hull shader, the domain shader, and the geometry shader. Непрограммируемый этап тесселяции также выполняется перед построителем текстуры. The non-programmable tessellation stage also occurs before the pixel shader. Какой бы из этих этапов не выполнялся непосредственно перед построителем текстуры, он должен предоставлять результат в следующем формате: No matter which of these stages directly precedes the pixel shader, it must give its result in this format:
В зависимости от используемых в шейдере узлов конструктора шейдеров вам также может понадобиться предоставить дополнительные данные в формате, соответствующем этим определениям: Depending on the Shader Designer nodes that you use in your shader, you might also have to provide additional data in the format according to these definitions: