## saturationMatrix (`lygia`/`color`/`saturationMatrix`)

Generate a matrix to change a the saturation of any color

Use:

``````saturationMatrix(<float> amount)
``````

Check it on Github

``````
#ifndef FNC_SATURATIONMATRIX
#define FNC_SATURATIONMATRIX
mat4 saturationMatrix(in float a) {
vec3 lum = vec3(.3086, .6094, .0820 );
float iA= 1. - a;
vec3 r = vec3(lum.x * iA) + vec3(a, .0, .0);
vec3 g = vec3(lum.y * iA) + vec3( .0, a, .0);
vec3 b = vec3(lum.z * iA) + vec3( .0, .0, a);
return mat4(r,.0,
g,.0,
b,.0,
.0, .0, .0, 1.);
}
#endif
``````

Use:

``````saturationMatrix(<float> amount)
``````

Check it on Github

``````
#ifndef FNC_SATURATIONMATRIX
#define FNC_SATURATIONMATRIX
float4x4 saturationMatrix(in float amount) {
float3 lum = float3(.3086, .6094, .0820);
float invAmount= 1. - amount;

float3 red = float3(1.0, 1.0, 1.0) * lum.x * invAmount;
red += float3(amount, .0, .0);

float3 green = float3(1.0, 1.0, 1.0) * lum.y * invAmount;
green += float3( .0, amount, .0);

float3 blue = float3(1.0, 1.0, 1.0) * lum.z * invAmount;
blue += float3( .0, .0, amount);

return float4x4(red.x, green.x, blue.x, .0,
red.y, green.y, blue.y, .0,
red.z, green.z, blue.z, .0,
.0, .0, .0, 1.);
}
#endif

``````

Check it on Github

``````
fn saturationMatrix(amount : f32) -> mat3x3<f32> {
let lum = vec3f(0.3086, 0.6094, 0.0820 );
let invAmount = 1.0 - amount;
return mat3x3<f32>( vec3f(lum.x * invAmount) + vec3f(amount, .0, .0),
vec3f(lum.y * invAmount) + vec3f( .0, amount, .0),
vec3f(lum.z * invAmount) + vec3f( .0, .0, amount));
}
``````