Unity Shader 三 卡通特效

            哈哈,今天给大家带来的是卡通shader,其实可能会有很多朋友奇怪,明明是3D的模型,不追求仿真的效果,为什么要弄什么卡通的特效。其实我想说,不为什么玩家喜欢那么我们就要弄。

           (别喷我,我实话实说。。。。。。。)好了,实话实说,要知道世界上面是有很多的像博主这样的二次元爱好者(其实就是宅男。。。。。。),在博主眼里萌萌的二次元是超级可爱的,哈哈哈哈哈哈。         

           好了扯到正题上面了,其实用shader来做卡通特效是有非常多的写法,这里博主就介绍一种使用简单的卡通shader。

Shader "Custom/Toon" {  
    Properties {  
        _MainTex ("Base (RGB)", 2D) = "white" {}  
        _Bump ("Bump", 2D) = "bump" {}  
        _Tooniness ("Tooniness", Range(0.1,20)) = 4  
    }  
    SubShader {  
        Tags { "RenderType"="Opaque" }  
        LOD 200  
   
        CGPROGRAM  
        #pragma surface surf Lambert finalcolor:final  
   
        sampler2D _MainTex;  
        sampler2D _Bump;  
        float _Tooniness;  
   
        struct Input {  
            float2 uv_MainTex;  
            float2 uv_Bump;  
        };  
   
        void surf (Input IN, inout SurfaceOutput o) {  
            half4 c = tex2D (_MainTex, IN.uv_MainTex);  
            o.Normal = UnpackNormal( tex2D(_Bump, IN.uv_Bump));  
            o.Albedo = c.rgb;  
            o.Alpha = c.a;  
        }  
   
        void final(Input IN, SurfaceOutput o, inout fixed4 color) {  
            color = floor(color * _Tooniness)/_Tooniness;  
        }  
   
        ENDCG  
    }   
    FallBack "Diffuse"  
}  


    _MainTex ("Base (RGB)", 2D) = "white" {}                       //这句话的意思是拿到shader面板里面的2D贴图
                                                                                           

    _Bump ("Bump", 2D) = "bump" {}                                   //这句话的意思是拿到2D的法线贴图
    _Tooniness ("Tooniness", Range(0.1,20)) = 4                //这句话的意思是规定一个卡通值


     CGPROGRAM                                                               //这句话的意思是声明使用CG的函数
     #pragma surface surf Lambert finalcolor:final                //这句话的意思是使用unity里面自带的Lambert光照模型,并且声明final函数。
         
     half4 c = tex2D (_MainTex, IN.uv_MainTex);                 // 这句话里面关键的一点就是tex2D()这个函数 
                                                                                             



        

        这句话的意思是根据这张图片和相应的uv点或者该点的tex2d数值。


 

            o.Normal = UnpackNormal( tex2D(_Bump, IN.uv_Bump));          //这句话的意思是获得法线贴图该点的法向量
            color = floor(color * _Tooniness)/_Tooniness;                //这句话的意思是先把颜色值和_Tooniness的值相乘向下取整接着除以_Tooniness,使得值被归入到一个已知的集合之中,达到了简化颜色的目的。
            好了,最后来给大家展示一下效果,因为图片和模型之类的东西暂时手里面没有现成的,所以暂借一下大神的资源,哈哈哈哈哈(别打我。。。。)

            


        其实卡通特效是有很多实现方式的,还有一种轮廓描边可以更好地体现出效果,这里就留待各位朋友自己去探索了,欢迎大家来和我交流,我的邮箱是609555184@qq.com , 大家也可以来群里面找我344682050,哈哈哈哈哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值