项目须要。參考了一下网上的资料,写了一个shader,给button置灰。

shader详细实现例如以下:

2016.07.25补充,支持mask剪裁

Shader "Transparent Colored Gray"

{

Properties

{

_MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {}

_Color ("Tint", Color) = (1,1,1,1)



_StencilComp ("Stencil Comparison", Float) = 8

_Stencil ("Stencil ID", Float) = 0

_StencilOp ("Stencil Operation", Float) = 0

_StencilWriteMask ("Stencil Write Mask", Float) = 255

_StencilReadMask ("Stencil Read Mask", Float) = 255





_ColorMask ("Color Mask", Float) = 15





[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0

}





SubShader

{

Tags



"Queue"="Transparent" 

"IgnoreProjector"="True" 

"RenderType"="Transparent" 

"PreviewType"="Plane"

"CanUseSpriteAtlas"="True"

}



Stencil

{

Ref [_Stencil]

Comp [_StencilComp]

Pass [_StencilOp] 

ReadMask [_StencilReadMask]

WriteMask [_StencilWriteMask]

}





Cull Off

Lighting Off

ZWrite Off

ZTest [unity_GUIZTestMode]

Blend SrcAlpha OneMinusSrcAlpha

ColorMask [_ColorMask]





Pass

{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag





#include "UnityCG.cginc"

#include "UnityUI.cginc"





#pragma multi_compile __ UNITY_UI_ALPHACLIP



struct appdata_t

{

float4 vertex   : POSITION;

float4 color    : COLOR;

float2 texcoord : TEXCOORD0;

};





struct v2f

{

float4 vertex   : SV_POSITION;

fixed4 color    : COLOR;

half2 texcoord  : TEXCOORD0;

float4 worldPosition : TEXCOORD1;

};



fixed4 _Color;

fixed4 _TextureSampleAdd;

float4 _ClipRect;





v2f vert(appdata_t IN)

{

v2f OUT;

OUT.worldPosition = IN.vertex;

OUT.vertex = mul(UNITY_MATRIX_MVP, OUT.worldPosition);





OUT.texcoord = IN.texcoord;



#ifdef UNITY_HALF_TEXEL_OFFSET

OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);

#endif



OUT.color = IN.color * _Color;

return OUT;

}





sampler2D _MainTex;





fixed4 frag(v2f IN) : SV_Target

{

// Sample the texture

half4 color = tex2D(_MainTex, IN.texcoord) * IN.color;

float c = 0.299*color.r + 0.587*color.g + 0.184*color.b;

color.r = color.g = color.b = c;

color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);

#ifdef UNITY_UI_ALPHACLIP

clip (color.a - 0.001);

#endif





return color;

}

ENDCG

}

}

}

先建一个名为colorGrayMat的材质,把shader文件附加到材质上。

管理material材质代码:

public class MaterialManager

{

    public static void addMaterial(Image img, string materialName)

    {

        Material material = GameAssets.instance.loadMaterial(materialName);

        if (img != null && material != null)

        {

            img.material = material;

        }

    }

public static void addGrayMaterial(Image img)

    {

        addMaterial(img,"colorGrayMat");

    }

}

调用代码:

MaterialManager.addGrayMaterial(img);

关于shader资料:

官网资料: http://docs.unity3d.com/Manual/SL-SurfaceShaders.html(英文)

http://unity3d.9tech.cn/news/2013/1220/39315.html(中文)

猫都能学会的Unity3D Shader入门指南 http://www.onevcat.com/2013/07/shader-tutorial-1/



【每日一记】unity3d 图片置灰shader的更多相关文章

  1. ShaderLab-12chapter屏幕后处理、图片置灰效果

    屏幕后处理的原理 使用特定的材质去渲染对应相机近裁剪平面的4边形面片(刚好填充屏幕) 亮度-Luminance公式 --扩展置灰实现 luminance = 0.2125 * Red + 0.7154 ...

  2. css 图片置灰

    .filterGray{ -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(10 ...

  3. 使用CSS将图片转换成黑白(灰色、置灰)z转

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...

  4. 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]

        小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...

  5. js使用CSS将图片转换成黑白(灰色、置灰)

    详细内容请点击 可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的. 不过,时代发展,如今,CSS3的逐步推进,我们也开始 ...

  6. [转] 小tip: 使用CSS将图片转换成黑白(灰色、置灰) ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2547 //zxx: ...

  7. 小tip: 使用CSS将图片转换成黑白(灰色、置灰)

    可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的.不过,时代发展,如今,CSS3的逐步推进,我们也开始看到“黑白效果”大 ...

  8. Unity图片变灰的方式

    http://www.tuicool.com/articles/Vruuqme NGUI中的Button差点儿是最经常使用到的控件之中的一个,而且能够组合各种组件(比方UIButtonColor,UI ...

  9. 转: 用css把图片转为灰色图

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

随机推荐

  1. Git学习总结(8)——Git和SVN之间的基本区别

    GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...

  2. Opencv 使用Rect选取与设置窗口ROI

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50593825 首先看一下Rect对象的 ...

  3. ASP.NET-常用插件集合

    001.输入表单验证插件FluentValidation ( 这个组建可以直接验证实体类,达到和验证model相同的效果,如果类很少可以直接使用这个省去model) https://github.co ...

  4. JDK1.7中的ThreadPoolExecutor源代码剖析

    JDK1. 7中的ThreadPoolExecutor 线程池,顾名思义一个线程的池子,池子里存放了非常多能够复用的线程,假设不用线程池相似的容器,每当我们须要创建新的线程时都须要去new Threa ...

  5. XML 解析---dom解析和sax解析

    眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...

  6. world 替换+正则表达式命令

    打开替换命令,点击“更多”,勾选上“通配符”,正则表达式才会起作用

  7. Ubuntu下gcc安装

    在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get  build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...

  8. IOS系统设置页面跳转

    目录: 跳转 iOS10- 版本跳转url转 iOS10+ 版本跳转url转 跳转符 跳转到系统设置界面代码: // 自己应用的设置界面:url = UIApplicationOpenSettings ...

  9. sqlserver如何给某一用户分配只能查看某一视图的权限

    exec sp_addrole 'guestview' --GRANT SELECT  ON veiw TO [guestview]; GRANT SELECT ON  CustomerInfo TO ...

  10. .Net垃圾回收和大对象处理

    本文引自:http://www.cnblogs.com/yukaizhao/archive/2011/11/21/dot_net_gc_large_object_heap.html CLR垃圾回收器根 ...