Unity Shader程式設計 (一)簡單凹凸貼圖和自選邊緣顏色和強度的shader編寫
程式碼轉自: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星雲(淺墨)
Shader "淺墨Shader程式設計/0.TheFirstShader"
{
//-------------------------------【屬性】-----------------------------------------
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
{
//渲染型別為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));// saturate將這個引數轉化為[0,1]之內的值
//邊緣顏色強度
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
}
//-------------------結束CG著色器程式語言段------------------
ENDCG
}
//“備胎”為普通漫反射
Fallback "Diffuse"
}