差色器SV_POSITION vs POSITION
2024-05-14
27
0
SV_POSITION:SV前缀的变量代表system value,在DX10以后的语义绑定中被使用代表特殊的意义,和POSITION用法一样。
在DX10版本之前没有引入SV的预定义语义,POSITION被用作vertex shader的输入,输出,fragment shader的输入参数。但DX10之后就推荐使用SV_POSITION作为vertex shader的输出和fragment shader的输入了,注意vertex shader的输入还是使用POSITION!
总结:
两个的用法大致相同,都是存储坐标信息,但是一个是转换前的,一个是转换后的。
- POSITION:用来存储,模型在本地坐标下,模型空间中(objcet space)的顶点坐标,转换为剪裁空间坐标前的坐标,unity告诉我们的模型顶点坐标,没经过转换的。可用作定点着色器(vertex shader)的输入、输出;片元着色器(frag)的输入。
- SV_POSITION:用来存储,模型在剪裁空间,投影空间中的位置信息,
最简单d3d11的顶点着色器代码:
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD;
};
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD;
};
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
VS_OUTPUT VS(VS_INPUT input)
{
return input;
}