Freigeben über


Vertexshaderphase (VS)

Die Vertexshaderphase (VS) verarbeitet Scheitelpunkte und führt in der Regel Vorgänge wie Transformationen, Skinning und Beleuchtung aus. Ein Vertex-Shader verwendet einen einzelnen Eingabevertex und erzeugt einen einzelnen Ausgabevertex.

Zweck und Verwendung

Die Vertex-Shaderphase (VS) wird für einzelne Pro-Vertex-Verarbeitung verwendet, z. B.:

  • Transformationen
  • Skinning
  • Morphen
  • Beleuchtung pro Scheitelpunkt

Die Vertex-Shader-Stufe ist eine programmierbare Shaderphase. sie wird als abgerundeter Block im Grafikpipelinediagramm angezeigt. Diese Shaderphase verwendet den Common-Shader-Kern 4.0 des Shaders.

Die Vertex-Shaderphase (VS) verarbeitet Scheitelpunkte aus dem Eingabeassembler. Vertex-Shader arbeiten immer mit einem einzelnen Eingabevertex und erzeugen einen einzelnen Ausgabevertex. Die Vertex-Shaderphase muss immer aktiv sein, damit die Pipeline ausgeführt werden kann. Wenn keine Vertexänderung oder Transformation erforderlich ist, muss ein Pass-Through-Vertex-Shader erstellt und auf die Pipeline festgelegt werden.

Jeder Vertex-Shadereingabevertex kann aus bis zu 16 32-Bit-Vektoren (jeweils bis zu 4 Komponenten) bestehen. Jeder Ausgabevertex kann aus bis zu 16 32-Bit-4-Komponentenvektoren bestehen. Alle Vertex-Shader müssen mindestens eine Eingabe und eine Ausgabe aufweisen, die so wenig wie ein Skalarwert sein kann.

Die Vertex-Shader-Phase kann zwei vom System generierte Werte aus dem Eingabeassembler verwenden: VertexID und InstanceID (siehe Systemwerte und Semantik). Da VertexID und InstanceID sowohl auf Vertexebene als auch von Hardware generierte IDs nur in die erste Phase eingespeist werden können, die sie versteht, können diese ID-Werte nur in die Vertex-Shader-Phase eingespeist werden.

Vertex-Shader werden immer auf allen Scheitelpunkten ausgeführt, einschließlich angrenzender Scheitelpunkte in Eingabegrundtypentopologien mit Adjacency. Die Häufigkeit, mit der der Vertex-Shader ausgeführt wurde, kann mithilfe der VSInvocations-Pipelinestatistik von der CPU abgefragt werden.

Ein Vertex-Shader kann Lade- und Textursamplingvorgänge ausführen, bei denen Bildschirmraumderivate nicht erforderlich sind (mit systeminternen HLSL-Funktionen: Sample (DirectX HLSL Texture Object), SampleCmpLevelZero (DirectX HLSL Texture Object) und SampleGrad (DirectX HLSL Texture Object)).

Eingabe

Ein einzelner Scheitelpunkt mit vom System generierten Werten "VertexID" und "InstanceID". Jeder Vertex-Shadereingabevertex kann aus bis zu 16 32-Bit-Vektoren (jeweils bis zu 4 Komponenten) bestehen.

Ausgabe

Ein einzelner Scheitelpunkt. Jeder Ausgabevertex kann aus bis zu 16 32-Bit-4-Komponentenvektoren bestehen.

Grafikpipeline