Utilisation de ressources 3D dans vos jeux et applicationsUsing 3-D Assets in Your Game or App

Cet article explique comment vous pouvez utiliser Visual StudioVisual Studio pour traiter les ressources 3D et les inclure dans vos builds.This article describes how you can use Visual StudioVisual Studio to process 3-D assets and include them in your builds.

Une fois que vous avez utilisé les outils de Visual StudioVisual Studio pour créer des ressources 3D, l'étape suivante consiste à les utiliser dans votre application.After you use the tools in Visual StudioVisual Studio to create 3-D assets, the next step is to use them in your app. Mais avant de pouvoir les utiliser, vos ressources doivent être converties dans un format compatible avec DirectX.But before you can use them, your assets have to be transformed into a format that DirectX can understand. Pour vous aider à transformer vos ressources, Visual StudioVisual Studio fournit des personnalisations de build pour chaque type de ressource qu'il peut générer.To help you transform your assets, Visual StudioVisual Studio provides build customizations for each kind of asset that it can produce. Pour inclure les ressources dans votre build, il vous suffit de configurer votre projet pour utiliser les personnalisations de build, ajouter les ressources à votre projet, puis configurer les ressources pour utiliser la personnalisation de build appropriée.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. Ensuite, vous pouvez charger les ressources dans votre application et les utiliser en créant et complétant des ressources DirectX comme dans n'importe quelle autre application 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.

Configuration de votre projetConfiguring your project

Avant de déployer vos ressources 3D dans le cadre de votre build, Visual StudioVisual Studio doit savoir quels types de ressources vous voulez déployer.Before you can deploy your 3-D assets as part of your build, Visual StudioVisual Studio has to know about the kinds of assets that you want to deploy. Visual StudioVisual Studio connaît déjà de nombreux types de fichiers communs, mais comme seuls certains types d'applications utilisent des ressources 3D, Visual StudioVisual Studio ne considère pas qu'un projet va générer ces types de fichiers. already knows about many common file types, but because only certain kinds of apps use 3-D assets, Visual StudioVisual Studio doesn't assume that a project will build these kinds of files. Vous pouvez informer Visual StudioVisual Studio que votre application utilise ces types de ressources à l’aide des fichiers de personnalisation de la build fournis pour chaque type de ressource, qui indiquent à Visual StudioVisual Studio comment traiter différents types de fichiers de manière utile.You can tell Visual StudioVisual Studio that your app uses these kinds of assets by using the build customizations—files that tell Visual StudioVisual Studio how to process different types of files in a useful way—that are provided for each asset type. Comme ces personnalisations sont appliquées projet par projet, tout ce que vous avez à faire est d'ajouter les personnalisations appropriées à votre projet.Because these customizations are applied on a per-project basis, all you have to do is add the appropriate customizations to your project.

Pour ajouter les personnalisations de la build à votre projetTo add the build customizations to your project

  1. Dans l’Explorateur de solutions, ouvrez le menu contextuel du projet et choisissez Dépendances de build, Personnalisations de la build.In Solution Explorer, open the shortcut menu for the project, and then choose Build Dependencies, Build Customizations. La boîte de dialogue Fichiers de personnalisation de la build Visual C++ s’affiche.The Visual C++ Build Customizations Files dialog box is displayed.

  2. Sous Fichiers de personnalisation de la build disponibles, cochez les cases qui correspondent aux types de ressources que vous voulez utiliser dans votre projet, comme décrit dans ce tableau :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 this table:

    Type de ressourceAsset type Nom de personnalisation de la buildBuild customization Name
    Textures et imagesTextures and images ImageContentTask(.targets, .props)ImageContentTask(.targets, .props)
    Modèles 3D3-D Models MeshContentTask(.targets, .props)MeshContentTask(.targets, .props)
    NuanceursShaders ShaderGraphContentTask(.targets, .props)ShaderGraphContentTask(.targets, .props)
  3. Sélectionnez le bouton OK .Choose the OK button.

Inclusion de ressources dans votre buildIncluding assets in your build

Maintenant que votre projet sait quels types de ressources 3D vous voulez utiliser, l'étape suivante consiste à lui indiquer les fichiers qui sont des ressources 3D et les types de ressources auxquels elles correspondent.Now that your project knows about the different kinds of 3-D assets that you want to use, the next step is to tell it which files are 3-D assets, and which kinds of assets they are.

