Unity Shader入门概要的第五章的5.2中有这样的一段代码:
Shader "Unity Shaders Book/Chapter 5/Simple Shader"{
SubShader
{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
//使用一个结构体来定义定点着色器的输入
struct a2v { //a2v == application to vertex
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
fixed3 color : COLOR0;
};
v2f vert(a2v v) : SV_POSITION{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = v.normal * 0.5 + fixed3(0.5,0.5,0.5);
return o;
}
fixed4 frag(v2f i) : SV_Target{
return fixed4(i.color, 1.0);
}
ENDCG//CG代码片段结束
}
}
FallBack "Diffuse"
}
由于书中所使用的Unity版本为5.x。但是实际上,在现在的Unity2018中这段代码的部分会报错,如下所示:
v2f vert(a2v v) : SV_POSITION{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = v.normal * 0.5 + fixed3(0.5,0.5,0.5);
return o;
}
报错内容:
经过在网上搜索,得知如果要解决这个报错,需要将此部分代码修改为:
void vert(in a2v v, out v2f o){
//return UnityObjectToClipPos(v);
o.pos = UnityObjectToClipPos(v.vertex);
o.color = v.normal * 0.5 + fixed3(1.0,1.0,1.0);
}
即可正常显示
参考来源:
https://blog.csdn.net/Yang9325/article/details/81038328