My wife is a pro at watercolor pencils. It always amazes me that she can take a great little sketch and apply some water with a few brushstrokes to it and it comes to life.

Check out some of her work.

Shaders have always been interesting to me and I love to understand how they work. My goal with this shader was to immerse the viewer into a realtime watercolor painting.

The shader source is actually quite small:

shader_type canvas_item;

uniform sampler2D noise;
uniform float noise_amp = 0.67;
uniform float time_scale = 0.01;
uniform float scale = 0.72;
uniform vec2 offset = vec2(0);

void fragment() {
	vec2 n = texture(noise, UV + TIME * time_scale).xy;
	COLOR = texture(TEXTURE, offset + UV * (1. + n * noise_amp) * scale);

Essentially I am swapping nearby pixels according to a simplex noise map.

Back to all posts