Partager via


Utiliser des ressources 3D dans votre jeu ou votre application

Cet article explique comment utiliser Visual Studio pour traiter les ressources 3D et les inclure dans vos builds.

Après avoir utilisé les outils de Visual Studio pour créer des ressources 3D, l’étape suivante consiste à les utiliser dans votre application. Mais avant de pouvoir les utiliser, vos ressources doivent être transformées en un format que DirectX peut comprendre. Pour vous aider à transformer vos ressources, Visual Studio fournit des personnalisations de build pour chaque type de ressource qu’il peut produire. Pour inclure les ressources dans votre build, il vous suffit de configurer votre projet pour utiliser les personnalisations de build, d’ajouter les ressources à votre projet et de configurer les ressources pour utiliser la personnalisation de build appropriée. Après cela, vous pouvez charger les ressources dans votre application et les utiliser en créant et en remplissant des ressources DirectX comme vous le feriez dans n’importe quelle autre application DirectX.

Configurer votre projet

Avant de pouvoir déployer vos ressources 3D dans le cadre de votre build, Visual Studio doit connaître les types de ressources que vous souhaitez déployer. Visual Studio connaît déjà de nombreux types de fichiers courants, mais étant donné que seuls certains types d’applications utilisent des ressources 3D, Visual Studio ne suppose pas qu’un projet génère ces types de fichiers. Vous pouvez indiquer à Visual Studio que votre application utilise ces types de ressources à l’aide des personnalisations de build , fichiers qui indiquent à Visual Studio comment traiter différents types de fichiers de manière utile, qui sont fournis pour chaque type de ressource. Étant donné que ces personnalisations sont appliquées par projet, il vous suffit d’ajouter les personnalisations appropriées à votre projet.

Pour ajouter les personnalisations de build à votre projet

  1. Dans l’Explorateur de solutions, ouvrez le menu contextuel du projet et choisissez Dépendances des builds>Personnalisations des builds.

    La boîte de dialogue Fichiers de personnalisation de la build Visual C++ apparaît.

  2. Sous Fichiers de personnalisation de builds disponibles, cochez les cases qui correspondent aux types de ressources que vous voulez utiliser dans votre projet, comme décrit dans le tableau suivant :

    Type de ressource Nom de personnalisation de la build
    Textures et images ImageContentTask(.targets, .props)
    Modèles 3D MeshContentTask(.targets, .props)
    Nuanceurs ShaderGraphContentTask(.targets, .props)

    Remarque

    Visual Studio 2022 17.9.3 a supprimé la prise en charge de l’éditeur de modèle et meshContentTask en raison de problèmes de sécurité dans le SDK Autodesk FBX. Voir CVE-2023-27911.

  3. Choisissez le bouton OK.

Inclure des ressources dans votre build

Maintenant que votre projet connaît les différents types de ressources 3D que vous souhaitez utiliser, l’étape suivante consiste à lui indiquer quels fichiers sont des ressources 3D et quels types de ressources ils sont.

Pour ajouter une ressource à votre build

  1. Dans Explorateur de solutions, dans votre projet, ouvrez le menu contextuel d’une ressource, puis choisissez Propriétés.

    La boîte de dialogue Page de propriétés de la ressource apparaît.

  2. Vérifiez que les propriétés configuration et Platform sont définies sur les valeurs auxquelles vous souhaitez appliquer vos modifications.

  3. Sous Propriétés de configuration, choisissez général, puis, dans la grille des propriétés, sous Général, définissez la propriété Type d’élément sur le type d’élément de pipeline de contenu approprié. Par exemple, pour un fichier image ou de texture, choisissez le pipeline de contenu d’image.

    Important

    Par défaut, Visual Studio suppose que de nombreux types de fichiers image doivent être classés en utilisant le type d’élément Image intégré à Visual Studio. Par conséquent, vous devez modifier la propriété Type d’élément de chaque image que vous souhaitez traiter par le pipeline de contenu d’image. Les autres types de fichiers sources du pipeline de contenu pour les modèles 3D et les graphismes des nuanceurs visuels ont pour valeur par défaut le Type d’élément approprié.

  4. Choisissez le bouton OK.

Voici les trois types d’éléments de pipeline de contenu et leurs types de fichiers source et de sortie associés.

Type d’élément Types de fichiers sources Format de fichier de sortie
Pipeline de contenu d’image Graphiques réseau portables (.png)

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

Direct Draw Surface (.dds)

Format d’échange graphique (.gif)

Bitmap (.bmp, .dib)

Format de fichier image étiqueté (.tif, .tiff)

Targa (.tga)
DirectDraw Surface (.dds)
Pipeline de contenu de maillage Fichier d’échange AutoDesk FBX (.fbx)

Fichier Collada DAE (.dae)

Fichier Wavefront OBJ (.obj)
Fichier de maillage 3D (.cmo)
Pipeline de contenu de nuanceur Graphique de nuanceur visuel (.dgsl) Sortie de nuanceur compilé (.cso)

Configurer les propriétés du pipeline de contenu des ressources

Vous pouvez définir les propriétés du pipeline de contenu de chaque fichier de manière à ce qu'elles soient générées de manière spécifique.

