Unity Shader 颜色处理(亮度,饱和度 ,对比度)

摘要:
UnityShader颜色处理基本概念亮度图像中RGB值的大小,RGB各个值越大,那么亮度越亮,越小,亮度越暗。比如我们要增加亮度,那么直接增加RGB值即可饱和度饱和度可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度。饱和度是指色彩的鲜艳程度,也称色彩的纯度。含色成分越大,饱和度越大;消色成分越大,饱和度越小。纯的颜色都是高度饱和的,如鲜红,鲜绿。
Unity Shader 颜色处理(亮度,饱和度 ,对比度)

基本概念

亮度

图像中RGB值的大小,RGB各个值越大,那么亮度越亮,越小,亮度越暗。比如我们要增加亮度,那么直接增加RGB值即可

饱和度

饱和度可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度。注意,与彩度完全不是同一个概念。但由于其和彩度决定的是出现在人眼里的同一个效果,所以才会出现视彩度与饱和度为同一概念的情况。

饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。纯的颜色都是高度饱和的,如鲜红,鲜绿。混杂上白色,灰色或其他色调的颜色,是不饱和的颜色,如绛紫,粉红,黄褐等。完全不饱和的颜色根本没有色调,如黑白之间的各种灰色

对比度

指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,差异范围越小代表对比越小。一般来说对比度越大,图像越清晰醒目,色彩也越鲜明艳丽;而对比度小,则会让整个画面都灰蒙蒙的。

首先我们先看下效果 原图如下

Unity Shader 颜色处理(亮度,饱和度 ,对比度)第1张

调整颜色亮度(亮度值我们设置为2)

Unity Shader 颜色处理(亮度,饱和度 ,对比度)第2张Unity Shader 颜色处理(亮度,饱和度 ,对比度)第3张

调整饱和度(饱和度我们设置为2.2)

Unity Shader 颜色处理(亮度,饱和度 ,对比度)第4张Unity Shader 颜色处理(亮度,饱和度 ,对比度)第5张

调整对比度(对比度我们设置为3)

Unity Shader 颜色处理(亮度,饱和度 ,对比度)第6张Unity Shader 颜色处理(亮度,饱和度 ,对比度)第7张

shader源码如下

Shader "Custom/ColorAdjustEffect"
{
	Properties
	{
		_MainTex("Albedo (RGB)", 2D) = "white" {}
		_Brightness("Brightness", Float) = 1	//调整亮度
		_Saturation("Saturation", Float) = 1	//调整饱和度
		_Contrast("Contrast", Float) = 1		//调整对比度
	}

		SubShader
		{
			Pass
				{
			ZTest Always
			Cull Off 
			ZWrite Off
			Blend SrcAlpha OneMinusSrcAlpha
			CGPROGRAM
			sampler2D _MainTex;
			half _Brightness;
			half _Saturation;
			half _Contrast;

			//vert和frag函数
			#pragma vertex vert
			#pragma fragment frag
			#include "Lighting.cginc"


			struct appdata_t
			{
				float4 vertex : POSITION;
				half4 color : COLOR;
				float2 texcoord : TEXCOORD0;
			};
			//从vertex shader传入pixel shader的参数
			struct v2f
			{
				float4 pos : SV_POSITION; //顶点位置
				half2  uv : TEXCOORD0;	  //UV坐标
				half4 color : COLOR;
			};

			//vertex shader
			v2f vert(appdata_t v)
			{
				v2f o;
				//从自身空间转向投影空间
				o.pos = UnityObjectToClipPos(v.vertex);
				o.color = v.color;
				//uv坐标赋值给output
				o.uv = v.texcoord;
				return o;
			}

			//fragment shader
			fixed4 frag(v2f i) : COLOR
			{
			//从_MainTex中根据uv坐标进行采样
			fixed4 renderTex = tex2D(_MainTex, i.uv)*i.color;
			//brigtness亮度直接乘以一个系数,也就是RGB整体缩放,调整亮度
			fixed3 finalColor = renderTex * _Brightness;
			//saturation饱和度:首先根据公式计算同等亮度情况下饱和度最低的值:
			fixed gray = 0.2125 * renderTex.r + 0.7154 * renderTex.g + 0.0721 * renderTex.b;
			fixed3 grayColor = fixed3(gray, gray, gray);
			//根据Saturation在饱和度最低的图像和原图之间差值
			finalColor = lerp(grayColor, finalColor, _Saturation);
			//contrast对比度:首先计算对比度最低的值
			fixed3 avgColor = fixed3(0.5, 0.5, 0.5);
			//根据Contrast在对比度最低的图像和原图之间差值
			finalColor = lerp(avgColor, finalColor, _Contrast);
			//返回结果,alpha通道不变
			return fixed4(finalColor, renderTex.a);
		}
			ENDCG
}
		}
			//防止shader失效的保障措施
			FallBack Off
}

