标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。