如果代码中有什么不清楚请查看以下基础知识
Shader基础知识
unity3d 中 七种坐标知识详解
根据法线着色的着色器
某些创意小手游,使用该着色器
Shader "Custom/SurfaceShader"
{
SubShader
{
Tags { "RenderType" = "Opaque" "ForceNoShadowCasting" = "True" "IgnoreProjector" = "True"}
LOD 130
Pass
{
//CG代码块
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//引入unityCG处理库
#include "UnityCG.cginc"
//定义一个数据结构,该结构包含一个4维向量,一个三维向量
struct v2f
{
//获取位置
float4 pos : SV_POSITION;
//获取颜色
float2 color : COLOR0;
};
//顶点程序代码,用于计算位置和颜色。 v2f是刚才新建的数据结构,vert是在cgprogram注册的用于顶点计算的程序名
//该方法输入值appdata_base v是与模型关联后自动输入的
//该方法输入值appdata_base v是与模型关联后自动输入的,他的输出值会自动传入到片段代码块。所以相关联的顶点和片段方法的输出和输入类型一定要一致
v2f vert(appdata_base v)
{
//创建v2f数据 o
v2f o;
//计算位置
o.pos = UnityObjectToClipPos(v.vertex);
//计算颜色
o.color = v.normal* 0.5 + 0.5;
//返回该v2f数据
return o;
}
//片段程序代码
//该代码块会自动接受顶点着色器的输出值,而他的输出值会交给像素着色器最终显示在屏幕上
half4 frag(v2f i) : COLOR
{
//返回输入的颜色,并设置透明度为1
return half4(i.color,0.5,0.1);
}
ENDCG
}
}
Fallback "VertexLit"
}