POSITION と SV_POSITION セマンティクスの違い

3DCGのイメージ。

POSITION は特にあらゆる任意の座標情報を示すためのセマンティクスで、 SV_POSITION はシステム上で扱われる任意ではない座標情報であることを示すために使うようです。

例えば単純な Vertex Shader と Fragment Shader を使ったシェーダがあるとします。

頂点データはレンダリングパイプラインに従って Vertex Shader に渡されます。 このとき、Vertex Shader に与えられる頂点データはまだレンダリングパイプラインで加工されていない任意の頂点データです。 したがって、Vertex Shader に与えられる頂点データは POSITION セマンティクスが適切です。

一方で、Vertex Shader で処理された頂点情報が Fragment Shader に与えられるときには、 レンダリングパイプライン上では既に処理済みであるため、システム上で扱われる座標情報として SV_POSITION になります。 SV_ は System Value の略称と思われます。

開発環境に依りますが、SV_POSITION を POSITION として指定してもほとんどの場合に動作するようです。