LYGIA Shader Library

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

Use:

saturationMatrix(<float> amount)

Check it on Github


#ifndef FNC_SATURATIONMATRIX
#define FNC_SATURATIONMATRIX
mat4 saturationMatrix(float a) {
    float3 lum = float3(.3086, .6094, .0820 );
    float iA= 1. - a;
    float3 r = float3(lum.x * iA) + float3(a, .0, .0);
    float3 g = float3(lum.y * iA) + float3( .0, a, .0);
    float3 b = float3(lum.z * iA) + float3( .0, .0, a);
    return mat4(r,.0,
                g,.0,
                b,.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));
}

Licenses

LYGIA is dual-licensed under the Prosperity License and the Patron License for sponsors and contributors.

Sponsors and contributors are automatically added to the Patron License and they can ignore the any non-commercial rule of the Prosperity Licensed software (please take a look to the exception).

It's also possible to get a permanent comercial license hook to a single and specific version of LYGIA.

Get the latest news and releases

Sign up for the news letter bellow, joing the LYGIA's channel on Discord or follow the Github repository