Exporter des formats de texture enrichis en utilisant le pipeline de contenu d’image dans Visual Studio

Cet article explique comment utiliser le pipeline de contenu d’image pour exporter des textures, comme celles qui comportent des mipmaps ou des alphas prémultipliés, ou même celles qui peuvent être utilisées avec des applications Direct2D ou JavaScript.

Exporter une texture qui contient des mipmaps

Le pipeline de contenus d’image peut générer des mipmaps à partir d’une image source dans la phase de génération de votre projet. Pour obtenir certains effets, vous devez parfois spécifier le contenu de l’image de chaque niveau MIP manuellement. Quand vous n’avez pas besoin de spécifier le contenu de l’image de chaque niveau MIP manuellement, la génération de mipmaps au moment de la génération garantit que le contenu des mipmaps n’est jamais désynchronisé. Elle élimine également la réduction des performances liée à la génération de mipmaps au moment de l’exécution.

Cet article couvre les points suivants :

  • Configuration de l’image source à traiter par le pipeline de contenus d’image.

  • Configuration du pipeline de contenus d’image pour générer des mipmaps.

Exporter les mipmaps

Le mipmapping fournit automatiquement le niveau de détail de l’espace à l’écran pour les surfaces texturées dans une application ou un jeu 3D. Il améliore les performances de rendu d’un jeu ou d’une application en précalculant des versions sous-échantillonnées d’une texture. Avec le précalcul de versions sous-échantillonnées, la texture n’a pas besoin d’être entièrement sous-échantillonnée à chacun de ses échantillonnages.

Pour exporter une texture contenant des mipmaps

  1. Commencez par une texture de base. Chargez un fichier image existant ou créez-en un. Pour prendre en charge les mipmaps, spécifiez une texture dont la largeur et la hauteur ont pour valeur la même puissance de deux (par exemple : 64x64, 256x256 ou 512x512).

  2. Configurez le fichier de texture que vous venez de créer pour qu’il soit traité par le pipeline de contenus d’image. Dans l’Explorateur de solutions, ouvrez le menu contextuel pour le fichier de texture que vous avez créé, puis choisissez Propriétés. Dans la page Propriétés de configuration>Général, définissez la propriété Type d’élément sur Pipeline de contenus d’image. Vérifiez que la propriété Contenu est définie sur Oui et que Exclure de la génération est défini sur Non. Sélectionnez Appliquer.

    La page des propriétés de configuration du Pipeline de contenus d’image apparaît.

  3. Configurez le pipeline de contenus d’image pour générer des mipmaps. Dans la page Propriétés de configuration>Pipeline de contenus d’image>Général, définissez la propriété Générer des mips sur Oui (/generatemips).

  4. Sélectionnez OK.

Quand vous générez le projet, le pipeline de contenus d’image convertit l’image source du format de travail dans le format de sortie que vous avez spécifié, notamment les niveaux MIP. Le résultat est copié dans le répertoire de sortie du projet.

Exporter une texture qui contient des valeurs alpha prémultipliées

Le pipeline de contenus d’image peut générer des textures alpha prémultipliées à partir d’une image source. Ces textures peuvent être plus faciles à utiliser, et plus robustes que celles ne contenant pas d’alphas prémultipliés.

Ce document illustre ces activités :

  • Configuration de l’image source à traiter par le pipeline de contenus d’image.

  • Configuration du pipeline de contenus d’image pour générer des valeurs alpha prémultipliées.

Valeurs alpha prémultipliées

Les valeurs alpha prémultipliées offrent plusieurs avantages par rapport aux valeurs alpha conventionnelles non prémultipliées, car elles représentent mieux l’interaction réelle de la lumière avec les matériaux physiques en séparant la contribution de couleur du texel (couleur qu’il ajoute à la scène) de sa translucidité (quantité de couleur sous-jacente qu’il laisse passer). L’utilisation de valeurs alpha prémultipliées présente les avantages suivants :

  • Le mélange avec des données alpha prémultipliées est une opération associative ; le résultat du mélange de plusieurs textures translucides est identique, indépendamment de l’ordre dans lequel les textures sont mélangées.

  • En raison de la nature associative du mélange avec les valeurs alpha prémultipliées, le rendu multipasse des objets translucides est simplifié.

  • En utilisant des valeurs alpha prémultipliées, vous pouvez réaliser simultanément le mélange additif pur (en définissant la valeur alpha à zéro) et le mélange linéairement interpolé. Par exemple, dans un système de particules, une particule de feu mélangée par ajout peut devenir une particule de fumée translucide mélangée à l’aide de l’interpolation linéaire. Sans valeur alpha prémultipliée, vous devriez dessiner les particules de feu séparément des particules de fumée, et modifier l’état de rendu entre les appels de dessin.

  • Les textures qui utilisent des valeurs alpha prémultipliées sont mieux compressées que celles qui ne l’utilisent pas, et elles n’exposent pas les bords décolorés ou « l’effet de halo » qui peut se produire quand vous mélangez des textures qui n’utilisent pas de valeurs alpha prémultipliées.

