Názorný postup: Ladění vykreslování chyby způsobené stínování
Tento názorný postup ukazuje, jak použít Visual Studio diagnostiky grafiky k prozkoumání objektu, který je nesprávně vybarven z důvodu chyby shaderu.
Tento názorný postup znázorňuje, jak:
Prozkoumejte dokument protokolu grafiky obrazové body, které ukazují problém identifikovat.
Použijte okno Historie pixelů grafiky k bližšímu posouzení stavu pixelu.
Použijte Ladící program HLSL k prověření shaderů pixel a vertex.
Situace
K nesprávnému vybarvování objektů běžně dochází, pokud vertex shader předá pixel shaderu nesprávné nebo neúplné informace.
V tomto scénáři jste naposledy přidali objekt do vaší aplikace spolu s novým vertex shaderem a pixel shaderem pro transformaci objektu a poskytnutí jedinečného vzhledu.Při spuštění aplikace během zkoušky je vykreslen objekt v plné černé.Pomocí Diagnostiky grafiky můžete zaznamenat problém do protokolu grafiky pro účely ladění aplikace.Problém v aplikace vypadá následovně:
Zkoumání
Pomocí nástroje Diagnostika grafiky můžete načíst dokument protokolu grafiky kontrolovat snímky, které byly zachyceny v průběhu zkoušky.
Přezkoumání snímku v protokolu grafiky
V Visual Studio načtěte protokol grafiky, který obsahuje snímek zobrazující chybějící model.Nové grafické okno dokumentu protokolu se zobrazí v Visual Studio.V horní části tohoto okna je cílový výstup vykreslování vybraného rámečku.V dolní části je Seznam snímků, který zobrazuje každý zachycený snímek jako miniaturu.
V Seznamu snímků vyberte snímek, ve kterém objekt nemá správný vzhled.Cíl vykreslení je aktualizován, aby odrážel vybraný snímek.V tomto scénáři protokolu grafiky dokumentu okno vypadá takto:
Po vybrání rámce, který znázorňuje problém, můžete použít okno Historie pixelů grafiky k provedení diagnostiky.Okno Historie obrazových bodů grafiky zobrazuje základní prvky, které by mohly mít vliv na určitý pixel, jeho shadery a jejich účinky na vykreslení cíle v chronologickém pořadí.
Přezkoumání pixelu
Otevřete okno Historie obrazového bodu grafiky.Na panelu nástrojů Diagnostika grafiky vyberte možnost Historie obrazového bodu.
Vyberte obrazový bod, který chcete přezkoumat.V grafickém okně Protokol dokumentu vyberte jednu z obrazových bodů na objektu, který je nesprávně vybarveny:
Okno Historie pixelu grafiky je aktualizováno tak, aby odráželo vybraný pixel.V tomto scénáři vypadá okno Historie obrazových bodů grafiky takto:
Všimněte si, že výsledek pixel shaderu je plně neprůsvitná černá barva (0, 0, 0, 1) a že Sloučení výstupu se sloučilo s touto předchozí barvou obrazového bodu takovým způsobem, že výsledkem je také zcela neprůsvitná černá barva.
Po kontrole pixelu, který je nesprávně vybarven, a zjištění, zda výstup pixel shaderu nemá očekávanou barvu, můžete použít nástroj HLSL Debugger ke kontrole pixel shaderu a zjištění, co se stalo s barvou objektu.Můžete použít ladící program HLSL ke kontrole stavu proměnné HLSL během spuštění, krokovat kód HLSL a nastavit zarážky, které vám pomohou diagnostikovat problém.
Zkoumání shaderu pixelu
Spuštění ladění pixelu shaderu.V okně Historie obrazových bodů grafiky pod primitivem objektu vedle položky Pixel shader stiskněte tlačítko Spustit ladění.
Protože v tomto scénáři pixel shader pouze předá barvu z vertex shaderu, je snadné sledovat, zda pixel shader není zdrojem potíží.
Umístěte ukazatel na input.color.Všimněte si, že jeho hodnota je zcela neprůhledné černé (0, 0, 0, 1).
V tomto scénáři odhalí nesprávné barvy je pravděpodobně výsledkem vertex shader, který neposkytuje informace o správné barvy pro funkci pixel shader pro provoz na.
Poté, co jste zjistili, že funkci vertex shader je pravděpodobně není poskytování informací funkci pixel shader, dalším krokem je zkontrolovat funkci vertex shader.
Zkoumání shaderu vertex
Spuštění ladění shaderu ve fázi vertex.V okně Historie obrazových bodů grafiky pod primitivem objektu vedle Vertex Shader stiskněte tlačítko Spustit ladění.
Vyhledejte výstupní strukturu vertex shaderu – toto je vstup pixel shaderu.V tomto scénáři je název této struktury output.Zkontrolujte kód vertex shader a Všimněte si, že color člen output struktury explicitně nastavena na černou úplně neprůhledné, možná v důsledku osoby je ladění úsilí.
Potvrďte, že je barva člen nikdy zkopírovány z vstupní struktury.Protože hodnota output.color je nastavena na černou úplně neprůhledné, těsně před output struktury je vrácena, je vhodné zajistit, aby hodnota output nebyl správně inicializován v předchozím řádku.Krokovat kód vertex shader, dokud se nedostanete na řádek, který nastaví output.color na černou při sledování hodnoty output.color.Všimněte si, že hodnota output.color není inicializována, dokud je nastavena na černou.To potvrzuje, že řádek kódu, který nastaví output.color na černou by měl být změněn, spíše než odstraněny.
Poté, co zjistíte, že příčina problému vykreslování je, že funkci vertex shader neposkytuje hodnotu správné barvy na pixel shader, můžete použít tyto informace k vyřešení problému.V tomto případě lze tento stav napravit změnou následující kód ve funkci vertex shader
output.color = float3(0.0f, 0.0f, 0.0f);
na hodnotu
output.color = input.color;
Tento kód právě předal barvu vertex prostřednictvím nezměněných vrcholů objektu – složitější shadery vertex shader mohou změnit barvu před předáním jeho prostřednictvím.Opravený kód shaderu vertex by měl vypadat takto:
Po opravě kódu jej znovu vytvořte a spusťte aplikaci znovu, abyste zjistili, zda je problém vykreslování vyřešen.