【每日一记】unity3d 图片置灰shader

项目需要,参考了一下网上的资料,写了一个shader,给按钮置灰。

shader具体实现如下:

Shader "Transparent Colored Gray"

{

Properties

{

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

}

SubShader

{

LOD 200

Tags

{

"Queue" = "Transparent"

"IgnoreProjector" = "True"

"RenderType" = "Transparent"

}

Pass

{

Cull Off

Lighting Off

ZWrite Off

Fog { Mode Off }

Offset -1, -1

ColorMask RGB

AlphaTest Greater .01

Blend SrcAlpha OneMinusSrcAlpha

ColorMaterial AmbientAndDiffuse

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

sampler2D _MainTex;

struct appdata_t

{

float4 vertex : POSITION;

half4 color : COLOR;

float2 texcoord : TEXCOORD0;

};

struct v2f

{

float4 vertex : POSITION;

half4 color : COLOR;

float2 texcoord : TEXCOORD0;

};

v2f vert (appdata_t v)

{

v2f o;

o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);

o.color = v.color;

o.texcoord = v.texcoord;

return o;

}

half4 frag (v2f IN) : COLOR

{

// Sample the texture

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

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

col.r = col.g = col.b = c;

return col;

}

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/



时间: 2024-11-09 02:50:57

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

cocos2dx3.X shader使图片置灰

1 OpenGL ES着色器 opengl es的着色器有.fsh和.vsh两个文件.这两个文件在被编译和链接后就可以产生可执行程序与GPU交互.attribute是从外部传进来的,每一个顶点都会有这两个属性,所以它也叫做vertex attribute(顶点属性).而varying类型的变量是在vertex shader和fragment shader之间传递数据用的. .vsh 是 vertex shader,用与顶点计算,可以理解控制顶点的位置,在这个文件中我们通常会传入当前顶点的位置,和

将图片转换成黑白(灰色、置灰)

网站图片置灰现在已经很常见了,最近上网找了些资料,基本都是用css3 grayscale和grayscale.js,做了测试,发现用CSS或greyscale.js都不能完全兼容. 测试浏览器版本:google.google.firefox.opera.safari.IE7-9 css3 grayscale很多都是用这段CSS: -webkit-filter: grayscale(100%);/*兼容google.opera*/ -moz-filter: grayscale(100%);/*FF

Cocos2dx-- 图片置灰实现

前言:游戏中有很多按钮控件,它们一般会有选中和未选中2种状态.我们如果要区分这两种状态的表现,很多时候是直接叫美术给两种状态下的资源,或直接setColor设置颜色.这样无疑增加了资源的大小或不美观(看需求).本节将介绍怎么通过opengl es程序来实现图片置灰操作. 注:这个置灰操作是基于Cocos-Lua的,具体原理分析这里不打算介绍,主要讲如何实现. 实现步骤 Lua端操作: 1,置灰Lua代码(ShaderEffect.lua) local ShaderEffect = { vertD

小tip: 使用CSS将图片转换成黑白(灰色、置灰) ? 张鑫旭-鑫空间-鑫生活

小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=2547 //zxx: 最近很积极地折腾手机页面的些东西,加上其他一些人生重要的事,所以木有更新. 可能早就知道,像汶川这种糟糕

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

可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的.不过,时代发展,如今,CSS3的逐步推进,我们也开始看到“黑白效果”大规模应用于实际的可能. CSS3 greyscale 滤镜实现 如下测试代码: .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter:

Unity图片变灰的方式

http://www.tuicool.com/articles/Vruuqme NGUI中的Button差点儿是最经常使用到的控件之中的一个,而且能够组合各种组件(比方UIButtonColor,UIButtonOffset,UITweenxx),方便设置Button的各种状态下的属性.差点儿能够满足我们的全部需求. 可是对于当Button的isEnabled属性设置为false时,依据设置的disableColor属性设置不可点击时的颜色时,尽管我们设置的灰色,但并非我们想象中的样子! 设置的

unity UI置灰(转载)

Unity3D开发(二):NGUI之UIButton"禁用"状态时置灰 分类: Unity3D开发2013-09-30 18:51 7024人阅读 评论(5) 收藏 举报 目录(?)[+] NGUI中的Button几乎是最常用到的控件之一,并且可以组合各种组件(比如UIButtonColor,UIButtonOffset,UITweenxx),方便设置Button的各种状态下的属性,几乎可以满足我们的所有需求. 但是对于当Button的isEnabled属性设置为false时,根据设置

[原]NGUI之按钮置灰

传统按钮置灰,需要使用另外一张纹理. 本例通过修改shader和NGUI sprite的r值实现按钮置灰.优势:节省纹理,操作简单 将NGUI Unlit/Transparent Colored片段部分改成如下:fixed4 frag (v2f i) : COLOR { fixed4 col= tex2D(_MainTex, i.texcoord) * i.color; if(i.color.r < 0.0001) { float grey = dot(col.rgb, float3(0.299

Unity内置的shader include files

Unity内置的shader include files:这些文件都以.cninc结尾, HLSLSupport.cginc:自动包含,一些跨平台编译相关的宏和定义. UnityCG.cginc:常用的全局变量和函数. AutoLight.cginc:光影相关帮助函数,surface shader内部使用此文件. Lighting.cginc:surface shader自动包含,定义了标准的光照模式. TerrainEngin.cginc:地形和植被shader相关的帮助函数.UnityGC.