shader知识:http://imgtec.eetrend.com/blogs/%E5%A2%A8%E5%8D%8A%E6%88%90%E9%9C%9C
//-----------------------------------------------【Shader说明】----------------------------------------------
// Shader功能: 凹凸纹理显示+自选边缘颜色和强度(创建material到游戏对象,赋值此shader到material即可看到效果)
// 使用语言: Shaderlab
//---------------------------------------------------------------------------------------------------------------------
Shader "My/NormalRimShader"
{
//-------------------------------【属性】-----------------------------------------
Properties
{
_MainTex ("【纹理】Texture", 2D) = "white" {}
_BumpMap ("【凹凸纹理】Bumpmap", 2D) = "bump" {}
_RimColor ("【边缘颜色】Rim Color", Color) = (0.17,0.36,0.81,0.0)
_RimPower ("【边缘颜色强度】Rim Power", Range(0.6,9.0)) = 1.0
}
//----------------------------【开始一个子着色器】---------------------------
SubShader
{
//RenderType渲染类型为Opaque,不透明
Tags { "RenderType" = "Opaque" }
//-------------------开始CG着色器编程语言段-----------------
CGPROGRAM
//指令,表面着色器,名称,使用兰伯特光照模式
#pragma surface surf Lambert
//输入结构体
struct Input
{
float2 uv_MainTex; //纹理贴图
float2 uv_BumpMap; //法线贴图
float3 viewDir; //观察方向
};
//变量声明
sampler2D _MainTex; //主纹理
sampler2D _BumpMap; //凹凸纹理
float4 _RimColor; //边缘颜色
float _RimPower; //边缘颜色强度
//表面着色函数的编写
void surf (Input IN, inout SurfaceOutput o)
{
//表面反射颜色为纹理颜色
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
//表面法线为凹凸纹理的颜色
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
//边缘颜色
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
//边缘颜色强度
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
}
//-------------------结束CG着色器编程语言段------------------
ENDCG
}
//“备胎”为普通漫反射
Fallback "Diffuse"
}
注明:学习的案例参考unity3D学习网
链接:http://www.unity.5helpyou.com/