项目须要。參考了一下网上的资料,写了一个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. VUE:class与style强制绑定

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 记一次BootStrap的使用

    效果图如下: 一.简介: 什么是Bootstrap?  Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架. 什么是响应式布局? 引用一句Bootstrap的标题语 “Boots ...

  3. ASP.NET-权限管理五张表

    ASP.NET 权限管理五张表 权限管理的表(5张表) 每个表里面必有的一些信息 序号 名称  字段  类型   主键 默认值 是否为空 备注 1  用户ID  ID      INT     是   ...

  4. angular-HTML DOM

    ng-disabled用法 <div ng-app="" ng-init="mySwitch=true"> <p> <button ...

  5. 具体解释XML解析(一)—解析接口浅析

    在DRP项目中接触到了一个XML解析工具DOM4J,它作为解析工具的据说性能很优秀.可是刚刚接触解析工具不久,而且也没有使用过其它的解析工具.因此对于DOM4J的性能没有直接的感受(没有參照物).只是 ...

  6. 《UNIX环境高级编程》读书笔记之系统数据文件和信息(1)

    1.UNIX系统口令文件包括了下图所看到的的各字段,这些字段包括在<pwd.h>中定义的passwd结构体中 POSIX定义了两个获取口令文件项的函数. 在给出用户登录名或用户ID后.这两 ...

  7. Http抓包工具--查尔斯

    查尔斯 查尔斯:http://www.charlesproxy.com/ 这是比較好用的抓包工具.有Mac.Windows.Linux版本号.能够相应用程序.浏览器.手机.手机模拟器进行抓包. 官方站 ...

  8. Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记

    极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...

  9. 18.boost 图的拓扑排序

    运行结果: 代码示例: #include <iostream> #include <vector> #include <deque> #include <bo ...

  10. Swift学习笔记(8):闭包

    目录: 基本语法 尾随闭包 值捕获 自动闭包 闭包是自包含的函数代码块,闭包采取如下三种形式之一: ・全局函数是一个有名字但不会捕获任何值的闭包 ・嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 ...