Pour ajouter une ressource à votre buildTo add an asset to your build

  1. Dans l’Explorateur de solutions, dans votre projet, ouvrez le menu contextuel d’une ressource, puis choisissez Propriétés.In Solution Explorer, in your project, open the shortcut menu of an asset, and then choose Properties. La boîte de dialogue Page de propriétés de la ressource s’affiche.The asset's Property Page dialog box is displayed.

  2. Vérifiez que les valeurs définies des propriétés Configuration et Plateforme sont celles auxquelles vous voulez que vos modifications s’appliquent.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. Sous Propriétés de configuration, choisissez Général puis, dans la grille des propriétés, sous Général, affectez à la propriété Type d’élément le type d’élément de pipeline de contenu approprié.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. Par exemple, pour un fichier image ou de texture, choisissez le pipeline de contenu d’image.For example, for an image or texture file, choose Image Content Pipeline.

    Important

    Par défaut, Visual StudioVisual Studio suppose que de nombreux types de fichiers image doivent être classés à l’aide du type d’élément Image intégré à Visual StudioVisual Studio.By default, Visual StudioVisual Studio assumes that many kinds of image files should be categorized by using the Image item type that's built into Visual StudioVisual Studio. Ainsi, vous devez modifier la propriété Type d’élément de chaque image qui doit être traitée par le pipeline de contenu d’image.Therefore, you have to change the Item Type property of each image that you want to be processed by the image content pipeline. Les autres types de fichiers sources de pipeline de contenu pour les modèles 3D et les graphiques de nuanceurs visuels ont pour valeur par défaut le Type d’élément approprié.Other types of content pipeline source files for 3-D models and visual shader graphics default to the correct Item Type.

  4. Sélectionnez le bouton OK .Choose the OK button.

    Voici les trois types d'éléments de pipeline de contenu et leurs types de fichiers sources et de sortie associés.Here are the three content pipeline item types and their associated source and output file types.

Type d'élémentItem Type Types de fichiers sourcesSource file types Format des fichiers de sortieOutput file format
Pipeline de contenu d’imageImage Content Pipeline Portable Network Graphics (.png)Portable Network Graphics (.png)

JPEG (.jpg, .jpeg, .jpe, .jfif)JPEG (.jpg, .jpeg, .jpe, .jfif)

Direct Draw Surface (.dds)Direct Draw Surface (.dds)

Graphics Interchange Format (.gif)Graphics Interchange Format (.gif)

Bitmap (.bmp, .dib)Bitmap (.bmp, .dib)

Tagged Image File Format (.tif, .tiff)Tagged Image File Format (.tif, .tiff)

Targa (.tga)Targa (.tga)
DirectDraw Surface (.dds)DirectDraw Surface (.dds)
Pipeline de contenu de maillageMesh Content Pipeline Fichier d'échange AutoDesk FBX (.fbx)AutoDesk FBX Interchange File (.fbx)

Fichier DAE Collada (.dae)Collada DAE File (.dae)

Fichier Wavefront OBJ (.obj)Wavefront OBJ File (.obj)
Fichier de maillage 3D (.cmo)3-D mesh file (.cmo)
Pipeline de contenu de nuanceurShader Content Pipeline Graphe de nuanceur visuel (.dgsl)Visual Shader Graph (.dgsl) Sortie de nuanceur compilé (.cso)Compiled Shader Output (.cso)

Configuration des propriétés du pipeline de contenu des ressourcesConfiguring asset content pipeline properties

Vous pouvez définir les propriétés du pipeline de contenu de chaque fichier de ressources afin qu'il soit généré de manière spécifique.You can set the content pipeline properties of each asset file so that it will be built in a specific way.

Pour configurer les propriétés du pipeline de contenuTo configure content pipeline properties

  1. Dans l’Explorateur de solutions, dans votre projet, ouvrez le menu contextuel du fichier de ressources, puis choisissez Propriétés.In Solution Explorer, in your project, open the shortcut menu for the asset file, and then choose Properties. La boîte de dialogue Page de propriétés de la ressource s’affiche.The asset's Property Page dialog box is displayed.

  2. Vérifiez que les valeurs définies des propriétés Configuration et Plateforme sont celles auxquelles vous voulez que vos modifications s’appliquent.Make sure that the Configuration and Platform properties are set to the values that you want your changes to apply to.

  3. Sous Propriétés de configuration, choisissez le nœud de pipeline de contenu (par exemple, Pipeline de contenu d’image pour les ressources de texture et d’image) puis, dans la grille des propriétés, affectez aux propriétés les valeurs appropriées.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. Par exemple, pour générer des mipmaps pour une ressource de texture au moment de la génération, affectez à la propriété Générer des mips la valeur Oui.For example, to generate mipmaps for a texture asset at build time, set the Generate Mips property to Yes.

  4. Sélectionnez le bouton OK .Choose the OK button.

