Shader學(xué)習(xí)——顏色階級晦墙,漸進紋理

兩種方式表現(xiàn)出來的效果相同

  • 顏色階級
Shader "Unlit/019"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Diffuse ("漫反射", Color) = (1,1,1,1)
        _Steps("顏色階級", Range(1,30)) = 1
        _ToonEffect("卡通效果", Range(0,1) ) = 0.5
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
    
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            //引入光照
            #include "Lighting.cginc" 
             
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                fixed3 worldNormal : TEXCOORD1;
                float3 worldPos : TEXCOORD2;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _Diffuse;
            float _Steps;
            float _ToonEffect;

            v2f vert (appdata_base v)
            {
                v2f o;
                //頂點位置
                o.vertex = UnityObjectToClipPos(v.vertex);
                //法線方向
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                //世界坐標
                o.worldPos = mul(unity_ObjectToWorld,v.vertex);
                //紋理坐標縮放偏移
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
              
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // 紋理采樣
                fixed4 albedo = tex2D(_MainTex, i.uv);

                //光源方向
                fixed3 worldLightDir = UnityWorldSpaceLightDir (i.worldPos);

                //半蘭伯特模型=映射值為正數(shù)(表面法線方向 · 光源方向)
                float difLight = dot(worldLightDir,i.worldNormal)*0.5+0.5;

                //顏色平滑在【0嗅钻,1】之間
                difLight = smoothstep(0,1,difLight);
                //顏色離散化
                float toon = floor(difLight * _Steps) / _Steps;
                difLight = lerp(difLight,toon,_ToonEffect);

                //漫反射光=入射光線強度*紋素值*材質(zhì)的漫反射系數(shù)*半蘭伯特模型
                fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * difLight;

                //環(huán)境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

                fixed3 color = ambient + diffuse;
                return fixed4(color,1);
            }
            ENDCG
        }
    }
}
  • 漸進紋理
Shader "Unlit/019"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Diffuse ("漫反射", Color) = (1,1,1,1)
        _RampTex("漸進紋理",2D)="while"{}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
              
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            //引入光照
            #include "Lighting.cginc" 
             
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                fixed3 worldNormal : TEXCOORD1;
                float3 worldPos : TEXCOORD2;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _Diffuse;
            sampler2D _RampTex;
            
            v2f vert (appdata_base v)
            {
                v2f o;
                //頂點位置
                o.vertex = UnityObjectToClipPos(v.vertex);
                //法線方向
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                //世界坐標
                o.worldPos = mul(unity_ObjectToWorld,v.vertex);
                //紋理坐標縮放偏移
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
              
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // 紋理采樣
                fixed4 albedo = tex2D(_MainTex, i.uv);
                
                //光源方向
                fixed3 worldLightDir = UnityWorldSpaceLightDir (i.worldPos);

                //半蘭伯特模型=映射值為正數(shù)(表面法線方向 · 光源方向)
                float difLight = dot(worldLightDir,i.worldNormal)*0.5+0.5;

                //漸進紋理采樣
                fixed4 rampColor = tex2D(_RampTex, fixed2(difLight,difLight));

                //漫反射光=入射光線強度*紋素值*材質(zhì)的漫反射系數(shù)*漸進紋理
                fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * rampColor;
  
                //環(huán)境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

                fixed3 color = ambient + diffuse;
                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)自己被綠了宇智。 大學(xué)時的朋友給我發(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)容