2.《unityshader中级篇》顶点着色器获取模型数据

在上节我们是使用POSITION来得到模型的顶点位置,假如我们想获取更多的模型数据那???例如获取纹理坐标,法线方向

答案就是结构体

            //使用一个结构体来定义顶点着色器的输入
            struct a2v {
                float4 vertex : POSITION;
                //POSITION语义告诉引擎用模型空间空间顶点坐标填充vertex
                float3 normal : NORMAL;
                //NORMAL就告诉引擎用模型的空间法线方向填充normal变量
                float4 texcoord : TEXCOORD0;
                //TEXCOOD0告诉引擎用模型的第一套uv填充texcoord变量
            };

我们定义了一个a2v结构体,里面含有模型数据。
在unity中,使用该材质的meshrender组件提供这些数据来填充上述语义的数据,在调用drawcall时候,meshrender组件会把它渲染的模型数据给unityshader。模型数据有很多,例如顶点颜色了等等,通过定义结构体我们就可以在顶点着色器中访问这些模型数据。

顶点着色器与片元着色器交互

有时候我们希望从顶点着色器中输出一些数据,例如模型的纹理坐标,法线进行传递给片元着色器,他们是怎样交互的那?

            //来定义顶点着色器的输出
            struct v2f {
                float4 pos : SV_POSITION;
                //SV_POSITION告诉引擎pos中存储是顶点在裁剪空间中的位置信息
                fixed3 color : COLOR0;
                //COLOR0表示存储颜色信息
            };

v2f结构体用于在顶点着色器和片元着色器之间传递消息,顶点着色逐顶点调用,片元着色器逐片元调用,片元着色器的输入实际就是顶点着色器的输出进行差值后得到的
欢迎关注我的微博,给大家带来欢乐

你可能感兴趣的:(2.《unityshader中级篇》顶点着色器获取模型数据)