@Name: Pixel flow
@Version: 1.3
@Description: Best to chain it after thin shapes and do only 1 iteration.
@flow_length: 1
@flow_inclination: 0
@flow_azimuth: 0
@pattern_width: 25
@power: 4
@seed: 42
//should be computed once
float sini = sin(PI * @flow_inclination * DEGTORAD);
float cosi = cos(PI * @flow_inclination * DEGTORAD);
float sina = sin(TWOPI * @flow_azimuth * DEGTORAD);
float cosa = cos(TWOPI * @flow_azimuth * DEGTORAD);
vec3 flow_dir = normalize(vec3(sini*cosa, sini*sina, cosi));
vec3 block = floor(p * @pattern_width);
vec3 vblock = block + vec3(2.0) - 4.0 * vec3(
f_hash2(@seed, block.x),
f_hash2(@seed, block.y),
f_hash2(@seed, block.z));
float fLen = f_hash3(@seed*vblock.x, @seed*vblock.y, @seed*vblock.z);
float fade = pow(random(next), @power) * fLen;
return p + flow_dir * @flow_length * fade;