Unity Shader 三 卡通特效

来源:互联网 发布:windows生物识别系统 编辑:程序博客网 时间:2024/04/26 06:41

            哈哈,今天给大家带来的是卡通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 0