adapted from:
iq@shadertoy