-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathshadertoy_gen_art.py
86 lines (72 loc) · 2.98 KB
/
shadertoy_gen_art.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from wgpu_shadertoy import Shadertoy
# shadertoy source: https://www.shadertoy.com/view/mds3DX by morisil
# ported to wgsl
shader_code = """
const SHAPE_SIZE : f32 = .618;
const CHROMATIC_ABBERATION : f32 = .01;
const ITERATIONS : f32 = 10.;
const INITIAL_LUMA : f32= .5;
const PI : f32 = 3.14159265359;
const TWO_PI : f32 = 6.28318530718;
fn rotate2d(_angle : f32) -> mat2x2<f32> {
return mat2x2<f32>(cos(_angle),-sin(_angle),sin(_angle),cos(_angle));
}
fn mod2( v: vec2<f32>, y : f32 ) -> vec2<f32> {
return vec2<f32>(v.x - y * floor( v.x / y ), v.y - y * floor( v.y / y ));
}
fn sdPolygon(angle : f32, distance : f32) -> f32 {
let segment = TWO_PI / 4.0;
return cos(floor(0.5 + angle / segment) * segment - angle) * distance;
}
fn getColorComponent( st: vec2<f32>, modScale : f32, blur : f32 ) -> f32 {
let modSt = mod2(st, 1. / modScale) * modScale * 2. - 1.;
let dist = length(modSt);
let angle = atan2(modSt.x, modSt.y) + sin(i_time * .08) * 9.0;
let shapeMap = smoothstep(SHAPE_SIZE + blur, SHAPE_SIZE - blur, sin(dist * 3.0) * .5 + .5);
return shapeMap;
}
fn shader_main(frag_coord: vec2<f32>) -> vec4<f32> {
var blur = .4 + sin(i_time * .52) * .2;
var st = (2.* frag_coord - i_resolution.xy) / min(i_resolution.x, i_resolution.y);
let origSt = st;
st *= rotate2d(sin(i_time * 0.14) * .3);
st *= (sin( i_time * 0.15) + 2.0) * .3;
st *= log(length(st * .428)) * 1.1;
let modScale = 1.0;
var color = vec3<f32>(0.0);
var luma = INITIAL_LUMA;
for (var i:f32 = 0.0; i < ITERATIONS; i+=1.0) {
let center = st + vec2<f32>(sin(i_time * .12), cos(i_time * .13));
let shapeColor = vec3<f32>(
getColorComponent(center - st * CHROMATIC_ABBERATION, modScale, blur),
getColorComponent(center, modScale, blur),
getColorComponent(center + st * CHROMATIC_ABBERATION, modScale, blur)
) * luma;
st *= 1.1 + getColorComponent(center, modScale, .04) * 1.2;
st *= rotate2d(sin(i_time * .05) * 1.33);
color = color + shapeColor;
color = vec3<f32>(clamp( color.r, 0.0, 1.0 ), clamp( color.g, 0.0, 1.0 ), clamp( color.b, 0.0, 1.0 ));
luma *= .6;
blur *= .63;
}
let GRADING_INTENSITY = .4;
let topGrading = vec3<f32>(
1. + sin(i_time * 1.13 * .3) * GRADING_INTENSITY,
1. + sin(i_time * 1.23 * .3) * GRADING_INTENSITY,
1. - sin(i_time * 1.33 * .3) * GRADING_INTENSITY
);
let bottomGrading = vec3<f32>(
1. - sin(i_time * 1.43 * .3) * GRADING_INTENSITY,
1. - sin(i_time * 1.53 * .3) * GRADING_INTENSITY,
1. + sin(i_time * 1.63 * .3) * GRADING_INTENSITY
);
let origDist = length(origSt);
let colorGrading = mix(topGrading, bottomGrading, origDist - .5);
var fragColor = vec4<f32>(pow(color.rgb, colorGrading), 1.);
// fragColor *= smoothstep(2.1, .7, origDist);
return fragColor;
}
"""
shader = Shadertoy(shader_code, resolution=(800, 450))
if __name__ == "__main__":
shader.show()