Unity內置Shader解讀6——Parallax Diffuse

1.Shader在什么情況下使用

Parallax Diffuse(視差漫反射)引入了視差(高度)貼圖的漫反射带射。使一個平面物體有凹凸效果通常使用法線貼圖咱圆,而視差(高度)圖也會有一些大型游戲廠商采用(據(jù)我所知基本上沒人用這個)盯孙。法線是通過貼圖采樣直接改變顏色明暗卦羡,而視差(高度)貼圖則通過移動UV頂點實現(xiàn)視差蹬癌。因為找不到素材,我也弄不出好看的效果圖虹茶。

2.Shader的價值(用的多不多)逝薪,Shader的難度

無用。僅供學習蝴罪。

3.代碼詳細注釋

Shader "Legacy Shaders/Parallax Diffuse" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _Parallax ("Height", Range (0.005, 0.08)) = 0.02
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
        _ParallaxMap ("Heightmap (A)", 2D) = "black" {}
    }

    CGINCLUDE
    sampler2D _MainTex;
    sampler2D _BumpMap;
    sampler2D _ParallaxMap;
    fixed4 _Color;
    float _Parallax;

    struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
        float3 viewDir;
    };

    void surf (Input IN, inout SurfaceOutput o) {
        //采樣視差貼圖的w(a)通道
        half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w;
        //通過ParallaxOffset函數(shù)計算視差偏移程度
        //ParallaxOffset函數(shù)內容如下
        /*
        // 計算視差凹凸貼圖的UV偏移
        inline float2 ParallaxOffset( half h, half height, half3 viewDir )
        {
            //h為視差貼圖采樣的結果*高度后-高度/2
            //這是Unity官方提供的一種性能高的視差貼圖算法董济,對于視差偏移度小的效果還不錯
            //由于是在平面上移動UV點,對于視差偏移度過大的效果并不好
            h = h * height - height/2.0;
            float3 v = normalize(viewDir);
            v.z += 0.42;
            return h * (v.xy / v.z);
        }
        */
        float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir);
        IN.uv_MainTex += offset;
        IN.uv_BumpMap += offset;

        fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
        o.Albedo = c.rgb;
        o.Alpha = c.a;
        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
    }
    ENDCG

    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 500

        CGPROGRAM
        #pragma surface surf Lambert
        #pragma target 3.0
        ENDCG
    }

    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 500

        CGPROGRAM
        #pragma surface surf Lambert nodynlightmap
        ENDCG
    }

    FallBack "Legacy Shaders/Bumped Diffuse"
}

4.Shader編寫思路要门,用到的知識點

ParallaxOffset方法(不重要可略過)
        // 計算視差凹凸貼圖的UV偏移
        inline float2 ParallaxOffset( half h, half height, half3 viewDir )
        {
            //h為視差貼圖采樣的結果*高度后-高度/2
            //這是Unity官方提供的一種性能高的視差貼圖算法虏肾,對于視差偏移度小的效果還不錯
            //由于是在平面上移動UV點,對于視差偏移度過大的效果并不好
            h = h * height - height/2.0;
            float3 v = normalize(viewDir);
            v.z += 0.42;
            return h * (v.xy / v.z);
        }

其他的視差貼圖

以下這些視差貼圖的會跟同類型的其他shader基本雷同欢搜,僅增加了視差部分封豪,因為視差貼圖用的很少,用官方這種解決方案的更少炒瘟,因此全都掠過吹埠。

路徑
Legacy Shaders/Parallax Diffuse 漫反射光照下的視差效果
Legacy Shaders/Parallax Specular 高光下的視差效果
Legacy Shaders/Transparent/Parallax Diffuse Parallax的半透明版本
Legacy Shaders/Transparent/Parallax Specular ParallaxSpec的半透明版本
Legacy Shaders/Self-Illumin/Parallax Diffuse Parallax的自發(fā)光版本
Legacy Shaders/Self-Illumin/Parallax Specular ParallaxSpec的自發(fā)光版本
Legacy Shaders/Reflective/Parallax Diffuse Parallax的反射版本
Legacy Shaders/Reflective/Parallax Specular ParallaxSpec的反射版本
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疮装,隨后出現(xiàn)的幾起案子缘琅,更是在濱河造成了極大的恐慌,老刑警劉巖廓推,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刷袍,死亡現(xiàn)場離奇詭異,居然都是意外死亡樊展,警方通過查閱死者的電腦和手機呻纹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专缠,“玉大人雷酪,你說我怎么就攤上這事√僦” “怎么了太闺?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嘁圈。 經(jīng)常有香客問我省骂,道長蟀淮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任钞澳,我火速辦了婚禮怠惶,結果婚禮上,老公的妹妹穿的比我還像新娘轧粟。我一直安慰自己策治,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布兰吟。 她就那樣靜靜地躺著通惫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪混蔼。 梳的紋絲不亂的頭發(fā)上履腋,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音惭嚣,去河邊找鬼遵湖。 笑死,一個胖子當著我的面吹牛晚吞,可吹牛的內容都是我干的延旧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼槽地,長吁一口氣:“原來是場噩夢啊……” “哼迁沫!你這毒婦竟也來了?” 一聲冷哼從身側響起闷盔,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弯洗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逢勾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡藐吮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年溺拱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谣辞。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡迫摔,死狀恐怖,靈堂內的尸體忽然破棺而出泥从,到底是詐尸還是另有隱情句占,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布躯嫉,位于F島的核電站纱烘,受9級特大地震影響杨拐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜擂啥,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一哄陶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哺壶,春花似錦屋吨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至资锰,卻和暖如春敢课,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背台妆。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工翎猛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人接剩。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓切厘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懊缺。 傳聞我的和親對象是個殘疾皇子疫稿,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容