Sdílet prostřednictvím


Fáze shaderu geometrie

Fáze geometry-shader (GS) spouští kód shaderu určeného aplikací s vrcholy jako vstupem a schopnost generovat vrcholy ve výstupu.

Shader geometrie

Na rozdíl od shaderů vrcholů, které pracují s jedním vrcholem, jsou vstupy shaderu geometrie vrcholy pro úplné primitivní (dva vrcholy pro čáry, tři vrcholy pro trojúhelníky nebo jeden vrchol pro bod). Shadery geometrie mohou také přinést data vrcholu pro sousední hrany jako vstup (další dva vrcholy pro čáru, další tři pro trojúhelník). Následující obrázek znázorňuje trojúhelník a čáru se sousedními vrcholy.

ilustraci trojúhelníku a čáry se sousedními vrcholy

Typ
tv Trojúhelníkový vrchol
AV Sousední vrchol
LV Spojnicový vrchol

 

Fáze geometry-shader může využívat SV_PrimitiveID systémově vygenerovanou hodnotu, která je automaticky generována IA. To umožňuje, aby se v případě potřeby načítala nebo počítaly primitivní data.

Fáze geometry-shader je schopna vystavovat více vrcholů tvořících jednu vybranou topologii (k dispozici jsou výstupní topologie fáze GS: tristrip, linestrip a pointlist). Počet vygenerovaných primitiv se může volně lišit v rámci jakéhokoli vyvolání shaderu geometrie, i když maximální počet vrcholů, které by mohly být generovány, musí být deklarovány staticky. Délky pruhů generované z vyvolání shaderu geometrie mohou být libovolné a nové pruhy lze vytvořit prostřednictvím RestartStrip HLSL funkce.

Výstup shaderu geometrie může být předán do fáze rastrového zpracování nebo do vyrovnávací paměti vrcholu v paměti prostřednictvím výstupní fáze datového proudu. Výstup do paměti se rozbalí na jednotlivé seznamy bodů/čar/trojúhelníků (přesně tak, jak by byly předány rasterizátoru).

Když je aktivní shader geometrie, vyvolá se jednou pro každé primitivní předání nebo vygenerování dříve v kanálu. Každé vyvolání shaderu geometrie se považuje za vstupní data pro vyvolání primitivního prvku, ať už jde o jeden bod, jednu čáru nebo jeden trojúhelník. Trojúhelníkový pruh z dřívějšího kanálu by měl za následek vyvolání shaderu geometrie pro každý jednotlivý trojúhelník v pruhu (jako by byl pruh rozbalený do seznamu trojúhelníků). Všechna vstupní data pro každý vrchol v individuálním primitivu jsou k dispozici (tj. 3 vrcholy pro trojúhelník), plus sousední data vrcholů, pokud jsou k dispozici/k dispozici.

Shader geometrie vypíše data o jednom vrcholu najednou připojením vrcholů k objektu výstupního datového proudu. Topologie datových proudů je určena pevnou deklarací, která jako výstup pro fázi GS zvolí jednu z těchto možností: PointStream, LineStream nebo TriangleStream. K dispozici jsou tři typy streamových objektů, PointStream, LineStream a TriangleStream, které jsou všechny objekty šablony. Topologie výstupu je určena příslušným typem objektu, zatímco formát vrcholů připojených k datovému proudu je určen typem šablony. Spuštění instance shaderu geometrie je atomické z jiných vyvolání, s tím rozdílem, že data přidaná do datových proudů jsou sériová. Výstupy daného vyvolání geometrické shaderu jsou nezávislé na jiných vyvolání (i když je pořadí respektováno). Při každém vyvolání začne nový pruh geometrický shader, který generuje trojúhelníkové pruhy.

Když je výstup shaderu geometrie identifikován jako hodnota interpretovaná systémem (např. SV_RenderTargetArrayIndex nebo SV_Position), hardware se na tato data podívá a provede určité chování závislé na hodnotě, kromě toho, že bude moct předat data do další fáze shaderu pro vstup. Pokud takový výstup dat ze shaderu geometrie má význam pro hardware na základě primitivního stavu (například SV_RenderTargetArrayIndex nebo SV_ViewportArrayIndex), nikoli na základě vrcholu (například SV_ClipDistance[n] nebo SV_Position), jsou primitivní data převzata z počátečního vrcholu generovaného pro primitiv.

Částečně dokončené primitivy může být vygenerován shaderem geometrie, pokud geometrický shader končí a primitivní je neúplný. Neúplné primitivy jsou bezobslužně zahozeny. To se podobá způsobu, jakým IA zpracovává částečně dokončené primitivy.

Shader geometrie může provádět operace vzorkování zatížení a textury, kde nejsou vyžadovány deriváty prostoru obrazovky (vzorková úroveň, samplecmplevelzero, samplecmplevelzero, samplegrad).

Algoritmy, které je možné implementovat v shaderu geometrie, zahrnují:

  • Rozšíření bodového spritu
  • Dynamické systémy částic
  • Fur/Fin Generation
  • Generování stínového svazku
  • Mapa s jedním průchodem render-to-cubemap
  • prohození materiálu Per-Primitive
  • Per-Primitive Nastavení materiálu – včetně generování barycentrických souřadnic jako primitivních dat, aby shader pixelů mohl provádět interpolaci vlastních atributů (například interpolace normálního řádu vyššího řádu, viz Ukázka CubeMapGS).

grafického kanálu

fáze kanálu (Direct3D 10)