学习unity shader问题记录

 invalid output semantic 'SV_POSITION': Legal indices are in [0,0] at line 25 (on d3d11)

《unity shader 入门精要》中,有一段实例代码

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Base/Base2"
{
	SubShader{
		Pass{
			CGPROGRAM

			#pragma vertex vert
			#pragma fragment frag
			struct a2v{
				float4 vertex:POSITION ;
				float3 normal:NORMAL;
				float4 texcoord:TEXCOORD0 ; 
			}; 

			struct v2f{
				//SV_POSITION 语义:告诉unity,pos里包含了顶点在裁剪空间中的位置信息
				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 v):SV_Target{
				return fixed4(v.color,1.0); 
			}

			ENDCG
		}

	}
}
这里的面的顶点着色器报错了,
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;
			}

书里作者使用的是5.2版本的unity,我使用的是2018  5.36之前的版本都是正常的。之后的版本需要改成:

void vert(in a2v v, out v2f o){
				
				o.pos = UnityObjectToClipPos(v.vertex);
				o.color = fixed3(1.0,1.0,1.0);//v.normal * 0.8 + fixed3(0.2,0.2,0.2);
				
			}
这样就可以了。

你可能感兴趣的:(代码,解决)