Shader學習——遮罩紋理

核心

效果圖

遮罩紋理
Shader "Unlit/015"
{
    Properties
    {
        _MainTex ("MainTex", 2D )= "white" {}
        _BumpMap ("normal Map", 2D) = "bump"{}
        _BumpScale("Bump Scale",float) = 1
        _SpecularMask("Specular Mask", 2D) = "white" {}
        _SpecularScale("Specular Scale", float) = 1
        _Diffuse("Diffuse",Color) = (1,1,1,1)
        _Specular("Specular",Color) = (1,1,1,1)
        _Gloss("Gloss",Range(1,256)) = 5
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #include "Lighting.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            sampler2D _BumpMap;
            float4 _BumpMap_ST;
            sampler2D _SpecularMask;
            float4 _SpecularMask_ST;
            float _SpecularScale;
            float _BumpScale;
            fixed4 _Diffuse;
            fixed4 _Specular;
            float _Gloss;

            struct v2f
            {
                float4 vertex :SV_POSITION;
                fixed3 lightDir: TEXCOORD0;
                float3 viewDir: TEXCOORD1;
                float4 uv : TEXCOORD2;
                float2 maskUv: TEXCOORD3;
            };

            v2f vert (appdata_tan v)
            {
                v2f o;
                //頂點位置
                o.vertex = UnityObjectToClipPos(v.vertex);
                
                //UV =頂點紋理坐標進行縮放+偏移
                o.uv.xy =TRANSFORM_TEX(v.texcoord, _MainTex);
                o.uv.zw =TRANSFORM_TEX(v.texcoord, _BumpMap);
                //法線貼圖UV =頂點紋理坐標進行縮放+偏移
                o.maskUv =TRANSFORM_TEX(v.texcoord, _SpecularMask);

                //內(nèi)置宏畸陡,用于得到模型空間到切線空間的變換矩陣rotation
                TANGENT_SPACE_ROTATION;

                //求切線空間光源方向=矩陣乘積(變換矩陣,模型空間下光照方向).xyz西潘;
                o.lightDir = mul(rotation,ObjSpaceLightDir (v.vertex)).xyz;
                //求切線空間視角方向=矩陣乘積(變換矩陣,模型空間下視角方向).xyz梗掰;
                o.viewDir = mul(rotation,ObjSpaceViewDir (v.vertex)).xyz;
            
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {   
                //切線空間光源方向
                fixed3 tangentLightDir = normalize(i.lightDir);
                //切線空間中視角方向
                fixed3 tangentViewDir = normalize(i.viewDir);
                //采樣
                fixed4 packedNormal = tex2D(_BumpMap,i.uv.zw);
            
                //切線中法線方向爽雄,設置成normalMap的
                fixed3 tangentNormal = UnpackNormal(packedNormal);
                tangentNormal.xy *= _BumpScale;
                
                //紋素值=對紋理進行采樣(采樣紋理,float2紋理坐標)
                fixed3 albedo = tex2D(_MainTex,i.uv).rgb;

                        
                //漫反射光=入射光線強度*紋素值*材質(zhì)的漫反射系數(shù)*取值為正數(shù)(切線光源方向 · 切線法線方向)
                fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * (dot(tangentLightDir,tangentNormal)*0.5+0.5);

                //環(huán)境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
                
                //高光遮罩
                fixed specularMask = tex2D(_SpecularMask, i.maskUv).r * _SpecularScale;

                //半角方向
                fixed3 halfDir =normalize(tangentLightDir + tangentViewDir);
                //BlinnPhong高光反射=入射光線顏色強度*材質(zhì)的高光反射系數(shù)*n次平方(取值為正數(shù)(切線法線方向 · 半角方向)怖亭,n)* 高光遮罩涎显;
                fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(tangentNormal,halfDir)),_Gloss) * specularMask;

                fixed3 color = ambient + diffuse + specular;

                return fixed4(color,1);
            }
            ENDCG
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兴猩,隨后出現(xiàn)的幾起案子期吓,更是在濱河造成了極大的恐慌,老刑警劉巖倾芝,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咙冗,死亡現(xiàn)場離奇詭異,居然都是意外死亡井辜,警方通過查閱死者的電腦和手機布蔗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拯刁,“玉大人脊岳,你說我怎么就攤上這事《獠#” “怎么了割捅?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帚桩。 經(jīng)常有香客問我亿驾,道長,這世上最難降的妖魔是什么账嚎? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任莫瞬,我火速辦了婚禮,結(jié)果婚禮上郭蕉,老公的妹妹穿的比我還像新娘疼邀。我一直安慰自己,他們只是感情好召锈,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布旁振。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拐袜。 梳的紋絲不亂的頭發(fā)上吉嚣,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音蹬铺,去河邊找鬼尝哆。 笑死,一個胖子當著我的面吹牛丛塌,可吹牛的內(nèi)容都是我干的较解。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼赴邻,長吁一口氣:“原來是場噩夢啊……” “哼印衔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姥敛,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤奸焙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彤敛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體与帆,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年墨榄,在試婚紗的時候發(fā)現(xiàn)自己被綠了玄糟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡袄秩,死狀恐怖阵翎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情之剧,我是刑警寧澤郭卫,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站背稼,受9級特大地震影響贰军,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟹肘,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一词疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疆前,春花似錦寒跳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米辐。三九已至胸完,卻和暖如春书释,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赊窥。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工爆惧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锨能。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓扯再,卻偏偏與公主長得像,于是被迫代替她去往敵國和親址遇。 傳聞我的和親對象是個殘疾皇子熄阻,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容