Pour configurer les propriétés du pipeline de contenu

  1. Dans l’Explorateur de solutions de votre projet, ouvrez le menu contextuel du fichier de ressources, puis choisissez Propriétés.

    La boîte de dialogue Page de propriétés de la ressource apparaît.

  2. Vérifiez que les propriétés Configuration et Platform sont définies sur les valeurs auxquelles vos modifications doivent être appliquées.

  3. Sous Propriétés de configuration, sélectionnez le nœud du pipeline de contenu (par exemple, pipeline de contenu d'images pour les ressources de texture et d'image), puis, dans le tableau de propriétés, définissez les propriétés sur les valeurs appropriées. Par exemple, pour générer des mipmaps pour une ressource de texture au moment de la génération, définissez la propriété Generate Mips sur Oui.

  4. Choisissez le bouton OK.

Configuration du pipeline de contenu d’image

Lorsque 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 et modifier le nom du fichier de sortie.

Propriété Description
Compresser Spécifie le type de compression utilisé pour le fichier de sortie.

Les options disponibles sont les suivantes :

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

Pour plus d’informations sur les formats de compression pris en charge dans différentes versions de DirectX, consultez Guide de programmation pour DXGI.
Convertir au format alpha prémultiplié Oui pour convertir l’image au format alpha prémultiplié dans le fichier de sortie ; sinon, Non. Seul le fichier de sortie est modifié, l’image source n’est pas modifiée.
Générer des mips Oui pour générer une chaîne MIP complète pendant la génération et l’inclure dans le fichier de sortie ; sinon, Non. Si Non, et que le fichier source contient déjà une chaîne MIP, alors le fichier de sortie aura une chaîne MIP ; sinon, le fichier de sortie n’aura pas de chaîne MIP.
Sortie de contenu Spécifie le nom du fichier de sortie. Important : La modification de l’extension de nom de fichier du fichier de sortie n’a aucun effet sur son format de fichier.

Configuration du pipeline de contenu de maillage

Lorsque 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.

Propriété Description
Sortie de contenu Spécifie le nom du fichier de sortie. Important : La modification de l’extension de nom de fichier du fichier de sortie n’a aucun effet sur son format de fichier.

Configuration du pipeline de contenu du shader

Lorsque vous utilisez l’outil de pipeline de contenu du nuanceur pour générer une ressource de nuanceur, vous pouvez modifier le nom du fichier de sortie.

Propriété Description
Sortie de Contenu Spécifie le nom du fichier de sortie. Important : La modification de l’extension de nom de fichier du fichier de sortie n’a aucun effet sur son format de fichier.

Charger et utiliser des ressources 3D au moment de l’exécution

Utiliser des textures et des images

Direct3D fournit des fonctions permettant de créer des ressources de texture. Dans Direct3D 11, la bibliothèque utilitaire D3DX11 fournit des fonctions supplémentaires pour créer des ressources de texture et des vues de ressources directement à partir de fichiers image. Pour plus d’informations sur la création d’une ressource de texture dans Direct3D 11, consultez textures. Pour plus d’informations sur l’utilisation de la bibliothèque D3DX11 pour créer une ressource de texture ou une vue de ressource à partir d’un fichier image, consultez Comment : initialiser une texture à partir d’un fichier.

Utiliser des modèles 3D

Direct3D 11 ne fournit pas de fonctions pour la création de ressources à partir de modèles 3D. Au lieu de cela, vous devez écrire du code qui lit le fichier de modèle 3D et crée des tampons de vertex et d’index qui représentent le modèle 3D et toutes les ressources dont le modèle a besoin, par exemple, des textures ou des nuanceurs.

Utiliser des nuanceurs

Direct3D fournit des fonctions permettant de créer des ressources de shader et de les lier au pipeline graphique programmable. 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.

Dans le pipeline graphique programmable, chaque étape doit fournir à l’étape suivante un résultat formaté de manière à ce qu'il soit compréhensible. Étant donné que le Concepteur de nuanceurs ne peut créer que des nuanceurs de pixels, c'est à votre application de s'assurer que les données reçues soient au format attendu. Plusieurs étapes de nuanceur programmables se produisent avant le nuanceur de pixels et effectuent des transformations géométriques ( nuanceur de vertex, nuanceur de coque, nuanceur de domaine et nuanceur de géométrie). L'étape de pavage non programmable se produit également avant le nuanceur de pixels. Quelle que soit l’étape qui précède directement le nuanceur de pixels, elle doit donner son résultat dans ce 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 Shader Designer que vous utilisez dans votre shader, il se peut que vous deviez également fournir des données supplémentaires dans le format en fonction de ces définitions :

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;
};
Titre Description
Guide pratique pour exporter une texture contenant des mipmaps Décrit comment utiliser le pipeline de contenu d’image pour exporter une texture qui contient des mipmaps précomputés.
Comment exporter une texture avec alpha prémultipliée Décrit comment utiliser le pipeline de contenu d’image pour exporter une texture qui contient des valeurs alpha prémultipliées.
Guide pratique pour exporter une texture à utiliser avec des applications Direct2D ou JavaScript Décrit comment utiliser le pipeline de contenu d’image pour exporter une texture qui peut être utilisée dans une application Direct2D ou JavaScript.
Utilisation des ressources 3D pour les jeux et les applications Décrit les outils d’édition fournis par Visual Studio pour créer et manipuler des ressources 3D, notamment des textures et des images, des modèles 3D et des nuanceurs.
Comment exporter un shader Décrit comment exporter un nuanceur à partir du Concepteur de nuanceurs.