Shader可以分为两类:
表面着色器(Surface Shader) - 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果,但也显示了部分功能。
片段着色器(Fragment Shader) - 可以做的事情更多,但是也比较难写。使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。
一个最简单的片段着色器:
Shader "Custom/Frag/Fragment" {
Properties {
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTint ("Color", Color) = (1,1,1,1)
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Pass
{
CGPROGRAM
#pragma vertex vert_img //1
#pragma fragment frag //2
#pragma fragmentoption ARB_precision_hint_fastest //3
#include "UnityCG.cginc" //4
uniform sampler2D _MainTex;
fixed4 _MainTint;
fixed4 frag(v2f_img i) : COLOR //5
{
fixed4 renderTex = tex2D(_MainTex, i.uv) * _MainTint;
return renderTex;
}
ENDCG
}
}
FallBack "Diffuse"
}
用注释加了编号,方便讲解。
1处表示使用了方法名为vert_img的顶点着色器,我们可以在UnityCG.cginc文件中找到这个方法:
v2f_img vert_img( appdata_img v )
{
v2f_img o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord