CD-ROOM/Assets/Materials/myInclude.cginc
Gerard Gascón 341a877b4a init
2025-04-24 17:37:25 +02:00

50 lines
No EOL
1.2 KiB
HLSL

float3 hueShift(float3 color, float hueAdjust) {
const float3 kRGBToYPrime = float3(0.299, 0.587, 0.114);
const float3 kRGBToI = float3(0.596, -0.275, -0.321);
const float3 kRGBToQ = float3(0.212, -0.523, 0.311);
const float3 kYIQToR = float3(1.0, 0.956, 0.621);
const float3 kYIQToG = float3(1.0, -0.272, -0.647);
const float3 kYIQToB = float3(1.0, -1.107, 1.704);
float YPrime = dot(color, kRGBToYPrime);
float I = dot(color, kRGBToI);
float Q = dot(color, kRGBToQ);
float hue = atan2(Q, I);
float chroma = sqrt(I * I + Q * Q);
hue += hueAdjust;
Q = chroma * sin(hue);
I = chroma * cos(hue);
float3 yIQ = float3(YPrime, I, Q);
return float3(dot(yIQ, kYIQToR), dot(yIQ, kYIQToG), dot(yIQ, kYIQToB));
}
float2 uvRot(float2 uv, float angle) {
return mul(float2x2(cos(angle), -sin(angle), sin(angle), cos(angle)), uv);
}
float lerp3(float a, float b, float c, float t)
{
if (t < 0.5f)
{
return lerp(a, b, t * 2);
}
else
{
return lerp(b, c, (t-0.5f)*2);
}
}
float valueStep(float gradient, float numberBeforeWhite=2, float maskOffset=-1) {
float num = ceil(frac((gradient + maskOffset) / (numberBeforeWhite+1))*(1 + numberBeforeWhite));
if (num == numberBeforeWhite)
return 1;
else
return 0;
}