• 五彩斑斓的黑+高斯模糊


      1 Shader "xShader/UGUIImage"
      2 {
      3  Properties
      4     {
      5         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
      6         _Color ("Tint", Color) = (1,1,1,1)
      7 
      8         _StencilComp ("Stencil Comparison", Float) = 8
      9         _Stencil ("Stencil ID", Float) = 0
     10         _StencilOp ("Stencil Operation", Float) = 0
     11         _StencilWriteMask ("Stencil Write Mask", Float) = 255
     12         _StencilReadMask ("Stencil Read Mask", Float) = 255
     13 
     14         _ColorMask ("Color Mask", Float) = 15
     15 
     16         [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
     17 
     18         // Gaussian Blur
     19         _TextureSize ("_TextureSize",Float) = 256
     20         _BlurRadius ("_BlurRadius",Range(0,4) ) = 3
     21         // Gray
     22         _Gray ("_Gray",Range(0,1) ) = 0.2
     23     }
     24 
     25     SubShader
     26     {
     27         Tags
     28         {
     29             "Queue"="Transparent"
     30             "IgnoreProjector"="True"
     31             "RenderType"="Transparent"
     32             "PreviewType"="Plane"
     33             "CanUseSpriteAtlas"="True"
     34         }
     35 
     36         Stencil
     37         {
     38             Ref [_Stencil]
     39             Comp [_StencilComp]
     40             Pass [_StencilOp]
     41             ReadMask [_StencilReadMask]
     42             WriteMask [_StencilWriteMask]
     43         }
     44 
     45         Cull Off
     46         Lighting Off
     47         ZWrite Off
     48         ZTest [unity_GUIZTestMode]
     49         Blend SrcAlpha OneMinusSrcAlpha
     50         ColorMask [_ColorMask]
     51 
     52         Pass
     53         {
     54             Name "Default"
     55         CGPROGRAM
     56             #pragma vertex vert
     57             #pragma fragment frag
     58             #pragma target 2.0
     59 
     60             #include "UnityCG.cginc"
     61             #include "UnityUI.cginc"
     62 
     63             #pragma multi_compile __ UNITY_UI_CLIP_RECT
     64             #pragma multi_compile __ UNITY_UI_ALPHACLIP
     65 
     66             struct appdata_t
     67             {
     68                 float4 vertex   : POSITION;
     69                 float4 color    : COLOR;
     70                 float2 texcoord : TEXCOORD0;
     71                 UNITY_VERTEX_INPUT_INSTANCE_ID
     72             };
     73 
     74             struct v2f
     75             {
     76                 float4 vertex   : SV_POSITION;
     77                 fixed4 color    : COLOR;
     78                 float2 texcoord  : TEXCOORD0;
     79                 float4 worldPosition : TEXCOORD1;
     80                 UNITY_VERTEX_OUTPUT_STEREO
     81             };
     82 
     83             sampler2D _MainTex;
     84             fixed4 _Color;
     85             fixed4 _TextureSampleAdd;
     86             float4 _ClipRect;
     87             float4 _MainTex_ST;
     88 
     89             float4 _MainTex_TexelSize;
     90 
     91             // Gaussian Blur
     92             float _TextureSize;
     93             float _BlurRadius;
     94 
     95             //Gray
     96             float _Gray;
     97 
     98             float4 GetBlurColor( float2 uv,fixed4 inColor)
     99             {
    100                 float space = 1.0/_TextureSize; //算出一个像素的空间
    101                 int count = _BlurRadius * 2  + 1; //取值范围
    102                 count *= count;
    103                 //将以自己为中心,周围半径的所有颜色相加,然后除以总数,求得平均值
    104                 float4 colorTmp = float4(0,0,0,0);
    105                 for( int x = -_BlurRadius ; x <= _BlurRadius ; x++ )
    106                 {
    107                     for( int y = -_BlurRadius ; y <= _BlurRadius ; y++ )
    108                     {
    109                         // float4 color = tex2D(_MainTex,uv + float2(x * space,y * space));
    110                         half4 color = (tex2D(_MainTex,uv + float2(x * space,y * space))) * inColor;
    111                         colorTmp += color;
    112                     }  
    113                 }
    114                 return colorTmp/count;
    115             }
    116 
    117 
    118             v2f vert(appdata_t v)
    119             {
    120                 v2f OUT;
    121                 UNITY_SETUP_INSTANCE_ID(v);
    122                 UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
    123                 OUT.worldPosition = v.vertex;
    124                 OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
    125 
    126                 OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
    127 
    128                 OUT.color = v.color * _Color;
    129                 return OUT;
    130             }
    131 
    132 
    133             fixed4 frag(v2f IN) : SV_Target
    134             {
    135 
    136                 half4 color;
    137 
    138                 if(_BlurRadius == 0) {
    139                     color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
    140                 }else {
    141                     // Gaussian Blur
    142                     color = GetBlurColor(IN.texcoord,IN.color);
    143                 }
    144 
    145                 // 五彩斑斓的灰
    146                 if(_Gray>0) {
    147                     float baseGray = (color.r * 0.299f + color.g * 0.578f + color.b * 0.114f);
    148                     color.r = baseGray * (1.0f -_Gray) + color.r * _Gray ;
    149                     color.g = baseGray * (1.0f - _Gray) + color.g * _Gray ;
    150                     color.b = baseGray * (1.0f - _Gray)  + color.b * _Gray ;
    151                 }
    152 
    153                 #ifdef UNITY_UI_CLIP_RECT
    154                 color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
    155                 #endif
    156 
    157                 #ifdef UNITY_UI_ALPHACLIP
    158                 clip (color.a - 0.001);
    159                 #endif
    160 
    161                 return color;
    162             }
    163         ENDCG
    164         }
    165     }
    166 }
  • 相关阅读:
    .Net中World转PDF
    asp.net开启多线程异步处理
    win8.1 安装kb2999226 一直提示 搜索更新
    MVC实例应用模式
    MVC模式
    23种设计模式
    Android 的Android Device Monitor 打不开出现 A error has occured
    xxx系统的可用性和易用性分析
    淘宝网的质量属性分析
    《架构漫谈》读后感
  • 原文地址:https://www.cnblogs.com/czjone/p/15924237.html
Copyright © 2020-2023  润新知