HSV Adjustment

Just a simple hsv ajustment shader

Shader code
shader_type canvas_item;

uniform float h: hint_range(0,1) = 1;
uniform float s: hint_range(0,1) = 1;
uniform float v: hint_range(0,1) = 1;

vec3 rgb2hsv(vec3 c) {
    vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
    vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
    vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));

    float d = q.x - min(q.w, q.y);
    float e = 1.0e-10;
    return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}

vec3 hsv2rgb(vec3 c) {
    vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
    vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
    return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}

void fragment() {
	vec4 col = texture(TEXTURE, UV);
	
	col.rgb = hsv2rgb(rgb2hsv(col.rgb) * vec3(h, s, v));
	
	COLOR = col;
}
Tags
2d, adjustment, Color, hsv
The shader code and all code snippets in this post are under CC0 license and can be used freely without the author's permission. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
vesu
vesu
1 month ago

can you kinda explain how to use this shader? i created a shader in colorrect and pasted the code in there but nothing happens

Talum
Talum
1 month ago
Reply to  vesu

Use shader params in the material