Fáze shaderu pixelů
Fáze shaderu pixelů (PS) umožňuje bohaté techniky stínování, jako je osvětlení na pixel a následné zpracování. Shader pixelů je program, který kombinuje konstantní proměnné, data textury, interpolované hodnoty vrcholů a další data pro vytváření výstupů na pixely. Rasterizer fáze vyvolá pixel shader jednou pro každý pixel pokrytý primitivním, ale je možné zadat NULL shader, aby se zabránilo spuštění shaderu.
Shader pixelů
Při vícevzorkování textury se shader pixelů vyvolá jednou za pokrytý pixel, zatímco pro každý pokrytý multisample dojde k testu hloubky nebo vzorníku. Vzorky, které projdou testem hloubky nebo vzorníku, se aktualizují o výstupní barvu shaderu pixelů.
Vnitřní funkce shaderu pixelů vytvářejí nebo používají deriváty množství s ohledem na prostor obrazovky x a y. Nejběžnějším způsobem použití derivátů je výpočet podrobných výpočtů pro vzorkování textury a v případě anisotropního filtrování výběr vzorků podél osy anisotropie. Hardwarová implementace obvykle spouští shader pixelů na více pixelech (například mřížku 2x2) současně, takže deriváty množství vypočítaných v pixelovém shaderu mohou být přiměřeně přibližné jako rozdíly hodnot v sousedních pixelech.
Vstupy
Pokud je kanál nakonfigurovaný bez shaderu geometrie, je shader pixelů omezen na 16, 32bitové, 4-komponentní vstupy. Jinak může shader pixelů trvat až 32, 32bitové, 4 komponenty vstupy.
Vstupní data shaderu pixelů zahrnují atributy vrcholu (které je možné interpolovat s opravou perspektivy nebo bez ní) nebo lze považovat za primitivní konstanty. Vstupy shaderu pixelů se interpolují z atributů vrcholů primitivní rasterizované na základě deklarovaného režimu interpolace. Pokud se primitiva ořízne před rasterizací, bude během procesu výřezu dodržen i režim interpolace.
Atributy vrcholů jsou interpolované (nebo vyhodnocené) ve středových umístěních shaderu pixelů. Režimy interpolace atributů shaderu pixelů jsou deklarovány v deklaraci vstupního registru na základě prvku v argumentu nebo vstupní struktury. Atributy mohou být interpolovány lineárně nebo s centroid vzorkování. Hodnocení centroidu je relevantní pouze při vícevzorkování pro případy, kdy je pixel pokryt primitivním, ale střed pixelů nemusí být; centroidové hodnocení se vyskytuje co nejblíže středu (nekrytá) centra pixelů.
Vstupy mohou být deklarovány také sémantickou systémovou hodnotou, která označuje parametr, který je spotřebován jinými fázemi kanálu. Například pozice pixelu by měla být označena sémantickou SV_Position. Fáze IA může vytvořit jeden skalár pro shader pixelů (pomocí SV_PrimitiveID); rasterizační fáze může také vygenerovat jeden skalár pro shader pixelů (pomocí SV_IsFrontFace).
Výstupy
Shader pixelů může výstupem až 8, 32bitových, 4 komponentových barev nebo bez barvy, pokud je pixel zahozen. Součásti výstupního registru shaderu pixelů musí být deklarovány před jejich pomocí; každý registr má povolenou odlišnou masku výstupního zápisu.
Pomocí stavu povolení hloubkového zápisu (ve fázi sloučení výstupu) můžete určit, jestli se hloubková data zapisují do vyrovnávací paměti hloubky (nebo pomocí instrukce zahodit data pro daný pixel). Shader pixelů může také výstupem volitelného 32bitového, 1složkového, plovoucího bodu, hloubkové hodnoty pro hloubkové testování (pomocí SV_Depth sémantické). Hodnota hloubky je výstupem v registru ODepth a nahrazuje interpolovanou hloubkové hodnoty pro hloubkové testování (za předpokladu, že je povoleno hloubkové testování). Neexistuje způsob, jak dynamicky měnit mezi použitím hloubky pevné funkce nebo oDepth shaderu.
Shader pixelů nemůže vypíše hodnotu vzorníku.
Související témata
-
fáze kanálu (Direct3D 10)