ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity shader 调节材质的色调 饱和度明度

2019-09-04 15:07:22  阅读:521  来源: 互联网

标签:float colorHSV max1 shader 明度 Unity hsv HSV float3


参考https://blog.csdn.net/cjb_king/article/details/79275461

新建一个
HSV.cginc

#ifndef HSV_INCLUDED
#define HSV_INCLUDED


// RGB to HSV
float3 RGBConvertToHSV(float3 rgb)
{
    float R = rgb.x,G = rgb.y,B = rgb.z;
    float3 hsv;
    float max1=max(R,max(G,B));
    float min1=min(R,min(G,B));
    if (R == max1) 
    {
        hsv.x = (G-B)/(max1-min1);
    }
    if (G == max1) 
    {
        hsv.x = 2 + (B-R)/(max1-min1);
    }
    if (B == max1) 
    {
        hsv.x = 4 + (R-G)/(max1-min1);
    }
    hsv.x = hsv.x * 60.0;   
    if (hsv.x < 0) 
        hsv.x = hsv.x + 360;
    hsv.z=max1;
    hsv.y=(max1-min1)/max1;
    return hsv;
}

// HSV to RGB
float3 HSVConvertToRGB(float3 hsv)
{
    float R,G,B;
    //float3 rgb;
    if( hsv.y == 0 )
    {
        R=G=B=hsv.z;
    }
    else
    {
        hsv.x = hsv.x/60.0; 
        int i = (int)hsv.x;
        float f = hsv.x - (float)i;
        float a = hsv.z * ( 1 - hsv.y );
        float b = hsv.z * ( 1 - hsv.y * f );
        float c = hsv.z * ( 1 - hsv.y * (1 - f ) );
        switch(i)
        {
            case 0: R = hsv.z; G = c; B = a;
                break;
            case 1: R = b; G = hsv.z; B = a; 
                break;
            case 2: R = a; G = hsv.z; B = c; 
                break;
            case 3: R = a; G = b; B = hsv.z; 
                break;
            case 4: R = c; G = a; B = hsv.z; 
                break;
            default: R = hsv.z; G = a; B = b; 
                break;
        }
    }
    return float3(R,G,B);
}

float4 HSVProcess(float4 col, float3 hsvColor)
{
    float3 colorHSV;
    colorHSV.xyz = RGBConvertToHSV(col.xyz);
    colorHSV.x += lerp(0, 359, hsvColor.r);
    colorHSV.x = colorHSV.x % 360;

    colorHSV.y *= lerp(0, 3.0, hsvColor.g);
    colorHSV.z *= lerp(0, 3.0, hsvColor.b);

    float4 r =  float4(HSVConvertToRGB(colorHSV.xyz), col.a);
    return r;
}
#endif

用法:

// 声明
_HSVColor ("_HSVColor", color) = (0,0.333,0.333)
// .............
float3 _HSVColor;
// ...................
#include "../Include/HSV.cginc"
// .............
fixed4 hsvProcessCol = HSVProcess(mainColor, _HSVColor);
col = hsvProcessCol;

在这里插入图片描述
调节RGB 就可以了

标签:float,colorHSV,max1,shader,明度,Unity,hsv,HSV,float3
来源: https://blog.csdn.net/A13155283231/article/details/100538824

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有