Partager via


Procédure pas à pas : débogage des erreurs de rendus dues à la trame

Cette procédure pas à pas montre comment utiliser Graphics Diagnostics Visual Studio pour examiner un objet dont la couleur n'est pas correcte en raison d'un bogue du nuanceur.

Cette procédure pas à pas montre comment :

  • Examine le document des logs graphiques pour identifier les pixels qui indiquent le problème.

  • Utilisez la fenêtre Historique des pixels Graphics pour examiner l'état de pixel de manière plus approfondie.

  • Utilisez le Débogueur HLSL pour tester le nuanceur de pixels et le vertex shader.

Scénario

Une coloration incorrecte sur les objets se produit généralement lorsqu'un vertex shader passe des informations de nuanceur de pixels incorrectes ou incomplètes.

Dans ce scénario, vous avez récemment ajouté un objet à votre application, ainsi que les nouveaux sommets et nuanceurs de pixels pour transformer l'objet et lui donner une apparence unique. Lorsque vous exécutez l'application pendant un test, l'objet est affiché dans une couleur noire unie. À l'aide de l'outil Graphics Diagnostics, capturez le problème dans un journal graphique afin de déboguer l'application. Dans l'application, le problème ressemble à cela :

Objet rendu avec des couleurs incorrectes.

Examen

À l'aide des outils Graphics Diagnostics, vous pouvez charger le document des logs graphiques pour examiner les frames qui ont été capturées pendant le test.

Pour examiner un frame dans un journal de graphiques

  1. Dans Visual Studio, chargez un journal de graphiques qui contient un frame qui affiche le modèle manquant. Une nouvelle fenêtre de document des logs graphiques s'affiche dans Visual Studio. La partie supérieure de cette fenetre contient la sortie de cible de rendu du frame sélectionné. Dans la partie inférieure figure la Liste de frames, qui affiche chaque frame capturé sous forme d'une image miniature.

  2. Dans Liste de frames, sélectionnez un frame dans lequel l'objet n'a pas l'apparence correcte. La cible de rendu est mise à jour pour refléter le frame sélectionné. Dans ce scénario, la fenetre du journal des graphiques se présente comme suit :

    Document du journal des graphiques dans Visual Studio.

Après avoir sélectionné un frame illustrant le problème, vous pouvez utiliser la fenêtre Historique des pixels Graphics pour le diagnostiquer. La fenêtre Historique des pixels Graphics affiche les primitives qui peuvent avoir un effet sur un pixel spécifique, leurs nuanceurs et sur ce qu'étaient leurs effets sur la cible de rendu, dans l'ordre chronologique.

Pour examiner un pixel

  1. Ouvrez la fenêtre Historique des pixels Graphics. Dans la barre d'outils Graphics Diagnostics, choisissez Historique des pixels.

  2. Sélectionnez un pixel à examiner. Dans la fenetre Journal de graphiques, sélectionnez un des pixels sur l'objet qui est colorié incorrectement :

    La sélection d'un pixel affiche des informations à propos de son historique.

    La fenêtre Historique des pixels Graphics est mise à jour pour refléter le pixel sélectionné. Dans ce scénario, la fenêtre Historique des pixels Graphics se présente comme suit :

    La fenêtre d'historique affiche un événement DrawIndexed.

    Notez que le résultat du nuanceur de pixels est le noir entièrement opaque (0, 0, 0, 1), et que Fusion de sortie a combiné cela avec la couleur Précédent du pixel de telle sorte que Résultat soit également noir entièrement opaque.

Après avoir examiné un pixel de couleur incorrecte et constaté que la sortie du nuanceur de pixels n'est pas la couleur attendue, vous pouvez utiliser le débogueur HLSL pour examiner le nuanceur de pixels et déterminer ce qui est arrivé à la couleur de l'objet. Vous pouvez utiliser le débogueur HLSL pour examiner l'état des variables HLSL pendant l'exécution, parcourir le code HLSL, et définir des points d'arrêt de positionnement pour vous aider à diagnostiquer le problème.

Pour consulter le nuanceur de pixels

  1. Commencez à déboguer le nuanceur de pixels. Dans la fenêtre Historique des pixels Graphics, sous la primitive de l'objet, en regard de Pixel Shader, choisissez le bouton Démarrer le débogage.

  2. Dans ce scénario, étant donné que le nuanceur de pixels passe uniquement la couleur via le vertex shader, il est facile d'observer que le nuanceur de pixels n'est pas la source du problème.

  3. Placez le pointeur sur input.color. Notez que sa valeur est la couleur noire entièrement opaque (0, 0, 0, 1).

    Le membre « couleur » de « entrée » est noir.

    Dans ce scénario, l'examen révèle que la couleur incorrecte est probablement le résultat d'un shader sommet qui ne fournit pas les informations complètes sur la couleur pour le traitement par le shader de pixels.

Après avoir déterminé que le shader sommet ne fournit probablement pas la bonne information au shader de pixels, l'étape suivante consiste à examiner le shader sommet.

Pour consulter le nuanceur de sommets

  1. Commencez à déboguer le vertex shader. Dans la fenêtre Historique des pixels Graphics, sous la primitive de l'objet, en regard de Pixel Shader, choisissez le bouton Démarrer le débogage.

  2. Recherchez la structure de sortie du vertex shader. Il s'agit de l'entrée du nuanceur de pixels. Dans ce scénario, le nom de cette structure est output. Vérifiez le code de shader sommet et observez que le membre color de la structure d'output a été défini explicitement au noir entièrement opaque, éventuellement en raison des efforts de quelqu'un pour déboger le programe.

  3. Vérifiez que le membre de couleur n'est jamais copié à partir de la structure d'entrée. Étant donné que la valeur output.color est définie à noir entièrement opaque juste avant que la structure d'output ne soit retournée, il est judicieux de s'assurer que la valeur d'output n'a pas été correctement initialisé sur une ligne précédente. Parcourez le code de shader sommets tant que vous n'avez pas atteint la ligne qui définit output.coloren noir lorsque vous examinez la valeur d'output.color. Notez que la valeur d'output.color n'est pas initialisée tant qu'elle n'est pas définie en noir. Il confirme que la ligne de code qui définit output.color en noir doit être modifiée, et non pas supprimé.

    La valeur « output.color » est noir.

Après avoir déterminé que le problème de rendu est lié au fait que le shader sommet ne fournit pas la bonne couleur au shader de pixels, vous pouvez utiliser ces informations pour résoudre le problème. Dans ce cas, vous pouvez résoudre le problème en modifiant le code suivant dans le shader sommet

output.color = float3(0.0f, 0.0f, 0.0f);

en

output.color = input.color;

Ce code passe uniquement la couleur de vertex des sommets de l'objet non modifié, des vertex shaders plus complexes peuvent modifier la couleur avant de la passer. Le code corrigé de vertex shader doit ressembler à ceci :

Code du nuanceur de sommets corrigé.

Après avoir résolu le code, régénérez-le et réexécutez l'application pour vérifier que le problème de rendu est résolu.

Objet rendu avec des couleurs correctes.