Configuration du pipeline de contenu d'imageImage content pipeline configuration

Quand vous utilisez l'outil de pipeline de contenu d'image pour générer une ressource de texture, vous pouvez compresser la texture de différentes manières, indiquer si les niveaux MIP doivent être générés au moment de la génération, puis modifier le nom du fichier de sortie.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.

PropriétéProperty DescriptionDescription
CompresserCompress Spécifie le type de compression utilisé pour le fichier de sortie.Specifies the compression type that's used for the output file.

Les options disponibles sont les suivantes :The available options are:

- Aucune compression- No Compression
- Compression BC1_UNORM- BC1_UNORM compression
- Compression BC1_UNORM_SRGB- BC1_UNORM_SRGB compression
- Compression BC2_UNORM- BC2_UNORM compression
- Compression BC2_UNORM_SRGB- BC2_UNORM_SRGB compression
- Compression BC3_UNORM- BC3_UNORM compression
- Compression BC3_UNORM_SRGB- BC3_UNORM_SRGB compression
- Compression BC4_UNORM- BC4_UNORM compression
- Compression BC4_SNORM- BC4_SNORM compression
- Compression BC5_UNORM- BC5_UNORM compression
- Compression BC5_SNORM- BC5_SNORM compression
- Compression BC6H_UF16- BC6H_UF16 compression
- Compression BC6H_SF16- BC6H_SF16 compression
- Compression BC7_UNORM- BC7_UNORM compression
- Compression BC7_UNORM_SRGB- BC7_UNORM_SRGB compression

Pour plus d’informations sur les formats de compression pris en charge dans les différentes versions de DirectX, consultez Guide de programmation pour DXGI.For information about which compression formats are supported in different versions of DirectX, see Programming Guide for DXGI.
Convertir dans un format alpha prémultipliéConvert to pre-multiplied alpha format Oui pour convertir l’image dans un format alpha prémultiplié dans le fichier de sortie ; sinon, Non.Yes to convert the image to pre-multiplied alpha format in the output file; otherwise, No. Seul le fichier de sortie est modifié ; l'image source est inchangée.Only the output file is changed, the source image is unchanged.
Générer des mipsGenerate Mips Oui pour générer une chaîne MIP complète au moment de la génération et l’inclure dans le fichier de sortie ; sinon, Non.Yes to generate a full MIP chain at build time and include it in the output file; otherwise, No. Si la valeur Non est sélectionnée et que le fichier source contient déjà une chaîne mipmap, le fichier de sortie a une chaîne MIP ; sinon, le fichier de sortie n’a pas de chaîne 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.
Sortie de contenuContent Output Spécifie le nom du fichier de sortie.Specifies the name of the output file. Important : La modification de l’extension du nom de fichier de sortie n’a aucun effet sur son format.Important: Changing the file name extension of the output file has no effect on its file format.

Configuration du pipeline de contenu de maillageMesh content pipeline configuration

Quand vous utilisez l'outil de pipeline de contenu de maillage pour générer une ressource de maillage, vous pouvez modifier le nom du fichier de sortie.When you use the mesh content pipeline tool to build a mesh asset, you can change the name of the output file.

PropriétéProperty DescriptionDescription
Sortie de contenuContent Output Spécifie le nom du fichier de sortie.Specifies the name of the output file. Important : La modification de l’extension du nom de fichier de sortie n’a aucun effet sur son format.Important: Changing the file name extension of the output file has no effect on its file format.

Configuration du pipeline de contenu de nuanceurShader content pipeline configuration

Quand vous utilisez l'outil de pipeline de contenu de nuanceur pour générer une ressource de nuanceur, vous pouvez modifier le nom du fichier de sortie.When you use the shader content pipeline tool to build a shader asset, you can change the name of the output file.

PropriétéProperty DescriptionDescription
Sortie de contenuContent Output Spécifie le nom du fichier de sortie.Specifies the name of the output file. Important : La modification de l’extension du nom de fichier de sortie n’a aucun effet sur son format.Important: Changing the file name extension of the output file has no effect on its file format.

Chargement et utilisation de ressources 3D au moment de l'exécutionLoading and using 3-D assets at run time

Utilisation de textures et d'imagesUsing textures and images