免责声明:文章转载自《Unity Shader 颜色处理(亮度,饱和度 ,对比度)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sublime 使用大全(下载安装,插件安装以及快捷键的使用)【转载】 禁止国外IP访问你的网站下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用 shader effect 实现雨滴落水效果!Cocos Creator 3D !

最近逛论坛时,看到一位大佬在分享各种 shader 特效。基于其中的水波 shader ,白玉无冰写了一个玩水效果!文章底部获取完整代码!还可以试试水哦! 先一起看看效果~ 点击任意位置,会在该位置生成一个水纹,就像是雨水落在水洼中一样~ 如何使用 effect 文件?新建一个 material ,Effect 属性选择 water , 接着将纹理图片拖...

Unity3D优化总结(一)

容易忽略的美术资源的优化:         优化的美术制作真是一种感觉和经验的积累,能看出制作水平的不是做的效果多么犀利,而是得看制作的效果与对机器的要求等的性价比。 关于合并:  100个三角形的MESH,在渲染时与1500个面数的物体是没太大差别的,最佳的渲染设置应该在每个模型大约1500-4000个三角面。 材质共享:  如果需要通过脚本来访问复用...

MTF的倾斜边缘计算方法

  光学系统性能的衡量方法有很多,常见的有点扩散函数法、瑞利判断法、点 列图法、光学传递函数(MTF)法等,其中 MTF 法在光学系统和镜头加工制造中 使用 最为广泛。MTF 曲线真实的反映了成像系统将物方信息传递到像方的能力。 MTF 曲线的横坐标一般是 cycle/mm 或者 linepair/mm,纵坐标是反映对比 度传递特性的像/物方调制度的比值。...

CocosCreator Shader笔记 (TheBookOfShader、渐变色、攻击闪白特效)

 cocos版本:2.4.4 参考: Cocos2D文档: 材质资源  、 Effect Cocos3D文档:  材质 、 常用 shader 内置 Uniform 基础知识:    The Book of Shader 中文版 水友文章:    学习shader的入门笔记                       cocos2.3 Shader编写示例...

【Unity】Shader Forge插件入门教程

【Unity】Shader Forge插件入门教程 说明:现在Unity2018都提供了官方的ShaderGraph,建议学新不学旧,学官方不学第三方。——2018.6.21 一.安装说明 ~下载 Unity Asset Store购买并下载https://www.assetstore.unity3d.com/en/#!/content/14147 其...

Shader Variants 打包遇到的问题

1. 遇到的问题 最常见的是打包到手机后效果与PC上不一致,具体情况比如: 光照贴图失效 雾失效 透明或者cutoff失效 以上首先需要检查的地方是Shader变体的编译设置 2. 超级着色器编译成N个变体 如果需要多吧功能类似的shader, 比把透明,Cutoff和不透明等多个功能集合到一个Shader上,通常把这样的Shader称之为"超级着色器...