顶点着色器和片元着色器之间的通信

作者:追风剑情 发布于:2016-8-29 23:06 分类:Shader

Shader "Custom/VertFragShader" {
	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;
				//COLOR0语义可以用于存储颜色信息
				fixed3 color : COLOR0;
			};
			
			//注意,顶点着色器是逐顶点调用的。
			v2f vert(a2v v) : SV_POSITION {
				//声明输出结构
				v2f o;
				o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
				//v.normal包含了顶点的法线方向,其分量范围在[-1.0, 1.0]
				//下面的代码把分量范围映射到了[0.0, 1.0]
				//存储到o.color中传递给片元着色器
				o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);
				return o;
			}
			
			//注意:
			//片元着色器是逐片元调用的,
			//片元着色器中的输入实际上是把顶点着色器的输出进行插值后得到的结果。
			fixed4 frag(v2f i) : COLOR {
				//将插值后的i.color显示到屏幕上
				return fixed4(i.color, 1.0);
			}
			ENDCG
		}
	}

	FallBack "Diffuse"
}

效果

11111.jpg

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号