1. 程式人生 > >Unity Shader程式設計 (一)簡單凹凸貼圖和自選邊緣顏色和強度的shader編寫

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"

}