shader知識(shí):http://imgtec.eetrend.com/blogs/%E5%A2%A8%E5%8D%8A%E6%88%90%E9%9C%9C
//-----------------------------------------------【Shader說(shuō)明】----------------------------------------------
// Shader功能: 凹凸紋理顯示+自選邊緣顏色和強(qiáng)度(創(chuàng)建material到游戲?qū)ο螅x值此shader到material即可看到效果)
// 使用語(yǔ)言: 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 ("【邊緣顏色強(qiáng)度】Rim Power", Range(0.6,9.0)) = 1.0
}
//----------------------------【開(kāi)始一個(gè)子著色器】---------------------------
SubShader
{
//RenderType渲染類(lèi)型為Opaque,不透明
Tags { "RenderType" = "Opaque" }
//-------------------開(kāi)始CG著色器編程語(yǔ)言段-----------------
CGPROGRAM
//指令,表面著色器,名稱(chēng),使用蘭伯特光照模式
#pragma surface surf Lambert
//輸入結(jié)構(gòu)體
struct Input
{
float2 uv_MainTex; //紋理貼圖
float2 uv_BumpMap; //法線(xiàn)貼圖
float3 viewDir; //觀(guān)察方向
};
//變量聲明
sampler2D _MainTex; //主紋理
sampler2D _BumpMap; //凹凸紋理
float4 _RimColor; //邊緣顏色
float _RimPower; //邊緣顏色強(qiáng)度
//表面著色函數(shù)的編寫(xiě)
void surf (Input IN, inout SurfaceOutput o)
{
//表面反射顏色為紋理顏色
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
//表面法線(xiàn)為凹凸紋理的顏色
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
//邊緣顏色
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
//邊緣顏色強(qiáng)度
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
}
//-------------------結(jié)束CG著色器編程語(yǔ)言段------------------
ENDCG
}
//“備胎”為普通漫反射
Fallback "Diffuse"
}
最終效果
注明:學(xué)習(xí)的案例參考unity3D學(xué)習(xí)網(wǎng)
鏈接:http://www.unity.5helpyou.com/