Shader学习笔记4

来源:互联网 发布:淘宝助理不显示宝贝 编辑:程序博客网 时间:2024/06/06 09:47

前两篇写的大多是表面着色器(SurfaceShader),有官方的,网上的,自己写的。自己看着都乱,当做仓库用吧。。。

然后就研究到了顶点和片段着色器,发现很自由,功能很多,但是不能处理光照。还有屏幕特效什么的特别炫酷,可惜我太菜看不懂。写完这篇博客,Shader也要停一下,需要消化一段时间,以后也许会写一些Shader的插件,原理,实现技巧什么的,嗯,就这么多。下面就是2个我感觉常用的屏幕特效:


屏幕特效

摄像机灰度(死亡视角)

在Camera中设置脚本,设置Material ---mat
调用回调
OnRenderImage(RenderTexuture source,RenderTexture dest){
      
Graphics.Blit(source, dest, mat);
}
_MainTex 不需要赋值,_Num控制灰度,0是不灰,1是灰,可以实现从死亡视角转化为正常视角
Shader"Custom/MatShader"
{
                Properties
                {
                                //主纹理
                                _MainTex ("Albedo (RGB)",2D) ="white"{}
                                _Num("Num",Range(0,1))=0
                }
                SubShader
                {
                                Tags{"RenderType"="Opaque"}
                                LOD200
       Pass{
       CGPROGRAM
                                #pragma vertex vert
                                #pragma fragment frag
                                #include "UnityCG.cginc"

                                sampler2D_MainTex;
                                fixed_Num;
       voidvert(inoutappdata_basev)
        {
             v.vertex =mul(UNITY_MATRIX_MVP,v.vertex);
        }

       fixed4frag(appdata_basev):Color
        {
            fixed4c =tex2D(_MainTex,v.texcoord);
            fixedval = c.r*0.3+c.g*0.59+c.b*0.11;
            fixed4now =fixed4(val,val,val,1);
            returnlerp(c,now,_Num);
        }
       
       ENDCG
        }
         }
                //备胎为漫反射
                FallBack"Diffuse"
}
径向模糊

  •   步骤一:定义径向模糊的中心点,通常取图像的正中心点。
  •   步骤二:计算采样像素与中心点的距离,根据距离确定偏移程度,即离中心点越远,偏移量越大。
  •   步骤三:将采样点的颜色值做平均求和。

Shader"径向模糊Shader"{
                Properties{
                                _MainTex("纹理",2D)="while"{}
                                _Level("强度",Range(0,100))=10
                }
                SubShader{
                                Pass
                                {
                                  CGPROGRAM
                                  #pragma vertex vert
                                  #pragma fragment frag
                                  #include "unitycg.cginc"
                                  sampler2D_MainTex;
                                  float_Level;
                                   structv2f{
                                                                fixed4vertex:POSITION;
                                                                fixed2uv:TEXCOORD;
                                                };

                                                v2f vert(appdata_basev){
                                                                v2f o;
                                                                o.vertex=mul(UNITY_MATRIX_MVP,v.vertex);
                                                                o.uv=v.texcoord;
                                                                returno;
                                                }

                                                fixed4frag(v2f i):COLOR
                                                                fixed4c;

                                                                fixed2center=fixed2(.5,.5);
                                                                fixed2uv=i.uv-center;
                                                                fixed3c1=fixed3(0,0,0);
                                                                for(fixedj=0;j<_Level;j++){
                                                                                c1+=tex2D(_MainTex,uv*(1-0.01*j)+center).rgb;
                                                                }
                                                                c.rgb=c1/_Level;
                                                                c.a=1;
                                                                returnc;
                                                }
                                  ENDCG
                                }
                }
}

0 0
原创粉丝点击