Direct3D propose des fonctions de création de ressources de texture.Direct3D provides functions for creating texture resources. Dans Direct3D 11, la bibliothèque d'utilitaires D3DX11 fournit des fonctions supplémentaires pour créer des ressources de texture et des affichages de ressources directement à partir de fichiers image.In Direct3D 11, the D3DX11 utility library provides additional functions for creating texture resources and resource views directly from image files. Pour plus d’informations sur la création d’une ressource de texture dans Direct3D 11, consultez Textures.For more information about how to create a texture resource in Direct3D 11, see Textures. Pour plus d’informations sur l’utilisation de la bibliothèque D3DX11 pour créer une ressource de texture ou un affichage des ressources à partir d’un fichier image, consultez Guide pratique pour initialiser une texture à partir d’un fichier.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.

Utilisation de modèles 3DUsing 3-D models

Direct3D 11 ne propose pas de fonctions permettant de créer des ressources à partir de modèles 3D.Direct3D 11 does not provide functions for creating resources from 3-D models. À la place, vous devez écrire du code qui lise le fichier de modèle 3D et crée des mémoires tampons de vertex et d'index qui représentent le modèle 3D et toutes les ressources nécessaires au modèle (par exemple, des textures ou des nuanceurs).Instead, you have to write code that reads the 3-D model file and creates vertex and index buffers that represent the 3-D model and any resources that the model requires—for example, textures or shaders.

Utilisation de nuanceursUsing shaders

Direct3D propose des fonctions permettant de créer des ressources de nuanceur et de les lier au pipeline graphique programmable.Direct3D provides functions for creating shader resources and binding them to the programmable graphics pipeline. Pour plus d’informations sur la façon de créer une ressource de nuanceur dans Direct3D et de la lier au pipeline, consultez Guide de programmation pour HLSL.For more information about how to create a shader resource in Direct3D and bind it to the pipeline, see Programming Guide for HLSL.

Dans le pipeline graphique programmable, chaque étape du pipeline doit fournir à l'étape suivante du pipeline un résultat mis en forme de manière intelligible.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. Sachant que le concepteur Shader ne peut créer que des nuanceurs de pixels, il appartient à votre application de vérifier que les données qu'elle reçoit sont au format attendu.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. Plusieurs étapes de nuanceur programmables se produisent avant le nuanceur de pixels et effectuent des transformations géométriques (le nuanceur de sommets, le nuanceur Hull Shader, le nuanceur de domaine et le nuanceur de géométrie).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. L'étape de pavage non programmable se produit également avant le nuanceur de pixels.The non-programmable tessellation stage also occurs before the pixel shader. Quelle que soit l'étape qui précède directement le nuanceur de pixels, son résultat doit se présenter au format suivant :No matter which of these stages directly precedes the pixel shader, it must give its result in this format:


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;  
};  

Selon les nœuds du concepteur Shader que vous utilisez dans votre nuanceur, vous devrez peut-être aussi fournir des informations supplémentaires formatées en fonction de ces définitions :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:


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;  
};  
TitreTitle DescriptionDescription
Comment : exporter une texture qui contient des mipmapsHow to: Export a Texture that Contains Mipmaps Explique comment utiliser le pipeline de contenu d'image pour exporter une texture qui contient des mipmaps précalculés.Describes how to use the Image Content Pipeline to export a texture that contains precomputed mipmaps.
Comment : exporter une texture qui possède des valeurs alpha prémultipliéesHow to: Export a Texture that has Premultiplied Alpha Explique comment utiliser le pipeline de contenu d'image pour exporter une texture qui contient des valeurs alpha prémultipliées.Describes how to use the Image Content Pipeline to export a texture that contains premultiplied alpha values.
Comment : exporter une texture pour l’utiliser avec des applications JavaScript ou Direct2DHow to: Export a Texture for Use with Direct2D or Javascipt Apps Explique comment utiliser le pipeline de contenu d'image pour exporter une texture utilisable dans une application Direct2D ou Javascript.Describes how to use the Image Content Pipeline to export a texture that can be used in a Direct2D or JavaScript app.
Utilisation de ressources 3D pour les jeux et les applicationsWorking with 3-D Assets for Games and Apps Décrit les outils d'édition fournis par Visual Studio en vue de créer et manipuler des ressources 3D, à savoir, textures, images, modèles 3D et nuanceurs.Describes the editing tools that Visual Studio provides for creating and manipulating 3-D assets, which include textures and images, 3-D models, and shaders.
Comment : exporter un nuanceurHow to: Export a Shader Explique comment exporter un nuanceur à partir du concepteur Shader.Describes how to export a shader from the Shader Designer.