Pour créer une texture qui utilise des valeurs alpha prémultipliées

  1. Commencez par une texture de base. Chargez un fichier image existant ou créez-en un.

  2. Configurez le fichier de texture pour qu’il soit traité par le pipeline de contenus d’image. Dans l’Explorateur de solutions, ouvrez le menu contextuel du fichier de texture, puis choisissez Propriétés. Dans la page Propriétés de configuration>Général, définissez la propriété Type d’élément sur Pipeline de contenus d’image. Vérifiez que la propriété Contenu est définie sur Oui et que Exclure de la génération est défini sur Non, puis choisissez le bouton Appliquer. La page des propriétés de configuration du Pipeline de contenus d’image apparaît.

  3. Configurez le pipeline de contenus d’image pour générer des valeurs alpha prémultipliées. Dans la page Propriétés de configuration>Pipeline de contenus d’image>Général, affectez la valeur Oui (/generatepremultipliedalpha) à la propriété Convertir au format alpha prémultiplié.

  4. Choisissez le bouton OK.

    Quand vous générez le projet, le pipeline de contenus d’image convertit l’image source du format de travail dans le format de sortie que vous avez spécifié (cette opération inclut la conversion de l’image au format des valeurs alpha prémultipliées) et le résultat est copié dans le répertoire de sortie du projet.

Exporter une texture à utiliser avec des applications Direct2D ou JavaScript

Le pipeline de contenus d’image peut générer des textures compatibles avec les conventions de rendu interne de Direct2D. Les textures de ce type sont appropriées pour une utilisation dans les applications qui utilisent Direct2D et dans les applications UWP créées à l’aide de JavaScript.

Ce document illustre ces activités :

  • Configuration de l’image source à traiter par le pipeline de contenus d’image.

  • Configuration du pipeline de contenus d’image pour générer une texture utilisable dans une application Direct2D ou Javascript.

    • Générer un fichier .dds compressé au niveau des blocs.

    • Générer une valeur alpha prémultipliée.

    • Désactiver la génération de mipmap.

Conventions de rendu dans Direct2D

Les textures qui sont utilisés dans le contexte de Direct2D doivent respecter ces conventions de rendu interne de Direct2D :

  • Direct2D implémente la transparence et la translucidité en utilisant une valeur alpha prémultipliée. Les textures utilisées avec Direct2D doivent contenir une valeur alpha prémultipliée, même si la texture n’utilise pas la transparence ou la translucidité.

  • La texture doit être fournie au format .dds, en utilisant l’un de ces formats de compression de bloc :

    • Compression BC1_UNORM

    • Compression BC2_UNORM

    • Compression BC3_UNORM

  • Les mipmaps ne sont pas pris en charge.

Pour créer une texture compatible avec les conventions de rendu de Direct2D

  1. Commencez par une texture de base. Charger une image existante ou créez-en une. Pour prendre en charge la compression de bloc au format .dds, spécifiez une texture qui a une largeur et une hauteur qui sont des multiples de quatre en taille, par exemple 100x100, 128x128 ou 256x192. Le mipmapping n’étant pas pris en charge, la texture n’a pas besoin d’être carrée ni d’être une puissance de deux en taille.

  2. Configurez le fichier de texture pour qu’il soit traité par le pipeline de contenus d’image. Dans l’Explorateur de solutions, ouvrez le menu contextuel pour le fichier de texture que vous avez créé, puis choisissez Propriétés. Dans la page Propriétés de configuration>Général, définissez la propriété Type d’élément sur Pipeline de contenus d’image. Vérifiez que la propriété Contenu est définie sur Oui et que Exclure de la génération est défini sur Non, puis choisissez le bouton Appliquer. La page des propriétés de configuration du Pipeline de contenus d’image apparaît.

  3. Définissez le format de sortie sur un des formats de compression de blocs. Dans la page Propriétés de configuration>Pipeline de contenus d’image>Général, affectez la valeur Compression BC3_UNORM (/compress:BC3_UNORM) à la propriété Compresser. Vous pouvez choisir un des autres formats BC1, BC2 ou BC3, selon vos besoins. Direct2D ne prend actuellement pas en charge les textures BC4, BC5, BC6 ou BC7. Pour plus d’informations sur les différents formats BC, consultez Block Compression (Direct3D 10).

    Notes

    Le format de compression spécifié détermine le format du fichier produit par le pipeline de contenus d’image. Ceci est différent de la propriété Format de l’image source dans l’éditeur d’images, qui détermine le format du fichier image source stocké sur le disque, c’est-à-dire le format de travail. En règle générale, vous ne voulez pas qu’un format de travail soit compressé.

  4. Configurez le pipeline de contenus d’image pour produire une sortie qui utilise une valeur alpha prémultipliée. Dans la page Propriétés de configuration>Pipeline de contenus d’image>Général, affectez la valeur Oui (/generatepremultipliedalpha) à la propriété Convertir au format alpha prémultiplié.

  5. Configurez le pipeline de contenus d’image pour qu’il ne génère pas de mipmaps. Dans la page Propriétés de configuration>Pipeline de contenus d’image>Général, affectez la valeur Non à la propriété Générer des mips.

  6. Choisissez le bouton OK.

    Quand vous générez le projet, le pipeline de contenus d’image convertit l’image source du format de travail dans le format de sortie que vous avez spécifié (la conversion inclut la génération d’une valeur alpha prémultipliée) et le résultat est copié dans le répertoire de sortie du projet.

Consultez Utiliser des textures et des images pour en savoir plus sur l’utilisation de l’éditeur d’images dans Visual Studio pour créer ou modifier des textures et des images utilisées dans le développement d’applications DirectX.