Skip to content

Instantly share code, notes, and snippets.

@kurtroberts
Created January 7, 2022 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kurtroberts/27fc95315fbd8137956c5a2406816651 to your computer and use it in GitHub Desktop.
Save kurtroberts/27fc95315fbd8137956c5a2406816651 to your computer and use it in GitHub Desktop.
Shaders Notes
#ifdef GL_ES
precision lowp float;
#endif
uniform vec2 u_resolution;
float draw_circle(vec2 coord, vec2 center, float radius) {
return step(distance(center, coord), radius);
}
void main() {
vec2 coord = gl_FragCoord.xy / u_resolution;
float circle = draw_circle(coord, vec2(.5, .2), 0.1);
vec3 color = vec3(circle);
gl_FragColor = vec4(color, 1.0);
}
#ifdef GL_ES
precision lowp float;
#endif
uniform vec2 u_resolution;
float draw_rectangle(vec2 coord, vec2 dimensions) {
vec2 shaper = vec2(step(coord.x, dimensions.x), step(coord.y, dimensions.y));
return shaper.x * shaper.y;
}
float draw_rectangle(vec2 coord, vec2 dimensions, vec2 offset) {
vec2 shaper = step(offset, coord);
shaper *= step(coord, offset + dimensions);
return shaper.x * shaper.y;
}
void main() {
vec2 coord = gl_FragCoord.xy / u_resolution;
vec2 offset = vec2(0.3);
float rectangle = draw_rectangle(coord, vec2(0.5, 0.25), offset);
vec3 color = vec3(rectangle);
gl_FragColor = vec4(color, 1.0);
}
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
vec3 white = vec3(1.0);
float parabola (float x, float k) {
return pow(4.0 * x * (1.0 - x), k);
}
vec3 splotch (vec2 st, vec3 colorA, vec2 posA, vec2 mouse) {
vec2 posB = posA + 0.1;
float pct = smoothstep(0.1, 0.4, distance(st, posA) + distance(st, posB));
vec3 color = mix(mix(colorA, white, parabola(distance(st.y, mouse.y), 9.0)), white, pct);
return color;
}
void main () {
vec2 st = gl_FragCoord.xy / u_resolution.xy;
vec2 mouse = u_mouse.xy / u_resolution.xy;
vec3 color2 = vec3(0.29, 0.345, 0.98);
vec3 color3 = vec3(0.98, 0.58, 0.29);
vec3 color4 = vec3(0.69, 0.98, 0.29);
vec3 canvas = splotch(st, color2, vec2(0.6, 0.3), mouse);
canvas *= splotch(st, color3, vec2(0.8, 0.1), mouse);
canvas *= splotch(st, color4, vec2(0.1, 0.7), mouse);
gl_FragColor = vec4(canvas, 1.0);
}
@kurtroberts
Copy link
Author

ISF version (madmapper)

/*{
    "CREDIT": "Kurt Roberts",
    "DESCRIPTION": "Goodbeast Splotch",
    "TAGS": "goodbeast",
    "VSN": "1.0",
    "INPUTS": [ 
		{"LABEL": "Hue", "NAME": "hue", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Saturation", "NAME": "saturation", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Lightness", "NAME": "lightness", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Pole1X", "NAME": "pole1x", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Pole1Y", "NAME": "pole1y", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Pole2X", "NAME": "pole2x", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
		{"LABEL": "Pole2Y", "NAME": "pole2y", "TYPE": "float", "MIN": 0.0, "MAX": 1.0, "DEFAULT": 1.0 }, 
    ]
}*/





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);
}

vec3 hsl2rgb(vec3 c) {
    vec3 rgb = clamp( abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 );

    return c.z + c.y * (rgb-0.5)*(1.0-abs(2.0*c.z-1.0));
}


vec4 materialColorForPixel( vec2 texCoord ) {
    vec2 st = gl_FragCoord.xy / RENDERSIZE;
    float pct = 0.0;
    vec3 colorB = vec3(1.0);
    vec3 colorA = hsl2rgb(vec3(hue, saturation, lightness));
    
    pct = smoothstep(pole1x, pole1y, distance(st, vec2(pole2x)) + distance(st, vec2(pole2y)));
    
    vec3 color = mix(colorA, colorB, pct);
	return vec4(color,1.);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment