// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "MyShader/VFShader/VF001"
{
Properties{
_MainCol("颜色",Color)=(1,0,0,1)
}
SubShader{
Pass{
CGPROGRAM //------CGPROGRAM的开始------
//顶点着色器的编译指令
//每有一个顶点就执行一次
#pragma vertex vert
//片段着色器的编译指令
//每有一个像素就执行一次
#pragma fragment frag
//声明外部属性
fixed4 _MainCol;//顶点函数
//参数输入:模型输入;返回值输出:屏幕坐标
half4 vert(half4 localPos:POSITION):SV_POSITION{
//将模型坐标转换为屏幕坐标
return UnityObjectToClipPos(localPos);
}
fixed4 frag():COLOR{
//片段函数
//返回值语义绑定:每个像素的颜色
return _MainCol;
}
ENDCG//------CG语言的结束------
}
}
}
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "MyShader/VFShader/VF002"
{
Properties{
_ColorOffset("颜色偏移量",Range(0,1))=0.2
_RedOffset("红色偏移量",Range(0,1))=0
_GreenOffset("绿色偏移量",Range(0,1))=0
_BlueOffset("蓝色偏移量",Range(0,1))=0
}
SubShader{
Pass{
CGPROGRAM //------CGPROGRAM的开始------
//顶点着色器的编译指令
//每有一个顶点就执行一次
#pragma vertex vert
//片段着色器的编译指令
//每有一个像素就执行一次
#pragma fragment frag
//声明外部属性
fixed _ColorOffset;
fixed _RedOffset;
fixed _GreenOffset;
fixed _BlueOffset;
//声明外部属性
//顶点函数输出结构体
struct v2f
{
//屏幕坐标
half4 clipPos:SV_POSITION;
//理解为一个临时变量,用于存储本地坐标
fixed4 localPos:TEXCOORD0;
};//顶点函数
//参数输入:模型输入;返回值输出:v2f
v2f vert(half4 localPos:POSITION){
//声明一个结构体对象
v2f o;
//将本地坐标临时存储到v2ff中
o.localPos=localPos+half4(_RedOffset,_GreenOffset,_BlueOffset,0);
//将屏幕坐标输出到v2f
o.clipPos=UnityObjectToClipPos(localPos);
//最终返回这个结构体对象
return o;
}
//参数输入:v2f返回值语义绑定:每个像素的颜色
fixed4 frag(v2f input):COLOR{
//片段函数
//将v2f中的本地坐标当初颜色返回
return input.localPos;
}
ENDCG//------CG语言的结束------
}
}
}
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "MyShader/VFShader/VF003"
{
Properties{
_DiffuseColor("漫反射颜色",Color)=(1,0,0,1)
}
SubShader{
Pass{
Tags{
//光照模式设置为正向渲染
"LightMode"="ForwardBase"
}
CGPROGRAM //------CGPROGRAM的开始------
//顶点着色器的编译指令
//每有一个顶点就执行一次
#pragma vertex vert
//片段着色器的编译指令
//每有一个像素就执行一次
#pragma fragment frag
#include "UnityCG.cginc"
//顶点输入结构体
struct appdata{
//顶点模型坐标
half4 vertexPos:POSITION;
//顶点法线向量
half3 vertexNormal:NORMAL;
};
//顶点输出结构体
struct v2f{
//顶点屏幕坐标
half4 screenPos:SV_POSITION;
//顶点屏幕法线
half3 screenNormal:NORMAL;
};
//声明漫反射颜色属性
fixed4 _DiffuseColor;
//光照颜色【內部变量】
fixed4 _LightColor0;
//顶点函数
v2f vert(appdata data){
//顶点输出结构体对象
v2f o;
//将顶点模型坐标,转换为顶点屏幕坐标
o.screenPos=UnityObjectToClipPos(data.vertexPos);
//将顶点模型法线,转换为顶点屏幕法线
o.screenNormal=mul(half4(data.vertexNormal,1),unity_WorldToObject).xyz;
//返回结果
return o;
}
//片段函数
half4 frag(v2f vertexInput):COLOR{
//求入射光线的单位向量
half3 lightDir = normalize(_WorldSpaceLightPos0);
//求法线向量的单位向量
half3 normalDir= normalize(vertexInput.screenNormal);
//通过漫反射公式计算所得每个像素的颜色
half3 diffuseColor= _DiffuseColor.rgb*_LightColor0.rgb*max(0,dot(lightDir,normalDir));
//漫反射颜色再加上环境光
return half4(diffuseColor,1)+UNITY_LIGHTMODEL_AMBIENT;}
ENDCG//------CG语言的结束------
}
}
}