unity3d Shader学习(3)-unity shader的形式

一下内容主要来自冯乐乐的《unity shader 入门精要》,学习笔记,这里斗胆作为原创发表。


写在SubShader语义块中的代码是表面着色器的做法,
写在Pass语义块的代码是顶点/片元着色器和固定函数着色器的做法
而所有真正意义上的Shader代码都需要包含在ShaderLab语义块中,


Surface Shader示例:
Shader "Custom/Simple Surface Shader"
{
	SubShader {
		Tags{"RenderType"="Opaque"}

		CGPROGRAM
		#pragma surface surf Lambert
		struct Input
		{
			float4 color:COLOR;
		};
		void surf (Input IN,inout SurfaceOutput o)
		{
			o.Albedo=1;
		}
		ENDCG
	}
	FallBack "Diffuse"
}




从中可以看出表面着色器被定义在SubShader语义块中的
CGPROGRAM和ENDCG之间,这样就不需要开发者关系使用多少个
Pass,每个Pass如何渲染等问题


然后下面是一个非常简单的顶点/片元着色器代码示例:


SubShader{
	Pass
	{
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		
		float4 vert(float4 v : POSITION):SV_POSITION
		{
			return mul (UNITY_MATRIX_MVE,V);
		}

		fixed4 frag():SV_Target
		{
			return fixed4 (1.0,0.0,0.0,1.0);
		}
		ENDCG
	}
}

最后是固定函数着色器的代码示例:


Shader "Tutorial/Basic"
{
	Properties
	{
		_Color("Main Color",Color)=(1,0.5,0.5,1)
	}
	SubShader
	{
		Pass
		{
			Material
			{
				Diffuse[_Color]
			}
			Lighting On
		}
	}
}




固定函数的代码是被定义在Pass语义块中,而且我们需要完全使用ShaderLab的语法,
而非CG/HLSL。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值