shader颜色调整:色相,明度,饱和度,对比度

Shader "Unlit/Colorful"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _BrightnessAmount("Brightness Amount", Range(0.0, 2.0)) = 1.0
        _SaturationAmount("Saturation Amount", Range(0.0, 2.0)) = 1.0
        _ContrastAmount("Contrast Amount", Range(0.0, 2.0)) = 1.0
    }

    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed _BrightnessAmount;
            fixed _SaturationAmount;
            fixed _ContrastAmount;

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };

            float3 ContrastSaturationBrightness(float3 color, float brt, float sat, float con)
            {
                // Increase or decrease these values to
                // adjust r, g and b color channels separately
                float avgLumR = 0.5;
                float avgLumG = 0.5;
                float avgLumB = 0.5;

                // Luminance coefficients for getting luminance from the image
                float3 LuminanceCoeff = float3 (0.2125, 0.7154, 0.0721);

                // Operation for brightmess
                float3 avgLumin = float3 (avgLumR, avgLumG, avgLumB);
                float3 brtColor = color * brt;
                float intensityf = dot(brtColor, LuminanceCoeff);
                float3 intensity = float3 (intensityf, intensityf, intensityf);

                // Operation for saturation
                float3 satColor = lerp(intensity, brtColor, sat);

                // Operation for contrast
                float3 conColor = lerp(avgLumin, satColor, con);

                return conColor;
            }

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                col.rgb = ContrastSaturationBrightness(col, _BrightnessAmount, _SaturationAmount, _ContrastAmount);
                return col;
            }
            ENDCG
        }
    }
}
时间: 2024-08-10 00:04:20

shader颜色调整:色相,明度,饱和度,对比度的相关文章

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

Unity Shader 颜色处理(亮度,饱和度 ,对比度) 基本概念 亮度 图像中RGB值的大小,RGB各个值越大,那么亮度越亮,越小,亮度越暗.比如我们要增加亮度,那么直接增加RGB值即可 饱和度 饱和度可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度.注意,与彩度完全不是同一个概念.但由于其和彩度决定的是出现在人眼里的同一个效果,所以才会出现视彩度与饱和度为同一概念的情况. 饱和度是指色彩的鲜艳程度,也称色彩的纯度.饱和度取决于该色中含色成分和消色成分(灰色)的比例.含色成分越

通俗解释色相和饱和度和明度

走在大街上,看了一个女生穿着  "红色"  的衣服,这个  红色  就是色相,  上午看这个女生,阳光充足打在她的衣服上 反射到了眼睛里面 感觉好亮,这个就是明度,傍晚觉得没有那么亮,这个就是明度,亮到一定程度的时候,感觉都是白色的,暗到一定程度的时候,感觉都是黑色的,这个就是明度的变化,红色的衣服 可能是 粉红色 ,鲜红色  这个 粉红 鲜红  就是指饱和度. --------------------------------------------------------------

1 色相、饱和度、明度定义

色彩三要素(Elements of color)色彩可用的色调(色相).饱和度(纯度)和明度来描述.人眼看到的任一彩色光都是这三个特性的综合效果,这三个特性即是色彩的三要素,其中色调与光波的波长有直接关系,亮度和饱和度与光波的幅度有关. 1.1 色相定义 色彩是由于物体上的物理性的光反射到人眼视神经上所产生的感觉.色的不同是由光的波长的长短差别所决定的.作为色相,指的是这些不同波长的色的情况.波长最长的是红色,最短的是紫色.把红.橙.黄.绿.蓝.紫和处在它们各自之间的红橙.黄橙.黄绿.蓝绿.蓝紫

图像处理之色相、饱和度、明度

1 色相.饱和度.明度定义 色彩三要素(Elements of color)色彩可用的色调(色相).饱和度(纯度)和明度来描述.人眼看到的任一彩色光都是这三个特性的综合效果,这三个特性即是色彩的三要素,其中色调与光波的波长有直接关系,亮度和饱和度与光波的幅度有关. 1.1 色相定义 色彩是由于物体上的物理性的光反射到人眼视神经上所产生的感觉.色的不同是由光的波长的长短差别所决定的.作为色相,指的是这些不同波长的色的情况.波长最长的是红色,最短的是紫色.把红.橙.黄.绿.蓝.紫和处在它们各自之间的

UnityShader:HSV(色相,饱和度,亮度)转换

http://blog.csdn.net/costfine/article/details/46930473 发现其实美术调整颜色的时候大部分都是调整的HSV,因为可以方便的分别调整色相(hue).饱和度(saturation)和色调(value).例如人们要将颜色调整的偏红一点,那么只需要修改色相, 如果使用RGB的话,就需要同时调整3个值,仅仅只是增加R值的话,理论上讲,只是把红色值加重了而已.就算是平时使用的调色板,大部分也是按照HSV来的,例如U3D的调色板:  颜色空间有很多中,RGB

Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)

好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本<Unity Shader入门精要>,<Unity 3D ShaderLab 开发实战详解>,开一个系列记录一下学习的心得笔记.原理就不多讲了,一篇一个实际Shader样例就好了. 貌似一开始关于shader的讲解都是diffuse,不过,我赶脚后处理貌似更简单,所以第一篇来一发简单后处理,屏幕的简单颜色校正--调整亮度,饱和度,对比度. 一.概念介绍 我们在做游戏的时候,虽

Android 颜色渲染(三) Shader颜色渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. 相信看过在上一篇中提到的三篇文章后,大家已经对颜色处理方面有更深的体会. 之前讲到颜色渐变的效果, 具体怎么做呢,这就需要应用颜色渲染. 首先要介绍Android Api中关于颜色渲染的几个重要的类:    Shader,BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient 看一下它们之间的关系:  public class Shader extends 

Android Shader 颜色、图像渲染 paint.setXfermode

Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其他对象,使用该Paint进行绘制时.将从shader中获得颜色 Shader.TileMode 渲染模式 public enum TileMode { CLAMP (0), REPEAT (1), MIRROR (2); TileMode(int nativeInt) { this.nativeInt = nativeIn

Android Shader 颜色、图像渲染

Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其它对象,使用该Paint进行绘制时,将从shader中获得颜色 Shader.TileMode 渲染模式 public enum TileMode { CLAMP (0), REPEAT (1), MIRROR (2); TileMode(int nativeInt) { this.nativeInt = nativeIn