项目须要。參考了一下网上的资料,写了一个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. STM32 IIC双机通信—— HAL库硬件IIC版

    参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HA ...

  2. hbase的几种访问方式

    Hbase的访问方式 1.Native Java API:最常规和高效的访问方式: 2.HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用: 3.Thrift Gat ...

  3. php获取当前url地址的方法小结

    js 获取: top.location.href //顶级窗口的地址 this.location.href //当前窗口的地址 php获取当前url地址: #测试网址: http://localhos ...

  4. MySQL优化之——集群搭建步骤具体解释

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 适合于分布式计算 ...

  5. 多线程003 - 再谈CyclicBarrier

      java.util.concurrent.CyclicBarrier也是JDK 1.5提供的一个同步辅助类(为什么用也呢?參见再谈CountDownLatch).它同意一组线程互相等待,直到到达某 ...

  6. MapReduce运行流程具体解释

    在hadoop中.每一个mapreduce任务都会被初始化为一个Job. 每一个Job又能够分为两个阶段:map阶段和reduce阶段.这两个阶段分别用两个函数来表示,即map函数和reduce函数. ...

  7. UVA 11971 - Polygon 数学概率

                                        Polygon  John has been given a segment of lenght N, however he n ...

  8. js中console强大之处体现在哪

    js中console强大之处体现在哪 一.总结 一句话总结:在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对conso ...

  9. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  10. Java 定制工具库 —— Print(import static)

    创建自己的工具库以减少或消除重复的程序代码.例如,我们在Print类中,对常常用到的System.out.println()封装调用以减少输入负担.这样,我们在使用该类时,可以用一个更具可读性的 im ...